diff options
-rwxr-xr-x | configure | 80 | ||||
-rw-r--r-- | src/corelib/global/qlibraryinfo.cpp | 2 | ||||
-rw-r--r-- | tools/configure/configureapp.cpp | 71 | ||||
-rw-r--r-- | tools/configure/configureapp.h | 2 |
4 files changed, 150 insertions, 5 deletions
@@ -384,6 +384,16 @@ filterLibraryOptions() filterPathOptions -L "$DEFAULT_LIBDIRS" } +substPrefix() +{ + base=${1#$QT_SYSROOT_PREFIX} + if [ x"$base" != x"$1" ]; then + echo "$QT_EXT_PREFIX$base" + else + echo "$1" + fi +} + #------------------------------------------------------------------------------- # device options #------------------------------------------------------------------------------- @@ -1014,6 +1024,7 @@ QT_HOST_PREFIX= QT_HOST_BINS= QT_HOST_LIBS= QT_HOST_DATA= +QT_EXT_PREFIX= #flags for SQL drivers QT_CFLAGS_PSQL= @@ -1139,6 +1150,7 @@ while [ "$#" -gt 0 ]; do -hostdatadir| \ -hostbindir| \ -hostlibdir| \ + -extprefix| \ -sysroot| \ -depths| \ -make| \ @@ -1347,6 +1359,9 @@ while [ "$#" -gt 0 ]; do hostlibdir) QT_HOST_LIBS="$VAL" ;; + extprefix) + QT_EXT_PREFIX="$VAL" + ;; pkg-config) if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then CFG_PKGCONFIG="$VAL" @@ -3174,6 +3189,39 @@ if [ -z "$QT_INSTALL_TESTS" ]; then #default fi QT_INSTALL_TESTS=`"$relpath/config.tests/unix/makeabs" "$QT_INSTALL_TESTS"` +#------- sysroot-external install paths -------- + +QT_SYSROOT_PREFIX=$QT_INSTALL_PREFIX +QT_SYSROOT_DOCS=$QT_INSTALL_DOCS +QT_SYSROOT_HEADERS=$QT_INSTALL_HEADERS +QT_SYSROOT_LIBS=$QT_INSTALL_LIBS +QT_SYSROOT_LIBEXECS=$QT_INSTALL_LIBEXECS +QT_SYSROOT_BINS=$QT_INSTALL_BINS +QT_SYSROOT_PLUGINS=$QT_INSTALL_PLUGINS +QT_SYSROOT_IMPORTS=$QT_INSTALL_IMPORTS +QT_SYSROOT_QML=$QT_INSTALL_QML +QT_SYSROOT_ARCHDATA=$QT_INSTALL_ARCHDATA +QT_SYSROOT_DATA=$QT_INSTALL_DATA +QT_SYSROOT_TRANSLATIONS=$QT_INSTALL_TRANSLATIONS +QT_SYSROOT_EXAMPLES=$QT_INSTALL_EXAMPLES +QT_SYSROOT_TESTS=$QT_INSTALL_TESTS +if [ -n "$QT_EXT_PREFIX" ]; then + QT_INSTALL_PREFIX=$QT_EXT_PREFIX + QT_INSTALL_DOCS=`substPrefix "$QT_INSTALL_DOCS"` + QT_INSTALL_HEADERS=`substPrefix "$QT_INSTALL_HEADERS"` + QT_INSTALL_LIBS=`substPrefix "$QT_INSTALL_LIBS"` + QT_INSTALL_LIBEXECS=`substPrefix "$QT_INSTALL_LIBEXECS"` + QT_INSTALL_BINS=`substPrefix "$QT_INSTALL_BINS"` + QT_INSTALL_PLUGINS=`substPrefix "$QT_INSTALL_PLUGINS"` + QT_INSTALL_IMPORTS=`substPrefix "$QT_INSTALL_IMPORTS"` + QT_INSTALL_QML=`substPrefix "$QT_INSTALL_QML"` + QT_INSTALL_ARCHDATA=`substPrefix "$QT_INSTALL_ARCHDATA"` + QT_INSTALL_DATA=`substPrefix "$QT_INSTALL_DATA"` + QT_INSTALL_TRANSLATIONS=`substPrefix "$QT_INSTALL_TRANSLATIONS"` + QT_INSTALL_EXAMPLES=`substPrefix "$QT_INSTALL_EXAMPLES"` + QT_INSTALL_TESTS=`substPrefix "$QT_INSTALL_TESTS"` +fi + #------- host paths -------- if [ -z "$QT_HOST_PREFIX" ]; then @@ -3341,10 +3389,13 @@ Installation options: -prefix <dir> ...... This will install everything relative to <dir> (default $QT_INSTALL_PREFIX) + -extprefix <dir> ... When -sysroot is used, install everything to <dir>, + rather than into SYSROOT/PREFIX. + -hostprefix [dir] .. Tools and libraries needed when developing applications are installed in [dir]. If [dir] is not given, the current build directory will be used. - (default PREFIX) + (default EXTPREFIX) You may use these to separate different parts of the install: @@ -3869,6 +3920,12 @@ esac shortxspec=`echo $XQMAKESPEC | sed "s,^${relpath}/mkspecs/,,"` shortspec=`echo $QMAKESPEC | sed "s,^${relpath}/mkspecs/,,"` +if [ -z "$QT_EXT_PREFIX" ]; then + QMAKE_SYSROOTIFY=y +else + QMAKE_SYSROOTIFY=n +fi + cat > "$outpath/src/corelib/global/qconfig.cpp.new" <<EOF /* License Info */ static const char qt_configure_licensee_str [256 + 12] = "qt_lcnsuser=$Licensee"; @@ -3879,6 +3936,22 @@ static const char qt_configure_installation [12+11] = "qt_instdate=` /* Installation Info */ static const char qt_configure_prefix_path_strs[][256 + 12] = { +#ifndef QT_BUILD_QMAKE + "qt_prfxpath=$QT_SYSROOT_PREFIX", + "qt_docspath=$QT_SYSROOT_DOCS", + "qt_hdrspath=$QT_SYSROOT_HEADERS", + "qt_libspath=$QT_SYSROOT_LIBS", + "qt_lbexpath=$QT_SYSROOT_LIBEXECS", + "qt_binspath=$QT_SYSROOT_BINS", + "qt_plugpath=$QT_SYSROOT_PLUGINS", + "qt_impspath=$QT_SYSROOT_IMPORTS", + "qt_qml2path=$QT_SYSROOT_QML", + "qt_adatpath=$QT_SYSROOT_ARCHDATA", + "qt_datapath=$QT_SYSROOT_DATA", + "qt_trnspath=$QT_SYSROOT_TRANSLATIONS", + "qt_xmplpath=$QT_SYSROOT_EXAMPLES", + "qt_tstspath=$QT_SYSROOT_TESTS", +#else "qt_prfxpath=$QT_INSTALL_PREFIX", "qt_docspath=$QT_INSTALL_DOCS", "qt_hdrspath=$QT_INSTALL_HEADERS", @@ -3893,7 +3966,6 @@ static const char qt_configure_prefix_path_strs[][256 + 12] = { "qt_trnspath=$QT_INSTALL_TRANSLATIONS", "qt_xmplpath=$QT_INSTALL_EXAMPLES", "qt_tstspath=$QT_INSTALL_TESTS", -#ifdef QT_BUILD_QMAKE "qt_ssrtpath=$CFG_SYSROOT", "qt_hpfxpath=$QT_HOST_PREFIX", "qt_hbinpath=$QT_HOST_BINS", @@ -3904,6 +3976,10 @@ static const char qt_configure_prefix_path_strs[][256 + 12] = { #endif }; static const char qt_configure_settings_path_str[256 + 12] = "qt_stngpath=$QT_INSTALL_SETTINGS"; + +#ifdef QT_BUILD_QMAKE +static const char qt_sysrootify_prefix[] = "qt_ssrtfpfx=$QMAKE_SYSROOTIFY"; +#endif EOF cat >> "$outpath/src/corelib/global/qconfig.cpp.new" <<EOF diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp index 53a3ebbc10..2b305ef68b 100644 --- a/src/corelib/global/qlibraryinfo.cpp +++ b/src/corelib/global/qlibraryinfo.cpp @@ -309,7 +309,7 @@ QLibraryInfo::location(LibraryLocation loc) QString ret = rawLocation(loc, FinalPaths); // Automatically prepend the sysroot to target paths - if (loc < SysrootPath || loc > LastHostPath) { + if ((loc < SysrootPath || loc > LastHostPath) && qt_sysrootify_prefix[12] == 'y') { QString sysroot = rawLocation(SysrootPath, FinalPaths); if (!sysroot.isEmpty() && ret.length() > 2 && ret.at(1) == QLatin1Char(':') && (ret.at(2) == QLatin1Char('/') || ret.at(2) == QLatin1Char('\\'))) diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index c7477abe99..68b1b74b78 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -1165,6 +1165,13 @@ void Configure::parseCmdLine() dictionary[ "QT_HOST_DATA" ] = configCmdLine.at(i); } + else if (configCmdLine.at(i) == "-extprefix") { + ++i; + if (i == argCount) + break; + dictionary[ "QT_EXT_PREFIX" ] = configCmdLine.at(i); + } + else if (configCmdLine.at(i) == "-make-tool") { ++i; if (i == argCount) @@ -1649,8 +1656,10 @@ bool Configure::displayHelp() desc( "-prefix <dir>", "This will install everything relative to <dir> (default $QT_INSTALL_PREFIX)\n"); + desc( "-extprefix <dir>", "When -sysroot is used, install everything to <dir>, rather than into SYSROOT/PREFIX.\n"); + desc( "-hostprefix [dir]", "Tools and libraries needed when developing applications are installed in [dir]. " - "If [dir] is not given, the current build directory will be used. (default PREFIX)\n"); + "If [dir] is not given, the current build directory will be used. (default EXTPREFIX)\n"); desc("You may use these to separate different parts of the install:\n\n"); @@ -3623,6 +3632,13 @@ static QString stripPrefix(const QString &str, const QString &pfx) return str.startsWith(pfx) ? str.mid(pfx.length()) : str; } +void Configure::substPrefix(QString *path) +{ + QString spfx = dictionary["QT_SYSROOT_PREFIX"]; + if (path->startsWith(spfx)) + path->replace(0, spfx.size(), dictionary["QT_EXT_PREFIX"]); +} + void Configure::generateQConfigCpp() { // if QT_INSTALL_* have not been specified on commandline, define them now from QT_INSTALL_PREFIX @@ -3662,6 +3678,39 @@ void Configure::generateQConfigCpp() if (!dictionary["QT_INSTALL_TESTS"].size()) dictionary["QT_INSTALL_TESTS"] = qipempty ? "" : dictionary["QT_INSTALL_PREFIX"] + "/tests"; + QChar sysrootifyPrefix = QLatin1Char('y'); + dictionary["QT_SYSROOT_PREFIX"] = dictionary["QT_INSTALL_PREFIX"]; + dictionary["QT_SYSROOT_HEADERS"] = dictionary["QT_INSTALL_HEADERS"]; + dictionary["QT_SYSROOT_LIBS"] = dictionary["QT_INSTALL_LIBS"]; + dictionary["QT_SYSROOT_ARCHDATA"] = dictionary["QT_INSTALL_ARCHDATA"]; + dictionary["QT_SYSROOT_LIBEXECS"] = dictionary["QT_INSTALL_LIBEXECS"]; + dictionary["QT_SYSROOT_BINS"] = dictionary["QT_INSTALL_BINS"]; + dictionary["QT_SYSROOT_PLUGINS"] = dictionary["QT_INSTALL_PLUGINS"]; + dictionary["QT_SYSROOT_IMPORTS"] = dictionary["QT_INSTALL_IMPORTS"]; + dictionary["QT_SYSROOT_QML"] = dictionary["QT_INSTALL_QML"]; + dictionary["QT_SYSROOT_DATA"] = dictionary["QT_INSTALL_DATA"]; + dictionary["QT_SYSROOT_DOCS"] = dictionary["QT_INSTALL_DOCS"]; + dictionary["QT_SYSROOT_TRANSLATIONS"] = dictionary["QT_INSTALL_TRANSLATIONS"]; + dictionary["QT_SYSROOT_EXAMPLES"] = dictionary["QT_INSTALL_EXAMPLES"]; + dictionary["QT_SYSROOT_TESTS"] = dictionary["QT_INSTALL_TESTS"]; + if (dictionary["QT_EXT_PREFIX"].size()) { + sysrootifyPrefix = QLatin1Char('n'); + dictionary["QT_INSTALL_PREFIX"] = dictionary["QT_EXT_PREFIX"]; + substPrefix(&dictionary["QT_INSTALL_HEADERS"]); + substPrefix(&dictionary["QT_INSTALL_LIBS"]); + substPrefix(&dictionary["QT_INSTALL_ARCHDATA"]); + substPrefix(&dictionary["QT_INSTALL_LIBEXECS"]); + substPrefix(&dictionary["QT_INSTALL_BINS"]); + substPrefix(&dictionary["QT_INSTALL_PLUGINS"]); + substPrefix(&dictionary["QT_INSTALL_IMPORTS"]); + substPrefix(&dictionary["QT_INSTALL_QML"]); + substPrefix(&dictionary["QT_INSTALL_DATA"]); + substPrefix(&dictionary["QT_INSTALL_DOCS"]); + substPrefix(&dictionary["QT_INSTALL_TRANSLATIONS"]); + substPrefix(&dictionary["QT_INSTALL_EXAMPLES"]); + substPrefix(&dictionary["QT_INSTALL_TESTS"]); + } + bool haveHpx = false; if (dictionary["QT_HOST_PREFIX"].isEmpty()) dictionary["QT_HOST_PREFIX"] = dictionary["QT_INSTALL_PREFIX"]; @@ -3689,6 +3738,22 @@ void Configure::generateQConfigCpp() << "static const char qt_configure_installation [11 + 12] = \"qt_instdate=" << QDate::currentDate().toString(Qt::ISODate) << "\";" << endl << endl << "static const char qt_configure_prefix_path_strs[][12 + 512] = {" << endl + << "#ifndef QT_BUILD_QMAKE" << endl + << " \"qt_prfxpath=" << formatPath(dictionary["QT_SYSROOT_PREFIX"]) << "\"," << endl + << " \"qt_docspath=" << formatPath(dictionary["QT_SYSROOT_DOCS"]) << "\"," << endl + << " \"qt_hdrspath=" << formatPath(dictionary["QT_SYSROOT_HEADERS"]) << "\"," << endl + << " \"qt_libspath=" << formatPath(dictionary["QT_SYSROOT_LIBS"]) << "\"," << endl + << " \"qt_lbexpath=" << formatPath(dictionary["QT_SYSROOT_LIBEXECS"]) << "\"," << endl + << " \"qt_binspath=" << formatPath(dictionary["QT_SYSROOT_BINS"]) << "\"," << endl + << " \"qt_plugpath=" << formatPath(dictionary["QT_SYSROOT_PLUGINS"]) << "\"," << endl + << " \"qt_impspath=" << formatPath(dictionary["QT_SYSROOT_IMPORTS"]) << "\"," << endl + << " \"qt_qml2path=" << formatPath(dictionary["QT_SYSROOT_QML"]) << "\"," << endl + << " \"qt_adatpath=" << formatPath(dictionary["QT_SYSROOT_ARCHDATA"]) << "\"," << endl + << " \"qt_datapath=" << formatPath(dictionary["QT_SYSROOT_DATA"]) << "\"," << endl + << " \"qt_trnspath=" << formatPath(dictionary["QT_SYSROOT_TRANSLATIONS"]) << "\"," << endl + << " \"qt_xmplpath=" << formatPath(dictionary["QT_SYSROOT_EXAMPLES"]) << "\"," << endl + << " \"qt_tstspath=" << formatPath(dictionary["QT_SYSROOT_TESTS"]) << "\"," << endl + << "#else" << endl << " \"qt_prfxpath=" << formatPath(dictionary["QT_INSTALL_PREFIX"]) << "\"," << endl << " \"qt_docspath=" << formatPath(dictionary["QT_INSTALL_DOCS"]) << "\"," << endl << " \"qt_hdrspath=" << formatPath(dictionary["QT_INSTALL_HEADERS"]) << "\"," << endl @@ -3703,7 +3768,6 @@ void Configure::generateQConfigCpp() << " \"qt_trnspath=" << formatPath(dictionary["QT_INSTALL_TRANSLATIONS"]) << "\"," << endl << " \"qt_xmplpath=" << formatPath(dictionary["QT_INSTALL_EXAMPLES"]) << "\"," << endl << " \"qt_tstspath=" << formatPath(dictionary["QT_INSTALL_TESTS"]) << "\"," << endl - << "#ifdef QT_BUILD_QMAKE" << endl << " \"qt_ssrtpath=" << formatPath(dictionary["CFG_SYSROOT"]) << "\"," << endl << " \"qt_hpfxpath=" << formatPath(dictionary["QT_HOST_PREFIX"]) << "\"," << endl << " \"qt_hbinpath=" << formatPath(dictionary["QT_HOST_BINS"]) << "\"," << endl @@ -3718,6 +3782,9 @@ void Configure::generateQConfigCpp() tmpStream << "static const char qt_configure_settings_path_str [256 + 12] = \"qt_stngpath=" << formatPath(dictionary["QT_INSTALL_SETTINGS"]) << "\";" << endl; tmpStream << endl + << "#ifdef QT_BUILD_QMAKE\n" + << "static const char qt_sysrootify_prefix[] = \"qt_ssrtfpfx=" << sysrootifyPrefix << "\";\n" + << "#endif\n\n" << "/* strlen( \"qt_lcnsxxxx\") == 12 */" << endl << "#define QT_CONFIGURE_LICENSEE qt_configure_licensee_str + 12;" << endl << "#define QT_CONFIGURE_LICENSED_PRODUCTS qt_configure_licensed_products_str + 12;" << endl; diff --git a/tools/configure/configureapp.h b/tools/configure/configureapp.h index 33fc22b27a..314b2be861 100644 --- a/tools/configure/configureapp.h +++ b/tools/configure/configureapp.h @@ -158,6 +158,8 @@ private: int descIndent; int outputWidth; + void substPrefix(QString *path); + QString formatPath(const QString &path); QString formatPaths(const QStringList &paths); |