Skip to content

Commit

Permalink
Do not write Sysroot and SysrootifyPrefix into qmakeconfig.cpp
Browse files Browse the repository at this point in the history
Those have fixed values.

Change-Id: I7f1ba8036f43413d3c805f4b419ae79e037343fb
Reviewed-by: Alexey Edelev <[email protected]>
Reviewed-by: Alexandru Croitor <[email protected]>
  • Loading branch information
jobor committed Mar 11, 2021
1 parent 504d0c3 commit c651e7b
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 32 deletions.
2 changes: 0 additions & 2 deletions cmake/QtQmakeHelpers.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,6 @@ function(qt_generate_qconfig_cpp in_file out_file)
set(QT_CONFIG_STR_OFFSETS "")
set(QT_CONFIG_STRS "")

qt_add_string_to_qconfig_cpp("") # config.input.sysroot
qt_add_string_to_qconfig_cpp("false") # qmake_sysrootify
qt_add_string_to_qconfig_cpp("${INSTALL_BINDIR}")
qt_add_string_to_qconfig_cpp("${INSTALL_LIBEXECDIR}")
qt_add_string_to_qconfig_cpp("${INSTALL_LIBDIR}")
Expand Down
65 changes: 41 additions & 24 deletions qmake/qmakelibraryinfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ QString QMakeLibraryInfo::path(int loc)
QString ret = rawLocation(loc, QMakeLibraryInfo::FinalPaths);

// Automatically prepend the sysroot to target paths
if (loc < QMakeLibraryInfo::SysrootPath || loc > QMakeLibraryInfo::LastHostPath)
if (loc < QMakeLibraryInfo::FirstHostPath || loc > QMakeLibraryInfo::LastHostPath)
sysrootify(ret);

