From 03a84a7e5e926820f48d9030aa9881a7c6d43eb6 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 12 Jun 2012 21:09:15 +0200 Subject: [PATCH] make a bunch of invariant variables non-magic follow suit with qmake ... Change-Id: I683eb47de3377fe1abf0611f86c4250562aa4132 Reviewed-by: Daniel Teske --- src/shared/proparser/qmakeevaluator.cpp | 153 +++++++++++------------- src/shared/proparser/qmakeevaluator.h | 7 +- 2 files changed, 74 insertions(+), 86 deletions(-) diff --git a/src/shared/proparser/qmakeevaluator.cpp b/src/shared/proparser/qmakeevaluator.cpp index de64dcd7c5e..f9db3c426e3 100644 --- a/src/shared/proparser/qmakeevaluator.cpp +++ b/src/shared/proparser/qmakeevaluator.cpp @@ -821,6 +821,75 @@ void QMakeEvaluator::visitProVariable( } } +void QMakeEvaluator::loadDefaults() +{ + ProValueMap &vars = m_valuemapStack.top(); + + vars[ProString("LITERAL_WHITESPACE")] << ProString("\t", NoHash); + vars[ProString("LITERAL_DOLLAR")] << ProString("$", NoHash); + vars[ProString("LITERAL_HASH")] << ProString("#", NoHash); + vars[ProString("DIR_SEPARATOR")] << ProString(m_option->dir_sep, NoHash); + vars[ProString("DIRLIST_SEPARATOR")] << ProString(m_option->dirlist_sep, NoHash); + vars[ProString("_DATE_")] << ProString(QDateTime::currentDateTime().toString(), NoHash); +#if defined(Q_OS_WIN32) + vars[ProString("QMAKE_HOST.os")] << ProString("Windows", NoHash); + + DWORD name_length = 1024; + wchar_t name[1024]; + if (GetComputerName(name, &name_length)) + vars[ProString("QMAKE_HOST.name")] << ProString(QString::fromWCharArray(name), NoHahs); + + QSysInfo::WinVersion ver = QSysInfo::WindowsVersion; + vars[ProString("QMAKE_HOST.version")] << ProString(QString::number(ver), NoHash); + ProString verStr; + switch (ver) { + case QSysInfo::WV_Me: verStr = ProString("WinMe", NoHash); break; + case QSysInfo::WV_95: verStr = ProString("Win95", NoHash); break; + case QSysInfo::WV_98: verStr = ProString("Win98", NoHash); break; + case QSysInfo::WV_NT: verStr = ProString("WinNT", NoHash); break; + case QSysInfo::WV_2000: verStr = ProString("Win2000", NoHash); break; + case QSysInfo::WV_2003: verStr = ProString("Win2003", NoHash); break; + case QSysInfo::WV_XP: verStr = ProString("WinXP", NoHash); break; + case QSysInfo::WV_VISTA: verStr = ProString("WinVista", NoHash); break; + default: verStr = ProString("Unknown", NoHash); break; + } + vars[ProString("QMAKE_HOST.version_string")] << verStr; + + SYSTEM_INFO info; + GetSystemInfo(&info); + ProString archStr; + switch (info.wProcessorArchitecture) { +# ifdef PROCESSOR_ARCHITECTURE_AMD64 + case PROCESSOR_ARCHITECTURE_AMD64: + archStr = ProString("x86_64", NoHash); + break; +# endif + case PROCESSOR_ARCHITECTURE_INTEL: + archStr = ProString("x86", NoHash); + break; + case PROCESSOR_ARCHITECTURE_IA64: +# ifdef PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 + case PROCESSOR_ARCHITECTURE_IA32_ON_WIN64: +# endif + archStr = ProString("IA64", NoHash); + break; + default: + archStr = ProString("Unknown", NoHash); + break; + } + vars[ProString("QMAKE_HOST.arch")] << archStr; +#elif defined(Q_OS_UNIX) + struct utsname name; + if (!uname(&name)) { + vars[ProString("QMAKE_HOST.os")] << ProString(name.sysname, NoHash); + vars[ProString("QMAKE_HOST.name")] << ProString(QString::fromLocal8Bit(name.nodename), NoHash); + vars[ProString("QMAKE_HOST.version")] << ProString(name.release, NoHash); + vars[ProString("QMAKE_HOST.version_string")] << ProString(name.version, NoHash); + vars[ProString("QMAKE_HOST.arch")] << ProString(name.machine, NoHash); + } +#endif +} + bool QMakeEvaluator::prepareProject() { if (m_option->do_cache) { @@ -848,6 +917,7 @@ bool QMakeEvaluator::prepareProject() m_option->qmakespec = evaluator.first(ProString("QMAKESPEC")).toQString(); } m_option->cachefile = qmake_cache; + valuesRef(ProString("_QMAKE_CACHE_")) << ProString(qmake_cache, NoHash); } return true; } @@ -858,6 +928,8 @@ bool QMakeEvaluator::loadSpec() m_cumulative = false; #endif + loadDefaults(); + QString qmakespec = m_option->expandEnvVars(m_option->qmakespec); if (qmakespec.isEmpty()) qmakespec = QLatin1String("default"); @@ -1645,93 +1717,12 @@ ProStringList QMakeEvaluator::values(const ProString &variableName) const case V_PWD: // containing directory of most nested project/include file ret = currentDirectory(); break; - case V_DIR_SEPARATOR: - ret = m_option->dir_sep; - break; - case V_DIRLIST_SEPARATOR: - ret = m_option->dirlist_sep; - break; - case V__DATE_: //current date/time - ret = QDateTime::currentDateTime().toString(); - break; case V__PRO_FILE_: ret = m_profileStack.first()->fileName(); break; case V__PRO_FILE_PWD_: ret = m_profileStack.first()->directoryName(); break; - case V__QMAKE_CACHE_: - ret = m_option->cachefile; - break; -#if defined(Q_OS_WIN32) - case V_QMAKE_HOST_os: ret = QLatin1String("Windows"); break; - case V_QMAKE_HOST_name: { - DWORD name_length = 1024; - TCHAR name[1024]; - if (GetComputerName(name, &name_length)) - ret = QString::fromUtf16((ushort*)name, name_length); - break; - } - case V_QMAKE_HOST_version: - ret = QString::number(QSysInfo::WindowsVersion); - break; - case V_QMAKE_HOST_version_string: - switch (QSysInfo::WindowsVersion) { - case QSysInfo::WV_Me: ret = QLatin1String("WinMe"); break; - case QSysInfo::WV_95: ret = QLatin1String("Win95"); break; - case QSysInfo::WV_98: ret = QLatin1String("Win98"); break; - case QSysInfo::WV_NT: ret = QLatin1String("WinNT"); break; - case QSysInfo::WV_2000: ret = QLatin1String("Win2000"); break; - case QSysInfo::WV_2003: ret = QLatin1String("Win2003"); break; - case QSysInfo::WV_XP: ret = QLatin1String("WinXP"); break; - case QSysInfo::WV_VISTA: ret = QLatin1String("WinVista"); break; - default: ret = QLatin1String("Unknown"); break; - } - break; - case V_QMAKE_HOST_arch: - SYSTEM_INFO info; - GetSystemInfo(&info); - switch(info.wProcessorArchitecture) { -#ifdef PROCESSOR_ARCHITECTURE_AMD64 - case PROCESSOR_ARCHITECTURE_AMD64: - ret = QLatin1String("x86_64"); - break; -#endif - case PROCESSOR_ARCHITECTURE_INTEL: - ret = QLatin1String("x86"); - break; - case PROCESSOR_ARCHITECTURE_IA64: -#ifdef PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 - case PROCESSOR_ARCHITECTURE_IA32_ON_WIN64: -#endif - ret = QLatin1String("IA64"); - break; - default: - ret = QLatin1String("Unknown"); - break; - } - break; -#elif defined(Q_OS_UNIX) - case V_QMAKE_HOST_os: - case V_QMAKE_HOST_name: - case V_QMAKE_HOST_version: - case V_QMAKE_HOST_version_string: - case V_QMAKE_HOST_arch: - { - struct utsname name; - const char *what; - if (!uname(&name)) { - switch (vlidx) { - case V_QMAKE_HOST_os: what = name.sysname; break; - case V_QMAKE_HOST_name: what = name.nodename; break; - case V_QMAKE_HOST_version: what = name.release; break; - case V_QMAKE_HOST_version_string: what = name.version; break; - case V_QMAKE_HOST_arch: what = name.machine; break; - } - ret = QString::fromLocal8Bit(what); - } - } -#endif } return ProStringList(ProString(ret, NoHash)); } diff --git a/src/shared/proparser/qmakeevaluator.h b/src/shared/proparser/qmakeevaluator.h index b7398b10ff4..f5f2d9c41df 100644 --- a/src/shared/proparser/qmakeevaluator.h +++ b/src/shared/proparser/qmakeevaluator.h @@ -105,6 +105,7 @@ public: static ALWAYS_INLINE void skipHashStr(const ushort *&tokPtr); void skipExpression(const ushort *&tokPtr); + void loadDefaults(); bool prepareProject(); bool loadSpec(); void initFrom(const QMakeEvaluator &other); @@ -206,12 +207,8 @@ public: QMakeHandler *m_handler; enum VarName { - V_DIRLIST_SEPARATOR, V_DIR_SEPARATOR, V_OUT_PWD, V_PWD, - V__PRO_FILE_, V__PRO_FILE_PWD_, - V_QMAKE_HOST_arch, V_QMAKE_HOST_name, V_QMAKE_HOST_os, - V_QMAKE_HOST_version, V_QMAKE_HOST_version_string, - V__DATE_, V__QMAKE_CACHE_ + V__PRO_FILE_, V__PRO_FILE_PWD_ }; };