summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>2014-04-23 16:26:26 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-04-25 06:34:17 +0200
commita162a3cbbc3c27b42c86f870aba051a408f04ed4 (patch)
tree29e7f3c930c341319e86285d4e86e413f851ca23
parent06fef71775c187de690dc54749956bad62cda2f5 (diff)
Android: Add "unversioned_libname" configuration
On Android, there's a limitation set on the names of the libraries you deploy that they must start with "lib" and end with ".so", so Android apps will link against and deploy with the unversioned libQt5FooBar.so libraries. When cross-compiling on Windows however, due to the lack of symbolic links, the only installed library used to be the main library target "libQt5FooBar.so.X.Y.Z" (for version X.Y.Z.) This has been worked around in packaging, but breaks building add-on modules on top of Qt, and is clearly wrong. This patch introduces a new "unversioned_libname" configuration in qmake which is currently only supported for the Unix makefile generator and only enabled for Android builds. When it is enabled, only the unversioned library "libQt5FooBar.so" will be created. Task-number: QTBUG-38347 Change-Id: Ia8897ca7a23a62e2a526d0e02854899b02eb19dc Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
-rw-r--r--mkspecs/android-g++/qmake.conf2
-rw-r--r--qmake/generators/unix/unixmake.cpp4
-rw-r--r--qmake/generators/unix/unixmake2.cpp70
3 files changed, 50 insertions, 26 deletions
diff --git a/mkspecs/android-g++/qmake.conf b/mkspecs/android-g++/qmake.conf
index 44624fcca5..c9497edfad 100644
--- a/mkspecs/android-g++/qmake.conf
+++ b/mkspecs/android-g++/qmake.conf
@@ -3,7 +3,7 @@ MAKEFILE_GENERATOR = UNIX
QMAKE_PLATFORM = android
QMAKE_COMPILER = gcc
-CONFIG += android_install unversioned_soname android_deployment_settings
+CONFIG += android_install unversioned_soname unversioned_libname android_deployment_settings
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
diff --git a/qmake/generators/unix/unixmake.cpp b/qmake/generators/unix/unixmake.cpp
index 4c3df4efe8..5ea47cc867 100644
--- a/qmake/generators/unix/unixmake.cpp
+++ b/qmake/generators/unix/unixmake.cpp
@@ -749,7 +749,9 @@ UnixMakefileGenerator::defaultInstall(const QString &t)
target = "$(QMAKE_TARGET)";
} else if(project->first("TEMPLATE") == "lib") {
if(project->isEmpty("QMAKE_CYGWIN_SHLIB")) {
- if(!project->isActiveConfig("staticlib") && !project->isActiveConfig("plugin")) {
+ if (!project->isActiveConfig("staticlib")
+ && !project->isActiveConfig("plugin")
+ && !project->isActiveConfig("unversioned_libname")) {
if(project->isEmpty("QMAKE_HPUX_SHLIB")) {
links << "$(TARGET0)" << "$(TARGET1)" << "$(TARGET2)";
} else {
diff --git a/qmake/generators/unix/unixmake2.cpp b/qmake/generators/unix/unixmake2.cpp
index 6e08c138ed..a28760015e 100644
--- a/qmake/generators/unix/unixmake2.cpp
+++ b/qmake/generators/unix/unixmake2.cpp
@@ -234,14 +234,15 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
if(!project->isEmpty("QMAKE_BUNDLE")) {
t << "TARGETD = " << escapeFilePath(var("TARGET_x.y")) << endl;
t << "TARGET0 = " << escapeFilePath(var("TARGET_")) << endl;
- } else if(project->isEmpty("QMAKE_HPUX_SHLIB")) {
- t << "TARGETD = " << escapeFilePath(var("TARGET_x.y.z")) << endl;
- t << "TARGET0 = " << escapeFilePath(var("TARGET_")) << endl;
- t << "TARGET1 = " << escapeFilePath(var("TARGET_x")) << endl;
- t << "TARGET2 = " << escapeFilePath(var("TARGET_x.y")) << endl;
- } else {
- t << "TARGETD = " << escapeFilePath(var("TARGET_x")) << 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;
+ } else {
+ t << "TARGETD = " << escapeFilePath(var("TARGET_x")) << endl;
+ }
}
}
writeExtraCompilerVariables(t);
@@ -574,22 +575,36 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
t << "\n\t" << var("QMAKE_POST_LINK");
t << endl << endl;
} else if(project->isEmpty("QMAKE_HPUX_SHLIB")) {
- t << "\n\t"
- << "-$(DEL_FILE) $(TARGET) $(TARGET0) $(TARGET1) $(TARGET2)\n\t"
- << var("QMAKE_LINK_SHLIB_CMD") << "\n\t";
- t << varGlue("QMAKE_LN_SHLIB","-"," "," $(TARGET) $(TARGET0)") << "\n\t"
- << varGlue("QMAKE_LN_SHLIB","-"," "," $(TARGET) $(TARGET1)") << "\n\t"
- << varGlue("QMAKE_LN_SHLIB","-"," "," $(TARGET) $(TARGET2)");
- if(!destdir.isEmpty())
+ t << "\n\t";
+
+ if (!project->isActiveConfig("unversioned_libname"))
+ t << "-$(DEL_FILE) $(TARGET) $(TARGET0) $(TARGET1) $(TARGET2)";
+ else
+ t << "-$(DEL_FILE) $(TARGET)";
+
+ t << "\n\t" << var("QMAKE_LINK_SHLIB_CMD");
+
+ if (!project->isActiveConfig("unversioned_libname")) {
+ t << "\n\t"
+ << varGlue("QMAKE_LN_SHLIB","-"," "," $(TARGET) $(TARGET0)") << "\n\t"
+ << varGlue("QMAKE_LN_SHLIB","-"," "," $(TARGET) $(TARGET1)") << "\n\t"
+ << varGlue("QMAKE_LN_SHLIB","-"," "," $(TARGET) $(TARGET2)");
+ }
+ if (!destdir.isEmpty()) {
t << "\n\t"
<< "-$(DEL_FILE) " << destdir << "$(TARGET)\n\t"
- << "-$(DEL_FILE) " << destdir << "$(TARGET0)\n\t"
- << "-$(DEL_FILE) " << destdir << "$(TARGET1)\n\t"
- << "-$(DEL_FILE) " << destdir << "$(TARGET2)\n\t"
- << "-$(MOVE) $(TARGET) " << destdir << " \n\t"
- << "-$(MOVE) $(TARGET0) " << destdir << " \n\t"
- << "-$(MOVE) $(TARGET1) " << destdir << " \n\t"
- << "-$(MOVE) $(TARGET2) " << destdir << " \n\t";
+ << "-$(MOVE) $(TARGET) " << destdir << " ";
+
+ if (!project->isActiveConfig("unversioned_libname")) {
+ t << "\n\t"
+ << "-$(DEL_FILE) " << destdir << "$(TARGET0)\n\t"
+ << "-$(DEL_FILE) " << destdir << "$(TARGET1)\n\t"
+ << "-$(DEL_FILE) " << destdir << "$(TARGET2)\n\t"
+ << "-$(MOVE) $(TARGET0) " << destdir << " \n\t"
+ << "-$(MOVE) $(TARGET1) " << destdir << " \n\t"
+ << "-$(MOVE) $(TARGET2) " << destdir << " ";
+ }
+ }
if(!project->isEmpty("QMAKE_POST_LINK"))
t << "\n\t" << var("QMAKE_POST_LINK");
t << endl << endl;
@@ -924,8 +939,12 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
} else if(!project->isActiveConfig("staticlib") && project->values("QMAKE_APP_FLAG").isEmpty() &&
!project->isActiveConfig("plugin")) {
t << "\t-$(DEL_FILE) " << destdir << "$(TARGET) \n";
- t << "\t-$(DEL_FILE) " << destdir << "$(TARGET0) " << destdir << "$(TARGET1) "
- << destdir << "$(TARGET2) $(TARGETA)\n";
+ if (!project->isActiveConfig("unversioned_libname")) {
+ t << "\t-$(DEL_FILE) " << destdir << "$(TARGET0) " << destdir << "$(TARGET1) "
+ << destdir << "$(TARGET2) $(TARGETA)\n";
+ } else {
+ t << "\t-$(DEL_FILE) $(TARGETA)\n";
+ }
} else {
t << "\t-$(DEL_FILE) " << destdir << "$(TARGET) \n";
}
@@ -1165,7 +1184,10 @@ void UnixMakefileGenerator::init2()
project->first("VER_MIN") + "." +
project->first("VER_PAT"));
}
- project->values("TARGET") = project->values("TARGET_x.y.z");
+ if (project->isActiveConfig("unversioned_libname"))
+ project->values("TARGET") = project->values("TARGET_");
+ else
+ project->values("TARGET") = project->values("TARGET_x.y.z");
}
if(project->isEmpty("QMAKE_LN_SHLIB"))
project->values("QMAKE_LN_SHLIB").append("ln -s");