[103430] trunk/dports/aqua/qt4-mac

michaelld at macports.org michaelld at macports.org
Mon Feb 25 09:53:31 PST 2013


Revision: 103430
          https://trac.macports.org/changeset/103430
Author:   michaelld at macports.org
Date:     2013-02-25 09:53:31 -0800 (Mon, 25 Feb 2013)
Log Message:
-----------
qt4-mac:

* remove silly rev-bump warning: que sera, sera!

* In QMake (the executable):

+  enable correct "-framework foo,bar" parsing as specified by Apple's LD when searching for QMake .prl files;

+  remove "/Library/Frameworks" as a default search path;

+  use "PREFIX/Library/Frameworks" and "PREFIX/lib" as a default search paths, where PREFIX is the MacPorts' install prefix.

Modified Paths:
--------------
    trunk/dports/aqua/qt4-mac/Portfile

Added Paths:
-----------
    trunk/dports/aqua/qt4-mac/files/patch-qmake_generators_unix_unixmakke.cpp.diff

Modified: trunk/dports/aqua/qt4-mac/Portfile
===================================================================
--- trunk/dports/aqua/qt4-mac/Portfile	2013-02-25 17:32:16 UTC (rev 103429)
+++ trunk/dports/aqua/qt4-mac/Portfile	2013-02-25 17:53:31 UTC (rev 103430)
@@ -16,15 +16,8 @@
 #conflicts           qt3 qt3-mac qt4-mac-devel
 conflicts           qt3 qt3-mac
 version             4.8.4
+revision            6
 
-# NOTE: Before doing a rev-bump due to an external dependency, please
-# contact the maintainer and have him/her do it.  I often have other
-# changes to put in place, but hold off doing so until either a
-# rev-bump is necessary or I have some critical changes.  Rebuilding
-# qt4-mac is quite time consuming, so I make every reasonable effort
-# to  require rebuilding it no more often than necessary.  Thanks!
-revision            5
-
 categories          aqua
 platforms           macosx
 maintainers         michaelld openmaintainer
@@ -144,6 +137,14 @@
 
 patchfiles-append   patch-qmake_project.cpp.diff
 
+# (10.1) In QMake: (a) enable correct "-framework foo,bar" parsing as
+# specified by Apple's LD; (b) disable "/Library/Frameworks" as a
+# default search path; use "PREFIX/Library/Frameworks" and replace
+# PREFIX in post-patch.  Also set "PREFIX/lib" as a default library
+# search path.
+
+patchfiles-append   patch-qmake_generators_unix_unixmakke.cpp.diff
+
 # (11) Allow easy replacement of MACOSX_DEPLOYMENT_TARGET: build for
 # just the user's current OS.
 
@@ -329,6 +330,11 @@
     reinplace "s, at QT_PLUGINS_DIR@,${qt_plugins_dir},g" \
         ${worksrcpath}/tools/macdeployqt/macdeployqt/main.cpp
 
