--- giscanner/ccompiler.py.orig +++ giscanner/ccompiler.py @@ -184,7 +184,7 @@ if os.name == 'nt': runtime_path_envvar = ['LIB', 'PATH'] else: - runtime_path_envvar = ['LD_LIBRARY_PATH', 'DYLD_FALLBACK_LIBRARY_PATH'] if not lib_dirs_envvar else [lib_dirs_envvar] + runtime_path_envvar = ['DYLD_LIBRARY_PATH'] if not lib_dirs_envvar else [lib_dirs_envvar] # Search the current directory first # (This flag is not supported nor needed for Visual C++) args.append('-L.') --- giscanner/dumper.py.orig +++ giscanner/dumper.py @@ -236,8 +236,28 @@ args.extend(sources) - pkg_config_libs = pkgconfig.libs(self._packages, - msvc_syntax=self._compiler.check_is_msvc()) + pkg_config_libs, pkg_config_libs_only_L = pkgconfig.libs( + self._packages, msvc_syntax=self._compiler.check_is_msvc()) + this_L = [lib[len('-L'):] for lib in pkg_config_libs_only_L] + + # uniquely merge pkg_config and options library paths + self._options.library_paths = list (set().union (self._options.library_paths, + this_L)) + + # remove anything in LIBRARY_PATH + env_LIBRARY_PATH = os.environ['LIBRARY_PATH'].split(':') if \ + 'LIBRARY_PATH' in os.environ else [] + self._options.library_paths = [l for l in self._options.library_paths + if l not in env_LIBRARY_PATH] + + if os.name == 'nt': + runtime_path_envvar = ['LIB', 'PATH'] + else: + runtime_path_envvar = ['LIBRARY_PATH'] + for envvar in runtime_path_envvar: + os.environ[envvar] = os.pathsep.join \ + (list (set().union (os.environ[envvar].split(':'), this_L))) \ + if envvar in os.environ else os.pathsep.join(this_L) if not self._options.external_library: self._compiler.get_internal_link_flags(args, --- giscanner/pkgconfig.py.orig +++ giscanner/pkgconfig.py @@ -52,10 +52,15 @@ def libs(packages, msvc_syntax=False, ignore_errors=True, command=None): flags = ['--msvc-syntax'] if msvc_syntax else [] - flags.append('--libs') + flags.append('--libs-only-l') + flags.append('--libs-only-other') flags.extend(packages) - out = check_output(flags, ignore_errors, command) - return shlex.split(out) + out_libs_only_not_L = shlex.split(check_output(flags, ignore_errors, command)) + flags = ['--msvc-syntax'] if msvc_syntax else [] + flags.append('--libs-only-L') + flags.extend(packages) + out_libs_only_L = shlex.split(check_output(flags, ignore_errors, command)) + return out_libs_only_not_L, out_libs_only_L def bindir(packages, ignore_errors=True, command=None):