diff --git a/configure b/configure
index 3e455c616397e7c22cc2f97f60fa31e21b826230..43b55f07a3b6c4a9b244c4400b8e66ddbf7b99eb 100755
--- a/configure
+++ b/configure
@@ -115,13 +115,6 @@ 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,^[^ ]* .*$,"&",'`
-}
-
 makeabs()
 {
     local FILE="$1"
@@ -7163,8 +7156,6 @@ host_build {
     QT_TARGET_ARCH = $CFG_ARCH
 } else {
     QT_ARCH = $CFG_ARCH
-    QMAKE_DEFAULT_LIBDIRS = `shellQuoteLines "$DEFAULT_LIBDIRS"`
-    QMAKE_DEFAULT_INCDIRS = `shellQuoteLines "$DEFAULT_INCDIRS"`
 }
 QT_CONFIG += $QT_CONFIG
 
diff --git a/mkspecs/features/default_pre.prf b/mkspecs/features/default_pre.prf
index a247b46a72e17a3de420a15ec1fc600b3db4e98f..cffffdcf255d973f1bf8f28c0ad2d68e6706723f 100644
--- a/mkspecs/features/default_pre.prf
+++ b/mkspecs/features/default_pre.prf
@@ -24,3 +24,44 @@ contains(QT_CONFIG, c++11):lessThan(QT_COMPILER_STDCXX, 201103): CONFIG += c++11
     }
     unset(today)
 }
+
+isEmpty(QMAKE_DEFAULT_INCDIRS):!host_build {
+    #
+    # Get default include and library paths from compiler
+    #
+    gcc {
+        equals(QMAKE_DIR_SEP, /) {
+            cmd_prefix = "LC_ALL=C"
+            cmd_suffix = "</dev/null >/dev/null"
+        } else {
+            cmd_prefix = "set LC_ALL=C&"
+            cmd_suffix = "<NUL >NUL"
+        }
+        output = $$system("$$cmd_prefix $$QMAKE_CXX $$QMAKE_CXXFLAGS -xc++ -E -v - 2>&1 $$cmd_suffix", lines)
+        add_includes = false
+        for (line, output) {
+            line ~= s/^ *//  # remove leading spaces
+            contains(line, "LIBRARY_PATH=.*") {
+                line ~= s/^LIBRARY_PATH=//  # remove leading LIBRARY_PATH=
+                paths = $$split(line, $$QMAKE_DIRLIST_SEP)
+                for (path, paths): \
+                    QMAKE_DEFAULT_LIBDIRS += $$clean_path($$path)
+            } else: contains(line, "$${LITERAL_HASH}include <.*") {  # #include <...> search starts here:
+                add_includes = true
+            } else: contains(line, "End of search list.*") {
+                add_includes = false
+            } else {
+                $$add_includes: QMAKE_DEFAULT_INCDIRS += $$clean_path($$line)
+            }
+        }
+        QMAKE_DEFAULT_LIBDIRS = $$unique(QMAKE_DEFAULT_LIBDIRS)
+    }
+
+    unix {
+        isEmpty(QMAKE_DEFAULT_INCDIRS): QMAKE_DEFAULT_INCDIRS = /usr/include /usr/local/include
+        isEmpty(QMAKE_DEFAULT_LIBDIRS): QMAKE_DEFAULT_LIBDIRS = /lib /usr/lib
+    }
+
+    !isEmpty(QMAKE_DEFAULT_INCDIRS): cache(QMAKE_DEFAULT_INCDIRS, set stash)
+    !isEmpty(QMAKE_DEFAULT_LIBDIRS): cache(QMAKE_DEFAULT_LIBDIRS, set stash)
+}
diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp
index e3eb5220becc4f915ac057d67905dac4676bb410..d490f73496a762555233ed35766a8583ebbfc695 100644
--- a/tools/configure/configureapp.cpp
+++ b/tools/configure/configureapp.cpp
@@ -3496,11 +3496,6 @@ void Configure::generateQConfigPri()
         configStream << "    QT_TARGET_ARCH = " << dictionary["QT_ARCH"] << endl;
         configStream << "} else {" << endl;
         configStream << "    QT_ARCH = " << dictionary["QT_ARCH"] << endl;
-        if (dictionary.contains("XQMAKESPEC")) {
-            // FIXME: add detection
-            configStream << "    QMAKE_DEFAULT_LIBDIRS = /lib /usr/lib" << endl;
-            configStream << "    QMAKE_DEFAULT_INCDIRS = /usr/include /usr/local/include" << endl;
-        }
         configStream << "}" << endl;
         configStream << "QT_CONFIG += " << qtConfig.join(' ') << endl;