def test_relocate_macho(tmpdir): with tmpdir.as_cwd(): get_patchelf() # this does nothing on Darwin rpaths, deps, idpath = macho_get_paths('/bin/bash') nrpaths, ndeps, nid = macho_make_paths_relative( '/bin/bash', '/usr', rpaths, deps, idpath) shutil.copyfile('/bin/bash', 'bash') modify_macho_object('bash', rpaths, deps, idpath, nrpaths, ndeps, nid) rpaths, deps, idpath = macho_get_paths('/bin/bash') nrpaths, ndeps, nid = macho_replace_paths('/usr', '/opt', rpaths, deps, idpath) shutil.copyfile('/bin/bash', 'bash') modify_macho_object('bash', rpaths, deps, idpath, nrpaths, ndeps, nid) path = '/usr/lib/libncurses.5.4.dylib' rpaths, deps, idpath = macho_get_paths(path) nrpaths, ndeps, nid = macho_make_paths_relative( path, '/usr', rpaths, deps, idpath) shutil.copyfile('/usr/lib/libncurses.5.4.dylib', 'libncurses.5.4.dylib') modify_macho_object('libncurses.5.4.dylib', rpaths, deps, idpath, nrpaths, ndeps, nid) rpaths, deps, idpath = macho_get_paths(path) nrpaths, ndeps, nid = macho_replace_paths('/usr', '/opt', rpaths, deps, idpath) shutil.copyfile('/usr/lib/libncurses.5.4.dylib', 'libncurses.5.4.dylib') modify_macho_object('libncurses.5.4.dylib', rpaths, deps, idpath, nrpaths, ndeps, nid)
def test_relocate_macho(tmpdir): with tmpdir.as_cwd(): get_patchelf() # this does nothing on Darwin rpaths, deps, idpath = macho_get_paths('/bin/bash') nrpaths, ndeps, nid = macho_make_paths_relative('/bin/bash', '/usr', rpaths, deps, idpath) shutil.copyfile('/bin/bash', 'bash') modify_macho_object('bash', rpaths, deps, idpath, nrpaths, ndeps, nid) rpaths, deps, idpath = macho_get_paths('/bin/bash') nrpaths, ndeps, nid = macho_replace_paths('/usr', '/opt', rpaths, deps, idpath) shutil.copyfile('/bin/bash', 'bash') modify_macho_object('bash', rpaths, deps, idpath, nrpaths, ndeps, nid) path = '/usr/lib/libncurses.5.4.dylib' rpaths, deps, idpath = macho_get_paths(path) nrpaths, ndeps, nid = macho_make_paths_relative(path, '/usr', rpaths, deps, idpath) shutil.copyfile( '/usr/lib/libncurses.5.4.dylib', 'libncurses.5.4.dylib') modify_macho_object('libncurses.5.4.dylib', rpaths, deps, idpath, nrpaths, ndeps, nid) rpaths, deps, idpath = macho_get_paths(path) nrpaths, ndeps, nid = macho_replace_paths('/usr', '/opt', rpaths, deps, idpath) shutil.copyfile( '/usr/lib/libncurses.5.4.dylib', 'libncurses.5.4.dylib') modify_macho_object( 'libncurses.5.4.dylib', rpaths, deps, idpath, nrpaths, ndeps, nid)
def test_macho_make_paths(): out = macho_make_paths_relative('/Users/Shared/spack/pkgC/lib/libC.dylib', '/Users/Shared/spack', ('/Users/Shared/spack/pkgA/lib', '/Users/Shared/spack/pkgB/lib', '/usr/local/lib'), ('/Users/Shared/spack/pkgA/libA.dylib', '/Users/Shared/spack/pkgB/libB.dylib', '/usr/local/lib/libloco.dylib'), '/Users/Shared/spack/pkgC/lib/libC.dylib') assert out == {'/Users/Shared/spack/pkgA/lib': '@loader_path/../../pkgA/lib', '/Users/Shared/spack/pkgB/lib': '@loader_path/../../pkgB/lib', '/usr/local/lib': '/usr/local/lib', '/Users/Shared/spack/pkgA/libA.dylib': '@loader_path/../../pkgA/libA.dylib', '/Users/Shared/spack/pkgB/libB.dylib': '@loader_path/../../pkgB/libB.dylib', '/usr/local/lib/libloco.dylib': '/usr/local/lib/libloco.dylib', '/Users/Shared/spack/pkgC/lib/libC.dylib': '@rpath/libC.dylib'} out = macho_make_paths_normal('/Users/Shared/spack/pkgC/lib/libC.dylib', ('@loader_path/../../pkgA/lib', '@loader_path/../../pkgB/lib', '/usr/local/lib'), ('@loader_path/../../pkgA/libA.dylib', '@loader_path/../../pkgB/libB.dylib', '/usr/local/lib/libloco.dylib'), '@rpath/libC.dylib') assert out == {'@rpath/libC.dylib': '/Users/Shared/spack/pkgC/lib/libC.dylib', '@loader_path/../../pkgA/lib': '/Users/Shared/spack/pkgA/lib', '@loader_path/../../pkgB/lib': '/Users/Shared/spack/pkgB/lib', '/usr/local/lib': '/usr/local/lib', '@loader_path/../../pkgA/libA.dylib': '/Users/Shared/spack/pkgA/libA.dylib', '@loader_path/../../pkgB/libB.dylib': '/Users/Shared/spack/pkgB/libB.dylib', '/usr/local/lib/libloco.dylib': '/usr/local/lib/libloco.dylib' } out = macho_make_paths_relative('/Users/Shared/spack/pkgC/bin/exeC', '/Users/Shared/spack', ('/Users/Shared/spack/pkgA/lib', '/Users/Shared/spack/pkgB/lib', '/usr/local/lib'), ('/Users/Shared/spack/pkgA/libA.dylib', '/Users/Shared/spack/pkgB/libB.dylib', '/usr/local/lib/libloco.dylib'), None) assert out == {'/Users/Shared/spack/pkgA/lib': '@loader_path/../../pkgA/lib', '/Users/Shared/spack/pkgB/lib': '@loader_path/../../pkgB/lib', '/usr/local/lib': '/usr/local/lib', '/Users/Shared/spack/pkgA/libA.dylib': '@loader_path/../../pkgA/libA.dylib', '/Users/Shared/spack/pkgB/libB.dylib': '@loader_path/../../pkgB/libB.dylib', '/usr/local/lib/libloco.dylib': '/usr/local/lib/libloco.dylib'} out = macho_make_paths_normal('/Users/Shared/spack/pkgC/bin/exeC', ('@loader_path/../../pkgA/lib', '@loader_path/../../pkgB/lib', '/usr/local/lib'), ('@loader_path/../../pkgA/libA.dylib', '@loader_path/../../pkgB/libB.dylib', '/usr/local/lib/libloco.dylib'), None) assert out == {'@loader_path/../../pkgA/lib': '/Users/Shared/spack/pkgA/lib', '@loader_path/../../pkgB/lib': '/Users/Shared/spack/pkgB/lib', '/usr/local/lib': '/usr/local/lib', '@loader_path/../../pkgA/libA.dylib': '/Users/Shared/spack/pkgA/libA.dylib', '@loader_path/../../pkgB/libB.dylib': '/Users/Shared/spack/pkgB/libB.dylib', '/usr/local/lib/libloco.dylib': '/usr/local/lib/libloco.dylib'}
def test_macho_paths(): out = macho_make_paths_relative( '/Users/Shares/spack/pkgC/lib/libC.dylib', '/Users/Shared/spack', ('/Users/Shared/spack/pkgA/lib', '/Users/Shared/spack/pkgB/lib', '/usr/local/lib'), ('/Users/Shared/spack/pkgA/libA.dylib', '/Users/Shared/spack/pkgB/libB.dylib', '/usr/local/lib/libloco.dylib'), '/Users/Shared/spack/pkgC/lib/libC.dylib') assert out == ([ '@loader_path/../../../../Shared/spack/pkgA/lib', '@loader_path/../../../../Shared/spack/pkgB/lib', '/usr/local/lib' ], [ '@loader_path/../../../../Shared/spack/pkgA/libA.dylib', '@loader_path/../../../../Shared/spack/pkgB/libB.dylib', '/usr/local/lib/libloco.dylib' ], '@rpath/libC.dylib') out = macho_make_paths_relative( '/Users/Shared/spack/pkgC/bin/exeC', '/Users/Shared/spack', ('/Users/Shared/spack/pkgA/lib', '/Users/Shared/spack/pkgB/lib', '/usr/local/lib'), ('/Users/Shared/spack/pkgA/libA.dylib', '/Users/Shared/spack/pkgB/libB.dylib', '/usr/local/lib/libloco.dylib'), None) assert out == ([ '@loader_path/../../pkgA/lib', '@loader_path/../../pkgB/lib', '/usr/local/lib' ], [ '@loader_path/../../pkgA/libA.dylib', '@loader_path/../../pkgB/libB.dylib', '/usr/local/lib/libloco.dylib' ], None) out = macho_replace_paths( '/Users/Shared/spack', '/Applications/spack', ('/Users/Shared/spack/pkgA/lib', '/Users/Shared/spack/pkgB/lib', '/usr/local/lib'), ('/Users/Shared/spack/pkgA/libA.dylib', '/Users/Shared/spack/pkgB/libB.dylib', '/usr/local/lib/libloco.dylib'), '/Users/Shared/spack/pkgC/lib/libC.dylib') assert out == ([ '/Applications/spack/pkgA/lib', '/Applications/spack/pkgB/lib', '/usr/local/lib' ], [ '/Applications/spack/pkgA/libA.dylib', '/Applications/spack/pkgB/libB.dylib', '/usr/local/lib/libloco.dylib' ], '/Applications/spack/pkgC/lib/libC.dylib') out = macho_replace_paths( '/Users/Shared/spack', '/Applications/spack', ('/Users/Shared/spack/pkgA/lib', '/Users/Shared/spack/pkgB/lib', '/usr/local/lib'), ('/Users/Shared/spack/pkgA/libA.dylib', '/Users/Shared/spack/pkgB/libB.dylib', '/usr/local/lib/libloco.dylib'), None) assert out == ([ '/Applications/spack/pkgA/lib', '/Applications/spack/pkgB/lib', '/usr/local/lib' ], [ '/Applications/spack/pkgA/libA.dylib', '/Applications/spack/pkgB/libB.dylib', '/usr/local/lib/libloco.dylib' ], None)
def test_macho_paths(): out = macho_make_paths_relative('/Users/Shares/spack/pkgC/lib/libC.dylib', '/Users/Shared/spack', ('/Users/Shared/spack/pkgA/lib', '/Users/Shared/spack/pkgB/lib', '/usr/local/lib'), ('/Users/Shared/spack/pkgA/libA.dylib', '/Users/Shared/spack/pkgB/libB.dylib', '/usr/local/lib/libloco.dylib'), '/Users/Shared/spack/pkgC/lib/libC.dylib') assert out == (['@loader_path/../../../../Shared/spack/pkgA/lib', '@loader_path/../../../../Shared/spack/pkgB/lib', '/usr/local/lib'], ['@loader_path/../../../../Shared/spack/pkgA/libA.dylib', '@loader_path/../../../../Shared/spack/pkgB/libB.dylib', '/usr/local/lib/libloco.dylib'], '@rpath/libC.dylib') out = macho_make_paths_relative('/Users/Shared/spack/pkgC/bin/exeC', '/Users/Shared/spack', ('/Users/Shared/spack/pkgA/lib', '/Users/Shared/spack/pkgB/lib', '/usr/local/lib'), ('/Users/Shared/spack/pkgA/libA.dylib', '/Users/Shared/spack/pkgB/libB.dylib', '/usr/local/lib/libloco.dylib'), None) assert out == (['@loader_path/../../pkgA/lib', '@loader_path/../../pkgB/lib', '/usr/local/lib'], ['@loader_path/../../pkgA/libA.dylib', '@loader_path/../../pkgB/libB.dylib', '/usr/local/lib/libloco.dylib'], None) out = macho_replace_paths('/Users/Shared/spack', '/Applications/spack', ('/Users/Shared/spack/pkgA/lib', '/Users/Shared/spack/pkgB/lib', '/usr/local/lib'), ('/Users/Shared/spack/pkgA/libA.dylib', '/Users/Shared/spack/pkgB/libB.dylib', '/usr/local/lib/libloco.dylib'), '/Users/Shared/spack/pkgC/lib/libC.dylib') assert out == (['/Applications/spack/pkgA/lib', '/Applications/spack/pkgB/lib', '/usr/local/lib'], ['/Applications/spack/pkgA/libA.dylib', '/Applications/spack/pkgB/libB.dylib', '/usr/local/lib/libloco.dylib'], '/Applications/spack/pkgC/lib/libC.dylib') out = macho_replace_paths('/Users/Shared/spack', '/Applications/spack', ('/Users/Shared/spack/pkgA/lib', '/Users/Shared/spack/pkgB/lib', '/usr/local/lib'), ('/Users/Shared/spack/pkgA/libA.dylib', '/Users/Shared/spack/pkgB/libB.dylib', '/usr/local/lib/libloco.dylib'), None) assert out == (['/Applications/spack/pkgA/lib', '/Applications/spack/pkgB/lib', '/usr/local/lib'], ['/Applications/spack/pkgA/libA.dylib', '/Applications/spack/pkgB/libB.dylib', '/usr/local/lib/libloco.dylib'], None)