xsdk version 0.2.0 (#3928)

* xSDK: a bundle/meta package that simple installs a series of packages with suitable specs

This is based on struggles with previous attempts at such a bundler
Funded-by: IDEAS
Project: IDEAS/xSDK
Time: 12 hours

* PETSc needs c++11 when built with Trilinos

* Added alquimia package

* remove direct setting of cpp in petsc/package.py since it doesn't work on some systems.

Funded-by: IDEAS
Project: IDEAS/xSDK
Time: .3 hours
Reported-by: Mark A. Berrill <berrillma@ornl.gov>

* provide the MPI compilers to PETSc configure with --with-cc etc instead of --with-mpi-dir

Funded-by: IDEAS
Project: IDEAS/xSDK

* Spack bug fix issue #3144

String could contain /n which resulting in spack generating warning message to stderr on each
use of compiler which configure interpreted as failing compiler

Thanks-to: Mark A. Berrill <berrillma@ornl.gov>

* Fixed alquimia package

Alquimia expects PETSC_DIR and PETSC_ARCH to be defined, and
refuses to install if they are not.  Spack does not define PETSC_
ARCH, so Alquimia will not install.  This patch does two things
to fix the alquimia build:

1. A patch has been added to remove the dependency on PETSC_ARCH.

2. Alquimia currently depends on old versions of PETSc and pflotran.
   @ghammond86 updated the alquimia interfaces to use more recent
   versions, but his patch is still sitting in an alquimia pull
   request.  As a result, the spack installer now uses his fork
   of alquimia.  This is a temporary fix until his pull request is
   accepted.

* Need to pass to Alquimia the MPI compilers, not the raw compilers

Otherwise the PETSc tests do not produce executables that can run because they are not
linked against MPI libraries

Funded-by: IDEAS
Project:  IDEAS/xSDK
Time: .5 hours

* Add alquimia to xSDK build

Funded-by: IDEAS
Project: IDEAS/xSDK

* Fix flake8 errors for xsdk packages

* Add xsdk support for xsdk version xsdk-0.2.0

Note that currently it is just dummy code, but will eventually use
a xsdk-0.2.0 tag for each package it installs.

Funded-by: IDEAS
Project:  IDEAS/xSDK
Time: .7 hours

* Do not build Mumps by default for PETSc since it is not portable, for example to Cray

Allow alquimia to accept PETSc even if the PETSc test executable cannot run since this is a problem on Cray.

Reported-by: Alicia Marie Klinvex <amklinv@sandia.gov>

* Add xsdk-0.2.0-rc1 tag for xsdk-0.2.0 installs

* Switch alquimia download site back to standard location

since they have incorporated Glenn Hammond's fixes
Also it no longer needs the patch to the Alquimia cmake

Funded-by: IDEAS
Project: IDEAS/xSDK
Reported-by: Sergi Molins Rafa <smolins@lbl.gov>

* update hypre to use the latest release candidate for xsdk 0.2.0

Funded-by: IDEAS
Project: IDEAS/xSDK
Reported-by: Ulrike Meier Yang <yang11@llnl.gov>

* Re-added patch to alquimia

The patch was out of date and has been updated accordingly.

* Added Tpetra-free option to Trilinos

The Tpetra stack takes forever to build and is not used by any of the
IDEAS teams, so there should be an option to disable it.  I have added
this option and updated the xSDK accordingly.  I also disabled
xSDKTrilinos in the xSDK, since none of the apps teams currently use it,
and it's largely Tpetra-based.

* Removed alquimia patch from develop version

The patch has been incorporated into alquimia and is no longer
necessary for the develop version.  The tagged version has not
been updated accordingly and still needs the patch for now.
(When the tagged version gets updated, the patch does need to be
removed from spack altogether, or it will break the build.)

* Removed patch from alquimia

It has been incorporated into alquimia, both the develop and
rc2 tagged versions.  The 0.2.0 version of alquimia has been updated
to tag rc2 rather than rc1.

* update xsdk-0.2.0 to depend on PETSc xsdk-0.2.0-rc2 which fixes for Apple xcode 8.3

Commit-type: bug-fix
Funded-by: IDEAS
Project: IDEAS/xSDK

* import sys got lost in merge with develop

* Update xsdk packages to use xsdk-0.2.0 tag

Commit-type: feature
Funded-by: IDEAS
Project: ECP

* Fixes for Flake8

note, had to ignore some long lines due to a single string

* simple improvements to XDK packages as suggested by Spack pull request reviewers

Commit-type: style-fix
Funded-by: IDEAS
Project: xSDK

* Removed unneeded : after develop as requested by Denis Davydov in pull request review

Commit-type: style-fix
Funded-by: IDEAS
Project: xSDK
Thanks-to: Denis Davydov

* Removed change that may not be needed due to updates in PETSc spack file such as using mpicc etc directly

Commit-type: bug-fix
Funded-by: IDEAS
Project: xSDK
Thanks-to: Adam J. Stewart

* Do not turn on xSDKTrilinos for xSDK builds since it requires tpetra

Commit-type: bug-fix
Funded-by: IDEAS
Project: xSDK

* comment why MUMPS is disabled by default for PETSc so that others won't try to enable it when modifying petsc package next time

Commit-type: documentation
Funded-by: IDEAS
Project: xSDK
Thanks-to: Denis Davydov
This commit is contained in:
Barry Smith 2017-04-25 18:09:30 -05:00 committed by Todd Gamblin
parent 4a7a4f5cd3
commit d04ae9a2b4
8 changed files with 210 additions and 25 deletions

View file

@ -0,0 +1,74 @@
##############################################################################
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
#
# This file is part of Spack.
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
# LLNL-CODE-647188
#
# For details, see https://github.com/llnl/spack
# Please also see the LICENSE file for our notice and the LGPL.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License (as
# published by the Free Software Foundation) version 2.1, February 1999.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
# conditions of the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
class Alquimia(CMakePackage):
"""Alquimia is an interface that exposes the capabilities
of mature geochemistry codes such as CrunchFlow and PFLOTRAN"""
homepage = "https://github.com/LBL-EESA/alquimia-dev"
version('xsdk-0.2.0', git='https://github.com/LBL-EESA/alquimia-dev.git', tag='xsdk-0.2.0')
version('develop', git='https://github.com/LBL-EESA/alquimia-dev.git')
variant('shared', default=True,
description='Enables the build of shared libraries')
variant('debug', default=False,
description='Builds a debug version of the libraries')
depends_on('mpi')
depends_on('hdf5')
depends_on('pflotran@xsdk-0.2.0', when='@xsdk-0.2.0')
depends_on('pflotran@develop', when='@develop')
depends_on('petsc@xsdk-0.2.0', when='@xsdk-0.2.0')
depends_on('petsc@develop', when='@develop')
def cmake_args(self):
spec = self.spec
options = ['-DCMAKE_C_COMPILER=%s' % spec['mpi'].mpicc,
'-DCMAKE_Fortran_COMPILER=%s' % spec['mpi'].mpifc,
'-DUSE_XSDK_DEFAULTS=YES',
'-DCMAKE_BUILD_TYPE:STRING=%s' % (
'DEBUG' if '+debug' in spec else 'RELEASE'),
'-DXSDK_ENABLE_DEBUG:STRING=%s' % (
'YES' if '+debug' in spec else 'NO'),
'-DBUILD_SHARED_LIBS:BOOL=%s' % (
'ON' if '+shared' in spec else 'OFF'),
'-DTPL_ENABLE_MPI:BOOL=ON',
'-DMPI_BASE_DIR:PATH=%s' % spec['mpi'].prefix,
'-DTPL_ENABLE_HDF5:BOOL=ON',
'-DXSDK_WITH_PFLOTRAN:BOOL=ON',
# This is not good.
# It assumes that the .a file exists and is not a .so
'-DTPL_PFLOTRAN_LIBRARIES=%s' % (
spec['pflotran'].prefix.lib + "/libpflotranchem.a"),
'-DTPL_PFLOTRAN_INCLUDE_DIRS=%s' % (
spec['pflotran'].prefix.include),
'-DTPL_ENABLE_PETSC:BOOL=ON',
'-DPETSC_EXECUTABLE_RUNS=ON',
'-DCMAKE_INSTALL_NAME_DIR:PATH=%s/lib' % self.prefix]
return options

View file

@ -36,6 +36,7 @@ class Hypre(Package):
url = "http://computation.llnl.gov/project/linear_solvers/download/hypre-2.10.0b.tar.gz"
version('develop', git='https://github.com/LLNL/hypre', tag='master')
version('xsdk-0.2.0', git='https://github.com/LLNL/hypre', tag='xsdk-0.2.0')
version('2.11.2', 'd507943a1a3ce5681c3308e2f3a6dd34')
version('2.11.1', '3f02ef8fd679239a6723f60b7f796519')
version('2.10.1', 'dc048c4cabb3cd549af72591474ad674')

View file

@ -23,8 +23,8 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
import os
import sys
import os
from spack import *
@ -38,8 +38,7 @@ class Petsc(Package):
url = "http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-3.5.3.tar.gz"
version('develop', git='https://bitbucket.org/petsc/petsc.git', tag='master')
version('for-pflotran-0.1.0', git='https://bitbucket.org/petsc/petsc.git',
commit='7943f4e1472fff9cf1fc630a1100136616e4970f')
version('xsdk-0.2.0', git='https://bitbucket.org/petsc/petsc.git', tag='xsdk-0.2.0')
version('3.7.5', 'f00f6e6a3bac39052350dd47194b58a3')
version('3.7.4', 'aaf94fa54ef83022c14091f10866eedf')
@ -66,11 +65,15 @@ class Petsc(Package):
variant('boost', default=True, description='Activates support for Boost')
variant('hypre', default=True,
description='Activates support for Hypre (only parallel)')
variant('mumps', default=True,
# Mumps is disabled by default, because it depends on Scalapack
# which is not portable to all HPC systems
variant('mumps', default=False,
description='Activates support for MUMPS (only parallel'
' and 32bit indices)')
variant('superlu-dist', default=True,
description='Activates support for SuperluDist (only parallel)')
variant('trilinos', default=False,
description='Activates support for Trilinos (only parallel)')
variant('int64', default=False,
description='Compile with 64bit indices')
@ -106,15 +109,24 @@ class Petsc(Package):
# conflict in headers see
# https://bitbucket.org/petsc/petsc/src/90564b43f6b05485163c147b464b5d6d28cde3ef/config/BuildSystem/config/packages/hypre.py
depends_on('hypre~internal-superlu~int64', when='+hypre+mpi~complex~int64')
depends_on('hypre@xsdk-0.2.0~internal-superlu+int64', when='@xsdk-0.2.0+hypre+mpi~complex+int64')
depends_on('hypre@xsdk-0.2.0~internal-superlu~int64', when='@xsdk-0.2.0+hypre+mpi~complex~int64')
depends_on('hypre@develop~internal-superlu+int64', when='@develop+hypre+mpi~complex+int64')
depends_on('hypre@develop~internal-superlu~int64', when='@develop+hypre+mpi~complex~int64')
depends_on('hypre~internal-superlu+int64', when='+hypre+mpi~complex+int64')
depends_on('superlu-dist@:4.3~int64', when='@3.4.4:3.6.4+superlu-dist+mpi~int64')
depends_on('superlu-dist@:4.3+int64', when='@3.4.4:3.6.4+superlu-dist+mpi+int64')
depends_on('superlu-dist@5.0.0:~int64', when='@3.7:+superlu-dist+mpi~int64')
depends_on('superlu-dist@5.0.0:+int64', when='@3.7:+superlu-dist+mpi+int64')
depends_on('superlu-dist@5.0.0:~int64', when='@for-pflotran-0.1.0+superlu-dist+mpi~int64')
depends_on('superlu-dist@5.0.0:+int64', when='@for-pflotran-0.1.0+superlu-dist+mpi+int64')
depends_on('superlu-dist@xsdk-0.2.0~int64', when='@xsdk-0.2.0+superlu-dist+mpi~int64')
depends_on('superlu-dist@xsdk-0.2.0+int64', when='@xsdk-0.2.0+superlu-dist+mpi+int64')
depends_on('superlu-dist@develop~int64', when='@develop+superlu-dist+mpi~int64')
depends_on('superlu-dist@develop+int64', when='@develop+superlu-dist+mpi+int64')
depends_on('mumps+mpi', when='+mumps+mpi~int64')
depends_on('scalapack', when='+mumps+mpi~int64')
depends_on('trilinos@12.6.2:', when='@3.7.0:+trilinos+mpi')
depends_on('trilinos@xsdk-0.2.0', when='@xsdk-0.2.0+trilinos+mpi')
depends_on('trilinos@develop', when='@xdevelop+trilinos+mpi')
def mpi_dependent_options(self):
if '~mpi' in self.spec:
@ -140,14 +152,10 @@ def mpi_dependent_options(self):
raise RuntimeError('\n'.join(errors))
else:
compiler_opts = [
'--with-mpi=1',
'--with-mpi-dir=%s' % self.spec['mpi'].prefix,
'--with-cc=%s' % self.spec['mpi'].mpicc,
'--with-cxx=%s' % self.spec['mpi'].mpicxx,
'--with-fc=%s' % self.spec['mpi'].mpifc
]
if sys.platform != "darwin":
compiler_opts.extend([
'--with-cpp=cpp',
'--with-cxxcpp=cpp',
])
return compiler_opts
def install(self, spec, prefix):
@ -173,6 +181,9 @@ def install(self, spec, prefix):
'--with-blas-lapack-lib=%s' % lapack_blas.joined()
])
if 'trilinos' in spec:
options.append('--with-cxx-dialect=C++11')
# Help PETSc pick up Scalapack from MKL:
if 'scalapack' in spec:
scalapack = spec['scalapack'].libs
@ -187,7 +198,7 @@ def install(self, spec, prefix):
# Activates library support if needed
for library in ('metis', 'boost', 'hdf5', 'hypre', 'parmetis',
'mumps'):
'mumps', 'scalapack', 'trilinos'):
options.append(
'--with-{library}={value}'.format(
library=library, value=('1' if library in spec else '0'))

View file

@ -33,13 +33,12 @@ class Pflotran(AutotoolsPackage):
homepage = "http://www.pflotran.org"
version('develop', hg='https://bitbucket.org/pflotran/pflotran-xsdk')
version('0.1.0', hg='https://bitbucket.org/pflotran/pflotran-xsdk',
commmit='4734cf5e606b')
version('develop', git='https://bitbucket.org/pflotran/pflotran')
version('xsdk-0.2.0', git='https://bitbucket.org/pflotran/pflotran', tag='master')
depends_on('mpi')
depends_on('hdf5@1.8.12:+mpi+fortran')
depends_on('petsc@develop+hdf5+metis',when='@develop')
depends_on('petsc@for-pflotran-0.1.0+hdf5+metis',when='@0.1.0')
depends_on('petsc@develop+hdf5+metis', when='@develop')
depends_on('petsc@xsdk-0.2.0+hdf5+metis', when='@xsdk-0.2.0')
parallel = False

View file

@ -34,6 +34,7 @@ class SuperluDist(Package):
url = "http://crd-legacy.lbl.gov/~xiaoye/SuperLU/superlu_dist_4.1.tar.gz"
version('develop', git='https://github.com/xiaoyeli/superlu_dist', tag='master')
version('xsdk-0.2.0', git='https://github.com/xiaoyeli/superlu_dist', tag='xsdk-0.2.0')
version('5.1.3', 'fec21a9207ef94f57501c9406da78285')
version('5.1.1', '12638c631733a27dcbd87110e9f9cb1e')
version('5.1.0', '6bb86e630bd4bd8650243aed8fd92eb9')

View file

@ -46,6 +46,8 @@ class Trilinos(CMakePackage):
homepage = "https://trilinos.org/"
url = "https://github.com/trilinos/Trilinos/archive/trilinos-release-12-10-1.tar.gz"
version('xsdk-0.2.0',
git='https://github.com/trilinos/Trilinos.git', tag='xsdk-0.2.0')
version('develop',
git='https://github.com/trilinos/Trilinos.git', tag='develop')
version('master',
@ -86,6 +88,7 @@ class Trilinos(CMakePackage):
variant('debug', default=False,
description='Builds a debug version of the libraries')
variant('boost', default=True, description='Compile with Boost')
variant('tpetra', default=True, description='Compile with Tpetra')
variant('exodus', default=False, description='Compile with Exodus from SEACAS')
# Everything should be compiled with -fpic
@ -112,15 +115,19 @@ class Trilinos(CMakePackage):
depends_on('scalapack', when='+mumps')
depends_on('superlu-dist@:4.3', when='@:12.6.1+superlu-dist')
depends_on('superlu-dist', when='@12.6.2:+superlu-dist')
depends_on('superlu-dist@develop', when='@develop+superlu-dist')
depends_on('superlu-dist@xsdk-0.2.0', when='@xsdk-0.2.0+superlu-dist')
depends_on('superlu+fpic@4.3', when='+superlu')
# Trilinos can not be built against 64bit int hypre
depends_on('hypre~internal-superlu~int64', when='+hypre')
depends_on('hypre@xsdk-0.2.0~internal-superlu', when='@xsdk-0.2.0+hypre')
depends_on('hypre@develop~internal-superlu', when='@develop+hypre')
depends_on('hdf5+mpi', when='+hdf5')
depends_on('python', when='+python')
depends_on('py-numpy', when='+python', type=('build', 'run'))
depends_on('swig', when='+python')
patch('umfpack_from_suitesparse.patch', when='@:12.8.1')
patch('umfpack_from_suitesparse.patch', when='@11.14.1:12.8.1')
def url_for_version(self, version):
url = "https://github.com/trilinos/Trilinos/archive/trilinos-release-{0}.tar.gz"
@ -128,7 +135,8 @@ def url_for_version(self, version):
# check that the combination of variants makes sense
def variants_check(self):
if '+superlu-dist' in self.spec and self.spec.satisfies('@:11.4.3'):
if ('+superlu-dist' in self.spec and
self.spec.satisfies('@11.14.1:11.14.3')):
# For Trilinos v11 we need to force SuperLUDist=OFF, since only the
# deprecated SuperLUDist v3.3 together with an Amesos patch is
# working.
@ -174,7 +182,9 @@ def cmake_args(self):
'-DLAPACK_LIBRARY_DIRS=%s' % ';'.join(lapack.directories),
'-DTrilinos_ENABLE_EXPLICIT_INSTANTIATION:BOOL=ON',
'-DTrilinos_ENABLE_CXX11:BOOL=ON',
'-DTPL_ENABLE_Netcdf:BOOL=ON'
'-DTPL_ENABLE_Netcdf:BOOL=ON',
'-DTrilinos_ENABLE_Tpetra:BOOL=%s' % (
'ON' if '+tpetra' in spec else 'OFF')
])
if '.'.join(platform.mac_ver()[0].split('.')[:2]) == '10.12':

