diff options
author | Oswald Buddenhagen <oswald.buddenhagen@qt.io> | 2016-11-24 18:41:48 +0100 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@qt.io> | 2016-12-13 18:56:12 +0000 |
commit | 169a40d511165f6c3c9a71cd5c079786c22d2aca (patch) | |
tree | ccb96350299aa64c2ec32da0c27b4ecb1a10a822 /configure | |
parent | 42196f4061263d6d0e453c0561f7604cadc6d0a3 (diff) |
move generation of qconfig.cpp (and qt.conf) to qmake-based configure
this moves us another step towards the "outer" configure doing just
minimal bootstrapping of qmake.
a challenge here was that so far, qmake itself needed qconfig.cpp. this
was replaced by usage of a qt.conf file instead of compiled-in values.
however, to make the executable still self-contained, that qt.conf is
embedded into it (by simple appending of a fixed signature and the text
file).
the qmake with the embedded qt.conf is not used for the qt build itself,
which instead relies on the qt.conf in bin/ as before. however, due to
the missing built-in values, this file now needs to contain more
information than before. but except for a minimal version that is needed
to start up qmake/configure at all, that file is now also generated with
qmake. as some of the newly set up properties are subsequently used by
configure itself, qmake gains a (deliberately undocumented) function to
reload the qt.conf after it's fully populated.
unlike the old implementations, this one doesn't emit redundant qt.conf
entries which match the hard-coded fallbacks. omitting them leads to
leaner files which are more comprehensible.
Started-by: Paolo Angelelli <paolo.angelelli@qt.io>
Change-Id: I4526ef64b3c89d9851e10f83965fe479ed7f39f6
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
Diffstat (limited to 'configure')
-rwxr-xr-x | configure | 420 |
1 files changed, 3 insertions, 417 deletions
@@ -129,26 +129,6 @@ DEVICE_VARS_FILE=.device.vars # utility functions #------------------------------------------------------------------------------- -makeabs() -{ - local FILE="$1" - local RES="$FILE" - if [ -z "${FILE##/*}" ]; then - true - elif [ "$OSTYPE" = "msys" -a -z "${FILE##[a-zA-Z]:[/\\]*}" ]; then - true - else - RES=$PWD/$FILE - fi - RES=$RES/ - while true; do - nres=`echo "$RES" | sed 's,/[^/][^/]*/\.\./,/,g; s,/\./,/,g'` - test x"$nres" = x"$RES" && break - RES=$nres - done - echo "$RES" | sed 's,//,/,g; s,/$,,' -} - # Helper function for getQMakeConf. It parses include statements in # qmake.conf and prints out the expanded file expandQMakeConf() @@ -443,29 +423,6 @@ CFG_SILENT=no OPT_MAC_SDK= CFG_DEV=no -# initalize variables used for installation -QT_INSTALL_PREFIX= -QT_INSTALL_DOCS= -QT_INSTALL_HEADERS= -QT_INSTALL_LIBS= -QT_INSTALL_BINS= -QT_INSTALL_LIBEXECS= -QT_INSTALL_PLUGINS= -QT_INSTALL_IMPORTS= -QT_INSTALL_QML= -QT_INSTALL_ARCHDATA= -QT_INSTALL_DATA= -QT_INSTALL_TRANSLATIONS= -QT_INSTALL_SETTINGS= -QT_INSTALL_EXAMPLES= -QT_INSTALL_TESTS= -CFG_SYSROOT= -QT_HOST_PREFIX= -QT_HOST_BINS= -QT_HOST_LIBS= -QT_HOST_DATA= -QT_EXT_PREFIX= - # Android vars CFG_DEFAULT_ANDROID_NDK_ROOT=$ANDROID_NDK_ROOT CFG_DEFAULT_ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT @@ -590,72 +547,9 @@ while [ "$#" -gt 0 ]; do UNKNOWN_OPT=no case "$VAR" in - prefix) - QT_INSTALL_PREFIX="$VAL" - ;; - hostprefix) - QT_HOST_PREFIX="$VAL" - ;; - hostdatadir) - QT_HOST_DATA="$VAL" - ;; - hostbindir) - QT_HOST_BINS="$VAL" - ;; - hostlibdir) - QT_HOST_LIBS="$VAL" - ;; - extprefix) - QT_EXT_PREFIX="$VAL" - ;; - docdir) - QT_INSTALL_DOCS="$VAL" - ;; - headerdir) - QT_INSTALL_HEADERS="$VAL" - ;; - plugindir) - QT_INSTALL_PLUGINS="$VAL" - ;; - importdir) - QT_INSTALL_IMPORTS="$VAL" - ;; - qmldir) - QT_INSTALL_QML="$VAL" - ;; - archdatadir) - QT_INSTALL_ARCHDATA="$VAL" - ;; - datadir) - QT_INSTALL_DATA="$VAL" - ;; - libdir) - QT_INSTALL_LIBS="$VAL" - ;; - translationdir) - QT_INSTALL_TRANSLATIONS="$VAL" - ;; - sysconfdir|settingsdir) - QT_INSTALL_SETTINGS="$VAL" - ;; - examplesdir) - QT_INSTALL_EXAMPLES="$VAL" - ;; - testsdir) - QT_INSTALL_TESTS="$VAL" - ;; - sysroot) - CFG_SYSROOT="$VAL" - ;; external-hostbindir) CFG_HOST_QT_TOOLS_PATH="$VAL" ;; - bindir) - QT_INSTALL_BINS="$VAL" - ;; - libexecdir) - QT_INSTALL_LIBEXECS="$VAL" - ;; sdk) if [ "$BUILD_ON_MAC" = "yes" ]; then DeviceVar set QMAKE_MAC_SDK "$VAL" @@ -1090,274 +984,6 @@ if [ "$XPLATFORM_ANDROID" = "no" ]; then fi fi -#------------------------------------------------------------------------------- -# postprocess installation and deployment paths -#------------------------------------------------------------------------------- - -if [ -z "$QT_INSTALL_PREFIX" ]; then - if [ "$CFG_DEV" = "yes" ]; then - QT_INSTALL_PREFIX="$outpath" # In Development, we use sandboxed builds by default - else - QT_INSTALL_PREFIX="/usr/local/Qt-${QT_VERSION}" # the default install prefix is /usr/local/Qt-$QT_VERSION - fi -fi -QT_INSTALL_PREFIX=`makeabs "$QT_INSTALL_PREFIX"` - -if [ -z "$QT_EXT_PREFIX" ]; then - QT_EXT_PREFIX=$QT_INSTALL_PREFIX - if [ -n "$CFG_SYSROOT" ]; then - QMAKE_SYSROOTIFY=true - else - QMAKE_SYSROOTIFY=false - fi -else - QT_EXT_PREFIX=`makeabs "$QT_EXT_PREFIX"` - QMAKE_SYSROOTIFY=false -fi - -if [ -z "$QT_HOST_PREFIX" ]; then - if $QMAKE_SYSROOTIFY; then - QT_HOST_PREFIX=$CFG_SYSROOT$QT_EXT_PREFIX - else - QT_HOST_PREFIX=$QT_EXT_PREFIX - fi - HAVE_HOST_PATH=false -else - QT_HOST_PREFIX=`makeabs "$QT_HOST_PREFIX"` - HAVE_HOST_PATH=true -fi - -#------- make the paths relative to the prefixes -------- - -PREFIX_COMPLAINTS= -PREFIX_REMINDER=false -while read basevar baseoption var option; do - eval path=\$QT_${basevar}_$var - [ -z "$path" ] && continue - path=`makeabs "$path"` - eval base=\$QT_${basevar}_PREFIX - rel=${path##$base} - if [ x"$rel" = x"$path" ]; then - if [ x"$option" != x"sysconf" ]; then - PREFIX_COMPLAINTS="$PREFIX_COMPLAINTS - NOTICE: -${option}dir is not a subdirectory of ${baseoption}prefix." - eval \$HAVE_${basevar}_PATH || PREFIX_REMINDER=true - fi - eval QT_REL_${basevar}_$var=\$rel - elif [ -z "$rel" ]; then - eval QT_REL_${basevar}_$var=. - else - eval QT_REL_${basevar}_$var=\${rel#/} - fi -done <<EOF -INSTALL - DOCS doc -INSTALL - HEADERS header -INSTALL - LIBS lib -INSTALL - LIBEXECS libexec -INSTALL - BINS bin -INSTALL - PLUGINS plugin -INSTALL - IMPORTS import -INSTALL - QML qml -INSTALL - ARCHDATA archdata -INSTALL - DATA data -INSTALL - TRANSLATIONS translation -INSTALL - EXAMPLES examples -INSTALL - TESTS tests -INSTALL - SETTINGS sysconf -HOST -host BINS hostbin -HOST -host LIBS hostlib -HOST -host DATA hostdata -EOF -$PREFIX_REMINDER && PREFIX_COMPLAINTS="$PREFIX_COMPLAINTS - Maybe you forgot to specify -prefix/-hostprefix?" - -if [ -z "$QT_REL_INSTALL_HEADERS" ]; then - QT_REL_INSTALL_HEADERS=include -fi - -if [ -z "$QT_REL_INSTALL_LIBS" ]; then - QT_REL_INSTALL_LIBS=lib -fi - -if [ -z "$QT_REL_INSTALL_BINS" ]; then - QT_REL_INSTALL_BINS=bin -fi - -if [ -z "$QT_REL_INSTALL_ARCHDATA" ]; then - QT_REL_INSTALL_ARCHDATA=. -fi -if [ x"$QT_REL_INSTALL_ARCHDATA" != x. ]; then - QT_REL_INSTALL_ARCHDATA_PREFIX=$QT_REL_INSTALL_ARCHDATA/ -fi - -if [ -z "$QT_REL_INSTALL_LIBEXECS" ]; then - if [ "$XPLATFORM_MINGW" = "yes" ]; then - QT_REL_INSTALL_LIBEXECS=${QT_REL_INSTALL_ARCHDATA_PREFIX}bin - else - QT_REL_INSTALL_LIBEXECS=${QT_REL_INSTALL_ARCHDATA_PREFIX}libexec - fi -fi - -if [ -z "$QT_REL_INSTALL_PLUGINS" ]; then - QT_REL_INSTALL_PLUGINS=${QT_REL_INSTALL_ARCHDATA_PREFIX}plugins -fi - -if [ -z "$QT_REL_INSTALL_IMPORTS" ]; then - QT_REL_INSTALL_IMPORTS=${QT_REL_INSTALL_ARCHDATA_PREFIX}imports -fi - -if [ -z "$QT_REL_INSTALL_QML" ]; then - QT_REL_INSTALL_QML=${QT_REL_INSTALL_ARCHDATA_PREFIX}qml -fi - -if [ -z "$QT_REL_INSTALL_DATA" ]; then - QT_REL_INSTALL_DATA=. -fi -if [ x"$QT_REL_INSTALL_DATA" != x. ]; then - QT_REL_INSTALL_DATA_PREFIX=$QT_REL_INSTALL_DATA/ -fi - -if [ -z "$QT_REL_INSTALL_DOCS" ]; then - QT_REL_INSTALL_DOCS=${QT_REL_INSTALL_DATA_PREFIX}doc -fi - -if [ -z "$QT_REL_INSTALL_TRANSLATIONS" ]; then - QT_REL_INSTALL_TRANSLATIONS=${QT_REL_INSTALL_DATA_PREFIX}translations -fi - -if [ -z "$QT_REL_INSTALL_EXAMPLES" ]; then - QT_REL_INSTALL_EXAMPLES=examples -fi - -if [ -z "$QT_REL_INSTALL_TESTS" ]; then - QT_REL_INSTALL_TESTS=tests -fi - -if [ -z "$QT_REL_INSTALL_SETTINGS" ]; then - if [ "$XPLATFORM_MAC" = "yes" ]; then - QT_REL_INSTALL_SETTINGS=/Library/Preferences/Qt - else - QT_REL_INSTALL_SETTINGS=etc/xdg - fi -fi - -#------- host paths -------- - -if [ -z "$QT_REL_HOST_BINS" ]; then - if $HAVE_HOST_PATH; then - QT_REL_HOST_BINS=bin - else - QT_REL_HOST_BINS=$QT_REL_INSTALL_BINS - fi -fi - -if [ -z "$QT_REL_HOST_LIBS" ]; then - if $HAVE_HOST_PATH; then - QT_REL_HOST_LIBS=lib - else - QT_REL_HOST_LIBS=$QT_REL_INSTALL_LIBS - fi -fi - -if [ -z "$QT_REL_HOST_DATA" ]; then - if $HAVE_HOST_PATH; then - QT_REL_HOST_DATA=. - else - QT_REL_HOST_DATA=$QT_REL_INSTALL_ARCHDATA - fi -fi - -shortxspec=`echo $XQMAKESPEC | sed "s,^${relpath}/mkspecs/,,"` -shortspec=`echo $QMAKESPEC | sed "s,^${relpath}/mkspecs/,,"` - -QT_CONFIGURE_STR_OFF=0 - -addConfStr() -{ - QT_CONFIGURE_STR_OFFSETS="$QT_CONFIGURE_STR_OFFSETS $QT_CONFIGURE_STR_OFF," - QT_CONFIGURE_STRS="$QT_CONFIGURE_STRS \"$1\\0\" -" - count=`echo "$1" | wc -c` - QT_CONFIGURE_STR_OFF=`expr $QT_CONFIGURE_STR_OFF + $count` -} - -QT_CONFIGURE_STR_OFFSETS= -QT_CONFIGURE_STRS= -addConfStr "$QT_REL_INSTALL_DOCS" -addConfStr "$QT_REL_INSTALL_HEADERS" -addConfStr "$QT_REL_INSTALL_LIBS" -addConfStr "$QT_REL_INSTALL_LIBEXECS" -addConfStr "$QT_REL_INSTALL_BINS" -addConfStr "$QT_REL_INSTALL_PLUGINS" -addConfStr "$QT_REL_INSTALL_IMPORTS" -addConfStr "$QT_REL_INSTALL_QML" -addConfStr "$QT_REL_INSTALL_ARCHDATA" -addConfStr "$QT_REL_INSTALL_DATA" -addConfStr "$QT_REL_INSTALL_TRANSLATIONS" -addConfStr "$QT_REL_INSTALL_EXAMPLES" -addConfStr "$QT_REL_INSTALL_TESTS" -QT_CONFIGURE_STR_OFFSETS_ALL=$QT_CONFIGURE_STR_OFFSETS -QT_CONFIGURE_STRS_ALL=$QT_CONFIGURE_STRS - -QT_CONFIGURE_STR_OFFSETS= -QT_CONFIGURE_STRS= -addConfStr "$CFG_SYSROOT" -addConfStr "$QT_REL_HOST_BINS" -addConfStr "$QT_REL_HOST_LIBS" -addConfStr "$QT_REL_HOST_DATA" -addConfStr "$shortxspec" -addConfStr "$shortspec" - -#------------------------------------------------------------------------------- -# generate qconfig.cpp -#------------------------------------------------------------------------------- -[ -d "$outpath/src/corelib/global" ] || mkdir -p "$outpath/src/corelib/global" - -cat > "$outpath/src/corelib/global/qconfig.cpp.new" <<EOF -/* Installation date */ -static const char qt_configure_installation [12+11] = "qt_instdate=2012-12-20"; - -/* Installation Info */ -static const char qt_configure_prefix_path_str [256 + 12] = "qt_prfxpath=$QT_INSTALL_PREFIX"; -#ifdef QT_BUILD_QMAKE -static const char qt_configure_ext_prefix_path_str [256 + 12] = "qt_epfxpath=$QT_EXT_PREFIX"; -static const char qt_configure_host_prefix_path_str [256 + 12] = "qt_hpfxpath=$QT_HOST_PREFIX"; -#endif - -static const short qt_configure_str_offsets[] = { - $QT_CONFIGURE_STR_OFFSETS_ALL -#ifdef QT_BUILD_QMAKE - $QT_CONFIGURE_STR_OFFSETS -#endif -}; -static const char qt_configure_strs[] = -$QT_CONFIGURE_STRS_ALL#ifdef QT_BUILD_QMAKE -$QT_CONFIGURE_STRS#endif -; - -#define QT_CONFIGURE_SETTINGS_PATH "$QT_REL_INSTALL_SETTINGS" - -#ifdef QT_BUILD_QMAKE -# define QT_CONFIGURE_SYSROOTIFY_PREFIX $QMAKE_SYSROOTIFY -#endif - -#define QT_CONFIGURE_PREFIX_PATH qt_configure_prefix_path_str + 12 -#ifdef QT_BUILD_QMAKE -# define QT_CONFIGURE_EXT_PREFIX_PATH qt_configure_ext_prefix_path_str + 12 -# define QT_CONFIGURE_HOST_PREFIX_PATH qt_configure_host_prefix_path_str + 12 -#endif -EOF - -# avoid unecessary rebuilds by copying only if qconfig.cpp has changed -if cmp -s "$outpath/src/corelib/global/qconfig.cpp" "$outpath/src/corelib/global/qconfig.cpp.new"; then - rm -f "$outpath/src/corelib/global/qconfig.cpp.new" -else - [ -f "$outpath/src/corelib/global/qconfig.cpp" ] && chmod +w "$outpath/src/corelib/global/qconfig.cpp" - mv "$outpath/src/corelib/global/qconfig.cpp.new" "$outpath/src/corelib/global/qconfig.cpp" - chmod -w "$outpath/src/corelib/global/qconfig.cpp" -fi - - # ----------------------------------------------------------------------------- # build qmake # ----------------------------------------------------------------------------- @@ -1491,51 +1117,16 @@ setBootstrapVariable() # create a qt.conf for the Qt build tree itself #------------------------------------------------------------------------------- -printInstallPaths() -{ - cat <<EOF -Documentation=$QT_REL_INSTALL_DOCS -Headers=$QT_REL_INSTALL_HEADERS -Libraries=$QT_REL_INSTALL_LIBS -LibraryExecutables=$QT_REL_INSTALL_LIBEXECS -Binaries=$QT_REL_INSTALL_BINS -Plugins=$QT_REL_INSTALL_PLUGINS -Imports=$QT_REL_INSTALL_IMPORTS -Qml2Imports=$QT_REL_INSTALL_QML -ArchData=$QT_REL_INSTALL_ARCHDATA -Data=$QT_REL_INSTALL_DATA -Translations=$QT_REL_INSTALL_TRANSLATIONS -Examples=$QT_REL_INSTALL_EXAMPLES -Tests=$QT_REL_INSTALL_TESTS -EOF -} - +# Note that this file is just sufficient to boot configure, by which it is +# replaced in-place with a version which is suitable for building all of Qt. QTCONFFILE="$outpath/bin/qt.conf" cat > "$QTCONFFILE" <<EOF [EffectivePaths] Prefix=.. -EOF -if [ -n "$CFG_HOST_QT_TOOLS_PATH" ]; then - cat >> "$QTCONFFILE" <<EOF -[DevicePaths] -Prefix=$QT_INSTALL_PREFIX -`printInstallPaths` [Paths] -Prefix=$QT_EXT_PREFIX -`printInstallPaths` -HostPrefix=$QT_HOST_PREFIX -HostBinaries=$QT_REL_HOST_BINS -HostLibraries=$QT_REL_HOST_LIBS -HostData=$QT_REL_HOST_DATA TargetSpec=$XPLATFORM HostSpec=$PLATFORM EOF - if [ -n "$CFG_SYSROOT" ]; then - cat >> "$QTCONFFILE" <<EOF -Sysroot=$CFG_SYSROOT -EOF - fi -fi if [ x"$relpath" != x"$outpath" ]; then cat >> "$QTCONFFILE" <<EOF [EffectiveSourcePaths] @@ -1594,12 +1185,7 @@ else echo fi -if [ -n "$PREFIX_COMPLAINTS" ]; then - echo - echo "$PREFIX_COMPLAINTS" - echo -fi - +QT_INSTALL_PREFIX=`sed -ne 's/^Prefix=//p' < "$outpath/qmake/builtin-qt.conf"` MAKE=`basename "$MAKE"` echo echo Qt is now configured for building. Just run \'$MAKE\'. |