What does it (should it) mean to compute the full_hash() of a concretized spec of an external package like opengl or openglu, which are both system providers of virtual packages? I'm getting a stack trace that doesn't seem to state the true problem.
Expected Result
I would expect/hope for either an exception stating that the full_hash cannot be computed for this kind of package, or else perhaps it should work and actually compute the hash. I'm actually unsure of what the expected behavior should be.
Actual Result
There are two different cases for what actually happens, depending on whether you have an entry in your local packages.yaml or not. Let's consider the opengl case for the time being, though I verified that openglu has the same issue.
Case 1: You have an entry in packages.yaml
Mine looks like this:
packages:
opengl:
paths:
opengl@4.5.0: /opt/opengl
buildable: False
Then I do:
$ spack python
Spack version 0.11.2
Python 2.7.12, Linux x86_64
>>> from spack.spec import Spec
>>> s1 = Spec('opengl')
>>> s1.concretize()
>>> s1.full_hash()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/data/scott/projects/spack/lib/spack/spack/spec.py", line 1442, in full_hash
package_hash = self.package.content_hash()
File "/data/scott/projects/spack/lib/spack/spack/package.py", line 1084, in content_hash
source_id = fs.for_package_version(self, self.version).source_id()
File "/data/scott/projects/spack/lib/spack/spack/fetch_strategy.py", line 1051, in for_package_version
return _extrapolate(pkg, version)
File "/data/scott/projects/spack/lib/spack/spack/fetch_strategy.py", line 1022, in _extrapolate
return URLFetchStrategy(pkg.url_for_version(version))
ExtrapolationError: Can't extrapolate a URL for version 4.5.0 because package opengl defines no URLs
Case 2: You don't have an entry in packages.yaml
When I removed my packages.yaml and tried again, the problem was a little different:
$ spack python
Spack version 0.11.2
Python 2.7.12, Linux x86_64
>>> from spack.spec import Spec
>>> s1 = Spec('opengl')
>>> s1.concretize()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/data/scott/projects/spack/lib/spack/spack/spec.py", line 1847, in concretize
self._concretize_helper())
File "/data/scott/projects/spack/lib/spack/spack/spec.py", line 1690, in _concretize_helper
concretizer.concretize_version(self),
File "/data/scott/projects/spack/lib/spack/spack/concretize.py", line 216, in concretize_version
raise NoValidVersionError(spec)
NoValidVersionError: There are no valid versions for opengl that match ':'
Steps to reproduce the issue
Hopefully the information above is enough to reproduce the issue, but please let me know if more is needed.
Information on your system
$ uname -a
Linux beast 4.4.0-131-generic #157-Ubuntu SMP Thu Jul 12 15:51:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
What does it (should it) mean to compute the
full_hash()of a concretized spec of an external package likeopengloropenglu, which are both system providers of virtual packages? I'm getting a stack trace that doesn't seem to state the true problem.Expected Result
I would expect/hope for either an exception stating that the
full_hashcannot be computed for this kind of package, or else perhaps it should work and actually compute the hash. I'm actually unsure of what the expected behavior should be.Actual Result
There are two different cases for what actually happens, depending on whether you have an entry in your local
packages.yamlor not. Let's consider theopenglcase for the time being, though I verified thatopengluhas the same issue.Case 1: You have an entry in
packages.yamlMine looks like this:
Then I do:
Case 2: You don't have an entry in
packages.yamlWhen I removed my
packages.yamland tried again, the problem was a little different:Steps to reproduce the issue
Hopefully the information above is enough to reproduce the issue, but please let me know if more is needed.
Information on your system