summaryrefslogtreecommitdiff
path: root/qmake/generators/win32/msvc_dsp.cpp
Side-by-side diff
Diffstat (limited to 'qmake/generators/win32/msvc_dsp.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--qmake/generators/win32/msvc_dsp.cpp171
1 files changed, 107 insertions, 64 deletions
diff --git a/qmake/generators/win32/msvc_dsp.cpp b/qmake/generators/win32/msvc_dsp.cpp
index 8b08c78..3fa0496 100644
--- a/qmake/generators/win32/msvc_dsp.cpp
+++ b/qmake/generators/win32/msvc_dsp.cpp
@@ -510,2 +510,26 @@ DspMakefileGenerator::init()
+ const bool thread = project->isActiveConfig("thread");
+
+ if ( project->isActiveConfig("stl") ) {
+ project->variables()["QMAKE_CFLAGS"] += project->variables()["QMAKE_CFLAGS_STL_ON"];
+ project->variables()["QMAKE_CXXFLAGS"] += project->variables()["QMAKE_CXXFLAGS_STL_ON"];
+ } else {
+ project->variables()["QMAKE_CFLAGS"] += project->variables()["QMAKE_CFLAGS_STL_OFF"];
+ project->variables()["QMAKE_CXXFLAGS"] += project->variables()["QMAKE_CXXFLAGS_STL_OFF"];
+ }
+ if ( project->isActiveConfig("exceptions") ) {
+ project->variables()["QMAKE_CFLAGS"] += project->variables()["QMAKE_CFLAGS_EXCEPTIONS_ON"];
+ project->variables()["QMAKE_CXXFLAGS"] += project->variables()["QMAKE_CXXFLAGS_EXCEPTIONS_ON"];
+ } else {
+ project->variables()["QMAKE_CFLAGS"] += project->variables()["QMAKE_CFLAGS_EXCEPTIONS_OFF"];
+ project->variables()["QMAKE_CXXFLAGS"] += project->variables()["QMAKE_CXXFLAGS_EXCEPTIONS_OFF"];
+ }
+ if ( project->isActiveConfig("rtti") ) {
+ project->variables()["QMAKE_CFLAGS"] += project->variables()["QMAKE_CFLAGS_RTTI_ON"];
+ project->variables()["QMAKE_CXXFLAGS"] += project->variables()["QMAKE_CXXFLAGS_RTTI_ON"];
+ } else {
+ project->variables()["QMAKE_CFLAGS"] += project->variables()["QMAKE_CFLAGS_RTTI_OFF"];
+ project->variables()["QMAKE_CXXFLAGS"] += project->variables()["QMAKE_CXXFLAGS_RTTI_OFF"];
+ }
+
/* this should probably not be here, but I'm using it to wrap the .t files */
@@ -570,3 +594,3 @@ DspMakefileGenerator::init()
} else {
- if(project->isActiveConfig("thread"))
+ if( thread )
project->variables()["QMAKE_LIBS"] += project->variables()["QMAKE_LIBS_QT_THREAD"];
@@ -580,3 +604,3 @@ DspMakefileGenerator::init()
QString ver;
- ver.sprintf("qt%s" QTDLL_POSTFIX "%d.lib", (project->isActiveConfig("thread") ? "-mt" : ""), hver);
+ ver.sprintf("qt%s" QTDLL_POSTFIX "%d.lib", (thread ? "-mt" : ""), hver);
QStringList &libs = project->variables()["QMAKE_LIBS"];
@@ -624,3 +648,3 @@ DspMakefileGenerator::init()
}
- if ( project->isActiveConfig("thread") ) {
+ if ( thread ) {
if(project->isActiveConfig("qt"))
@@ -734,2 +758,3 @@ DspMakefileGenerator::init()
+ processPrlFiles();
QStringList &libs = project->variables()["QMAKE_LIBS"];
@@ -756,2 +781,14 @@ DspMakefileGenerator::init()
QString dest;
+ QString postLinkStep;
+ QString copyDllStep;
+ QString activeQtStepPreCopyDll;
+ QString activeQtStepPostCopyDll;
+ QString activeQtStepPreCopyDllDebug;
+ QString activeQtStepPostCopyDllDebug;
+ QString activeQtStepPreCopyDllRelease;
+ QString activeQtStepPostCopyDllRelease;
+
+ if ( !project->variables()["QMAKE_POST_LINK"].isEmpty() )
+ postLinkStep += var("QMAKE_POST_LINK");
+
if ( !project->variables()["DESTDIR"].isEmpty() ) {
@@ -772,16 +809,9 @@ DspMakefileGenerator::init()
QStringList dlldirs = project->variables()["DLLDESTDIR"];
- QString copydll = "# Begin Special Build Tool\n"
- "TargetPath=" + dest + "\n"
- "SOURCE=$(InputPath)\n"
- "PostBuild_Desc=Copy DLL to " + project->first("DLLDESTDIR") + "\n"
- "PostBuild_Cmds=";
-
+ if ( dlldirs.count() )
+ copyDllStep += "\t";
for ( QStringList::Iterator dlldir = dlldirs.begin(); dlldir != dlldirs.end(); ++dlldir ) {
- copydll += "copy \"" + dest + "\" \"" + *dlldir + "\"\t";
+ copyDllStep += "copy \"$(TargetPath)\" \"" + *dlldir + "\"\t";
}
-
- copydll += "\n# End Special Build Tool";
- project->variables()["MSVCDSP_COPY_DLL_REL"].append( copydll );
- project->variables()["MSVCDSP_COPY_DLL_DBG"].append( copydll );
}
+
if ( project->isActiveConfig("activeqt") ) {
@@ -797,35 +827,30 @@ DspMakefileGenerator::init()
if ( project->isActiveConfig( "dll" ) ) {
- QString regcmd = "# Begin Special Build Tool\n"
- "TargetPath=" + targetfilename + "\n"
- "SOURCE=$(InputPath)\n"
- "PostBuild_Desc=Finalizing ActiveQt server...\n"
- "PostBuild_Cmds=" +
- idc + " %1 -idl tmp\\" + targetfilename + ".idl -version " + version +
+ activeQtStepPreCopyDll +=
+ "\t" + idc + " %1 -idl tmp\\" + targetfilename + ".idl -version " + version +
"\t" + idl + " tmp\\" + targetfilename + ".idl /nologo /o tmp\\" + targetfilename + ".midl /tlb tmp\\" + targetfilename + ".tlb /iid tmp\\dump.midl /dlldata tmp\\dump.midl /cstub tmp\\dump.midl /header tmp\\dump.midl /proxy tmp\\dump.midl /sstub tmp\\dump.midl"
- "\t" + idc + " %1 /tlb tmp\\" + targetfilename + ".tlb"
- "\t" + idc + " %1 /regserver\n"
- "# End Special Build Tool";
+ "\t" + idc + " %1 /tlb tmp\\" + targetfilename + ".tlb";
+ activeQtStepPostCopyDll +=
+ "\t" + idc + " %1 /regserver\n";
- QString executable = project->variables()["MSVCDSP_TARGETDIRREL"].first() + "\\" + project->variables()["TARGET"].first();
- project->variables()["MSVCDSP_COPY_DLL_REL"].append( regcmd.arg(executable).arg(executable).arg(executable) );
+ QString executable = project->variables()["MSVCDSP_TARGETDIRREL"].first() + "\\" + targetfilename + ".dll";
+ activeQtStepPreCopyDllRelease = activeQtStepPreCopyDll.arg(executable).arg(executable);
+ activeQtStepPostCopyDllRelease = activeQtStepPostCopyDll.arg(executable);
- executable = project->variables()["MSVCDSP_TARGETDIRDEB"].first() + "\\" + project->variables()["TARGET"].first();
- project->variables()["MSVCDSP_COPY_DLL_DBG"].append( regcmd.arg(executable).arg(executable).arg(executable) );
+ executable = project->variables()["MSVCDSP_TARGETDIRDEB"].first() + "\\" + targetfilename + ".dll";
+ activeQtStepPreCopyDllDebug = activeQtStepPreCopyDll.arg(executable).arg(executable);
+ activeQtStepPostCopyDllDebug = activeQtStepPostCopyDll.arg(executable);
} else {
- QString regcmd = "# Begin Special Build Tool\n"
- "TargetPath=" + targetfilename + "\n"
- "SOURCE=$(InputPath)\n"
- "PostBuild_Desc=Finalizing ActiveQt server...\n"
- "PostBuild_Cmds="
- "%1 -dumpidl tmp\\" + targetfilename + ".idl -version " + version +
+ activeQtStepPreCopyDll +=
+ "\t%1 -dumpidl tmp\\" + targetfilename + ".idl -version " + version +
"\t" + idl + " tmp\\" + targetfilename + ".idl /nologo /o tmp\\" + targetfilename + ".midl /tlb tmp\\" + targetfilename + ".tlb /iid tmp\\dump.midl /dlldata tmp\\dump.midl /cstub tmp\\dump.midl /header tmp\\dump.midl /proxy tmp\\dump.midl /sstub tmp\\dump.midl"
- "\t" + idc + " %1 /tlb tmp\\" + targetfilename + ".tlb"
- "\t%1 -regserver\n"
- "# End Special Build Tool";
-
- QString executable = project->variables()["MSVCDSP_TARGETDIRREL"].first() + "\\" + project->variables()["TARGET"].first();
- project->variables()["MSVCDSP_REGSVR_REL"].append( regcmd.arg(executable).arg(executable).arg(executable) );
-
- executable = project->variables()["MSVCDSP_TARGETDIRDEB"].first() + "\\" + project->variables()["TARGET"].first();
- project->variables()["MSVCDSP_REGSVR_DBG"].append( regcmd.arg(executable).arg(executable).arg(executable) );
+ "\t" + idc + " %1 /tlb tmp\\" + targetfilename + ".tlb";
+ activeQtStepPostCopyDll +=
+ "\t%1 -regserver\n";
+ QString executable = project->variables()["MSVCDSP_TARGETDIRREL"].first() + "\\" + targetfilename + ".exe";
+ activeQtStepPreCopyDllRelease = activeQtStepPreCopyDll.arg(executable).arg(executable);
+ activeQtStepPostCopyDllRelease = activeQtStepPostCopyDll.arg(executable);
+
+ executable = project->variables()["MSVCDSP_TARGETDIRDEB"].first() + "\\" + targetfilename + ".exe";
+ activeQtStepPreCopyDllDebug = activeQtStepPreCopyDll.arg(executable).arg(executable);
+ activeQtStepPostCopyDllDebug = activeQtStepPostCopyDll.arg(executable);
}
@@ -833,2 +858,19 @@ DspMakefileGenerator::init()
}
+
+
+ if ( !postLinkStep.isEmpty() || !copyDllStep.isEmpty() || !activeQtStepPreCopyDllDebug.isEmpty() || !activeQtStepPreCopyDllRelease.isEmpty() ) {
+ project->variables()["MSVCDSP_POST_LINK_DBG"].append(
+ "# Begin Special Build Tool\n"
+ "SOURCE=$(InputPath)\n"
+ "PostBuild_Desc=Post Build Step\n"
+ "PostBuild_Cmds=" + postLinkStep + activeQtStepPreCopyDllDebug + copyDllStep + activeQtStepPostCopyDllDebug + "\n"
+ "# End Special Build Tool\n" );
+ project->variables()["MSVCDSP_POST_LINK_REL"].append(
+ "# Begin Special Build Tool\n"
+ "SOURCE=$(InputPath)\n"
+ "PostBuild_Desc=Post Build Step\n"
+ "PostBuild_Cmds=" + postLinkStep + activeQtStepPreCopyDllRelease + copyDllStep + activeQtStepPostCopyDllRelease + "\n"
+ "# End Special Build Tool\n" );
+ }
+
if ( !project->variables()["SOURCES"].isEmpty() || !project->variables()["RC_FILE"].isEmpty() ) {
@@ -846,3 +888,3 @@ DspMakefileGenerator::init()
QString
-DspMakefileGenerator::findTemplate(QString file)
+DspMakefileGenerator::findTemplate(const QString &file)
{
@@ -873,8 +915,8 @@ DspMakefileGenerator::processPrlVariable(const QString &var, const QStringList &
-int
+void
DspMakefileGenerator::beginGroupForFile(QString file, QTextStream &t,
- QString filter)
+ const QString& filter)
{
if(project->isActiveConfig("flat"))
- return 0;
+ return;
@@ -885,3 +927,3 @@ DspMakefileGenerator::beginGroupForFile(QString file, QTextStream &t,
if(file == currentGroup)
- return 0;
+ return;
@@ -889,3 +931,3 @@ DspMakefileGenerator::beginGroupForFile(QString file, QTextStream &t,
endGroups(t);
- return 0;
+ return;
}
@@ -893,17 +935,19 @@ DspMakefileGenerator::beginGroupForFile(QString file, QTextStream &t,
file = file.mid(currentGroup.length());
- else
- endGroups(t);
- int lvl = file.contains(Option::dir_sep), old_lvl = currentGroup.contains(Option::dir_sep);
- if(lvl > old_lvl) {
- QStringList dirs = QStringList::split(Option::dir_sep, file);
- for(QStringList::Iterator dir_it = dirs.begin(); dir_it != dirs.end(); ++dir_it) {
- t << "# Begin Group \"" << (*dir_it) << "\"\n"
- << "# Prop Default_Filter \"" << filter << "\"\n";
- }
- } else {
- for(int x = old_lvl - lvl; x; x--)
+ int dirSep = currentGroup.findRev( Option::dir_sep );
+ while( !file.startsWith( currentGroup ) && dirSep != -1 ) {
+ currentGroup.truncate( dirSep );
+ dirSep = currentGroup.findRev( Option::dir_sep );
+ if ( !file.startsWith( currentGroup ) && dirSep != -1 )
t << "\n# End Group\n";
}
+ if ( !file.startsWith( currentGroup ) ) {
+ t << "\n# End Group\n";
+ currentGroup = "";
+ }
+ QStringList dirs = QStringList::split(Option::dir_sep, file.right( file.length() - currentGroup.length() ) );
+ for(QStringList::Iterator dir_it = dirs.begin(); dir_it != dirs.end(); ++dir_it) {
+ t << "# Begin Group \"" << (*dir_it) << "\"\n"
+ << "# Prop Default_Filter \"" << filter << "\"\n";
+ }
currentGroup = file;
- return lvl - old_lvl;
}
@@ -911,3 +955,3 @@ DspMakefileGenerator::beginGroupForFile(QString file, QTextStream &t,
-int
+void
DspMakefileGenerator::endGroups(QTextStream &t)
@@ -915,5 +959,5 @@ DspMakefileGenerator::endGroups(QTextStream &t)
if(project->isActiveConfig("flat"))
- return 0;
+ return;
else if(currentGroup.isEmpty())
- return 0;
+ return;
@@ -924,3 +968,2 @@ DspMakefileGenerator::endGroups(QTextStream &t)
currentGroup = "";
- return dirs.count();
}