Allow per-version URLs instead of one single URL per package.
This commit is contained in:
parent
5829b44648
commit
1ad474f1a9
@ -119,9 +119,8 @@ def caller_locals():
|
|||||||
|
|
||||||
|
|
||||||
def get_calling_package_name():
|
def get_calling_package_name():
|
||||||
"""Make sure that the caller is a class definition, and return
|
"""Make sure that the caller is a class definition, and return the
|
||||||
the module's name. This is useful for getting the name of
|
module's name.
|
||||||
spack packages from inside a relation function.
|
|
||||||
"""
|
"""
|
||||||
stack = inspect.stack()
|
stack = inspect.stack()
|
||||||
try:
|
try:
|
||||||
@ -144,7 +143,8 @@ def get_calling_package_name():
|
|||||||
def attr_required(obj, attr_name):
|
def attr_required(obj, attr_name):
|
||||||
"""Ensure that a class has a required attribute."""
|
"""Ensure that a class has a required attribute."""
|
||||||
if not hasattr(obj, attr_name):
|
if not hasattr(obj, attr_name):
|
||||||
tty.die("No required attribute '%s' in class '%s'"
|
raise RequiredAttributeError(
|
||||||
|
"No required attribute '%s' in class '%s'"
|
||||||
% (attr_name, obj.__class__.__name__))
|
% (attr_name, obj.__class__.__name__))
|
||||||
|
|
||||||
|
|
||||||
@ -259,3 +259,8 @@ def in_function(function_name):
|
|||||||
return False
|
return False
|
||||||
finally:
|
finally:
|
||||||
del stack
|
del stack
|
||||||
|
|
||||||
|
|
||||||
|
class RequiredAttributeError(ValueError):
|
||||||
|
def __init__(self, message):
|
||||||
|
super(RequiredAttributeError, self).__init__(message)
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
# TODO: maybe this should be separated out and should go in build_environment.py?
|
# TODO: maybe this should be separated out and should go in build_environment.py?
|
||||||
# TODO: it's not clear where all the stuff that needs to be included in packages
|
# TODO: it's not clear where all the stuff that needs to be included in packages
|
||||||
# should live. This file is overloaded for spack core vs. for packages.
|
# should live. This file is overloaded for spack core vs. for packages.
|
||||||
__all__ = ['Package', 'when', 'provides', 'depends_on',
|
__all__ = ['Package', 'when', 'provides', 'depends_on', 'version',
|
||||||
'patch', 'Version', 'working_dir', 'which', 'Executable',
|
'patch', 'Version', 'working_dir', 'which', 'Executable',
|
||||||
'filter_file', 'change_sed_delimiter']
|
'filter_file', 'change_sed_delimiter']
|
||||||
|
|
||||||
@ -146,6 +146,6 @@
|
|||||||
#
|
#
|
||||||
from llnl.util.filesystem import working_dir
|
from llnl.util.filesystem import working_dir
|
||||||
from spack.package import Package
|
from spack.package import Package
|
||||||
from spack.relations import depends_on, provides, patch
|
from spack.relations import *
|
||||||
from spack.multimethod import when
|
from spack.multimethod import when
|
||||||
from spack.version import Version
|
from spack.version import Version
|
||||||
|
@ -70,7 +70,7 @@ class ${class_name}(Package):
|
|||||||
homepage = "http://www.example.com"
|
homepage = "http://www.example.com"
|
||||||
url = "${url}"
|
url = "${url}"
|
||||||
|
|
||||||
versions = ${versions}
|
${versions}
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
# FIXME: Modify the configure line to suit your build system here.
|
# FIXME: Modify the configure line to suit your build system here.
|
||||||
@ -114,13 +114,11 @@ def __call__(self, stage):
|
|||||||
self.configure = '%s\n # %s' % (autotools, cmake)
|
self.configure = '%s\n # %s' % (autotools, cmake)
|
||||||
|
|
||||||
|
|
||||||
def make_version_dict(ver_hash_tuples):
|
def make_version_calls(ver_hash_tuples):
|
||||||
max_len = max(len(str(v)) for v,hfg in ver_hash_tuples)
|
"""Adds a version() call to the package for each version found."""
|
||||||
width = max_len + 2
|
max_len = max(len(str(v)) for v, h in ver_hash_tuples)
|
||||||
format = "%-" + str(width) + "s : '%s',"
|
format = " version(%%-%ds, '%%s')" % (max_len + 2)
|
||||||
sep = '\n '
|
return '\n'.join(format % ("'%s'" % v, h) for v, h in ver_hash_tuples)
|
||||||
return '{ ' + sep.join(format % ("'%s'" % v, h)
|
|
||||||
for v, h in ver_hash_tuples) + ' }'
|
|
||||||
|
|
||||||
|
|
||||||
def get_name():
|
def get_name():
|
||||||
@ -195,7 +193,7 @@ def create(parser, args):
|
|||||||
configure=guesser.configure,
|
configure=guesser.configure,
|
||||||
class_name=mod_to_class(name),
|
class_name=mod_to_class(name),
|
||||||
url=url,
|
url=url,
|
||||||
versions=make_version_dict(ver_hash_tuples)))
|
versions=make_version_calls(ver_hash_tuples)))
|
||||||
|
|
||||||
# If everything checks out, go ahead and edit.
|
# If everything checks out, go ahead and edit.
|
||||||
spack.editor(pkg_path)
|
spack.editor(pkg_path)
|
||||||
|
@ -44,7 +44,7 @@ class ${class_name}(Package):
|
|||||||
homepage = "http://www.example.com"
|
homepage = "http://www.example.com"
|
||||||
url = "http://www.example.com/${name}-1.0.tar.gz"
|
url = "http://www.example.com/${name}-1.0.tar.gz"
|
||||||
|
|
||||||
versions = { '1.0' : '0123456789abcdef0123456789abcdef' }
|
version('1.0', '0123456789abcdef0123456789abcdef')
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
configure("--prefix=%s" % prefix)
|
configure("--prefix=%s" % prefix)
|
||||||
|
@ -72,7 +72,7 @@ def concretize_version(self, spec):
|
|||||||
if valid_versions:
|
if valid_versions:
|
||||||
spec.versions = ver([valid_versions[-1]])
|
spec.versions = ver([valid_versions[-1]])
|
||||||
else:
|
else:
|
||||||
spec.versions = ver([pkg.default_version])
|
raise NoValidVerionError(spec)
|
||||||
|
|
||||||
|
|
||||||
def concretize_architecture(self, spec):
|
def concretize_architecture(self, spec):
|
||||||
@ -158,3 +158,11 @@ def __init__(self, compiler_spec):
|
|||||||
super(UnavailableCompilerVersionError, self).__init__(
|
super(UnavailableCompilerVersionError, self).__init__(
|
||||||
"No available compiler version matches '%s'" % compiler_spec,
|
"No available compiler version matches '%s'" % compiler_spec,
|
||||||
"Run 'spack compilers' to see available compiler Options.")
|
"Run 'spack compilers' to see available compiler Options.")
|
||||||
|
|
||||||
|
|
||||||
|
class NoValidVerionError(spack.error.SpackError):
|
||||||
|
"""Raised when there is no available version for a package that
|
||||||
|
satisfies a spec."""
|
||||||
|
def __init__(self, spec):
|
||||||
|
super(NoValidVerionError, self).__init__(
|
||||||
|
"No available version of %s matches '%s'" % (spec.name, spec.versions))
|
||||||
|
@ -296,9 +296,12 @@ class SomePackage(Package):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# These variables are defaults for the various relations defined on
|
# These variables are defaults for the various "relations".
|
||||||
# packages. Subclasses will have their own versions of these.
|
|
||||||
#
|
#
|
||||||
|
"""Map of information about Versions of this package.
|
||||||
|
Map goes: Version -> VersionDescriptor"""
|
||||||
|
versions = {}
|
||||||
|
|
||||||
"""Specs of dependency packages, keyed by name."""
|
"""Specs of dependency packages, keyed by name."""
|
||||||
dependencies = {}
|
dependencies = {}
|
||||||
|
|
||||||
@ -317,16 +320,10 @@ class SomePackage(Package):
|
|||||||
"""By default we build in parallel. Subclasses can override this."""
|
"""By default we build in parallel. Subclasses can override this."""
|
||||||
parallel = True
|
parallel = True
|
||||||
|
|
||||||
"""Dirty hack for forcing packages with uninterpretable URLs
|
|
||||||
TODO: get rid of this.
|
|
||||||
"""
|
|
||||||
force_url = False
|
|
||||||
|
|
||||||
|
|
||||||
def __init__(self, spec):
|
def __init__(self, spec):
|
||||||
# These attributes are required for all packages.
|
# These attributes are required for all packages.
|
||||||
attr_required(self.__class__, 'homepage')
|
attr_required(self.__class__, 'homepage')
|
||||||
attr_required(self.__class__, 'url')
|
|
||||||
|
|
||||||
# this determines how the package should be built.
|
# this determines how the package should be built.
|
||||||
self.spec = spec
|
self.spec = spec
|
||||||
@ -337,24 +334,32 @@ def __init__(self, spec):
|
|||||||
if '.' in self.name:
|
if '.' in self.name:
|
||||||
self.name = self.name[self.name.rindex('.') + 1:]
|
self.name = self.name[self.name.rindex('.') + 1:]
|
||||||
|
|
||||||
# Make sure URL is an allowed type
|
|
||||||
validate_package_url(self.url)
|
|
||||||
|
|
||||||
# patch up the URL with a new version if the spec version is concrete
|
|
||||||
if self.spec.versions.concrete:
|
|
||||||
self.url = self.url_for_version(self.spec.version)
|
|
||||||
|
|
||||||
# This is set by scraping a web page.
|
# This is set by scraping a web page.
|
||||||
self._available_versions = None
|
self._available_versions = None
|
||||||
|
|
||||||
# versions should be a dict from version to checksum, for safe versions
|
# Sanity check some required variables that could be
|
||||||
# of this package. If it's not present, make it an empty dict.
|
# overridden by package authors.
|
||||||
if not hasattr(self, 'versions'):
|
def sanity_check_dict(attr_name):
|
||||||
self.versions = {}
|
if not hasattr(self, attr_name):
|
||||||
|
raise PackageError("Package %s must define %s" % attr_name)
|
||||||
|
|
||||||
if not isinstance(self.versions, dict):
|
attr = getattr(self, attr_name)
|
||||||
raise ValueError("versions attribute of package %s must be a dict!"
|
if not isinstance(attr, dict):
|
||||||
% self.name)
|
raise PackageError("Package %s has non-dict %s attribute!"
|
||||||
|
% (self.name, attr_name))
|
||||||
|
sanity_check_dict('versions')
|
||||||
|
sanity_check_dict('dependencies')
|
||||||
|
sanity_check_dict('conflicted')
|
||||||
|
sanity_check_dict('patches')
|
||||||
|
|
||||||
|
# Check versions in the versions dict.
|
||||||
|
for v in self.versions:
|
||||||
|
assert(isinstance(v, Version))
|
||||||
|
|
||||||
|
# Check version descriptors
|
||||||
|
for v in sorted(self.versions):
|
||||||
|
vdesc = self.versions[v]
|
||||||
|
assert(isinstance(vdesc, spack.relations.VersionDescriptor))
|
||||||
|
|
||||||
# Version-ize the keys in versions dict
|
# Version-ize the keys in versions dict
|
||||||
try:
|
try:
|
||||||
@ -366,6 +371,10 @@ def __init__(self, spec):
|
|||||||
# stage used to build this package.
|
# stage used to build this package.
|
||||||
self._stage = None
|
self._stage = None
|
||||||
|
|
||||||
|
# patch up self.url based on the actual version
|
||||||
|
if self.spec.concrete:
|
||||||
|
self.url = self.url_for_version(self.version)
|
||||||
|
|
||||||
# Set a default list URL (place to find available versions)
|
# Set a default list URL (place to find available versions)
|
||||||
if not hasattr(self, 'list_url'):
|
if not hasattr(self, 'list_url'):
|
||||||
self.list_url = None
|
self.list_url = None
|
||||||
@ -374,18 +383,6 @@ def __init__(self, spec):
|
|||||||
self.list_depth = 1
|
self.list_depth = 1
|
||||||
|
|
||||||
|
|
||||||
@property
|
|
||||||
def default_version(self):
|
|
||||||
"""Get the version in the default URL for this package,
|
|
||||||
or fails."""
|
|
||||||
try:
|
|
||||||
return url.parse_version(self.__class__.url)
|
|
||||||
except UndetectableVersionError:
|
|
||||||
raise PackageError(
|
|
||||||
"Couldn't extract a default version from %s." % self.url,
|
|
||||||
" You must specify it explicitly in the package file.")
|
|
||||||
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def version(self):
|
def version(self):
|
||||||
if not self.spec.concrete:
|
if not self.spec.concrete:
|
||||||
@ -514,16 +511,50 @@ def url_version(self, version):
|
|||||||
override this, e.g. for boost versions where you need to ensure that there
|
override this, e.g. for boost versions where you need to ensure that there
|
||||||
are _'s in the download URL.
|
are _'s in the download URL.
|
||||||
"""
|
"""
|
||||||
if self.force_url:
|
|
||||||
return self.default_version
|
|
||||||
return str(version)
|
return str(version)
|
||||||
|
|
||||||
|
|
||||||
def url_for_version(self, version):
|
def url_for_version(self, version):
|
||||||
"""Gives a URL that you can download a new version of this package from."""
|
"""Returns a URL that you can download a new version of this package from."""
|
||||||
if self.force_url:
|
if not isinstance(version, Version):
|
||||||
return self.url
|
version = Version(version)
|
||||||
return url.substitute_version(self.__class__.url, self.url_version(version))
|
|
||||||
|
def nearest_url(version):
|
||||||
|
"""Finds the URL for the next lowest version with a URL.
|
||||||
|
If there is no lower version with a URL, uses the
|
||||||
|
package url property. If that isn't there, uses a
|
||||||
|
*higher* URL, and if that isn't there raises an error.
|
||||||
|
"""
|
||||||
|
url = getattr(self, 'url', None)
|
||||||
|
for v in sorted(self.versions):
|
||||||
|
if v > version and url:
|
||||||
|
break
|
||||||
|
if self.versions[v].url:
|
||||||
|
url = self.versions[v].url
|
||||||
|
if not url:
|
||||||
|
raise PackageVersionError(v)
|
||||||
|
return url
|
||||||
|
|
||||||
|
if version in self.versions:
|
||||||
|
vdesc = self.versions[version]
|
||||||
|
if not vdesc.url:
|
||||||
|
base_url = nearest_url(version)
|
||||||
|
vdesc.url = url.substitute_version(
|
||||||
|
base_url, self.url_version(version))
|
||||||
|
return vdesc.url
|
||||||
|
else:
|
||||||
|
return nearest_url(version)
|
||||||
|
|
||||||
|
|
||||||
|
@property
|
||||||
|
def default_url(self):
|
||||||
|
if self.concrete:
|
||||||
|
return self.url_for_version(self.version)
|
||||||
|
else:
|
||||||
|
url = getattr(self, 'url', None)
|
||||||
|
if url:
|
||||||
|
return url
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def remove_prefix(self):
|
def remove_prefix(self):
|
||||||
@ -548,7 +579,7 @@ def do_fetch(self):
|
|||||||
self.stage.fetch()
|
self.stage.fetch()
|
||||||
|
|
||||||
if spack.do_checksum and self.version in self.versions:
|
if spack.do_checksum and self.version in self.versions:
|
||||||
digest = self.versions[self.version]
|
digest = self.versions[self.version].checksum
|
||||||
self.stage.check(digest)
|
self.stage.check(digest)
|
||||||
tty.msg("Checksum passed for %s@%s" % (self.name, self.version))
|
tty.msg("Checksum passed for %s@%s" % (self.name, self.version))
|
||||||
|
|
||||||
@ -779,6 +810,9 @@ def do_clean_dist(self):
|
|||||||
|
|
||||||
|
|
||||||
def fetch_available_versions(self):
|
def fetch_available_versions(self):
|
||||||
|
if not hasattr(self, 'url'):
|
||||||
|
raise VersionFetchError(self.__class__)
|
||||||
|
|
||||||
# If not, then try to fetch using list_url
|
# If not, then try to fetch using list_url
|
||||||
if not self._available_versions:
|
if not self._available_versions:
|
||||||
try:
|
try:
|
||||||
@ -865,7 +899,6 @@ def print_pkg(message):
|
|||||||
print message
|
print message
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class FetchError(spack.error.SpackError):
|
class FetchError(spack.error.SpackError):
|
||||||
"""Raised when something goes wrong during fetch."""
|
"""Raised when something goes wrong during fetch."""
|
||||||
def __init__(self, message, long_msg=None):
|
def __init__(self, message, long_msg=None):
|
||||||
@ -889,3 +922,19 @@ class InvalidPackageDependencyError(PackageError):
|
|||||||
its dependencies."""
|
its dependencies."""
|
||||||
def __init__(self, message):
|
def __init__(self, message):
|
||||||
super(InvalidPackageDependencyError, self).__init__(message)
|
super(InvalidPackageDependencyError, self).__init__(message)
|
||||||
|
|
||||||
|
|
||||||
|
class PackageVersionError(PackageError):
|
||||||
|
"""Raised when a version URL cannot automatically be determined."""
|
||||||
|
def __init__(self, version):
|
||||||
|
super(PackageVersionError, self).__init__(
|
||||||
|
"Cannot determine a URL automatically for version %s." % version,
|
||||||
|
"Please provide a url for this version in the package.py file.")
|
||||||
|
|
||||||
|
|
||||||
|
class VersionFetchError(PackageError):
|
||||||
|
"""Raised when a version URL cannot automatically be determined."""
|
||||||
|
def __init__(self, cls):
|
||||||
|
super(VersionFetchError, self).__init__(
|
||||||
|
"Cannot fetch version for package %s " % cls.__name__ +
|
||||||
|
"because it does not define a default url.")
|
||||||
|
@ -68,6 +68,8 @@ class Mpileaks(Package):
|
|||||||
spack install mpileaks ^mvapich
|
spack install mpileaks ^mvapich
|
||||||
spack install mpileaks ^mpich
|
spack install mpileaks ^mpich
|
||||||
"""
|
"""
|
||||||
|
__all__ = [ 'depends_on', 'provides', 'patch', 'version' ]
|
||||||
|
|
||||||
import re
|
import re
|
||||||
import inspect
|
import inspect
|
||||||
import importlib
|
import importlib
|
||||||
@ -77,14 +79,38 @@ class Mpileaks(Package):
|
|||||||
import spack
|
import spack
|
||||||
import spack.spec
|
import spack.spec
|
||||||
import spack.error
|
import spack.error
|
||||||
|
import spack.url
|
||||||
|
|
||||||
|
from spack.version import Version
|
||||||
from spack.patch import Patch
|
from spack.patch import Patch
|
||||||
from spack.spec import Spec, parse_anonymous_spec
|
from spack.spec import Spec, parse_anonymous_spec
|
||||||
|
|
||||||
|
|
||||||
"""Adds a dependencies local variable in the locals of
|
class VersionDescriptor(object):
|
||||||
the calling class, based on args. """
|
"""A VersionDescriptor contains information to describe a
|
||||||
|
particular version of a package. That currently includes a URL
|
||||||
|
for the version along with a checksum."""
|
||||||
|
def __init__(self, checksum, url):
|
||||||
|
self.checksum = checksum
|
||||||
|
self.url = url
|
||||||
|
|
||||||
|
|
||||||
|
def version(ver, checksum, **kwargs):
|
||||||
|
"""Adds a version and associated metadata to the package."""
|
||||||
|
pkg = caller_locals()
|
||||||
|
|
||||||
|
versions = pkg.setdefault('versions', {})
|
||||||
|
patches = pkg.setdefault('patches', {})
|
||||||
|
|
||||||
|
ver = Version(ver)
|
||||||
|
url = kwargs.get('url', None)
|
||||||
|
|
||||||
|
versions[ver] = VersionDescriptor(checksum, url)
|
||||||
|
|
||||||
|
|
||||||
def depends_on(*specs):
|
def depends_on(*specs):
|
||||||
|
"""Adds a dependencies local variable in the locals of
|
||||||
|
the calling class, based on args. """
|
||||||
pkg = get_calling_package_name()
|
pkg = get_calling_package_name()
|
||||||
|
|
||||||
dependencies = caller_locals().setdefault('dependencies', {})
|
dependencies = caller_locals().setdefault('dependencies', {})
|
||||||
|
@ -29,19 +29,35 @@
|
|||||||
|
|
||||||
import spack
|
import spack
|
||||||
import spack.url as url
|
import spack.url as url
|
||||||
|
from spack.packages import PackageDB
|
||||||
|
|
||||||
|
|
||||||
class PackageSanityTest(unittest.TestCase):
|
class PackageSanityTest(unittest.TestCase):
|
||||||
|
|
||||||
def test_get_all_packages(self):
|
def check_db(self):
|
||||||
"""Get all packages once and make sure that works."""
|
"""Get all packages in a DB to make sure they work."""
|
||||||
for name in spack.db.all_package_names():
|
for name in spack.db.all_package_names():
|
||||||
spack.db.get(name)
|
spack.db.get(name)
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_all_packages(self):
|
||||||
|
"""Get all packages once and make sure that works."""
|
||||||
|
self.check_db()
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_all_mock_packages(self):
|
||||||
|
"""Get the mock packages once each too."""
|
||||||
|
tmp = spack.db
|
||||||
|
spack.db = PackageDB(spack.mock_packages_path)
|
||||||
|
self.check_db()
|
||||||
|
spack.db = tmp
|
||||||
|
|
||||||
|
|
||||||
def test_url_versions(self):
|
def test_url_versions(self):
|
||||||
"""Ensure that url_for_version does the right thing for at least the
|
"""Check URLs for regular packages, if they are explicitly defined."""
|
||||||
default version of each package.
|
|
||||||
"""
|
|
||||||
for pkg in spack.db.all_packages():
|
for pkg in spack.db.all_packages():
|
||||||
v = url.parse_version(pkg.url)
|
for v, vdesc in pkg.versions.items():
|
||||||
self.assertEqual(pkg.url, pkg.url_for_version(v))
|
if vdesc.url:
|
||||||
|
# If there is a url for the version check it.
|
||||||
|
v_url = pkg.url_for_version(v)
|
||||||
|
self.assertEqual(vdesc.url, v_url)
|
||||||
|
@ -82,12 +82,16 @@ def parse_version_string_with_indices(path):
|
|||||||
"""Try to extract a version string from a filename or URL. This is taken
|
"""Try to extract a version string from a filename or URL. This is taken
|
||||||
largely from Homebrew's Version class."""
|
largely from Homebrew's Version class."""
|
||||||
|
|
||||||
if os.path.isdir(path):
|
# Strip off sourceforge download stuffix.
|
||||||
|
if re.search(r'((?:sourceforge.net|sf.net)/.*)/download$', path):
|
||||||
|
path = os.path.dirname(path)
|
||||||
|
|
||||||
|
# Strip archive extension
|
||||||
|
path = comp.strip_extension(path)
|
||||||
|
|
||||||
|
# Take basename to avoid including parent dirs in version name
|
||||||
|
# Remember the offset of the stem in the full path.
|
||||||
stem = os.path.basename(path)
|
stem = os.path.basename(path)
|
||||||
elif re.search(r'((?:sourceforge.net|sf.net)/.*)/download$', path):
|
|
||||||
stem = comp.stem(os.path.dirname(path))
|
|
||||||
else:
|
|
||||||
stem = comp.stem(path)
|
|
||||||
|
|
||||||
version_types = [
|
version_types = [
|
||||||
# GitHub tarballs, e.g. v1.2.3
|
# GitHub tarballs, e.g. v1.2.3
|
||||||
@ -137,10 +141,10 @@ def parse_version_string_with_indices(path):
|
|||||||
(r'_((\d+\.)+\d+[a-z]?)[.]orig$', stem),
|
(r'_((\d+\.)+\d+[a-z]?)[.]orig$', stem),
|
||||||
|
|
||||||
# e.g. http://www.openssl.org/source/openssl-0.9.8s.tar.gz
|
# e.g. http://www.openssl.org/source/openssl-0.9.8s.tar.gz
|
||||||
(r'-([^-]+)', stem),
|
(r'-([^-]+(-alpha|-beta)?)', stem),
|
||||||
|
|
||||||
# e.g. astyle_1.23_macosx.tar.gz
|
# e.g. astyle_1.23_macosx.tar.gz
|
||||||
(r'_([^_]+)', stem),
|
(r'_([^_]+(_alpha|_beta)?)', stem),
|
||||||
|
|
||||||
# e.g. http://mirrors.jenkins-ci.org/war/1.486/jenkins.war
|
# e.g. http://mirrors.jenkins-ci.org/war/1.486/jenkins.war
|
||||||
(r'\/(\d\.\d+)\/', path),
|
(r'\/(\d\.\d+)\/', path),
|
||||||
@ -152,7 +156,9 @@ def parse_version_string_with_indices(path):
|
|||||||
regex, match_string = vtype[:2]
|
regex, match_string = vtype[:2]
|
||||||
match = re.search(regex, match_string)
|
match = re.search(regex, match_string)
|
||||||
if match and match.group(1) is not None:
|
if match and match.group(1) is not None:
|
||||||
return match.group(1), match.start(1), match.end(1)
|
version = match.group(1)
|
||||||
|
start = path.index(version)
|
||||||
|
return version, start, start+len(version)
|
||||||
|
|
||||||
raise UndetectableVersionError(path)
|
raise UndetectableVersionError(path)
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ def decompressor_for(path):
|
|||||||
return tar
|
return tar
|
||||||
|
|
||||||
|
|
||||||
def stem(path):
|
def strip_extension(path):
|
||||||
"""Get the part of a path that does not include its compressed
|
"""Get the part of a path that does not include its compressed
|
||||||
type extension."""
|
type extension."""
|
||||||
for type in ALLOWED_ARCHIVE_TYPES:
|
for type in ALLOWED_ARCHIVE_TYPES:
|
||||||
|
@ -181,7 +181,7 @@ def a_or_n(seg):
|
|||||||
|
|
||||||
# Add possible alpha or beta indicator at the end of each segemnt
|
# Add possible alpha or beta indicator at the end of each segemnt
|
||||||
# We treat these specially b/c they're so common.
|
# We treat these specially b/c they're so common.
|
||||||
wc += '[ab]?)?' * (len(segments) - 1)
|
wc += '(?:[a-z]|alpha|beta)?)?' * (len(segments) - 1)
|
||||||
return wc
|
return wc
|
||||||
|
|
||||||
|
|
||||||
|
@ -28,9 +28,9 @@ class Callpath(Package):
|
|||||||
homepage = "https://github.com/tgamblin/callpath"
|
homepage = "https://github.com/tgamblin/callpath"
|
||||||
url = "http://github.com/tgamblin/callpath-1.0.tar.gz"
|
url = "http://github.com/tgamblin/callpath-1.0.tar.gz"
|
||||||
|
|
||||||
versions = { 0.8 : 'foobarbaz',
|
version(0.8, 'foobarbaz')
|
||||||
0.9 : 'foobarbaz',
|
version(0.9, 'foobarbaz')
|
||||||
1.0 : 'foobarbaz' }
|
version(1.0, 'foobarbaz')
|
||||||
|
|
||||||
depends_on("dyninst")
|
depends_on("dyninst")
|
||||||
depends_on("mpi")
|
depends_on("mpi")
|
||||||
|
@ -28,7 +28,7 @@ class DirectMpich(Package):
|
|||||||
homepage = "http://www.example.com"
|
homepage = "http://www.example.com"
|
||||||
url = "http://www.example.com/direct_mpich-1.0.tar.gz"
|
url = "http://www.example.com/direct_mpich-1.0.tar.gz"
|
||||||
|
|
||||||
versions = { 1.0 : 'foobarbaz' }
|
version('1.0', 'foobarbaz')
|
||||||
|
|
||||||
depends_on('mpich')
|
depends_on('mpich')
|
||||||
|
|
||||||
|
@ -29,9 +29,8 @@ class Dyninst(Package):
|
|||||||
url = "http://www.dyninst.org/sites/default/files/downloads/dyninst/8.1.2/DyninstAPI-8.1.2.tgz"
|
url = "http://www.dyninst.org/sites/default/files/downloads/dyninst/8.1.2/DyninstAPI-8.1.2.tgz"
|
||||||
list_url = "http://www.dyninst.org/downloads/dyninst-8.x"
|
list_url = "http://www.dyninst.org/downloads/dyninst-8.x"
|
||||||
|
|
||||||
versions = {
|
version('8.1.2', 'bf03b33375afa66fe0efa46ce3f4b17a')
|
||||||
'8.1.2' : 'bf03b33375afa66fe0efa46ce3f4b17a',
|
version('8.1.1', '1f8743e3a5662b25ce64a7edf647e77d')
|
||||||
'8.1.1' : '1f8743e3a5662b25ce64a7edf647e77d' }
|
|
||||||
|
|
||||||
depends_on("libelf")
|
depends_on("libelf")
|
||||||
depends_on("libdwarf")
|
depends_on("libdwarf")
|
||||||
|
@ -27,7 +27,8 @@
|
|||||||
class Fake(Package):
|
class Fake(Package):
|
||||||
homepage = "http://www.fake-spack-example.org"
|
homepage = "http://www.fake-spack-example.org"
|
||||||
url = "http://www.fake-spack-example.org/downloads/fake-1.0.tar.gz"
|
url = "http://www.fake-spack-example.org/downloads/fake-1.0.tar.gz"
|
||||||
versions = { '1.0' : 'foobarbaz' }
|
|
||||||
|
version('1.0', 'foobarbaz')
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
pass
|
pass
|
||||||
|
@ -32,7 +32,7 @@ class IndirectMpich(Package):
|
|||||||
homepage = "http://www.example.com"
|
homepage = "http://www.example.com"
|
||||||
url = "http://www.example.com/indirect_mpich-1.0.tar.gz"
|
url = "http://www.example.com/indirect_mpich-1.0.tar.gz"
|
||||||
|
|
||||||
versions = { 1.0 : 'foobarbaz' }
|
version(1.0, 'foobarbaz')
|
||||||
|
|
||||||
depends_on('mpi')
|
depends_on('mpi')
|
||||||
depends_on('direct_mpich')
|
depends_on('direct_mpich')
|
||||||
|
@ -33,10 +33,10 @@ class Libdwarf(Package):
|
|||||||
url = "http://www.prevanders.net/libdwarf-20130729.tar.gz"
|
url = "http://www.prevanders.net/libdwarf-20130729.tar.gz"
|
||||||
list_url = homepage
|
list_url = homepage
|
||||||
|
|
||||||
versions = { 20130729 : "64b42692e947d5180e162e46c689dfbf",
|
version(20130729, "64b42692e947d5180e162e46c689dfbf")
|
||||||
20130207 : 'foobarbaz',
|
version(20130207, 'foobarbaz')
|
||||||
20111030 : 'foobarbaz',
|
version(20111030, 'foobarbaz')
|
||||||
20070703 : 'foobarbaz' }
|
version(20070703, 'foobarbaz')
|
||||||
|
|
||||||
depends_on("libelf")
|
depends_on("libelf")
|
||||||
|
|
||||||
|
@ -28,9 +28,9 @@ class Libelf(Package):
|
|||||||
homepage = "http://www.mr511.de/software/english.html"
|
homepage = "http://www.mr511.de/software/english.html"
|
||||||
url = "http://www.mr511.de/software/libelf-0.8.13.tar.gz"
|
url = "http://www.mr511.de/software/libelf-0.8.13.tar.gz"
|
||||||
|
|
||||||
versions = {'0.8.13' : '4136d7b4c04df68b686570afa26988ac',
|
version('0.8.13', '4136d7b4c04df68b686570afa26988ac')
|
||||||
'0.8.12' : 'e21f8273d9f5f6d43a59878dc274fec7',
|
version('0.8.12', 'e21f8273d9f5f6d43a59878dc274fec7')
|
||||||
'0.8.10' : '9db4d36c283d9790d8fa7df1f4d7b4d9' }
|
version('0.8.10', '9db4d36c283d9790d8fa7df1f4d7b4d9')
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
configure("--prefix=%s" % prefix,
|
configure("--prefix=%s" % prefix,
|
||||||
|
@ -30,11 +30,11 @@ class Mpich(Package):
|
|||||||
list_url = "http://www.mpich.org/static/downloads/"
|
list_url = "http://www.mpich.org/static/downloads/"
|
||||||
list_depth = 2
|
list_depth = 2
|
||||||
|
|
||||||
versions = { '3.0.4' : '9c5d5d4fe1e17dd12153f40bc5b6dbc0',
|
version('3.0.4', '9c5d5d4fe1e17dd12153f40bc5b6dbc0')
|
||||||
'3.0.3' : 'foobarbaz',
|
version('3.0.3', 'foobarbaz')
|
||||||
'3.0.2' : 'foobarbaz',
|
version('3.0.2', 'foobarbaz')
|
||||||
'3.0.1' : 'foobarbaz',
|
version('3.0.1', 'foobarbaz')
|
||||||
'3.0' : 'foobarbaz' }
|
version('3.0', 'foobarbaz')
|
||||||
|
|
||||||
provides('mpi@:3', when='@3:')
|
provides('mpi@:3', when='@3:')
|
||||||
provides('mpi@:1', when='@1:')
|
provides('mpi@:1', when='@1:')
|
||||||
|
@ -30,12 +30,12 @@ class Mpich2(Package):
|
|||||||
list_url = "http://www.mpich.org/static/downloads/"
|
list_url = "http://www.mpich.org/static/downloads/"
|
||||||
list_depth = 2
|
list_depth = 2
|
||||||
|
|
||||||
versions = { '1.5' : '9c5d5d4fe1e17dd12153f40bc5b6dbc0',
|
version('1.5', '9c5d5d4fe1e17dd12153f40bc5b6dbc0')
|
||||||
'1.4' : 'foobarbaz',
|
version('1.4', 'foobarbaz')
|
||||||
'1.3' : 'foobarbaz',
|
version('1.3', 'foobarbaz')
|
||||||
'1.2' : 'foobarbaz',
|
version('1.2', 'foobarbaz')
|
||||||
'1.1' : 'foobarbaz',
|
version('1.1', 'foobarbaz')
|
||||||
'1.0' : 'foobarbaz' }
|
version('1.0', 'foobarbaz')
|
||||||
|
|
||||||
provides('mpi@:2.0')
|
provides('mpi@:2.0')
|
||||||
provides('mpi@:2.1', when='@1.1:')
|
provides('mpi@:2.1', when='@1.1:')
|
||||||
|
@ -28,10 +28,10 @@ class Mpileaks(Package):
|
|||||||
homepage = "http://www.llnl.gov"
|
homepage = "http://www.llnl.gov"
|
||||||
url = "http://www.llnl.gov/mpileaks-1.0.tar.gz"
|
url = "http://www.llnl.gov/mpileaks-1.0.tar.gz"
|
||||||
|
|
||||||
versions = { 1.0 : 'foobarbaz',
|
version(1.0, 'foobarbaz')
|
||||||
2.1 : 'foobarbaz',
|
version(2.1, 'foobarbaz')
|
||||||
2.2 : 'foobarbaz',
|
version(2.2, 'foobarbaz')
|
||||||
2.3 : 'foobarbaz' }
|
version(2.3, 'foobarbaz')
|
||||||
|
|
||||||
depends_on("mpi")
|
depends_on("mpi")
|
||||||
depends_on("callpath")
|
depends_on("callpath")
|
||||||
|
@ -30,7 +30,7 @@ class TrivialInstallTestPackage(Package):
|
|||||||
homepage = "http://www.example.com/trivial_install"
|
homepage = "http://www.example.com/trivial_install"
|
||||||
url = "http://www.unit-test-should-replace-this-url/trivial_install-1.0.tar.gz"
|
url = "http://www.unit-test-should-replace-this-url/trivial_install-1.0.tar.gz"
|
||||||
|
|
||||||
versions = { '1.0' : 'foobarbaz' }
|
version('1.0', 'foobarbaz')
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
configure('--prefix=%s' % prefix)
|
configure('--prefix=%s' % prefix)
|
||||||
|
@ -30,7 +30,7 @@ class Zmpi(Package):
|
|||||||
homepage = "http://www.spack-fake-zmpi.org"
|
homepage = "http://www.spack-fake-zmpi.org"
|
||||||
url = "http://www.spack-fake-zmpi.org/downloads/zmpi-1.0.tar.gz"
|
url = "http://www.spack-fake-zmpi.org/downloads/zmpi-1.0.tar.gz"
|
||||||
|
|
||||||
versions = { '1.0' : 'foobarbaz' }
|
version('1.0', 'foobarbaz')
|
||||||
|
|
||||||
provides('mpi@:10.0')
|
provides('mpi@:10.0')
|
||||||
depends_on('fake')
|
depends_on('fake')
|
||||||
|
@ -11,17 +11,15 @@ class Samrai(Package):
|
|||||||
url = "https://computation-rnd.llnl.gov/SAMRAI/download/SAMRAI-v3.7.3.tar.gz"
|
url = "https://computation-rnd.llnl.gov/SAMRAI/download/SAMRAI-v3.7.3.tar.gz"
|
||||||
list_url = homepage
|
list_url = homepage
|
||||||
|
|
||||||
versions = {
|
version('3.7.3', '12d574eacadf8c9a70f1bb4cd1a69df6')
|
||||||
'3.7.3' : '12d574eacadf8c9a70f1bb4cd1a69df6',
|
version('3.7.2', 'f6a716f171c9fdbf3cb12f71fa6e2737')
|
||||||
'3.7.2' : 'f6a716f171c9fdbf3cb12f71fa6e2737',
|
version('3.6.3-beta', 'ef0510bf2893042daedaca434e5ec6ce')
|
||||||
'3.6.3-beta' : 'ef0510bf2893042daedaca434e5ec6ce',
|
version('3.5.2-beta', 'd072d9d681eeb9ada15ce91bea784274')
|
||||||
'3.5.2-beta' : 'd072d9d681eeb9ada15ce91bea784274',
|
version('3.5.0-beta', '1ad18a319fc573e12e2b1fbb6f6b0a19')
|
||||||
'3.5.0-beta' : '1ad18a319fc573e12e2b1fbb6f6b0a19',
|
version('3.4.1-beta', '00814cbee2cb76bf8302aff56bbb385b')
|
||||||
'3.4.1-beta' : '00814cbee2cb76bf8302aff56bbb385b',
|
version('3.3.3-beta', '1db3241d3e1cab913dc310d736c34388')
|
||||||
'3.3.3-beta' : '1db3241d3e1cab913dc310d736c34388',
|
version('3.3.2-beta', 'e598a085dab979498fcb6c110c4dd26c')
|
||||||
'3.3.2-beta' : 'e598a085dab979498fcb6c110c4dd26c',
|
version('2.4.4', '04fb048ed0efe7c531ac10c81cc5f6ac')
|
||||||
'2.4.4' : '04fb048ed0efe7c531ac10c81cc5f6ac',
|
|
||||||
}
|
|
||||||
|
|
||||||
depends_on("mpi")
|
depends_on("mpi")
|
||||||
depends_on("zlib")
|
depends_on("zlib")
|
||||||
|
@ -14,32 +14,31 @@ class Boost(Package):
|
|||||||
list_url = "http://sourceforge.net/projects/boost/files/boost/"
|
list_url = "http://sourceforge.net/projects/boost/files/boost/"
|
||||||
list_depth = 2
|
list_depth = 2
|
||||||
|
|
||||||
versions = {
|
version('1.55.0', 'd6eef4b4cacb2183f2bf265a5a03a354')
|
||||||
'1.55.0' : 'd6eef4b4cacb2183f2bf265a5a03a354',
|
version('1.54.0', '15cb8c0803064faef0c4ddf5bc5ca279')
|
||||||
'1.54.0' : '15cb8c0803064faef0c4ddf5bc5ca279',
|
version('1.53.0', 'a00d22605d5dbcfb4c9936a9b35bc4c2')
|
||||||
'1.53.0' : 'a00d22605d5dbcfb4c9936a9b35bc4c2',
|
version('1.52.0', '3a855e0f919107e0ca4de4d84ad3f750')
|
||||||
'1.52.0' : '3a855e0f919107e0ca4de4d84ad3f750',
|
version('1.51.0', '4b6bd483b692fd138aef84ed2c8eb679')
|
||||||
'1.51.0' : '4b6bd483b692fd138aef84ed2c8eb679',
|
version('1.50.0', '52dd00be775e689f55a987baebccc462')
|
||||||
'1.50.0' : '52dd00be775e689f55a987baebccc462',
|
version('1.49.0', '0d202cb811f934282dea64856a175698')
|
||||||
'1.49.0' : '0d202cb811f934282dea64856a175698',
|
version('1.48.0', 'd1e9a7a7f532bb031a3c175d86688d95')
|
||||||
'1.48.0' : 'd1e9a7a7f532bb031a3c175d86688d95',
|
version('1.47.0', 'a2dc343f7bc7f83f8941e47ed4a18200')
|
||||||
'1.47.0' : 'a2dc343f7bc7f83f8941e47ed4a18200',
|
version('1.46.1', '7375679575f4c8db605d426fc721d506')
|
||||||
'1.46.1' : '7375679575f4c8db605d426fc721d506',
|
version('1.46.0', '37b12f1702319b73876b0097982087e0')
|
||||||
'1.46.0' : '37b12f1702319b73876b0097982087e0',
|
version('1.45.0', 'd405c606354789d0426bc07bea617e58')
|
||||||
'1.45.0' : 'd405c606354789d0426bc07bea617e58',
|
version('1.44.0', 'f02578f5218f217a9f20e9c30e119c6a')
|
||||||
'1.44.0' : 'f02578f5218f217a9f20e9c30e119c6a',
|
version('1.43.0', 'dd49767bfb726b0c774f7db0cef91ed1')
|
||||||
'1.43.0' : 'dd49767bfb726b0c774f7db0cef91ed1',
|
version('1.42.0', '7bf3b4eb841b62ffb0ade2b82218ebe6')
|
||||||
'1.42.0' : '7bf3b4eb841b62ffb0ade2b82218ebe6',
|
version('1.41.0', '8bb65e133907db727a2a825c5400d0a6')
|
||||||
'1.41.0' : '8bb65e133907db727a2a825c5400d0a6',
|
version('1.40.0', 'ec3875caeac8c52c7c129802a8483bd7')
|
||||||
'1.40.0' : 'ec3875caeac8c52c7c129802a8483bd7',
|
version('1.39.0', 'a17281fd88c48e0d866e1a12deecbcc0')
|
||||||
'1.39.0' : 'a17281fd88c48e0d866e1a12deecbcc0',
|
version('1.38.0', '5eca2116d39d61382b8f8235915cb267')
|
||||||
'1.38.0' : '5eca2116d39d61382b8f8235915cb267',
|
version('1.37.0', '8d9f990bfb7e83769fa5f1d6f065bc92')
|
||||||
'1.37.0' : '8d9f990bfb7e83769fa5f1d6f065bc92',
|
version('1.36.0', '328bfec66c312150e4c2a78dcecb504b')
|
||||||
'1.36.0' : '328bfec66c312150e4c2a78dcecb504b',
|
version('1.35.0', 'dce952a7214e72d6597516bcac84048b')
|
||||||
'1.35.0' : 'dce952a7214e72d6597516bcac84048b',
|
version('1.34.1', '2d938467e8a448a2c9763e0a9f8ca7e5')
|
||||||
'1.34.1' : '2d938467e8a448a2c9763e0a9f8ca7e5',
|
version('1.34.0', 'ed5b9291ffad776f8757a916e1726ad0')
|
||||||
'1.34.0' : 'ed5b9291ffad776f8757a916e1726ad0'
|
|
||||||
}
|
|
||||||
|
|
||||||
def url_for_version(self, version):
|
def url_for_version(self, version):
|
||||||
"""Handle Boost's weird URLs, which write the version two different ways."""
|
"""Handle Boost's weird URLs, which write the version two different ways."""
|
||||||
|
@ -27,7 +27,8 @@
|
|||||||
class Cmake(Package):
|
class Cmake(Package):
|
||||||
homepage = 'https://www.cmake.org'
|
homepage = 'https://www.cmake.org'
|
||||||
url = 'http://www.cmake.org/files/v2.8/cmake-2.8.10.2.tar.gz'
|
url = 'http://www.cmake.org/files/v2.8/cmake-2.8.10.2.tar.gz'
|
||||||
versions = { '2.8.10.2' : '097278785da7182ec0aea8769d06860c' }
|
|
||||||
|
version('2.8.10.2', '097278785da7182ec0aea8769d06860c')
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
configure('--prefix=' + prefix,
|
configure('--prefix=' + prefix,
|
||||||
|
@ -29,8 +29,8 @@ class Dyninst(Package):
|
|||||||
url = "http://www.dyninst.org/sites/default/files/downloads/dyninst/8.1.2/DyninstAPI-8.1.2.tgz"
|
url = "http://www.dyninst.org/sites/default/files/downloads/dyninst/8.1.2/DyninstAPI-8.1.2.tgz"
|
||||||
list_url = "http://www.dyninst.org/downloads/dyninst-8.x"
|
list_url = "http://www.dyninst.org/downloads/dyninst-8.x"
|
||||||
|
|
||||||
versions = {'8.1.2' : 'bf03b33375afa66fe0efa46ce3f4b17a',
|
version('8.1.2', 'bf03b33375afa66fe0efa46ce3f4b17a')
|
||||||
'8.1.1' : '1f8743e3a5662b25ce64a7edf647e77d' }
|
version('8.1.1', '1f8743e3a5662b25ce64a7edf647e77d')
|
||||||
|
|
||||||
depends_on("libelf")
|
depends_on("libelf")
|
||||||
depends_on("libdwarf")
|
depends_on("libdwarf")
|
||||||
|
@ -5,7 +5,7 @@ class Graphlib(Package):
|
|||||||
homepage = "http://https://github.com/lee218llnl/graphlib"
|
homepage = "http://https://github.com/lee218llnl/graphlib"
|
||||||
url = "https://github.com/lee218llnl/graphlib/archive/v2.0.0.tar.gz"
|
url = "https://github.com/lee218llnl/graphlib/archive/v2.0.0.tar.gz"
|
||||||
|
|
||||||
versions = { '2.0.0' : '43c6df84f1d38ba5a5dce0ae19371a70', }
|
version('2.0.0', '43c6df84f1d38ba5a5dce0ae19371a70')
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
cmake(".", *std_cmake_args)
|
cmake(".", *std_cmake_args)
|
||||||
|
@ -11,7 +11,7 @@ class Hdf5(Package):
|
|||||||
list_url = "http://www.hdfgroup.org/ftp/HDF5/releases"
|
list_url = "http://www.hdfgroup.org/ftp/HDF5/releases"
|
||||||
list_depth = 3
|
list_depth = 3
|
||||||
|
|
||||||
versions = { '1.8.13' : 'c03426e9e77d7766944654280b467289', }
|
version('1.8.13', 'c03426e9e77d7766944654280b467289')
|
||||||
|
|
||||||
depends_on("mpi")
|
depends_on("mpi")
|
||||||
depends_on("zlib")
|
depends_on("zlib")
|
||||||
|
@ -28,7 +28,7 @@ class Launchmon(Package):
|
|||||||
homepage = "http://sourceforge.net/projects/launchmon"
|
homepage = "http://sourceforge.net/projects/launchmon"
|
||||||
url = "http://downloads.sourceforge.net/project/launchmon/launchmon/1.0.1%20release/launchmon-1.0.1.tar.gz"
|
url = "http://downloads.sourceforge.net/project/launchmon/launchmon/1.0.1%20release/launchmon-1.0.1.tar.gz"
|
||||||
|
|
||||||
versions = { '1.0.1' : '2f12465803409fd07f91174a4389eb2b' }
|
version('1.0.1', '2f12465803409fd07f91174a4389eb2b')
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
configure(
|
configure(
|
||||||
|
@ -44,9 +44,9 @@ class Libdwarf(Package):
|
|||||||
url = "http://www.prevanders.net/libdwarf-20130729.tar.gz"
|
url = "http://www.prevanders.net/libdwarf-20130729.tar.gz"
|
||||||
list_url = homepage
|
list_url = homepage
|
||||||
|
|
||||||
versions = { '20130729' : '4cc5e48693f7b93b7aa0261e63c0e21d',
|
version('20130729', '4cc5e48693f7b93b7aa0261e63c0e21d')
|
||||||
'20130207' : '64b42692e947d5180e162e46c689dfbf',
|
version('20130207', '64b42692e947d5180e162e46c689dfbf')
|
||||||
'20130126' : 'ded74a5e90edb5a12aac3c29d260c5db' }
|
version('20130126', 'ded74a5e90edb5a12aac3c29d260c5db')
|
||||||
|
|
||||||
depends_on("libelf")
|
depends_on("libelf")
|
||||||
|
|
||||||
|
@ -33,8 +33,8 @@ class Libelf(Package):
|
|||||||
homepage = "http://www.mr511.de/software/english.html"
|
homepage = "http://www.mr511.de/software/english.html"
|
||||||
url = "http://www.mr511.de/software/libelf-0.8.13.tar.gz"
|
url = "http://www.mr511.de/software/libelf-0.8.13.tar.gz"
|
||||||
|
|
||||||
versions = { '0.8.13' : '4136d7b4c04df68b686570afa26988ac',
|
version('0.8.13', '4136d7b4c04df68b686570afa26988ac')
|
||||||
'0.8.12' : 'e21f8273d9f5f6d43a59878dc274fec7', }
|
version('0.8.12', 'e21f8273d9f5f6d43a59878dc274fec7')
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
configure("--prefix=" + prefix,
|
configure("--prefix=" + prefix,
|
||||||
|
@ -11,18 +11,17 @@ class Libevent(Package):
|
|||||||
url = "https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz"
|
url = "https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz"
|
||||||
list_url = "http://libevent.org/old-releases.html"
|
list_url = "http://libevent.org/old-releases.html"
|
||||||
|
|
||||||
versions = {
|
version('2.0.21', 'b2405cc9ebf264aa47ff615d9de527a2')
|
||||||
'2.0.21' : 'b2405cc9ebf264aa47ff615d9de527a2',
|
version('2.0.20', '94270cdee32c0cd0aa9f4ee6ede27e8e')
|
||||||
'2.0.20' : '94270cdee32c0cd0aa9f4ee6ede27e8e',
|
version('2.0.19', '91111579769f46055b0a438f5cc59572')
|
||||||
'2.0.19' : '91111579769f46055b0a438f5cc59572',
|
version('2.0.18', 'aa1ce9bc0dee7b8084f6855765f2c86a')
|
||||||
'2.0.18' : 'aa1ce9bc0dee7b8084f6855765f2c86a',
|
version('2.0.17', 'dad64aaaaff16b5fbec25160c06fee9a')
|
||||||
'2.0.17' : 'dad64aaaaff16b5fbec25160c06fee9a',
|
version('2.0.16', '899efcffccdb3d5111419df76e7dc8df')
|
||||||
'2.0.16' : '899efcffccdb3d5111419df76e7dc8df',
|
version('2.0.15', '2643abe7ba242df15c08b2cc14ec8759')
|
||||||
'2.0.15' : '2643abe7ba242df15c08b2cc14ec8759',
|
version('2.0.14', 'cac0f379da35d3b98f83ac16fcfe1df4')
|
||||||
'2.0.14' : 'cac0f379da35d3b98f83ac16fcfe1df4',
|
version('2.0.13', 'af786b4b3f790c9d3279792edf7867fc')
|
||||||
'2.0.13' : 'af786b4b3f790c9d3279792edf7867fc',
|
version('2.0.12', '42986228baf95e325778ed328a93e070')
|
||||||
'2.0.12' : '42986228baf95e325778ed328a93e070',
|
|
||||||
}
|
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
configure("--prefix=%s" % prefix)
|
configure("--prefix=%s" % prefix)
|
||||||
|
@ -28,7 +28,7 @@ class Libunwind(Package):
|
|||||||
homepage = "http://www.nongnu.org/libunwind/"
|
homepage = "http://www.nongnu.org/libunwind/"
|
||||||
url = "http://download.savannah.gnu.org/releases/libunwind/libunwind-1.1.tar.gz"
|
url = "http://download.savannah.gnu.org/releases/libunwind/libunwind-1.1.tar.gz"
|
||||||
|
|
||||||
versions = { '1.1' : 'fb4ea2f6fbbe45bf032cd36e586883ce' }
|
version('1.1', 'fb4ea2f6fbbe45bf032cd36e586883ce')
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
configure("--prefix=" + prefix)
|
configure("--prefix=" + prefix)
|
||||||
|
@ -32,7 +32,7 @@ class Mpich(Package):
|
|||||||
list_url = "http://www.mpich.org/static/downloads/"
|
list_url = "http://www.mpich.org/static/downloads/"
|
||||||
list_depth = 2
|
list_depth = 2
|
||||||
|
|
||||||
versions = { '3.0.4' : '9c5d5d4fe1e17dd12153f40bc5b6dbc0' }
|
version('3.0.4', '9c5d5d4fe1e17dd12153f40bc5b6dbc0')
|
||||||
|
|
||||||
provides('mpi@:3', when='@3:')
|
provides('mpi@:3', when='@3:')
|
||||||
provides('mpi@:1', when='@1:')
|
provides('mpi@:1', when='@1:')
|
||||||
|
@ -5,8 +5,9 @@ class Mrnet(Package):
|
|||||||
homepage = "http://paradyn.org/mrnet"
|
homepage = "http://paradyn.org/mrnet"
|
||||||
url = "ftp://ftp.cs.wisc.edu/paradyn/mrnet/mrnet_4.0.0.tar.gz"
|
url = "ftp://ftp.cs.wisc.edu/paradyn/mrnet/mrnet_4.0.0.tar.gz"
|
||||||
|
|
||||||
versions = { '4.0.0' : 'd00301c078cba57ef68613be32ceea2f', }
|
version('4.0.0', 'd00301c078cba57ef68613be32ceea2f')
|
||||||
versions = { '4.1.0' : '5a248298b395b329e2371bf25366115c', }
|
version('4.1.0', '5a248298b395b329e2371bf25366115c')
|
||||||
|
|
||||||
parallel = False
|
parallel = False
|
||||||
|
|
||||||
depends_on("boost")
|
depends_on("boost")
|
||||||
|
@ -2,11 +2,12 @@
|
|||||||
|
|
||||||
class Mvapich2(Package):
|
class Mvapich2(Package):
|
||||||
"""mvapich2 is an MPI implmenetation for infiniband networks."""
|
"""mvapich2 is an MPI implmenetation for infiniband networks."""
|
||||||
|
|
||||||
homepage = "http://mvapich.cse.ohio-state.edu/"
|
homepage = "http://mvapich.cse.ohio-state.edu/"
|
||||||
url = "http://mvapich.cse.ohio-state.edu/download/mvapich2/mv2/mvapich2-1.9.tgz"
|
|
||||||
|
|
||||||
versions = { '1.9' : '5dc58ed08fd3142c260b70fe297e127c', }
|
version('1.9', '5dc58ed08fd3142c260b70fe297e127c',
|
||||||
|
url="http://mvapich.cse.ohio-state.edu/download/mvapich2/mv2/mvapich2-1.9.tgz")
|
||||||
|
version('2.0', '9fbb68a4111a8b6338e476dc657388b4',
|
||||||
|
url='http://mvapich.cse.ohio-state.edu/download/mvapich/mv2/mvapich2-2.0.tar.gz')
|
||||||
|
|
||||||
provides('mpi@:1', when='@1.9:')
|
provides('mpi@:1', when='@1.9:')
|
||||||
|
|
||||||
|
@ -8,14 +8,12 @@ class Ncurses(Package):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
homepage = "http://invisible-island.net/ncurses/ncurses.html"
|
homepage = "http://invisible-island.net/ncurses/ncurses.html"
|
||||||
url = "http://invisible-island.net/datafiles/release/ncurses.tar.gz"
|
|
||||||
|
|
||||||
versions = { 'stable' : '8cb9c412e5f2d96bc6f459aa8c6282a1' }
|
version('5.9', '8cb9c412e5f2d96bc6f459aa8c6282a1',
|
||||||
|
url='http://invisible-island.net/datafiles/release/ncurses.tar.gz')
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
configure("--prefix=%s" % prefix)
|
configure("--prefix=%s" % prefix)
|
||||||
make()
|
make()
|
||||||
make("install")
|
make("install")
|
||||||
|
|
||||||
def url_for_version(self, version):
|
|
||||||
return "http://invisible-island.net/datafiles/release/ncurses.tar.gz"
|
|
||||||
|
@ -12,7 +12,7 @@ class Openmpi(Package):
|
|||||||
homepage = "http://www.open-mpi.org"
|
homepage = "http://www.open-mpi.org"
|
||||||
url = "http://www.open-mpi.org/software/ompi/v1.6/downloads/openmpi-1.6.5.tar.bz2"
|
url = "http://www.open-mpi.org/software/ompi/v1.6/downloads/openmpi-1.6.5.tar.bz2"
|
||||||
|
|
||||||
versions = { '1.6.5' : '03aed2a4aa4d0b27196962a2a65fc475', }
|
version('1.6.5', '03aed2a4aa4d0b27196962a2a65fc475')
|
||||||
|
|
||||||
provides('mpi@:2')
|
provides('mpi@:2')
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ class Parmetis(Package):
|
|||||||
homepage = "http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview"
|
homepage = "http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview"
|
||||||
url = "http://glaros.dtc.umn.edu/gkhome/fetch/sw/parmetis/parmetis-4.0.3.tar.gz"
|
url = "http://glaros.dtc.umn.edu/gkhome/fetch/sw/parmetis/parmetis-4.0.3.tar.gz"
|
||||||
|
|
||||||
versions = { '4.0.3' : 'f69c479586bf6bb7aff6a9bc0c739628', }
|
version('4.0.3', 'f69c479586bf6bb7aff6a9bc0c739628')
|
||||||
|
|
||||||
depends_on('mpi')
|
depends_on('mpi')
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ class PmgrCollective(Package):
|
|||||||
homepage = "http://www.sourceforge.net/projects/pmgrcollective"
|
homepage = "http://www.sourceforge.net/projects/pmgrcollective"
|
||||||
url = "http://downloads.sourceforge.net/project/pmgrcollective/pmgrcollective/PMGR_COLLECTIVE-1.0/pmgr_collective-1.0.tgz"
|
url = "http://downloads.sourceforge.net/project/pmgrcollective/pmgrcollective/PMGR_COLLECTIVE-1.0/pmgr_collective-1.0.tgz"
|
||||||
|
|
||||||
versions = { '1.0' : '0384d008774274cc3fc7b4d810dfd07e' }
|
version('1.0', '0384d008774274cc3fc7b4d810dfd07e')
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
make('PREFIX="' + prefix + '"')
|
make('PREFIX="' + prefix + '"')
|
||||||
|
@ -30,7 +30,7 @@ class Scr(Package):
|
|||||||
|
|
||||||
depends_on("mpi")
|
depends_on("mpi")
|
||||||
|
|
||||||
versions = { '1.1-7' : 'a5930e9ab27d1b7049447c2fd7734ebd' }
|
version('1.1-7', 'a5930e9ab27d1b7049447c2fd7734ebd')
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
configure("--prefix=" + prefix,
|
configure("--prefix=" + prefix,
|
||||||
|
@ -29,7 +29,7 @@ class Spindle(Package):
|
|||||||
url = "https://github.com/hpc/Spindle/archive/v0.8.1.tar.gz"
|
url = "https://github.com/hpc/Spindle/archive/v0.8.1.tar.gz"
|
||||||
list_url = "https://github.com/hpc/Spindle/releases"
|
list_url = "https://github.com/hpc/Spindle/releases"
|
||||||
|
|
||||||
versions = {'0.8.1' : 'f11793a6b9d8df2cd231fccb2857d912' }
|
version('0.8.1', 'f11793a6b9d8df2cd231fccb2857d912')
|
||||||
|
|
||||||
depends_on("launchmon")
|
depends_on("launchmon")
|
||||||
|
|
||||||
|
@ -5,8 +5,8 @@ class Stat(Package):
|
|||||||
homepage = "http://paradyn.org/STAT/STAT.html"
|
homepage = "http://paradyn.org/STAT/STAT.html"
|
||||||
url = "https://github.com/lee218llnl/stat/archive/v2.0.0.tar.gz"
|
url = "https://github.com/lee218llnl/stat/archive/v2.0.0.tar.gz"
|
||||||
|
|
||||||
versions = { '2.0.0' : 'c7494210b0ba26b577171b92838e1a9b', }
|
version('2.0.0', 'c7494210b0ba26b577171b92838e1a9b')
|
||||||
versions = { '2.1.0' : 'ece26beaf057aa9134d62adcdda1ba91', }
|
version('2.1.0', 'ece26beaf057aa9134d62adcdda1ba91')
|
||||||
|
|
||||||
depends_on('libdwarf')
|
depends_on('libdwarf')
|
||||||
depends_on('dyninst')
|
depends_on('dyninst')
|
||||||
|
@ -10,7 +10,8 @@ class Tau(Package):
|
|||||||
homepage = "http://www.cs.uoregon.edu/research/tau"
|
homepage = "http://www.cs.uoregon.edu/research/tau"
|
||||||
url = "http://www.cs.uoregon.edu/research/paracomp/tau/tauprofile/dist/tau-2.23.1.tar.gz"
|
url = "http://www.cs.uoregon.edu/research/paracomp/tau/tauprofile/dist/tau-2.23.1.tar.gz"
|
||||||
|
|
||||||
versions = { '2.23.1' : '6593b47ae1e7a838e632652f0426fe72', }
|
version('2.23.1', '6593b47ae1e7a838e632652f0426fe72')
|
||||||
|
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
# TAU isn't happy with directories that have '@' in the path. Sigh.
|
# TAU isn't happy with directories that have '@' in the path. Sigh.
|
||||||
|
@ -10,7 +10,7 @@ class Tmux(Package):
|
|||||||
homepage = "http://tmux.sourceforge.net"
|
homepage = "http://tmux.sourceforge.net"
|
||||||
url = "http://downloads.sourceforge.net/project/tmux/tmux/tmux-1.9/tmux-1.9a.tar.gz"
|
url = "http://downloads.sourceforge.net/project/tmux/tmux/tmux-1.9/tmux-1.9a.tar.gz"
|
||||||
|
|
||||||
versions = { '1.9a' : 'b07601711f96f1d260b390513b509a2d', }
|
version('1.9a', 'b07601711f96f1d260b390513b509a2d')
|
||||||
|
|
||||||
depends_on('libevent')
|
depends_on('libevent')
|
||||||
depends_on('ncurses')
|
depends_on('ncurses')
|
||||||
|
@ -13,19 +13,17 @@ class Vim(Package):
|
|||||||
url = "ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2"
|
url = "ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2"
|
||||||
list_url = "http://ftp.vim.org/pub/vim/unix/"
|
list_url = "http://ftp.vim.org/pub/vim/unix/"
|
||||||
|
|
||||||
versions = {
|
version('7.4', '607e135c559be642f210094ad023dc65')
|
||||||
'7.4' : '607e135c559be642f210094ad023dc65',
|
version('7.3', '5b9510a17074e2b37d8bb38ae09edbf2')
|
||||||
'7.3' : '5b9510a17074e2b37d8bb38ae09edbf2',
|
version('7.2', 'f0901284b338e448bfd79ccca0041254')
|
||||||
'7.2' : 'f0901284b338e448bfd79ccca0041254',
|
version('7.1', '44c6b4914f38d6f9aa959640b89da329')
|
||||||
'7.1' : '44c6b4914f38d6f9aa959640b89da329',
|
version('7.0', '4ca69757678272f718b1041c810d82d8')
|
||||||
'7.0' : '4ca69757678272f718b1041c810d82d8',
|
version('6.4', '774c14d93ce58674b3b2c880edd12d77')
|
||||||
'6.4' : '774c14d93ce58674b3b2c880edd12d77',
|
version('6.3', '821fda8f14d674346b87e3ef9cb96389')
|
||||||
'6.3' : '821fda8f14d674346b87e3ef9cb96389',
|
version('6.2', 'c49d360bbd069d00e2a57804f2a123d9')
|
||||||
'6.2' : 'c49d360bbd069d00e2a57804f2a123d9',
|
version('6.1.405', 'd220ff58f2c72ed606e6d0297c2f2a7c')
|
||||||
'6.1.405' : 'd220ff58f2c72ed606e6d0297c2f2a7c',
|
version('6.1', '7fd0f915adc7c0dab89772884268b030')
|
||||||
'6.1' : '7fd0f915adc7c0dab89772884268b030',
|
version('6.0', '9d9ca84d489af6b3f54639dd97af3774')
|
||||||
'6.0' : '9d9ca84d489af6b3f54639dd97af3774',
|
|
||||||
}
|
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
configure("--prefix=%s" % prefix)
|
configure("--prefix=%s" % prefix)
|
||||||
|
@ -9,7 +9,7 @@ class Zlib(Package):
|
|||||||
homepage = "http://zlib.net"
|
homepage = "http://zlib.net"
|
||||||
url = "http://zlib.net/zlib-1.2.8.tar.gz"
|
url = "http://zlib.net/zlib-1.2.8.tar.gz"
|
||||||
|
|
||||||
versions = { '1.2.8' : '44d667c142d7cda120332623eab69f40', }
|
version('1.2.8', '44d667c142d7cda120332623eab69f40')
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
configure("--prefix=%s" % prefix)
|
configure("--prefix=%s" % prefix)
|
||||||
|
Loading…
Reference in New Issue
Block a user