$OpenBSD: patch-qtbase_qmake_generators_unix_unixmake2_cpp,v 1.1.1.1 2014/12/08 20:33:38 zhuk Exp $
1. Un-hardcode system paths.
2. Respect OpenBSD shared library naming rules.
--- qtbase/qmake/generators/unix/unixmake2.cpp.ports.orig	Mon Nov  3 17:43:42 2014
+++ qtbase/qmake/generators/unix/unixmake2.cpp	Tue Nov  4 14:06:19 2014
@@ -83,6 +83,10 @@ UnixMakefileGenerator::writeMakefile(QTextStream &t)
     if (writeDummyMakefile(t))
         return true;
 
+    t << "LOCALBASE=" << LOCALBASE << endl
+      << "X11BASE="   << X11BASE   << endl
+      << endl;
+
     if (project->values("TEMPLATE").first() == "app" ||
         project->values("TEMPLATE").first() == "lib" ||
         project->values("TEMPLATE").first() == "aux") {
@@ -235,13 +239,20 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
             t << "TARGETD       = " << escapeFilePath(var("TARGET_x.y")) << endl;
             t << "TARGET0       = " << escapeFilePath(var("TARGET_")) << endl;
         } else if (!project->isActiveConfig("unversioned_libname")) {
-            t << "TARGET0       = " << escapeFilePath(var("TARGET_")) << endl;
-            if (project->isEmpty("QMAKE_HPUX_SHLIB")) {
-                t << "TARGETD       = " << escapeFilePath(var("TARGET_x.y.z")) << endl;
-                t << "TARGET1       = " << escapeFilePath(var("TARGET_x")) << endl;
-                t << "TARGET2       = " << escapeFilePath(var("TARGET_x.y")) << endl;
+            if (!project->isEmpty("QMAKE_OPENBSD_SHLIB")) {
+                t << "LIB" << var("QMAKE_ORIG_TARGET") << "_VERSION   = "
+                  << project->first("VER_MAJ") << "." << project->first("VER_MIN")
+                  << endl;
+                t << "TARGETD       = " << escapeFilePath(var("TARGET_x.y")) << endl;
             } else {
-                t << "TARGETD       = " << escapeFilePath(var("TARGET_x")) << endl;
+                t << "TARGET0       = " << escapeFilePath(var("TARGET_")) << endl;
+                if (project->isEmpty("QMAKE_HPUX_SHLIB")) {
+                    t << "TARGETD       = " << escapeFilePath(var("TARGET_x.y.z")) << endl;
+                    t << "TARGET1       = " << escapeFilePath(var("TARGET_x")) << endl;
+                    t << "TARGET2       = " << escapeFilePath(var("TARGET_x.y")) << endl;
+                } else {
+                    t << "TARGETD       = " << escapeFilePath(var("TARGET_x")) << endl;
+                }
             }
         }
     }
@@ -574,7 +585,8 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
             if(!project->isEmpty("QMAKE_POST_LINK"))
                 t << "\n\t" << var("QMAKE_POST_LINK");
             t << endl << endl;
-        } else if(project->isEmpty("QMAKE_HPUX_SHLIB")) {
+        } else if(project->isEmpty("QMAKE_HPUX_SHLIB")
+                      && project->isEmpty("QMAKE_OPENBSD_SHLIB")) {
             t << "\n\t";
 
             if (!project->isActiveConfig("unversioned_libname"))
@@ -608,7 +620,22 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
             if(!project->isEmpty("QMAKE_POST_LINK"))
                 t << "\n\t" << var("QMAKE_POST_LINK");
             t << endl << endl;
+        } else if (!project->isEmpty("QMAKE_OPENBSD_SHLIB")) {
+            // OpenBSD-specific shared libraries handling:
+            // libfoo.so.X.Y, without any symlinks.
+            // 
+            t << "\n\t"
+              << "-$(DEL_FILE) $(TARGET)\n\t"
+              << var("QMAKE_LINK_SHLIB_CMD");
+            if(!destdir.isEmpty())
+                t  << "\n\t-$(DEL_FILE) " << destdir << "$(TARGET)"
+                   << "\n\t-$(MOVE) $(TARGET)  " << destdir;
+            if(!project->isEmpty("QMAKE_POST_LINK"))
+                t << "\n\t" << var("QMAKE_POST_LINK");
+            t << endl << endl;
         } else {
+            // HP-UX-specific shared libraries handling:
+            // libfoo.sl.X, with symlink to libfoo.sl.
             t << "\n\t"
               << "-$(DEL_FILE) $(TARGET) $(TARGET0)\n\t"
               << var("QMAKE_LINK_SHLIB_CMD") << "\n\t";
@@ -1125,6 +1152,11 @@ void UnixMakefileGenerator::init2()
                 project->values("TARGET_x").append("lib" + project->first("TARGET") + "." +
                                                         project->first("VER_MAJ"));
             project->values("TARGET") = project->values("TARGET_x");
+        } else if (!project->isEmpty("QMAKE_OPENBSD_SHLIB")) {
+            project->values("TARGET_x.y").append("lib" + project->first("TARGET") +
+                                                      "." + project->first("QMAKE_EXTENSION_SHLIB") + 
+                                                      ".$(LIB" + project->first("TARGET") + "_VERSION)");
+            project->values("TARGET") = project->values("TARGET_x.y");
         } else if (!project->isEmpty("QMAKE_AIX_SHLIB")) {
             project->values("TARGET_").append(project->first("QMAKE_PREFIX_STATICLIB") + project->first("TARGET")
                     + "." + project->first("QMAKE_EXTENSION_STATICLIB"));
@@ -1348,17 +1380,27 @@ UnixMakefileGenerator::writeLibtoolFile()
     t << "\n";
 
     t << "# The name that we can dlopen(3).\n"
-      << "dlname='" << var(project->isActiveConfig("plugin") ? "TARGET" : "TARGET_x")
-      << "'\n\n";
+      << "dlname='";
+    if (project->isActiveConfig("plugin"))
+        t << var("TARGET");
+    else if (!project->isEmpty("QMAKE_OPENBSD_SHLIB"))
+        t << var("TARGET_x.y");
+    else
+        t << var("TARGET_x");
+    t << "'\n\n";
 
     t << "# Names of this library.\n";
     t << "library_names='";
     if(project->isActiveConfig("plugin")) {
         t << var("TARGET");
     } else {
-        if (project->isEmpty("QMAKE_HPUX_SHLIB"))
-            t << var("TARGET_x.y.z") << " ";
-        t << var("TARGET_x") << " " << var("TARGET_");
+        if (!project->isEmpty("QMAKE_OPENBSD_SHLIB")) {
+            t << var("TARGET_x.y") << " ";
+        } else {
+            if (!project->isEmpty("QMAKE_HPUX_SHLIB"))
+                t << var("TARGET_x.y.z") << " ";
+            t << var("TARGET_x") << " " << var("TARGET_");
+        }
     }
     t << "'\n\n";
 
