Exemplo n.º 1
0
    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]
            ))
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
    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
            ])
Exemplo n.º 4
0
 def __getitem__(self, key):
     if key.path.root == Root.absolute or key in self.bad:
         raise KeyError(key)
     return installify(key, cross=self.env)