Skip to content

Commit cf06d01

Browse files
committed
add BOTH_TO_DIR state to LibSymlink to cover cases where both lib and lib64 are symlinks to some other path
1 parent cde21cb commit cf06d01

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

easybuild/framework/easyblock.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,9 @@ class LibSymlink(Enum):
133133
- LIB_TO_LIB64: 'lib' is a symlink to 'lib64'
134134
- LIB64_TO_LIB: 'lib64' is a symlink to 'lib'
135135
- NEITHER: neither 'lib' is a symlink to 'lib64', nor 'lib64' is a symlink to 'lib'
136+
- BOTH_TO_DIR: 'lib' and 'lib64' are symlinks to some other directory
136137
- """
137-
LIB_TO_LIB64, LIB64_TO_LIB, NEITHER = range(3)
138+
LIB_TO_LIB64, LIB64_TO_LIB, NEITHER, BOTH_TO_DIR = range(4)
138139

139140

140141
class EasyBlock(object):
@@ -1760,7 +1761,9 @@ def check_install_lib_symlink(self):
17601761

17611762
self._install_lib_symlink = LibSymlink.NEITHER
17621763
if os.path.exists(lib_dir) and os.path.exists(lib64_dir):
1763-
if os.path.islink(lib_dir) and os.path.samefile(lib_dir, lib64_dir):
1764+
if os.path.islink(lib_dir) and os.path.islink(lib64_dir):
1765+
self._install_lib_symlink = LibSymlink.BOTH_TO_DIR
1766+
elif os.path.islink(lib_dir) and os.path.samefile(lib_dir, lib64_dir):
17641767
self._install_lib_symlink = LibSymlink.LIB_TO_LIB64
17651768
elif os.path.islink(lib64_dir) and os.path.samefile(lib_dir, lib64_dir):
17661769
self._install_lib_symlink = LibSymlink.LIB64_TO_LIB

test/framework/easyblock.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3312,6 +3312,25 @@ def test_expand_module_search_path(self):
33123312
self.assertEqual(test_emsp("lib*", ModEnvVarType.PATH_WITH_FILES), ["lib64"])
33133313
self.assertEqual(test_emsp("lib*", ModEnvVarType.PATH_WITH_TOP_FILES), ["lib64"])
33143314

3315+
# test both lib and lib64 symlinked to some other folder
3316+
remove_dir(os.path.join(eb.installdir, "lib64"))
3317+
remove_file(os.path.join(eb.installdir, "lib"))
3318+
os.mkdir(os.path.join(eb.installdir, "random_lib_dir"))
3319+
write_file(os.path.join(eb.installdir, "random_lib_dir", "libtest.so"), "not actually a lib")
3320+
os.symlink("random_lib_dir", os.path.join(eb.installdir, "lib"))
3321+
os.symlink("random_lib_dir", os.path.join(eb.installdir, "lib64"))
3322+
eb.check_install_lib_symlink()
3323+
self.assertEqual(eb.install_lib_symlink, LibSymlink.BOTH_TO_DIR)
3324+
self.assertEqual(test_emsp("lib", ModEnvVarType.PATH), ["lib"])
3325+
self.assertEqual(test_emsp("lib", ModEnvVarType.PATH_WITH_FILES), ["lib"])
3326+
self.assertEqual(test_emsp("lib", ModEnvVarType.PATH_WITH_TOP_FILES), ["lib"])
3327+
self.assertEqual(test_emsp("lib64", ModEnvVarType.PATH), ["lib64"])
3328+
self.assertEqual(test_emsp("lib64", ModEnvVarType.PATH_WITH_FILES), ["lib64"])
3329+
self.assertEqual(test_emsp("lib64", ModEnvVarType.PATH_WITH_TOP_FILES), ["lib64"])
3330+
self.assertEqual(test_emsp("lib*", ModEnvVarType.PATH), ["lib", "lib64"])
3331+
self.assertEqual(test_emsp("lib*", ModEnvVarType.PATH_WITH_FILES), ["lib", "lib64"])
3332+
self.assertEqual(test_emsp("lib*", ModEnvVarType.PATH_WITH_TOP_FILES), ["lib", "lib64"])
3333+
33153334

33163335
def suite():
33173336
""" return all the tests in this file """

0 commit comments

Comments
 (0)