def test_post_installed_macos(self): output = self._get_output_file() installed = installify(output).path deplib = SharedLibrary(self.Path('libfoo.so'), 'native') install_outputs = MockInstallOutputs(self.env) with mock.patch('bfg9000.shell.which', return_value=['command']): install_name_tool = self.env.tool('install_name_tool') # No runtime deps fn = self.linker.post_install(opts.option_list(), output, None) self.assertEqual(fn(install_outputs), [ install_name_tool, '-id', installed.cross(self.env), installed ] if self.shared else None) fn = self.linker.post_install(opts.option_list( opts.install_name_change('old.dylib', 'new.dylib') ), output, None) self.assertEqual(fn(install_outputs), ( [install_name_tool] + (['-id', installed.cross(self.env)] if self.shared else []) + ['-change', 'old.dylib', 'new.dylib', installed] )) # Dependent on local shared lib output.runtime_deps = [deplib] fn = self.linker.post_install( opts.option_list(opts.lib(deplib)), output, None ) self.assertEqual(fn(install_outputs), ( [install_name_tool] + (['-id', installed.cross(self.env)] if self.shared else []) + ['-change', deplib.path.string(self.env.base_dirs), installify(deplib, cross=self.env).path, installed] ))
def _check(self, kind, src, dst, src_kwargs={}, dst_kwargs={}, directory=None, **kwargs): f = kind(src, **src_kwargs, **kwargs) installed = kind(dst, **dst_kwargs, **kwargs) self.assertSameFile(install.installify(f, directory=directory), installed) for name in ('winnt', 'linux'): env = MockEnv(target.platform_info(name)) dst_kwargs_cross = {k: v.cross(env) if v.destdir else v for k, v in dst_kwargs.items()} installed = kind(dst.cross(env), **dst_kwargs_cross, **kwargs) self.assertSameFile(install.installify( f, directory=directory, cross=env ), installed)
def test_post_installed_linux(self): output = self._get_output_file() shared = SharedLibrary(self.Path('libfoo.so'), 'native') shared_abs = SharedLibrary(self.Path('/path/to/libfoo.so'), 'native') static = StaticLibrary(self.Path('libfoo.a'), 'native') install_outputs = MockInstallOutputs(self.env) with mock.patch('bfg9000.shell.which', return_value=['command']): # Local shared lib fn = self.linker.post_install(opts.option_list(opts.lib(shared)), output, None) self.assertEqual(fn(install_outputs), [ self.env.tool('patchelf'), '--set-rpath', self.Path('', InstallRoot.libdir), installify(output).path ]) # Absolute shared lib fn = self.linker.post_install( opts.option_list(opts.lib(shared_abs)), output, None) self.assertEqual(fn(install_outputs), None) # Local static lib fn = self.linker.post_install(opts.option_list(opts.lib(static)), output, None) self.assertEqual(fn(install_outputs), None) # Explicit rpath dir fn = self.linker.post_install( opts.option_list(opts.rpath_dir(self.Path('/path'))), output, None) self.assertEqual(fn(install_outputs), None) # Mixed fn = self.linker.post_install( opts.option_list(opts.lib(shared), opts.lib(shared_abs), opts.lib(static), opts.rpath_dir(self.Path('/path')), opts.rpath_dir(self.Path('/path/to'))), output, None) self.assertEqual(fn(install_outputs), [ self.env.tool('patchelf'), '--set-rpath', (self.Path('', InstallRoot.libdir) + ':' + self.Path('/path/to') + ':' + self.Path('/path')), installify(output).path ])
def __getitem__(self, key): if key.path.root == Root.absolute or key in self.bad: raise KeyError(key) return installify(key, cross=self.env)