+    # fix PREFIX in QMake makefile generator
+
+    reinplace "s, at PREFIX@,${qt_dir},g" \
+        ${worksrcpath}/qmake/generators/unix/unixmake.cpp
+
     # if no debug, then do not even build debug code
 
     if {![variant_isset debug]} {

Added: trunk/dports/aqua/qt4-mac/files/patch-qmake_generators_unix_unixmakke.cpp.diff
===================================================================
--- trunk/dports/aqua/qt4-mac/files/patch-qmake_generators_unix_unixmakke.cpp.diff	                        (rev 0)
+++ trunk/dports/aqua/qt4-mac/files/patch-qmake_generators_unix_unixmakke.cpp.diff	2013-02-25 17:53:31 UTC (rev 103430)
@@ -0,0 +1,108 @@
+--- qmake/generators/unix/unixmake.cpp.orig	2013-02-24 21:46:23.000000000 -0500
++++ qmake/generators/unix/unixmake.cpp	2013-02-25 11:40:24.000000000 -0500
+@@ -472,8 +472,9 @@
+ UnixMakefileGenerator::findLibraries()
+ {
+     QList<QMakeLocalFileName> libdirs, frameworkdirs;
++    frameworkdirs.append(QMakeLocalFileName("@PREFIX@/Library/Frameworks"));
+     frameworkdirs.append(QMakeLocalFileName("/System/Library/Frameworks"));
+-    frameworkdirs.append(QMakeLocalFileName("/Library/Frameworks"));
++    libdirs.append(QMakeLocalFileName("@PREFIX@/lib"));
+     const QString lflags[] = { "QMAKE_LIBDIR_FLAGS", "QMAKE_FRAMEWORKPATH_FLAGS", "QMAKE_LFLAGS", "QMAKE_LIBS", "QMAKE_LIBS_PRIVATE", QString() };
+     for(int i = 0; !lflags[i].isNull(); i++) {
+         QStringList &l = project->values(lflags[i]);
+@@ -583,7 +584,9 @@
+ UnixMakefileGenerator::processPrlFiles()
+ {
+     QList<QMakeLocalFileName> libdirs, frameworkdirs;
++    frameworkdirs.append(QMakeLocalFileName("@PREFIX@/Library/Frameworks"));
+     frameworkdirs.append(QMakeLocalFileName("/System/Library/Frameworks"));
++    libdirs.append(QMakeLocalFileName("@PREFIX@/lib"));
+     const QString lflags[] = { "QMAKE_LIBDIR_FLAGS", "QMAKE_FRAMEWORKPATH_FLAGS", "QMAKE_LFLAGS", "QMAKE_LIBS", QString() };
+     for(int i = 0; !lflags[i].isNull(); i++) {
+         QStringList &l = project->values(lflags[i]);
+@@ -627,13 +630,78 @@
+                     else
+                         opt = l.at(++lit);
+                     opt = opt.trimmed();
+-                    const QList<QMakeLocalFileName> dirs = frameworkdirs + libdirs;
+-                    for(int dep_i = 0; dep_i < dirs.size(); ++dep_i) {
++
++		    // See if this framework is specified as
++		    // "foo,bar", which to Apple's LD means to look
++		    // for "foo" with the addition "bar" first in all
++		    // paths, then if not found do the same for just
++		    // "foo".  Tricky looking for "," but not "\,"
++
++#if 0
++		    warn_msg(WarnLogic, "out before: '%s'\n", opt.toLatin1().constData());
++#endif
++		    int num_cs = 0;
++		    int loc_1 = -1;
++		    int loc = opt.indexOf(",");
++		    bool found = false;
++		    while (!found && (loc != -1)) { 
++		      found = (loc == 0);
++		      if (!found) {
++			found = (opt[loc-1] != '\\');
++		      }
++		      if (found) {
++			if (loc_1 == -1) {
++			  loc_1 = loc;
++			}
++			++num_cs;
++		      } else {
++			loc = opt.indexOf(",", loc);
++		      }
++		    }
++#if 0
++		    warn_msg(WarnLogic, "found == %s, loc == %d\n",
++			     (found ? "true" : "false"), loc);
++#endif
++		    if (found) {
++		      // split into name and extension
++		      if (num_cs > 1) {
++			warn_msg(WarnLogic, "When parsing -framework '%s', found more than one ',' in the name.  Assuming the first ',' is used to delineate between the framework name and the optional extension.\n", opt.toLatin1().constData());
++		      }
++		      QString ext = opt.mid(loc_1+1);
++		      opt = opt.left(loc_1);
++		      found = false;
++		      const QList<QMakeLocalFileName> dirs = frameworkdirs + libdirs;
++		      for(int dep_i = 0; dep_i < dirs.size(); ++dep_i) {
++                        QString prl = dirs[dep_i].local() + "/" + opt + ".framework/" + opt + ext + Option::prl_ext;
++#if 0
++			warn_msg(WarnLogic, "Looking for PRL '%s'\n", prl.toLatin1().constData());
++#endif
++                        if(processPrlFile(prl)) {
++#if 0
++			  warn_msg(WarnLogic, "Found PRL for framework '%s' with optional extension '%s': '%s'\n", opt.toLatin1().constData(), ext.toLatin1().constData(), prl.toLatin1().constData());
++#endif
++			  found = true;
++			  break;
++			}
++		      }
++		    }
++		    // if not found yet, try the primary name
++		    if (!found) {
++		      const QList<QMakeLocalFileName> dirs = frameworkdirs + libdirs;
++		      for(int dep_i = 0; dep_i < dirs.size(); ++dep_i) {
+                         QString prl = dirs[dep_i].local() + "/" + opt + ".framework/" + opt + Option::prl_ext;
+-                        if(processPrlFile(prl))
+-                            break;
+-                    }
+-                }
++#if 0
++			warn_msg(WarnLogic, "Looking for PRL '%s'\n", prl.toLatin1().constData());
++#endif
++                        if(processPrlFile(prl)) {
++#if 0
++			  warn_msg(WarnLogic, "Found PRL for framework '%s': '%s'\n", opt.toLatin1().constData(), prl.toLatin1().constData());
++#endif
++			  break;
++			}
++		      }
++		    }
++		}
+             } else if(!opt.isNull()) {
+                 QString lib = opt;
+                 processPrlFile(lib);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20130225/47e5c62d/attachment.html>


More information about the macports-changes mailing list