The number of variables in the string printed for a checksum failure
was not correct. Now a useful error message is printed instead of a
stack trace and a TypeError.
- Previously, URLs like this wouldn't work with spack create:
http://www.hdfgroup.org/ftp/HDF5/current/src/hdf5-1.8.13.tar.bz2
The '5' in hdf5 would interfere with version wildcard substitution beacuse
the wildcard regex would subsume it.
We now take the name of the package OUT of the URL before splitting it up
and adding version wildcards. This prevents names with numbers from breaking
url.wildcard_version.
Also added a package sanity check test that ensures all builtin packages
work with wildcard_version.
# By Todd Gamblin
# Via Todd Gamblin
* commit 'a0c91791c5ac995b80111a92c94d8fb760caa6e3':
SPACK-25: Add package for boost. Works on Linux currently.
Better temp directory selection.
Status messages now show install and stage directories.
Better version wildcard handling, better spidering
- checksum --dirty and create --dirty now changed to --keep-stage
- install --dirty is now --keep-prefix
- uninstall --force now works properly
- commands use keyword args instead of package instance vars
where possible (less weird package state)
- except clause now catches anything, not just exception
- sys.exit() changed to os._exit() to avoid interfering with unit tests
and to avoid raising SystemExit exception when child processes quit.
- Allow version wildcards to match [_-.] instead of the exact separators
the version was constructed with.
- Handles the fact that boost versions are written both 1.55.0 and 1_55_0.
- Update spidering to handle parse errors and warn that Python < 2.7.3 has
less robust HTML parsing abilities.
- this allows each install to have full control over its environment,
and over spack.
- build process can do whatever it wants and doesn't affect main Spack
process.
- Consolidated build environment stuff from package.py into
build_environment.py
- package.py calls build_environment.py functions just before calling
install(), in do_install()
- Organization is better b/c SPACK_xxxx environment variables are now
in build_environment, the only place they're used. Were previously
cluttering globals.py.
The dependency hash wasn't being generated in a consistent way: when
read from .spec file in the install directory, the spec DAG was not
normalized, but when generated on install, it was. Thus the same
spec can have two possible hashes, which is obviously not good.
In this commit:
- Added a dep_hash function to spec, which should be used to get the
dependency hash in all cases. This function normalizes the spec
before generating the hash.
- removed sha1 functions from Spec and DependencyHash. The one on
Spec is not needed and is confusing (it hashed the whole spec, not
just hash the deps) and the one on DependencyHash wasn't guaranteed
to be safe because it can't normalize its parent spec before
hashing.
Hopefully this makes things consistent and easy.
- Packages now live in <package_name>/package.py
- spack.packages refactored to use a PackageDB object instead of
monolithic module.
- Implementation of mock_packages_test.py is greatly simplified
- Added test to exercise install/uninstall code because that wasn't
covered by existing tests and kept breaking.
- less kludgy matching -- we nw extract the version straight from a
capture group in the original match, rather than by trying to match
again.
- Avoids problems like finding "2" as the version in mvapich2-1.9, when
"2" here is part of the package name.
- packages can provide patch() directive to specify a patch file that
should be applied to source code after expanding it and before
building.
- patches can have a when spec, so they're only applied under certain
conditions
- patches can be local files in the package's own directory, or they
can be URLs which will be fetched from the internet.
- Formerly required that one and only one spec match
- Now allows first match in a list (more flexible and more intuitive)
- introduces new bug that provides() doesn't do the correct thing
when a version is not in a range that has been explicitly provided.
- TODO: fix this.
- anonymous specs have no name
- "local spec" came from these first being used in multimethods, i.e. "name of the local Package"
- not the most intuitive name.
- Normalize now updates the provider index as it addes package dependencies.
- Fixes problem where this breaks:
a depends_on mpi
a depends_on b
b depends_on mpich
- Packages now restrict the mpi dependency to mpich
- Added checks to constrain() so that it is consistent with satisfies()
- Added many more test cases for satisfiability and constraints on deps
- Virtual packages are handled properly in satisfies() and constrain()
- bugfix: mpileaks^mpich2 would satisfy mpileaks^mpi@3:
- this case is now handled.
Added more test cases for multimethods. In doing so, (re)discovered that
satisfies() really needs to handle dependencies properly.
Implemented support for dependencies in satisfies, but constrain() now
isn't consistent (as we do not currently constrain deps), so need to
implement that.
Virtual dependency support probably needs some deeper thought. i.e.,
there is probably an intermediate DAG form that would make the needed
checks easier. Right now we have to build ProviderIndexes to figure out
how virtual dependencies are set up. If the vdep were preserved in the DAG,
then we could just check for things like incompatible providers directly.