commit d4c5a6482b0c2cc8b6f55ca9dce62d7652451942
Author: Jasper Lievisse Adriaanse <jasper@humppa.nl>
Date:   Fri Nov 18 12:01:22 2011 +0100

    OpenBSD uses it's own libtool implementation which breaks giscanner in certain
    situations. So adjust resolve_non_libtool() in this case.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=664282

diff --git a/giscanner/shlibs.py b/giscanner/shlibs.py
index b367d8e..4d5ccf7 100644
--- a/giscanner/shlibs.py
+++ b/giscanner/shlibs.py
@@ -23,6 +23,7 @@ import os
 import re
 import platform
 import subprocess
+import os
 
 from .utils import get_libtool_command, extract_libtool_shlib
 
@@ -68,6 +69,19 @@ def _resolve_non_libtool(options, binary, libraries):
     if not libraries:
         return []
 
+    if os.uname()[0] == 'OpenBSD':
+        # Hack for OpenBSD when using the ports' libtool which uses slightly
+        # different directories to store the libraries in. So rewite binary.args[0]
+        # by inserting '.libs/'.
+        old_argdir = binary.args[0]
+        new_libsdir = os.path.join(os.path.dirname(binary.args[0]), '.libs')
+        new_lib = new_libsdir + os.path.basename(binary.args[0])
+        if os.path.exists(new_lib):
+            binary.args[0] = new_lib
+            os.putenv('LD_LIBRARY_PATH', new_libsdir)
+        else:
+            binary.args[0] = old_argdir
+
     if os.name == 'nt':
         shlibs = []
 
