diff options
author | Oswald Buddenhagen <oswald.buddenhagen@digia.com> | 2013-10-24 20:36:25 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-10-31 12:33:55 +0100 |
commit | 67c9b5ad9f32bc0ef89a34f01b1f0602a4869865 (patch) | |
tree | 0a0be6315c3c21b93bd33b6884d5eff28cd52eb1 | |
parent | 65b12fbdb13d34c61bcadd5cc8fd6ee28a8dfafd (diff) |
fix filtering of system paths
the path filtering functions assume that DEFAULT_{INC,LIB}DIRS are
newline separated lists of unquoted strings, which 8fbf959be broke.
Task-number: QTBUG-33714
Change-Id: Ie07909963ac5155a8ac79ca9254f34069925e001
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rwxr-xr-x | configure | 44 |
1 files changed, 23 insertions, 21 deletions
@@ -93,6 +93,13 @@ shellEscape() echo "$@" | sed 's/ /\ /g' } +shellQuoteLines() +{ + # The call of the outer echo makes the shell word-split the output of + # the nested pipe, thus effectively converting newlines to spaces. + echo `echo "$1" | sed 's,^[^ ]* .*$,"&",'` +} + # Adds a new qmake variable to the cache # Usage: QMakeVar mode varname contents # where mode is one of: set, add, del @@ -3028,35 +3035,26 @@ else CFG_FRAMEWORK=no fi -# auto-detect default include and library search paths -unset tty -[ "$OPT_VERBOSE" = "yes" ] && tty=/dev/stderr +# Auto-detect default include and library search paths. -eval `LC_ALL=C $TEST_COMPILER $SYSROOT_FLAG $TEST_COMPILER_CXXFLAGS -xc++ -E -v - < /dev/null 2>&1 > /dev/null | $AWK ' +# Use intermediate variable to get around backtick/quote nesting problems. +awkprog=' BEGIN { ORS = ""; FS = "="; incs = 0; libs = 0; } function normalize(dir) { do { odir = dir - gsub(/\\/[^\\/]+\\/\\.\\./, "", dir) + gsub(/\/[^\/]+\/\.\./, "", dir) } while (dir != odir); do { odir = dir - gsub(/\\/\\./, "", dir) + gsub(/\/\./, "", dir) } while (dir != odir); sub("/$", "", dir); return dir; } -function quote(s) -{ - # We only handle spaces - if (match(s, " ") != 0) - return "\\\\\"" s "\\\\\""; - return s; -} - # extract include paths from indented lines between # #include <...> search starts here: # and @@ -3064,7 +3062,7 @@ function quote(s) /^\#include </ { yup=1; print "DEFAULT_INCDIRS=\""; next } /^End of search/ { yup=0; print "\"\n" } / \(framework directory\)$/ { next } -yup { print quote(normalize(substr($0, 2))) " "; ++incs } +yup { print normalize(substr($0, 2)) "\n"; ++incs } # extract from one line like LIBRARY_PATH=/one/path:/another/path:... $1 == "LIBRARY_PATH" { @@ -3073,7 +3071,7 @@ $1 == "LIBRARY_PATH" { for (lib in library_paths) { dir = normalize(library_paths[lib]); if (!(dir in dirs)) { - print quote(dir) " "; + print dir "\n"; dirs[dir] = 1; } } @@ -3082,10 +3080,14 @@ $1 == "LIBRARY_PATH" { END { if (incs == 0) - print "DEFAULT_INCDIRS=\"/usr/include /usr/local/include\"\n"; + print "DEFAULT_INCDIRS=\"/usr/include\n/usr/local/include\"\n"; if (libs == 0) - print "DEFAULT_LIBDIRS=\"/lib /usr/lib\"\n"; -}' | tee $tty` + print "DEFAULT_LIBDIRS=\"/lib\n/usr/lib\"\n"; +}' + +unset tty +[ "$OPT_VERBOSE" = "yes" ] && tty=/dev/stderr +eval "`LC_ALL=C $TEST_COMPILER $SYSROOT_FLAG $TEST_COMPILER_CXXFLAGS -xc++ -E -v - < /dev/null 2>&1 > /dev/null | $AWK "$awkprog" | tee $tty`" unset tty #setup the build parts @@ -6597,8 +6599,8 @@ host_build { QT_TARGET_ARCH = $CFG_ARCH } else { QT_ARCH = $CFG_ARCH - QMAKE_DEFAULT_LIBDIRS = $DEFAULT_LIBDIRS - QMAKE_DEFAULT_INCDIRS = $DEFAULT_INCDIRS + QMAKE_DEFAULT_LIBDIRS = `shellQuoteLines "$DEFAULT_LIBDIRS"` + QMAKE_DEFAULT_INCDIRS = `shellQuoteLines "$DEFAULT_INCDIRS"` } QT_EDITION = $Edition QT_CONFIG += $QT_CONFIG |