The first hunk puts the catch-all { *; } first in version scripts so it has lowest priority when a symbol matches multiple patterns. The second hunk fixes the install location of the pkconfig files: FreeBSD installs pkgconfig files to $LOCALBASE/libdata/pkgconfig qmake uses QMAKE_PKGCONFIG_DESTDIR as relative path to $$QT_LIBDIR. As this is now '${PREFIX}/lib/qt5' we need to go up two levels. The third hunk stops qmake from generating la files. --- mkspecs/features/qt_module.prf.orig 2018-12-03 11:15:26 UTC +++ mkspecs/features/qt_module.prf @@ -217,17 +217,18 @@ android: CONFIG += qt_android_deps no_linker_version_s internal_module { verscript_content = "Qt_$${QT_MAJOR_VERSION}_PRIVATE_API { *; };" } else { - verscript_content = "Qt_$${QT_MAJOR_VERSION}_PRIVATE_API {" \ - " qt_private_api_tag*;" + current = Qt_$$QT_MAJOR_VERSION + verscript_content = "$$current { *; };" + verscript_content += "Qt_$${QT_MAJOR_VERSION}_PRIVATE_API {" \ + " qt_private_api_tag*;" + private_api_headers = $$SYNCQT.PRIVATE_HEADER_FILES $$SYNCQT.QPA_HEADER_FILES for(header, private_api_headers): \ verscript_content += " @FILE:$$header@" verscript_content += "};" - current = Qt_$$QT_MAJOR_VERSION - verscript_content += "$$current { *; };" isEmpty(QT_NAMESPACE): tag_symbol = qt_version_tag else: tag_symbol = qt_version_tag_$$QT_NAMESPACE @@ -266,7 +267,7 @@ load(qt_targets) # this builds on top of qt_common !internal_module:if(unix|mingw) { CONFIG += create_pc - QMAKE_PKGCONFIG_DESTDIR = pkgconfig + QMAKE_PKGCONFIG_DESTDIR = ../../libdata/pkgconfig host_build: \ QMAKE_PKGCONFIG_LIBDIR = $$[QT_HOST_LIBS] else: \ @@ -291,7 +292,6 @@ load(qt_targets) QMAKE_PKGCONFIG_INSTALL_REPLACE += pclib_replace } !lib_bundle:unix { - CONFIG += create_libtool host_build: \ QMAKE_LIBTOOL_LIBDIR = $$[QT_HOST_LIBS] else: \