return ret;
Expand All @@ -158,7 +158,12 @@ struct LocationInfo
static LocationInfo defaultLocationInfo(int loc)
{
LocationInfo result;
if (unsigned(loc) < sizeof(qtConfEntries) / sizeof(qtConfEntries[0])) {

if (loc == QMakeLibraryInfo::SysrootPath) {
result.key = QStringLiteral("Sysroot");
} else if (loc == QMakeLibraryInfo::SysrootifyPrefixPath) {
result.key = QStringLiteral("SysrootifyPrefix");
} else if (unsigned(loc) < sizeof(qtConfEntries) / sizeof(qtConfEntries[0])) {
result.key = QLatin1String(qtConfEntries[loc].key);
result.defaultValue = QLatin1String(qtConfEntries[loc].value);
}
Expand All @@ -171,6 +176,37 @@ static LocationInfo defaultLocationInfo(int loc)
return result;
}

static QString storedPath(int loc)
{
QString result;

// "volatile" here is a hack to prevent compilers from doing a
// compile-time strlen() on "path". The issue is that Qt installers
// will binary-patch the Qt installation paths -- in such scenarios, Qt
// will be built with a dummy path, thus the compile-time result of
// strlen is meaningless.
const char *volatile path = nullptr;
if (loc == QLibraryInfo::PrefixPath || loc == QMakeLibraryInfo::HostPrefixPath) {
result = QLibraryInfo::path(QLibraryInfo::PrefixPath);
} else if (loc == QMakeLibraryInfo::SysrootPath) {
// empty result
} else if (loc == QMakeLibraryInfo::SysrootifyPrefixPath) {
result = QStringLiteral("false");
} else if (unsigned(loc)
<= sizeof(qt_configure_str_offsets) / sizeof(qt_configure_str_offsets[0])) {
path = qt_configure_strs + qt_configure_str_offsets[loc - 1];
#ifndef Q_OS_WIN // On Windows we use the registry
} else if (loc == QLibraryInfo::SettingsPath) {
path = QT_CONFIGURE_SETTINGS_PATH;
#endif
}

if (path)
result = QString::fromLocal8Bit(path);

return result;
}

QString QMakeLibraryInfo::rawLocation(int loc, QMakeLibraryInfo::PathGroup group)
{
QString ret;
Expand Down Expand Up @@ -241,27 +277,8 @@ QString QMakeLibraryInfo::rawLocation(int loc, QMakeLibraryInfo::PathGroup group
}
}

if (!fromConf) {
// "volatile" here is a hack to prevent compilers from doing a
// compile-time strlen() on "path". The issue is that Qt installers
// will binary-patch the Qt installation paths -- in such scenarios, Qt
// will be built with a dummy path, thus the compile-time result of
// strlen is meaningless.
const char *volatile path = nullptr;
if (loc == QLibraryInfo::PrefixPath || loc == HostPrefixPath) {
ret = QLibraryInfo::path(QLibraryInfo::PrefixPath);
} else if (unsigned(loc)
<= sizeof(qt_configure_str_offsets) / sizeof(qt_configure_str_offsets[0])) {
path = qt_configure_strs + qt_configure_str_offsets[loc - 1];
#ifndef Q_OS_WIN // On Windows we use the registry
} else if (loc == QLibraryInfo::SettingsPath) {
path = QT_CONFIGURE_SETTINGS_PATH;
#endif
}

if (path)
ret = QString::fromLocal8Bit(path);
}
if (!fromConf)
ret = storedPath(loc);

// These values aren't actually paths and thus need to be returned verbatim.
if (loc == TargetSpecPath || loc == HostSpecPath || loc == SysrootifyPrefixPath)
Expand All @@ -274,7 +291,7 @@ QString QMakeLibraryInfo::rawLocation(int loc, QMakeLibraryInfo::PathGroup group
// loc == PrefixPath while a sysroot is set would make no sense here.
// loc == SysrootPath only makes sense if qmake lives inside the sysroot itself.
baseDir = QFileInfo(libraryInfoFile()).absolutePath();
} else if (loc > SysrootPath && loc <= LastHostPath) {
} else if (loc >= FirstHostPath && loc <= LastHostPath) {
// We make any other host path absolute to the host prefix directory.
baseDir = rawLocation(HostPrefixPath, group);
} else {
Expand Down
9 changes: 5 additions & 4 deletions qmake/qmakelibraryinfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,16 +59,17 @@ struct QMakeLibraryInfo
* See qconfig.cpp.in and QLibraryInfo for details.
*/
enum LibraryPathQMakeExtras {
SysrootPath = QLibraryInfo::TestsPath + 1,
SysrootifyPrefixPath,
HostBinariesPath,
HostBinariesPath = QLibraryInfo::TestsPath + 1,
FirstHostPath = HostBinariesPath,
HostLibraryExecutablesPath,
HostLibrariesPath,
HostDataPath,
TargetSpecPath,
HostSpecPath,
HostPrefixPath,
LastHostPath = HostPrefixPath,
SysrootPath,
SysrootifyPrefixPath,
LastHostPath = SysrootifyPrefixPath
};
enum PathGroup { FinalPaths, EffectivePaths, EffectiveSourcePaths, DevicePaths };
static QString rawLocation(int loc, PathGroup group);
Expand Down
4 changes: 2 additions & 2 deletions src/corelib/global/qconfig.cpp.in
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,6 @@ static const struct {
{ "Tests", "tests" },
// Put new entries above this line ONLY!
#ifdef QT_BUILD_QMAKE
{ "Sysroot", "" },
{ "SysrootifyPrefix", "" },
{ "HostBinaries", "bin" },
#ifdef Q_OS_WIN
{ "HostLibraryExecutables", "bin" },
Expand All @@ -96,5 +94,7 @@ static const struct {
{ "TargetSpec", "" },
{ "HostSpec", "" },
{ "HostPrefix", "" },
{ "Sysroot", "" },
{ "SysrootifyPrefix", "" },
#endif
};

0 comments on commit c651e7b

Please sign in to comment.