Skip to content

Commit c679aa7

Browse files
authored
Merge pull request #18 from boegel/dont-add-fileless-paths
also only retain subdirs with at least one file in case there are multiple paths considered in make_module_req
2 parents 0e33f99 + 1e30e13 commit c679aa7

File tree

2 files changed

+23
-6
lines changed

2 files changed

+23
-6
lines changed

easybuild/framework/easyblock.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1289,6 +1289,9 @@ def make_module_req(self):
12891289
note += "for paths are skipped for the statements below due to dry run"
12901290
lines.append(self.module_generator.comment(note))
12911291

1292+
# for these environment variables, the corresponding subdirectory must include at least one file
1293+
keys_requiring_files = ('CPATH', 'LD_LIBRARY_PATH', 'LIBRARY_PATH', 'PATH')
1294+
12921295
for key in sorted(requirements):
12931296
if self.dry_run:
12941297
self.dry_run_msg(" $%s: %s" % (key, ', '.join(requirements[key])))
@@ -1301,12 +1304,17 @@ def make_module_req(self):
13011304
# only use glob if the string is non-empty
13021305
if path and not self.dry_run:
13031306
paths = sorted(glob.glob(path))
1304-
if key in ('PATH', 'CPATH', 'LIBRARY_PATH', 'LD_LIBRARY_PATH') and len(paths) == 1:
1305-
req = paths[0]
1306-
if os.path.isdir(req):
1307-
# only add paths with regular files in there (e.g. not only directories)
1308-
if not any([os.path.isfile(os.path.join(req, f)) for f in os.listdir(req)]):
1309-
paths = []
1307+
if paths and key in keys_requiring_files:
1308+
self.log.info("Only retaining paths for %s that include at least one file: %s", key, paths)
1309+
# only retain paths that include at least one file
1310+
retained_paths = []
1311+
for path in paths:
1312+
full_path = os.path.join(self.installdir, path)
1313+
if os.path.isdir(full_path):
1314+
if any(os.path.isfile(os.path.join(full_path, x)) for x in os.listdir(full_path)):
1315+
retained_paths.append(path)
1316+
self.log.info("Retained paths for %s: %s", key, retained_paths)
1317+
paths = retained_paths
13101318
else:
13111319
# empty string is a valid value here (i.e. to prepend the installation prefix, cfr $CUDA_HOME)
13121320
paths = [path]

test/framework/easyblock.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,7 @@ def test_make_module_req(self):
319319
open(os.path.join(eb.installdir, 'bla.jar'), 'w').write('bla.jar')
320320
os.mkdir(os.path.join(eb.installdir, 'bin'))
321321
os.mkdir(os.path.join(eb.installdir, 'bin', 'testdir'))
322+
os.mkdir(os.path.join(eb.installdir, 'sbin'))
322323
os.mkdir(os.path.join(eb.installdir, 'share'))
323324
os.mkdir(os.path.join(eb.installdir, 'share', 'man'))
324325
# this is not a path that should be picked up
@@ -330,13 +331,19 @@ def test_make_module_req(self):
330331
self.assertTrue(re.search(r"^prepend-path\s+CLASSPATH\s+\$root/bla.jar$", guess, re.M))
331332
self.assertTrue(re.search(r"^prepend-path\s+CLASSPATH\s+\$root/foo.jar$", guess, re.M))
332333
self.assertTrue(re.search(r"^prepend-path\s+MANPATH\s+\$root/share/man$", guess, re.M))
334+
# bin/ is not added to $PATH if it doesn't include files
333335
self.assertFalse(re.search(r"^prepend-path\s+PATH\s+\$root/bin$", guess, re.M))
336+
self.assertFalse(re.search(r"^prepend-path\s+PATH\s+\$root/sbin$", guess, re.M))
337+
# no include/ subdirectory, so no $CPATH update statement
334338
self.assertFalse(re.search(r"^prepend-path\s+CPATH\s+.*$", guess, re.M))
335339
elif get_module_syntax() == 'Lua':
336340
self.assertTrue(re.search(r'^prepend_path\("CLASSPATH", pathJoin\(root, "bla.jar"\)\)$', guess, re.M))
337341
self.assertTrue(re.search(r'^prepend_path\("CLASSPATH", pathJoin\(root, "foo.jar"\)\)$', guess, re.M))
338342
self.assertTrue(re.search(r'^prepend_path\("MANPATH", pathJoin\(root, "share/man"\)\)$', guess, re.M))
343+
# bin/ is not added to $PATH if it doesn't include files
339344
self.assertFalse(re.search(r'^prepend_path\("PATH", pathJoin\(root, "bin"\)\)$', guess, re.M))
345+
self.assertFalse(re.search(r'^prepend_path\("PATH", pathJoin\(root, "sbin"\)\)$', guess, re.M))
346+
# no include/ subdirectory, so no $CPATH update statement
340347
self.assertFalse(re.search(r'^prepend_path\("CPATH", .*\)$', guess, re.M))
341348
else:
342349
self.assertTrue(False, "Unknown module syntax: %s" % get_module_syntax())
@@ -346,8 +353,10 @@ def test_make_module_req(self):
346353
guess = eb.make_module_req()
347354
if get_module_syntax() == 'Tcl':
348355
self.assertTrue(re.search(r"^prepend-path\s+PATH\s+\$root/bin$", guess, re.M))
356+
self.assertFalse(re.search(r"^prepend-path\s+PATH\s+\$root/sbin$", guess, re.M))
349357
elif get_module_syntax() == 'Lua':
350358
self.assertTrue(re.search(r'^prepend_path\("PATH", pathJoin\(root, "bin"\)\)$', guess, re.M))
359+
self.assertFalse(re.search(r'^prepend_path\("PATH", pathJoin\(root, "sbin"\)\)$', guess, re.M))
351360
else:
352361
self.assertTrue(False, "Unknown module syntax: %s" % get_module_syntax())
353362

0 commit comments

Comments
 (0)