summaryrefslogtreecommitdiffstats
path: root/qmake
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@qt.io>2016-11-24 18:41:48 +0100
committerOswald Buddenhagen <oswald.buddenhagen@qt.io>2016-12-13 18:56:12 +0000
commit169a40d511165f6c3c9a71cd5c079786c22d2aca (patch)
treeccb96350299aa64c2ec32da0c27b4ecb1a10a822 /qmake
parent42196f4061263d6d0e453c0561f7604cadc6d0a3 (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 'qmake')
-rw-r--r--qmake/Makefile.unix3
-rw-r--r--qmake/Makefile.win322
-rw-r--r--qmake/library/qmakebuiltins.cpp8
-rw-r--r--qmake/library/qmakeglobals.h1
-rw-r--r--qmake/option.cpp5
-rw-r--r--qmake/property.cpp6
-rw-r--r--qmake/property.h2
-rw-r--r--qmake/qmake-aux.pro20
8 files changed, 41 insertions, 6 deletions
diff --git a/qmake/Makefile.unix b/qmake/Makefile.unix
index 808a6d8233..aa6c876c73 100644
--- a/qmake/Makefile.unix
+++ b/qmake/Makefile.unix
@@ -66,7 +66,6 @@ DEPEND_SRC = \
$(SOURCE_PATH)/src/corelib/io/qdir.cpp $(SOURCE_PATH)/src/corelib/plugin/quuid.cpp \
$(SOURCE_PATH)/src/corelib/io/qfileinfo.cpp $(SOURCE_PATH)/src/corelib/tools/qdatetime.cpp \
$(SOURCE_PATH)/src/corelib/tools/qstringlist.cpp $(SOURCE_PATH)/src/corelib/tools/qmap.cpp \
- $(SOURCE_PATH)/src/corelib/global/qconfig.cpp \
$(SOURCE_PATH)/src/corelib/tools/qstringbuilder.cpp \
$(SOURCE_PATH)/src/corelib/tools/qlocale.cpp \
$(SOURCE_PATH)/src/corelib/tools/qlocale_tools.cpp \
@@ -225,7 +224,7 @@ qsettings.o: $(SOURCE_PATH)/src/corelib/io/qsettings.cpp
qsystemerror.o: $(SOURCE_PATH)/src/corelib/kernel/qsystemerror.cpp
$(CXX) -c -o $@ $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/kernel/qsystemerror.cpp
-qlibraryinfo.o: $(SOURCE_PATH)/src/corelib/global/qlibraryinfo.cpp $(BUILD_PATH)/src/corelib/global/qconfig.cpp
+qlibraryinfo.o: $(SOURCE_PATH)/src/corelib/global/qlibraryinfo.cpp
$(CXX) -c -o $@ $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/global/qlibraryinfo.cpp
qnumeric.o: $(SOURCE_PATH)/src/corelib/global/qnumeric.cpp
diff --git a/qmake/Makefile.win32 b/qmake/Makefile.win32
index cd2cdd9c40..862c1e833e 100644
--- a/qmake/Makefile.win32
+++ b/qmake/Makefile.win32
@@ -154,8 +154,6 @@ $(OBJS): $(PCH_OBJECT)
$(QTOBJS): $(PCH_OBJECT)
-qlibraryinfo.obj: $(BUILD_PATH)\src\corelib\global\qconfig.cpp
-
qmake_pch.obj:
$(CXX) $(CXXFLAGS_BARE) -c -Yc -Fpqmake_pch.pch -TP $(QMKSRC)\qmake_pch.h
diff --git a/qmake/library/qmakebuiltins.cpp b/qmake/library/qmakebuiltins.cpp
index 7648b9373d..b30373b596 100644
--- a/qmake/library/qmakebuiltins.cpp
+++ b/qmake/library/qmakebuiltins.cpp
@@ -101,7 +101,7 @@ enum TestFunc {
T_EXISTS, T_EXPORT, T_CLEAR, T_UNSET, T_EVAL, T_CONFIG, T_SYSTEM,
T_DEFINED, T_DISCARD_FROM, T_CONTAINS, T_INFILE,
T_COUNT, T_ISEMPTY, T_PARSE_JSON, T_INCLUDE, T_LOAD, T_DEBUG, T_LOG, T_MESSAGE, T_WARNING, T_ERROR, T_IF,
- T_MKPATH, T_WRITE_FILE, T_TOUCH, T_CACHE
+ T_MKPATH, T_WRITE_FILE, T_TOUCH, T_CACHE, T_RELOAD_PROPERTIES
};
void QMakeEvaluator::initFunctionStatics()
@@ -200,6 +200,7 @@ void QMakeEvaluator::initFunctionStatics()
{ "write_file", T_WRITE_FILE },
{ "touch", T_TOUCH },
{ "cache", T_CACHE },
+ { "reload_properties", T_RELOAD_PROPERTIES },
};
statics.functions.reserve((int)(sizeof(testInits)/sizeof(testInits[0])));
for (unsigned i = 0; i < sizeof(testInits)/sizeof(testInits[0]); ++i)
@@ -2015,6 +2016,11 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
}
return writeFile(fL1S("cache "), fn, QIODevice::Append, false, varstr);
}
+ case T_RELOAD_PROPERTIES:
+#ifdef QT_BUILD_QMAKE
+ m_option->reloadProperties();
+#endif
+ return ReturnTrue;
default:
evalError(fL1S("Function '%1' is not implemented.").arg(function.toQString(m_tmp1)));
return ReturnFalse;
diff --git a/qmake/library/qmakeglobals.h b/qmake/library/qmakeglobals.h
index 96c39fa168..1bb8632883 100644
--- a/qmake/library/qmakeglobals.h
+++ b/qmake/library/qmakeglobals.h
@@ -125,6 +125,7 @@ public:
void setDirectories(const QString &input_dir, const QString &output_dir);
#ifdef QT_BUILD_QMAKE
void setQMakeProperty(QMakeProperty *prop) { property = prop; }
+ void reloadProperties() { property->reload(); }
ProString propertyValue(const ProKey &name) const { return property->value(name); }
#else
# ifdef PROEVALUATOR_INIT_PROPS
diff --git a/qmake/option.cpp b/qmake/option.cpp
index fb49f5a100..b8102ecf06 100644
--- a/qmake/option.cpp
+++ b/qmake/option.cpp
@@ -638,6 +638,11 @@ qmakeAddCacheClear(qmakeCacheClearFunc func, void **data)
cache_items.append(new QMakeCacheClearItem(func, data));
}
+QString qmake_absoluteLocation()
+{
+ return Option::globals->qmake_abslocation;
+}
+
QString qmake_libraryInfoFile()
{
if (!Option::globals->qtconf.isEmpty())
diff --git a/qmake/property.cpp b/qmake/property.cpp
index d17d62481a..9a8db8904d 100644
--- a/qmake/property.cpp
+++ b/qmake/property.cpp
@@ -70,6 +70,12 @@ static const struct {
QMakeProperty::QMakeProperty() : settings(0)
{
+ reload();
+}
+
+void QMakeProperty::reload()
+{
+ QLibraryInfo::reload();
for (unsigned i = 0; i < sizeof(propList)/sizeof(propList[0]); i++) {
QString name = QString::fromLatin1(propList[i].name);
if (!propList[i].singular) {
diff --git a/qmake/property.h b/qmake/property.h
index cd04e4bc03..b0129196eb 100644
--- a/qmake/property.h
+++ b/qmake/property.h
@@ -50,6 +50,8 @@ public:
QMakeProperty();
~QMakeProperty();
+ void reload();
+
bool hasValue(const ProKey &);
ProString value(const ProKey &);
diff --git a/qmake/qmake-aux.pro b/qmake/qmake-aux.pro
index 33a7fbfd2d..357ebc7367 100644
--- a/qmake/qmake-aux.pro
+++ b/qmake/qmake-aux.pro
@@ -6,6 +6,24 @@ QMAKE_DOCS = $$PWD/doc/qmake.qdocconf
# qmake binary
win32: EXTENSION = .exe
+
+!build_pass {
+ qmake_exe.target = $$OUT_PWD/qmake$$EXTENSION
+ qmake_exe.depends = ../bin/qmake$$EXTENSION builtin-qt.conf
+ equals(QMAKE_DIR_SEP, /): \
+ qmake_exe.commands = cat ../bin/qmake$$EXTENSION builtin-qt.conf > qmake$$EXTENSION && chmod +x qmake$$EXTENSION
+ else: \
+ qmake_exe.commands = copy /B ..\bin\qmake$$EXTENSION + builtin-qt.conf qmake$$EXTENSION
+ QMAKE_EXTRA_TARGETS += qmake_exe
+
+ QMAKE_CLEAN += builtin-qt.conf
+ QMAKE_DISTCLEAN += qmake$$EXTENSION
+
+ first.depends += qmake_exe
+ QMAKE_EXTRA_TARGETS += first
+}
+
qmake.path = $$[QT_HOST_BINS]
-qmake.files = $$OUT_PWD/../bin/qmake$$EXTENSION
+qmake.files = $$OUT_PWD/qmake$$EXTENSION
+qmake.CONFIG = no_check_exist executable
INSTALLS += qmake