[PATCH] Qt4: qmake to generate .vcproj files

Thiago A. CorrĂȘa <[email protected]> Sun, 10 Jul 2005 16:41:56 -0300
Newsgroups gmane.comp.kde.devel.cygwin
Message-ID <[email protected]>
Hi,

   It took me quite a while, but this patch allows qmake to generate .vcproj files. It's still far from perfect, TEMPLATE = subdirs won't work. Not sure what else won't work as well, most likely moc build rules won't either :(

   But at least it won't crash :)

Regards,
   Thiago A. Correa

 
__________________________________________________________________________
UOL Fone: Fale com o Brasil e o Mundo com até 90% de economia. 
http://www.uol.com.br/fone

_______________________________________________
kde-cygwin mailing list
[email protected]
https://mail.kde.org/mailman/listinfo/kde-cygwin
qmake.patch (application/octet-stream, 7.4 KB)
? qmake/Makefile
? qmake/Makefile.Debug
? qmake/Makefile.Release
? qmake/debug
? qmake/qmake
? qmake/qmake.ncb
? qmake/qmake.sln
? qmake/qmake.suo
? qmake/release
? qmake/examples/precompile/Makefile
? qmake/examples/precompile/Makefile.Debug
? qmake/examples/precompile/Makefile.Release
? qmake/examples/precompile/debug
? qmake/examples/precompile/release
? qmake/examples/precompile/tmp
Index: qmake/generators/metamakefile.cpp
===================================================================
RCS file: /cvsroot/qtwin/qt-4/qmake/generators/metamakefile.cpp,v
retrieving revision 1.2
diff -u -p -r1.2 metamakefile.cpp
--- qmake/generators/metamakefile.cpp	5 Jul 2005 03:42:45 -0000	1.2
+++ qmake/generators/metamakefile.cpp	6 Jul 2005 02:28:35 -0000
@@ -394,7 +394,7 @@ MetaMakefileGenerator::createMakefileGen
     } else if(gen == "MSVC.NET") {
         // Visual Studio >= v7.0
         if(proj->first("TEMPLATE").indexOf(QRegExp("^vc.*")) != -1)
-            mkfile = new VcprojGenerator;
+		    mkfile = new VcprojGenerator;
         else
             mkfile = new NmakeMakefileGenerator;
     } else if(gen == "BMAKE") {
Index: qmake/generators/win32/msvc_objectmodel.cpp
===================================================================
RCS file: /cvsroot/qtwin/qt-4/qmake/generators/win32/msvc_objectmodel.cpp,v
retrieving revision 1.1
diff -u -p -r1.1 msvc_objectmodel.cpp
--- qmake/generators/win32/msvc_objectmodel.cpp	5 Jul 2005 03:42:45 -0000	1.1
+++ qmake/generators/win32/msvc_objectmodel.cpp	10 Jul 2005 18:06:02 -0000
@@ -1830,11 +1830,11 @@ VCFilter::VCFilter()
 
 void VCFilter::addMOCstage( QTextStream & /*strm*/, QString filename )
 {
-    /*QString mocOutput = Project->findMocDestination( filename );
+/*    QString mocOutput = Project->var( "MOC_OBJ" );
     QString mocApp = Project->var( "QMAKE_MOC" );
 
     if( mocOutput.isEmpty() && filename.endsWith(".moc") ) {
-        // In specialcases we DO moc .cpp files
+    // In specialcases we DO moc .cpp files
 	// when the result is an .moc file
 	mocOutput = filename;
 	filename = Project->findMocSource( mocOutput );
@@ -1849,7 +1849,8 @@ void VCFilter::addMOCstage( QTextStream 
     CustomBuildTool.CommandLine += (mocApp + " "
 				+ filename + " -o " + mocOutput);
     CustomBuildTool.AdditionalDependencies = mocApp;
-    CustomBuildTool.Outputs += mocOutput;*/
+    CustomBuildTool.Outputs += mocOutput;
+	*/
 }
 
 void VCFilter::addUICstage( QTextStream & /*strm*/, QString str )
Index: qmake/generators/win32/msvc_vcproj.cpp
===================================================================
RCS file: /cvsroot/qtwin/qt-4/qmake/generators/win32/msvc_vcproj.cpp,v
retrieving revision 1.1
diff -u -p -r1.1 msvc_vcproj.cpp
--- qmake/generators/win32/msvc_vcproj.cpp	5 Jul 2005 03:42:45 -0000	1.1
+++ qmake/generators/win32/msvc_vcproj.cpp	10 Jul 2005 19:11:07 -0000
@@ -47,8 +47,8 @@
 //#define DEBUG_PROJECT_GEN
 
 // Registry keys for .NET version detection -------------------------
-const char* _regNet2002		= "Microsoft\\VisualStudio\\7.0\\Setup\\VC\\ProductDir";
-const char* _regNet2003		= "Microsoft\\VisualStudio\\7.1\\Setup\\VC\\ProductDir";
+const char* _regNet2002		= "Software/Microsoft/VisualStudio/7.0/Setup/VC/ProductDir";
+const char* _regNet2003		= "Software/Microsoft/VisualStudio/7.1/Setup/VC/ProductDir";
 
 bool use_net2003_version()
 {
@@ -65,9 +65,9 @@ bool use_net2003_version()
 
     // Get registry entries for both versions
     bool ok = FALSE;
-    QSettings setting(0);
-    QString path2002 = setting.value(_regNet2002).toString();
-    QString path2003 = setting.value(_regNet2003).toString();
+	QSettings setting("HKEY_LOCAL_MACHINE", QSettings::NativeFormat);
+	QString path2002 = setting.value(_regNet2002).toString();
+	QString path2003 = setting.value(_regNet2003).toString();
 
     if ( path2002.isNull() || path2003.isNull() ) {
 	// Only have one MSVC, so use that one
@@ -139,7 +139,7 @@ VcprojGenerator::VcprojGenerator() : Win
 */
 bool VcprojGenerator::writeMakefile(QTextStream &t)
 {
-    // Check if all requirements are fullfilled
+	// Check if all requirements are fullfilled
     if(!project->variables()["QMAKE_FAILED_REQUIREMENTS"].isEmpty()) {
 	fprintf(stderr, "Project file not generated because all requirements not met:\n\t%s\n",
 		var("QMAKE_FAILED_REQUIREMENTS").toLatin1());
@@ -148,16 +148,16 @@ bool VcprojGenerator::writeMakefile(QTex
 
     // Generate project file
     if(project->first("TEMPLATE") == "vcapp" ||
-       project->first("TEMPLATE") == "vclib") {
+		project->first("TEMPLATE") == "vclib") {
         debug_msg(1, "Generator: MSVC.NET: Writing project file" );
-	t << vcProject;
-	return TRUE;
+		t << vcProject;
+		return TRUE;
     }
     // Generate solution file
     else if(project->first("TEMPLATE") == "vcsubdirs") {
         debug_msg(1, "Generator: MSVC.NET: Writing solution file" );
-	writeSubDirs(t);
-	return TRUE;
+		writeSubDirs(t);
+		return TRUE;
     }
     return FALSE;
 
@@ -568,7 +568,7 @@ void VcprojGenerator::initConfiguration(
     DConf.linker.GenerateDebugInformation = _True;
 
     // Modify configurations, based on Qt build
-    if ( project->isActiveConfig("debug") ) {
+	if ( project->isActiveConfig("debug") ) {
 	RConf.IntermediateDirectory =
 	RConf.compiler.AssemblerListingLocation =
 	RConf.compiler.ObjectFile = "Release\\";
@@ -834,6 +834,8 @@ inline bool XLessThanY( QString &x, QStr
 }
 void nonflatDir_BubbleSort( QStringList& list, bool flat_mode )
 {
+	if ( list.isEmpty() )
+	return;
     QStringList::Iterator b = list.begin();
     QStringList::Iterator e = list.end();
     QStringList::Iterator last = e;
@@ -1184,8 +1186,8 @@ void VcprojGenerator::initOld()
     }
 
     // MOC -----------------------------------------------------------
-    /*if ( project->isActiveConfig("moc") )
-	setMocAware(TRUE);*/
+    //if ( project->isActiveConfig("moc") )
+	//setMocAware(TRUE);
 
     // /VERSION:x.yz -------------------------------------------------
     if ( !project->variables()["VERSION"].isEmpty() ) {
@@ -1199,7 +1201,7 @@ void VcprojGenerator::initOld()
 
     project->variables()["QMAKE_LIBS"] += project->variables()["LIBS"];
     // Update -lname to name.lib, and -Ldir to
-    QStringList &libList = project->variables()["QMAKE_LIBS"];
+/*    QStringList &libList = project->variables()["QMAKE_LIBS"];
     for( it = libList.begin(); it != libList.end(); ) {
 	QString s = *it;
 	s.replace("&", "&amp;");
@@ -1213,7 +1215,7 @@ void VcprojGenerator::initOld()
 	    it++;
 	}
     }
-
+*/
     // Run through all variables containing filepaths, and -----------
     // slash-slosh them correctly depending on current OS  -----------
     project->variables()["QMAKE_FILETAGS"] += QString("HEADERS SOURCES DEF_FILE RC_FILE TARGET QMAKE_LIBS DESTDIR DLLDESTDIR INCLUDEPATH").split(" ");
@@ -1464,10 +1466,10 @@ void VcprojGenerator::processPrlVariable
 
 void VcprojGenerator::outputVariables()
 {
-#if 0
+#if 1
     qDebug( "Generator: MSVC.NET: List of current variables:" );
     for ( QMap<QString, QStringList>::ConstIterator it = project->variables().begin(); it != project->variables().end(); ++it) {
-	qDebug( "Generator: MSVC.NET: %s => %s", it.key().toLatin1(), it.data().join(" | ").toLatin1() );
+	qDebug( "Generator: MSVC.NET: %s => %s", it.key().toLatin1().constData(), it.value().join(" | ").toLatin1().constData() );
     }
 #endif
 }
win32-msvc.net.patch (application/octet-stream, 3 KB)
Index: win32-msvc.net/qmake.conf
===================================================================
RCS file: /cvsroot/qtwin/qt-4/mkspecs/win32-msvc.net/qmake.conf,v
retrieving revision 1.1
diff -u -p -r1.1 qmake.conf
--- win32-msvc.net/qmake.conf	5 Jul 2005 03:40:11 -0000	1.1
+++ win32-msvc.net/qmake.conf	10 Jul 2005 19:25:19 -0000
@@ -1,5 +1,5 @@
 #
-# $Id: qmake.conf,v 1.1 2005/07/05 03:40:11 chehrlic Exp $
+# $Id: qt/qmake.conf   3.3.4   edited Dec 8 2003 $
 #
 # qmake configuration for win32-msvc.net
 #
@@ -8,14 +8,11 @@
 
 MAKEFILE_GENERATOR	= MSVC.NET
 TEMPLATE		= app
-CONFIG			+= qt warn_on release incremental flat link_prl precompile_header debug_and_release debug_and_release_target
+CONFIG			+= qt warn_on release flat link_prl copy_dir_files precompiled_header
+QT			+= core gui
 DEFINES			+= UNICODE QT_LARGEFILE_SUPPORT
 QT_CONFIG		+= zlib qt-zlib qt-libpng qt-libjpeg
-QMAKE_COMPILER_DEFINES	+= WIN32
-
-exists( $(QTDIR)\.qtwinconfig ) {
-	include( $(QTDIR)\.qtwinconfig )
-}
+QMAKE_COMPILER_DEFINES	+= _MSC_VER=1300 WIN32
 
 QMAKE_CC		= cl
 QMAKE_LEX		= flex
@@ -70,7 +67,7 @@ QMAKE_RUN_CXX_IMP_BATCH	= $(CXX) -c $(CX
 
 QMAKE_LINK		= link
 QMAKE_LFLAGS		= /NOLOGO
-QMAKE_LFLAGS_RELEASE	= /DELAYLOAD:comdlg32.dll /DELAYLOAD:oleaut32.dll /DELAYLOAD:winmm.dll /DELAYLOAD:wsock32.dll /DELAYLOAD:winspool.dll delayimp.lib
+QMAKE_LFLAGS_RELEASE	= /DELAYLOAD:comdlg32.dll /DELAYLOAD:oleaut32.dll /DELAYLOAD:winmm.dll /DELAYLOAD:wsock32.dll /DELAYLOAD:winspool.dll
 QMAKE_LFLAGS_DEBUG	= /DEBUG
 QMAKE_LFLAGS_CONSOLE	= /SUBSYSTEM:CONSOLE
 QMAKE_LFLAGS_WINDOWS	= /SUBSYSTEM:WINDOWS
@@ -78,17 +75,14 @@ QMAKE_LFLAGS_CONSOLE_DLL= /SUBSYSTEM:CON
 QMAKE_LFLAGS_WINDOWS_DLL= /SUBSYSTEM:WINDOWS /DLL
 QMAKE_LFLAGS_QT_DLL	= /BASE:0x39D00000
 
-QMAKE_LIBS		=
-QMAKE_LIBS_CORE         = kernel32.lib user32.lib shell32.lib uuid.lib ole32.lib advapi32.lib ws2_32.lib
-QMAKE_LIBS_GUI          = gdi32.lib comdlg32.lib oleaut32.lib imm32.lib winmm.lib winspool.lib ws2_32.lib ole32.lib uuid.lib user32.lib
-QMAKE_LIBS_NETWORK      = ws2_32.lib
-QMAKE_LIBS_OPENGL       = opengl32.lib glu32.lib gdi32.lib user32.lib
-QMAKE_LIBS_COMPAT       = advapi32.lib shell32.lib comdlg32.lib user32.lib gdi32.lib ws2_32.lib
-QMAKE_LIBS_QT		= qt.lib
-QMAKE_LIBS_QT_THREAD	= qt-mt.lib
+QMAKE_LIBS_CORE         = kernel32.lib user32.lib shell32.lib uuid.lib ole32.lib advapi32.lib ws2_32.lib delayimp.lib
+QMAKE_LIBS_GUI          = gdi32.lib comdlg32.lib oleaut32.lib imm32.lib winmm.lib winspool.lib ws2_32.lib ole32.lib uuid.lib user32.lib delayimp.lib
+QMAKE_LIBS_NETWORK      = ws2_32.lib delayimp.lib
+QMAKE_LIBS_OPENGL       = opengl32.lib glu32.lib gdi32.lib user32.lib delayimp.lib
+QMAKE_LIBS_COMPAT       = advapi32.lib shell32.lib comdlg32.lib user32.lib gdi32.lib ws2_32.lib delayimp.lib
 QMAKE_LIBS_QT_ENTRY     = qtmain.lib
 
-QMAKE_LFLAGS_OPENGL	= /DELAYLOAD:opengl32.dll delayimp.lib
+QMAKE_LFLAGS_OPENGL	= /DELAYLOAD:opengl32.dll
 
 QMAKE_MOC		= $$[QT_INSTALL_BINS]\moc.exe
 QMAKE_UIC		= $$[QT_INSTALL_BINS]\uic.exe