View file

@ -0,0 +1,84 @@
##############################################################################
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
#
# This file is part of Spack.
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
# LLNL-CODE-647188
#
# For details, see https://github.com/llnl/spack
# Please also see the LICENSE file for our notice and the LGPL.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License (as
# published by the Free Software Foundation) version 2.1, February 1999.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
# conditions of the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
import os
from spack import *
class Xsdk(Package):
"""Xsdk is a suite of Department of Energy (DOE) packages for numerical
simulation. This is a Spack bundle package that installs the xSDK
packages
"""
homepage = "http://xsdk.info"
# Dummy url since Spack complains if I don't list something, will be
# removed when metapackage is available
url = 'https://bitbucket.org/saws/saws/get/master.tar.gz'
version('develop', '941a541bdf625856be18c9752249146d')
version('xsdk-0.2.0', '941a541bdf625856be18c9752249146d')
depends_on('hypre@xsdk-0.2.0~internal-superlu', when='@xsdk-0.2.0')
depends_on('hypre@develop~internal-superlu', when='@develop')
depends_on('superlu-dist@xsdk-0.2.0', when='@xsdk-0.2.0')
depends_on('superlu-dist@develop', when='@develop')
depends_on('trilinos@xsdk-0.2.0+hypre+superlu-dist+metis+hdf5~mumps+boost~suite-sparse~tpetra',
when='@xsdk-0.2.0')
depends_on('trilinos@develop+xsdkflags+hypre+superlu-dist+metis+hdf5~mumps+boost~suite-sparse~tpetra',
when='@develop')
depends_on('petsc@xsdk-0.2.0+trilinos+mpi+hypre+superlu-dist+metis+hdf5~mumps~boost',
when='@xsdk-0.2.0')
depends_on('petsc@develop+trilinos+mpi+hypre+superlu-dist+metis+hdf5~mumps~boost',
when='@develop')
depends_on('pflotran@xsdk-0.2.0', when='@xsdk-0.2.0')
depends_on('pflotran@develop', when='@develop')
depends_on('alquimia@xsdk-0.2.0', when='@xsdk-0.2.0')
depends_on('alquimia@develop', when='@develop')
# xSDKTrilinos depends on the version of Trilinos built with
# +tpetra which is turned off for faster xSDK
# depends_on('xsdktrilinos@xsdk-0.2.0', when='@xsdk-0.2.0')
# depends_on('xsdktrilinos@develop', when='@develop')
variant('debug', default=False, description='Compile in debug mode')
# How do we propagate debug flag to all depends on packages ?
# If I just do spack install xsdk+debug will that propogate it down?
# Dummy install for now, will be removed when metapackage is available
def install(self, spec, prefix):
# Prevent the error message
# ==> Error: Install failed for xsdk. Nothing was installed!
# ==> Error: Installation process had nonzero exit code : 256
with open(os.path.join(spec.prefix, 'bundle-package.txt'), 'w') as out:
out.write('This is a bundle\n')
out.close()

