Example #1
0
    def test_append_rpath_reject_outside_wheel(self, check_call, check_output,
                                               _):
        patcher = Patchelf()
        # When a library has an existing RPATH entry outside wheel_dir
        existing_rpath = b"/outside/wheel/dir"
        check_output.return_value = existing_rpath
        wheel_dir = "/not/outside"
        lib_name = "test.so"
        full_lib_name = os.path.abspath(lib_name)
        append_rpath_within_wheel(lib_name, "$ORIGIN/.lib", wheel_dir, patcher)
        check_output_expected_args = [
            call(["patchelf", "--print-rpath", full_lib_name])
        ]
        # Then that entry is eliminated when updating the RPATH
        check_call_expected_args = [
            call(["patchelf", "--remove-rpath", full_lib_name]),
            call([
                "patchelf",
                "--force-rpath",
                "--set-rpath",
                "$ORIGIN/.lib",
                full_lib_name,
            ]),
        ]

        assert check_output.call_args_list == check_output_expected_args
        assert check_call.call_args_list == check_call_expected_args
Example #2
0
    def test_append_rpath(self, check_call, check_output, _):
        patcher = Patchelf()
        # When a library has an existing RPATH entry within wheel_dir
        existing_rpath = b"$ORIGIN/.existinglibdir"
        check_output.return_value = existing_rpath
        wheel_dir = "."
        lib_name = "test.so"
        full_lib_name = os.path.abspath(lib_name)
        append_rpath_within_wheel(lib_name, "$ORIGIN/.lib", wheel_dir, patcher)
        check_output_expected_args = [
            call(["patchelf", "--print-rpath", full_lib_name])
        ]
        # Then that entry is preserved when updating the RPATH
        check_call_expected_args = [
            call(["patchelf", "--remove-rpath", full_lib_name]),
            call([
                "patchelf",
                "--force-rpath",
                "--set-rpath",
                f"{existing_rpath.decode()}:$ORIGIN/.lib",
                full_lib_name,
            ]),
        ]

        assert check_output.call_args_list == check_output_expected_args
        assert check_call.call_args_list == check_call_expected_args
Example #3
0
    def test_append_rpath_ignore_duplicates(self, check_call, check_output, _):
        patcher = Patchelf()
        # When a library has an existing RPATH entry and we try and append it again
        existing_rpath = b"$ORIGIN"
        check_output.return_value = existing_rpath
        wheel_dir = '.'
        lib_name = "test.so"
        full_lib_name = os.path.abspath(lib_name)
        append_rpath_within_wheel(lib_name, "$ORIGIN", wheel_dir, patcher)
        check_output_expected_args = [call(['patchelf', '--print-rpath',
                                            full_lib_name])]
        # Then that entry is ignored when updating the RPATH
        check_call_expected_args = [call(['patchelf', '--remove-rpath',
                                          full_lib_name]),
                                    call(['patchelf', '--force-rpath',
                                          '--set-rpath',
                                          '$ORIGIN',
                                          full_lib_name])]

        assert check_output.call_args_list == check_output_expected_args
        assert check_call.call_args_list == check_call_expected_args
Example #4
0
    def test_append_rpath_ignore_relative(self, check_call, check_output, _):
        patcher = Patchelf()
        # When a library has an existing RPATH entry but it cannot be resolved
        # to an absolute path, it is eliminated
        existing_rpath = b"not/absolute"
        check_output.return_value = existing_rpath
        wheel_dir = '.'
        lib_name = "test.so"
        full_lib_name = os.path.abspath(lib_name)
        append_rpath_within_wheel(lib_name, "$ORIGIN", wheel_dir, patcher)
        check_output_expected_args = [call(['patchelf', '--print-rpath',
                                            full_lib_name])]
        # Then that entry is ignored when updating the RPATH
        check_call_expected_args = [call(['patchelf', '--remove-rpath',
                                          full_lib_name]),
                                    call(['patchelf', '--force-rpath',
                                          '--set-rpath',
                                          '$ORIGIN',
                                          full_lib_name])]

        assert check_output.call_args_list == check_output_expected_args
        assert check_call.call_args_list == check_call_expected_args