summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorTom Scogland <scogland1@llnl.gov>2022-08-17 17:54:17 -0700
committerGitHub <noreply@github.com>2022-08-17 17:54:17 -0700
commitb9e57006c98c5ea3836a33a55a41a516e52f3e4b (patch)
tree54110b6ca18b0cdf413df5a237d451af6333d1be /lib
parentc386181c0f804222f1aabb8419162bfe9916cce9 (diff)
downloadspack-b9e57006c98c5ea3836a33a55a41a516e52f3e4b.tar.gz
spack-b9e57006c98c5ea3836a33a55a41a516e52f3e4b.tar.bz2
spack-b9e57006c98c5ea3836a33a55a41a516e52f3e4b.tar.xz
spack-b9e57006c98c5ea3836a33a55a41a516e52f3e4b.zip
bugfix: use cmake version from dependency (#31739)
Ensure that build tools with module-level commands in spack use the version built as part of their build graph if one exists. This is now also required for mesa, scons, cmake and ctest, out of graph versions of these tools in path will not be found unless added as an external. This bug appeared because a new version of rocprim needs cmake 3.16, while I have 3.14 in my path I had added an external for cmake 3.20 to the dag, but 3.14 was still used to configure rocprim causing it to fail. As far as I can tell, all the build tools added in build_environment.py had this problem, despite the fact that they should have been resolving these tools by name with a path search and find the one in the dag that way. I'm still investigating why the path searching and Executable logic didn't do it, but this makes three of the build systems much more explicit, and leaves only gmake and ninja as dependencies from out in the system while ensuring the version in the dag is used if there is one. The additional sqlite version is to perturb the hash of python to work around a relocation bug which will be fixed in a subsequent PR.
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/spack/build_environment.py11
-rw-r--r--lib/spack/spack/util/executable.py7
2 files changed, 11 insertions, 7 deletions
diff --git a/lib/spack/spack/build_environment.py b/lib/spack/spack/build_environment.py
index 2d0fd2b5e6..5a780e4bd5 100644
--- a/lib/spack/spack/build_environment.py
+++ b/lib/spack/spack/build_environment.py
@@ -136,14 +136,16 @@ class MakeExecutable(Executable):
-j).
"""
- def __init__(self, name, jobs):
- super(MakeExecutable, self).__init__(name)
+ def __init__(self, name, jobs, **kwargs):
+ super(MakeExecutable, self).__init__(name, **kwargs)
self.jobs = jobs
def __call__(self, *args, **kwargs):
"""parallel, and jobs_env from kwargs are swallowed and used here;
remaining arguments are passed through to the superclass.
"""
+ # TODO: figure out how to check if we are using a jobserver-supporting ninja,
+ # the two split ninja packages make this very difficult right now
parallel = should_set_parallel_jobs(jobserver_support=True) and kwargs.pop(
"parallel", self.jobs > 1
)
@@ -533,7 +535,6 @@ def _set_variables_for_single_module(pkg, module):
# TODO: make these build deps that can be installed if not found.
m.make = MakeExecutable("make", jobs)
m.gmake = MakeExecutable("gmake", jobs)
- m.scons = MakeExecutable("scons", jobs)
m.ninja = MakeExecutable("ninja", jobs)
# easy shortcut to os.environ
@@ -543,10 +544,6 @@ def _set_variables_for_single_module(pkg, module):
# Don't use which for this; we want to find it in the current dir.
m.configure = Executable("./configure")
- m.meson = Executable("meson")
- m.cmake = Executable("cmake")
- m.ctest = MakeExecutable("ctest", jobs)
-
if sys.platform == "win32":
m.nmake = Executable("nmake")
# Standard CMake arguments
diff --git a/lib/spack/spack/util/executable.py b/lib/spack/spack/util/executable.py
index a046e26eaa..cd8ddef6de 100644
--- a/lib/spack/spack/util/executable.py
+++ b/lib/spack/spack/util/executable.py
@@ -291,6 +291,13 @@ def which_string(*args, **kwargs):
win_candidates = [name + ext for ext in [".exe", ".bat"]]
candidate_names = [name] if not win_candidates else win_candidates
+ if sys.platform == "win32":
+ new_path = path[:]
+ for p in path:
+ if os.path.basename(p) == "bin":
+ new_path.append(os.path.dirname(p))
+ path = new_path
+
for candidate_name in candidate_names:
if os.path.sep in candidate_name:
exe = os.path.abspath(candidate_name)