--- 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):
