--- mkspecs/features/qt_functions.prf.orig	2013-02-11 08:39:31.000000000 -0500
+++ mkspecs/features/qt_functions.prf	2013-02-12 10:57:03.000000000 -0500
@@ -16,35 +16,108 @@
 }
 
 defineTest(qtAddLibrary) {
+#    message(qtAddLibrary: 'LIBS' before $$1 is '$${LIBS}')
+#    message(qtAddLibrary: 'INCLUDEPATH' before $$1 is '$${INCLUDEPATH}')
+#    message(qtAddLibrary: 'QMAKE_LFLAGS' before $$1 is '$${QMAKE_LFLAGS}')
+
+    # reorder the includes path: user, this library, Qt headers
+    INCLUDEPATH -= $$QMAKE_INCDIR_QT
     INCLUDEPATH -= $$QMAKE_INCDIR_QT/$$1
-    INCLUDEPATH = $$QMAKE_INCDIR_QT/$$1 $$INCLUDEPATH
+    INCLUDEPATH += $$QMAKE_INCDIR_QT/$$1 $$QMAKE_INCDIR_QT
+
+    # first time through, append the path for Qt's installed libraries:
+    # -after- all of the other necessary libraries and paths
+
+    mac:!static:contains(QT_CONFIG, qt_framework) {
+      isEmpty(QMAKE_FRAMEWORKDIR_QT) {
+         !contains(LIBS,-F$$[QT_INSTALL_PREFIX]/Library/Frameworks) {
+	   LIBS = $$LIBS -F$$[QT_INSTALL_PREFIX]/Library/Frameworks
+	 }
+      } else {
+        !contains(LIBS,-F$$QMAKE_FRAMEWORKDIR_QT) {
+ 	  LIBS = $$LIBS -F$$QMAKE_FRAMEWORKDIR_QT
+	}
+      }
+      isEmpty(QMAKE_LIBDIR_QT) {
+         !contains(LIBS,-F$$[QT_INSTALL_PREFIX]/lib) {
+	   LIBS = $$LIBS -F$$[QT_INSTALL_PREFIX]/lib
+	 }
+      } else {
+        !contains(LIBS,-F$$QMAKE_LIBDIR_QT) {
+ 	  LIBS = $$LIBS -F$$QMAKE_LIBDIR_QT
+	}
+      }
+    }
+    isEmpty(QMAKE_LIBDIR_QT) {
+       !contains(LIBS,-L$$[QT_INSTALL_PREFIX]/lib) {
+         LIBS = $$LIBS -L$$[QT_INSTALL_PREFIX]/lib
+       }
+    } else {
+      !contains(LIBS,-L$$QMAKE_LIBDIR_QT) {
+        LIBS = $$LIBS -L$$QMAKE_LIBDIR_QT
+      }
+    }
 
     LIB_NAME = $$1
     unset(LINKAGE)
-    mac {
-       CONFIG(qt_framework, qt_framework|qt_no_framework) { #forced
-          QMAKE_FRAMEWORKPATH *= $${QMAKE_LIBDIR_QT}
-          FRAMEWORK_INCLUDE = $$QMAKE_LIBDIR_QT/$${LIB_NAME}.framework/Headers
-          !qt_no_framework_direct_includes:exists($$FRAMEWORK_INCLUDE) {
-             INCLUDEPATH -= $$FRAMEWORK_INCLUDE
-             INCLUDEPATH = $$FRAMEWORK_INCLUDE $$INCLUDEPATH
-           }
-           LINKAGE = -framework $${LIB_NAME}$${QT_LIBINFIX}
-        } else:!qt_no_framework { #detection
-           for(frmwrk_dir, $$list($$QMAKE_LIBDIR_QT $$QMAKE_LIBDIR $$(DYLD_FRAMEWORK_PATH) /Library/Frameworks)) {
-       	      exists($${frmwrk_dir}/$${LIB_NAME}.framework) {
-                QMAKE_FRAMEWORKPATH *= $${frmwrk_dir}
+
+    # see if the framework, and exists in the current known paths
+
+    # add LIBS entries QMAKE_FRAMEWORKPATH, as appropriate
+
+    all_frmwrks = $$find(LIBS, -F.*) $$find(QMAKE_LFLAGS, -F.*)
+#    message(qtAddLibrary: all frameworks is $$all_frmwrks)
+
+    for(frmwrk_dir, all_frmwrks) {
+
+#      message(qtAddLibrary: this frmwrk_dir is $$frmwrk_dir)
+      tfp = $$frmwrk_dir
+      tfp ~= s,-F,,
+      QMAKE_FRAMEWORKPATH *= $$tfp
+#      message(qtAddLibrary: this frmwrk_path is $$tfp)
+
+    }
+
+    mac:!qt_no_framework {
+       for(frmwrk_dir, $$list($$QMAKE_FRAMEWORKPATH $$QMAKE_FRAMEWORKDIR_QT $$QMAKE_LIBDIR_QT $$QMAKE_LIBDIR $$(DYLD_FRAMEWORK_PATH))) {
+
+#           message(qtAddLibrary: looking for framework $$LIB_NAME in directory $$frmwrk_dir)
+           exists($${frmwrk_dir}/$${LIB_NAME}.framework) {
+
+                message(qtAddLibrary: found framework $$LIB_NAME in directory $$frmwrk_dir)
     	        FRAMEWORK_INCLUDE = $$frmwrk_dir/$${LIB_NAME}.framework/Headers
     	        !qt_no_framework_direct_includes:exists($$FRAMEWORK_INCLUDE) {
     	          INCLUDEPATH -= $$FRAMEWORK_INCLUDE
     	          INCLUDEPATH = $$FRAMEWORK_INCLUDE $$INCLUDEPATH
                 }
     	        LINKAGE = -framework $${LIB_NAME}
+
+# Apple's ld has provided "-framework name,option" since at least
+# 10.4, allowing linking with a framework's option name if it exists
+# -- but defaulting to the basic name if it exists (and if neither
+# exists, then generating an error).  All GCC, LLVM, CLANG, and Apple
+# compilers available in Xcode or MacPorts back to 10.4 seem to parse
+# this feature correctly when compiling, as well as pass it through to
+# Apple's ld.  Apple used to provide debug kernel frameworks and
+# libraries that could be used by setting the shell environment variable:
+#    DYLD_IMAGE_SUFFIX=_debug
+# but Apple hasn't done so since 10.6, and does not look to be doing
+# so any time soon.  Hence, the below use of the optional framework
+# name is really the best way to link to and use debug frameworks.  For
+# QtWebKit, which has no debug version, only the main library will
+# ever be found and used.
+
+		if(!debug_and_release|build_pass):CONFIG(debug, debug|release) {
+			LINKAGE = $${LINKAGE},_debug
+		}
        	        break()
+
               }
-           }
-       }
+         }
     }
+
+    # special for symbian
+
     symbian {
         isEqual(LIB_NAME, QtCore) {
             #workaround for dependency from f32file.h on e32svr.h which has moved location in symbian3
@@ -70,10 +143,56 @@
         export(TARGET.EPOCHEAPSIZE)
         export(TARGET.CAPABILITY)
     }
+
     isEmpty(LINKAGE) {
+
+      # not a framework or symbian
+      # see if the library exists in the current known paths
+
+      # add LIBS entries QMAKE_LIBPATH, as appropriate
+
+      all_libs = $$find(LIBS, -L.*) $$find(QMAKE_LFLAGS, -L.*)
+#      message(qtAddLibrary: all library paths is $$all_libs)
+
+      for(lib_dir, all_libs) {
+
+#        message(qtAddLibrary: this lib_dir is $$lib_dir)
+        tlp = $$lib_dir
+        tlp ~= s,-L,,
+        QMAKE_LIBPATH *= $$tlp
+#        message(qtAddLibrary: this lib_path is $$tlp)
+
+      }
+
+      for(lib_dir, $$list($$QMAKE_LIBPATH $$QMAKE_LIBDIR_QT $$QMAKE_LIBDIR)) {
+
+#           message(qtAddLibrary: looking for library $${LIB_NAME}$${QT_LIBINFIX} in directory $$lib_dir)
+           exists($${lib_dir}/lib$${LIB_NAME}$${QT_LIBINFIX}.*) {
+
+                message(qtAddLibrary: found library $${LIB_NAME}$${QT_LIBINFIX} in directory $$lib_dir)
+    	        LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}
+       	        break()
+
+              }
+         }
+    }
+
+    isEmpty(LINKAGE) {
+
+       message(WARNING: Could not find library or framework $$LIB_NAME in the current known search directories; assuming a default library.)
+
        if(!debug_and_release|build_pass):CONFIG(debug, debug|release) {
            win32:LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}d
-           mac:LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}_debug
+	   # special for mac: cannot build QtWebKit as debug,
+	   # no-framework, and universal.  If things got here,
+	   # then this is no-framwork; just take care of the rest.
+	   mac {
+	       contains(QT_CONFIG, x86):contains(QT_CONFIG, x86_64):isEqual(LIB_NAME, QtWebKit) {
+	           LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}
+	       } else {
+                   LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}_debug
+               }
+           }
        }
        isEmpty(LINKAGE):LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}
     }
@@ -83,9 +202,13 @@
         QMAKE_LFLAGS *= --lsb-shared-libs=$${LIB_NAME}$${QT_LIBINFIX}
     }
     LIBS += $$LINKAGE
+#    message(qtAddLibrary: 'LIBS' after $$1 is now '$${LIBS}')
+#    message(qtAddLibrary: 'INCLUDEPATH' after $$1 is now '$${INCLUDEPATH}')
+#    message(qtAddLibrary: 'QMAKE_LFLAGS' after $$1 is now '$${QMAKE_LFLAGS}')
     export(LIBS)
     export(INCLUDEPATH)
     export(QMAKE_FRAMEWORKPATH)
+    export(QMAKE_LIBPATH)
     export(QMAKE_LFLAGS)
     return(true)
 }
@@ -119,4 +242,3 @@
 
     return(true)
 }
-
