Rework Windows Wireshark Qt build configuration a bit:
authorwmeier <wmeier@f5534014-38df-0310-8fa8-9805f1628bb7>
Mon, 30 Jan 2012 04:37:12 +0000 (04:37 +0000)
committerwmeier <wmeier@f5534014-38df-0310-8fa8-9805f1628bb7>
Mon, 30 Jan 2012 04:37:12 +0000 (04:37 +0000)
1. Compile and link with (almost exactly) the same options as used
   when building Windows Wireshark Gtk.
   The options used allow debugging of the exe using Visual Studio exactly
   as is done for Wireshark Gtk.
   Essentially: configure the "release" version to compile and link with
   symbols.  (See ui\qt\QtShark for the details).

2. Update QtShark.pro to create a Makefile only for 1 version of Wireshark Qt
   which is linked against the "release" Qt libraries.
   (IOW: don't create a "debug" Makefile).

3. Remove unused variable assignments from config.pri.
   (They can be added back if needed in the future).

git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@40768 f5534014-38df-0310-8fa8-9805f1628bb7

Makefile.nmake
doc/README.qt
ui/qt/QtShark.pro

index 1691ad1..47629e2 100644 (file)
@@ -36,7 +36,7 @@ CHECK_TAG=
 !ENDIF
 # -------------
 
-LDFLAGS = /NOLOGO /INCREMENTAL:no $(LOCAL_LDFLAGS)
+LDFLAGS = /NOLOGO /INCREMENTAL:NO $(LOCAL_LDFLAGS)
 
 # We use GENERATED_CFLAGS to get around flex's non-LLP64-compliant output
 GENERATED_CFLAGS=\
@@ -407,11 +407,9 @@ PORTAUDIO_DIR = $(PORTAUDIO_DIR:\=/)
 
 MSVC_VARIANT = $(MSVC_VARIANT)
 
-WIRESHARK_LOCAL_CFLAGS = $(LOCAL_CFLAGS)
-WIRESHARK_STANDARD_CFLAGS = $(STANDARD_CFLAGS)
-
-QMAKE_CFLAGS += $(STANDARD_CFLAGS) $(PORTAUDIO_CFLAGS:\=/)
-QMAKE_CXXFLAGS += $(STANDARD_CFLAGS) $(PORTAUDIO_CFLAGS:\=/)
+QMAKE_CFLAGS         *= $(STANDARD_CFLAGS) $(PORTAUDIO_CFLAGS:\=/)
+QMAKE_CXXFLAGS       *= $(STANDARD_CFLAGS) $(PORTAUDIO_CFLAGS:\=/)
+QMAKE_LFLAGS         *= /LARGEADDRESSAWARE $(LDFLAGS)
 
 DEFINES += _NEED_VAR_IMPORT_
 
index d308c07..86aa666 100644 (file)
@@ -46,19 +46,20 @@ ui/qt/config.pri. This file should be created automatically when you
 compile Wireshark in the top-level source directory. You can create it
 by hand by running "nmake -f Makefile.nmake ui\qt\config.pri".
 
+Qt Creator can be used to compile and run Wireshark.
+Alternatively qmake and nmake at the cmd line can be used.
+
+The Windows Qt version of Wireshark will be compiled and linked with essentially
+the same options as that used when building the Gtk version of Wireshark.
+
+1.1.2.1 Qt Creator
+
 Before compiling in Qt Creator select "Projects" in the left toolbar,
 select "Build Settings" and do the following:
 
 - In "Edit build configuration" make sure the "Release" build is selected.
-  ("Debug" currently crashes.)
-  XXX: I was able to build and use a Debug configuration by first building
-       Wireshark with /MDd (instead of the normal /MD).
-       (/MDd is what QtCreator uses for the debug configuration).
-       [Is there a way to config QtCreator to use /MD to build a
-       debug Qt Wireshark ? As a complete Qt newbie I have as yet no idea].
-
-       Note: I did the debugging using the VC2010 debugger rather than
-       invoking the debugger (CDB ?) from QtCreator.
+  (The "Debug" build won't work unless Wireshark is recompiled to link with a "debug"
+   the "debug" C runtime library (using /MDd). See ui\qt\QtShark.pro for details).
 
 - Make sure "Qt version" matches your version of Visual Studio.
 - Make sure "Tool chain" matches your Visual C++ version.
@@ -66,6 +67,39 @@ select "Build Settings" and do the following:
 If you require plugin support select "Run Settings" and add
 "WIRESHARK_RUN_FROM_BUILD_DIRECTORY=1" to the Run Environment.
 
+XXX: (WMeier): I've not had too much satisfaction using the "native Windows debugger" (CDB ?)
+     accessed via Qt Creator. (In fact, a web search turns up some fairly negative comments
+     about the debugger. I've successfully (and pretty easily) been able to use the
+     Visual Studio debugger; See below under "Command Line".
+     ToDo: Investigate "Qt Visual Studio AddIn":
+           http://developer.qt.nokia.com/wiki/QtVSAddin#6112edd2e39a1695c242723d5c764aae
+
+1.1.2.2 Command Line
+
+- Setup environment:
+    c:\qt\4.8.0\bin\qtvars.bat [vsvars]     ;;; optional 'vsvars' to also setup VC env vars
+
+- [Create and] Switch to a working dir to be used for .obj files, etc for Wireshark-qt compilation
+
+- Use qmake to create Windows Makefile (based upon info in ui\qt\QtShark.pro and config.pri)
+    qmake -o Makefile.nmake ...\ui\qt\QtShark.pro
+                                  ;; (Only needs to be run once;
+                                  ;; nmake -f Makefile.nmake  will redo qmake if any
+                                  ;; dependendencies (e.g., QtShark.pro) change.
+
+- Compile & Build
+    nmake -f Makefile.nmake       ;; Wireshark.exe + all DLL's will be in <working-dir>\wireshark-qt
+- Run:
+    <working-dir>\wireshark
+
+- Debug (with Visual Studio debugger)
+    Start Visual Studio;
+    File ! Open ! Project/Solution  ! .../<working-dir>/wireshark-qt/wireshark.exe
+    (Using  Solution Explorer ! Properties ! Environment to
+     add PATH=C:\Qt\4.8.0\bin;%PATH% will pobably be required).
+    ... Debug in the usual manner
+
+
 1.1.3 Linux
 
 Install the Qt libraries and Qt Creator via your package manager or from
index 1f9238d..ab4fba0 100644 (file)
@@ -20,12 +20,78 @@ unix {
     }
 }
 
-# XXX We need to figure out how to pull this in from config.nmake.
+xwin32 {
+message( )
+message(CONFIG:)
+message(  $$CONFIG)
+message( )
+message(CFLAGS:)
+message(  $$QMAKE_CFLAGS)
+message(  $$QMAKE_CFLAGS_RELEASE)
+message(  $$QMAKE_CFLAGS_DEBUG)
+message( )
+message(LFLAGS:)
+message(  $$QMAKE_LFLAGS)
+message(  $$QMAKE_LFLAGS_RELEASE)
+message(  $$QMAKE_LFLAGS_DEBUG)
+}
 
 win32 {
+    # Note:
+    # Windows Wireshark is compiled with /MD and thus must
+    #  be linked with the "release" versions of the Qt libraries
+    #  which are also compiled with /MD.
+    #
+    # Also: Windows Wireshark is compiled with /Zi and linked with /DEBUG
+    #  which enables source level Wireshark debugging using the
+    #  Windows Visual Studio debugger.
+    #  So: QMAKE_CFLAGS, QMAKE_CXXFLAGS and QMAKE_LFLAGS are set to match
+    #  those used building Windows Wireshark. (See config.pri).
+    #  Among other things source-level debugging of the Qt version of Wireshark
+    # (including the ui/qt source) is thus enabled.
+    #
+    #  Note that in this case source level debugging of the Qt
+    #  *libraries* will not be possible since the Qt release libs are
+    #  not compiled with /Zi (and not linked with /DEBUG).
+    #  The Qt "debug" libraries are compiled with /MDd. To build a
+    #  Wireshark-Qt debug version with the ability to do source level debugging
+    #  of the Qt libraries themselves requires that Wireshark first be built with /MDd.
+    #  Presumably doing source-level Qt library debugging shoyuld rarely be needed.
+
+    # We want to build only the QtShark linked with the QT "release" libraries
+    #  so disable debug & etc.
+##    CONFIG -= release
+    CONFIG -= debug
+    CONFIG -= debug_and_release
+
+    # Use only Wireshark CFLAGS and LDFLAGS from config.nmake (as provided via config.pri)
+    #  for building the "release" version of Wireshark-Qt
+    # (e.g., so we don't get the Qt release CFLAGS [specifically /O2]
+    QMAKE_CFLAGS_RELEASE = ""
+    QMAKE_LFLAGS_RELEASE = ""
+
+    # XXX We need to figure out how to pull this in from config.nmake.
     !include( config.pri ) {
         error("Can't find config.pri. Have you run 'nmake -f Makefile.nmake' two directories up?")
     }
+
+    DESTDIR = wireshark-qt
+}
+
+xwin32 {
+message( )
+message(CONFIG:)
+message(  $$CONFIG)
+message( )
+message(CFLAGS:)
+message(  $$QMAKE_CFLAGS)
+message(  $$QMAKE_CFLAGS_RELEASE)
+message(  $$QMAKE_CFLAGS_DEBUG)
+message( )
+message(LFLAGS:)
+message(  $$QMAKE_LFLAGS)
+message(  $$QMAKE_LFLAGS_RELEASE)
+message(  $$QMAKE_LFLAGS_DEBUG)
 }
 
 INCLUDEPATH += ../.. ../../wiretap