View file

@ -35,6 +35,7 @@ class Xsdktrilinos(CMakePackage):
url = "https://github.com/trilinos/xSDKTrilinos/archive/trilinos-release-12-8-1.tar.gz"
version('develop', git='https://github.com/trilinos/xSDKTrilinos.git', tag='master')
version('xsdk-0.2.0', git='https://github.com/trilinos/xSDKTrilinos.git', tag='xsdk-0.2.0')
version('12.8.1', '9cc338ded17d1e10ea6c0dc18b22dcd4')
version('12.6.4', '44c4c54ccbac73bb8939f68797b9454a')
@ -50,9 +51,13 @@ class Xsdktrilinos(CMakePackage):
# MPI related dependencies
depends_on('mpi')
depends_on('hypre~internal-superlu', when='+hypre')
depends_on('petsc+mpi~complex', when='+petsc')
depends_on('hypre@xsdk-0.2.0~internal-superlu', when='@xsdk-0.2.0+hypre')
depends_on('hypre@develop~internal-superlu', when='@develop+hypre')
depends_on('petsc@xsdk-0.2.0+mpi~complex', when='@xsdk-0.2.0+petsc')
depends_on('petsc@develop+mpi~complex', when='@develop+petsc')
depends_on('trilinos@12.6.4', when='@12.6.4')
depends_on('trilinos@12.8.1', when='@12.8.1')
depends_on('trilinos@xsdk-0.2.0', when='@xsdk-0.2.0')
depends_on('trilinos@develop', when='@develop')
def url_for_version(self, version):