stream: clean up reassembly table.
[metze/wireshark/wip.git] / README.cmake
index 34d74dec4d83ec23cf16b8a70f4967473bf1ebea..645cfd67c4ae60207ed09f5d3fe8ada7ee27979f 100644 (file)
@@ -4,8 +4,6 @@
 
    To find out the current state of the cmake implementation for
    Wireshark, please take a look at "What needs to be done?" below.
-   Basically this is an experiment and if we find out that it works
-   and we like cmake more than autofoo we might switch one day.
 
 Table of contents
 =================
@@ -38,7 +36,7 @@ Note 1:
   In step 5) you may need to override the defaults for features. Common
   options include:
 
-  # Disable the POSIX capbabilities check
+  # Disable the POSIX capabilities check
   -DENABLE_CAP=OFF
 
   # Enable debugging symbols
@@ -47,6 +45,10 @@ Note 1:
   # Disable GTK+ 3
   -DENABLE_GTK3=OFF
 
+  # Build documentation
+  -DENABLE_HTML_GUIDES=ON
+  -DENABLE_PDF_GUIDES=ON
+
   # Make ccache and clang work together
   -DCMAKE_C_FLAGS='-Qunused-arguments'
 
@@ -55,6 +57,18 @@ Note 1:
   # http://public.kitware.com/Bug/view.php?id=13818
   -DPYTHON_EXECUTABLE=c:/Python27/python
 
+  # Disable building an application bundle (Wireshark.app) on OS X
+  -DENABLE_APPLICATION_BUNDLE=OFF
+
+  # Qt Creator expects .cbp files when used with CMake.
+  -G "CodeBlocks - Unix Makefiles"
+  -G "CodeBlocks - NMake Makefiles"
+
+  # We call try_compile many times, particularly via ConfigureChecks.cmake.
+  # Setting a lightweight try_compile configuration can speed up cmake,
+  # particularly for MSBuild.
+  -DCMAKE_TRY_COMPILE_CONFIGURATION=Release
+
 Note 2:
   After running cmake, you can always run "make help" to see
   a list of all possible make targets.
@@ -65,45 +79,61 @@ Note 3:
   To get predictable results please set umask explicitly.
 
 How to do an out of tree build using Visual C++ 2013:
-[This is advanced alpha and should build all executables except the GTK3
- Wireshark for 32-bit.]
-1) Follow http://www.wireshark.org/docs/wsdg_html_chunked/ChSetupWin32.html
+[This is used for the 2.x release builds, support for VS2010 and VS2012
+ is included, but hasn't been tested.]
+0) Install cmake (currently 3.1.3 or later is recommended).  You can use chocolatey,
+   choco inst cmake.
+1) Follow https://www.wireshark.org/docs/wsdg_html_chunked/ChSetupWin32.html
    Steps 1-9
-1a) Set WIRESHARK_BASE_DIR=c:\wireshark (the parent directory of the
-   library directory).
+1a) Set the library search path.
+    If you set WIRESHARK_BASE_DIR,
+    %WIRESHARK_BASE_DIR%\wireshark-%WIRESHARK_TARGET_PLATFORM%-libs will
+    be used as the top-level library directory.
+    If you set WIRESHARK_LIB_DIR, it will be used as the top-level library
+    directory.  This definition will require changing for different builds (x86 & x64).
 1b) set WIRESHARK_TARGET_PLATFORM=win32 (or win64)
-1c) set QT5_BASE_DIR=C:\Qt\5.3\msvc2013_opengl (must match the Qt component path
+1c) set QT5_BASE_DIR=C:\Qt\5.4.1\5.4\msvc2013_opengl (must match the Qt component path
     on your system)
-1d) If you want to use Visual Studio make sure that the paths to Python and
-    Cygwin are available to GUI applications. The Python path MUST come first.
-2) Install cmake
-2a) Build the zlib library, e.g.
-    cd %WIRESHARK_BASE_DIR%\wireshark-%WIRESHARK_TARGET_PLATFORM%-libs\zlib125
-    cmake -G "NMake Makefiles" . # msbuild will not do because of configuration path
-    cmake --build .
-3) mkdir c:\wireshark\build
-4) cd c:\wireshark\build
-5) Run one of the following to create the build environment:
-   cmake -G "NMake Makefiles" path\to\sources  (i.e. in case your sources are located at c:\wireshark\trunk, use "..\trunk")
-   cmake path\to\sources (this will build for the latest Visual Studio version found)
-   cmake -G "Visual Studio 12" ("12" builds for VS2103. Use "11" for VS2012 or "10" for VS2010.)
-   cmake -G "Visual Studio 12 Win64" (Win32 is the default)
-6) Run one of the following to build Wireshark:
-   nmake /X- VERBOSE=1 (or cmake --build . -- VERBOSE=1 )
+1d) If you want to use Visual Studio to build rather than msbuild from the command line,
+    make sure that the path to Cygwin is available to GUI applications.
+2) mkdir c:\wireshark\build or as appropriate for you.
+   You will need one build directory for each bitness (win32, win64) you wish to build.
+3) cd into the directory from 2) above.
+4) Run the following to generate the build files:
+   cmake -DENABLE_CHM_GUIDES=on xxx path\to\sources
+   where path\to\sources is the absolute or relative path to the wireshark source tree
+   and xxx is replaced with one of the following:
+       nothing - This will build a VS solution for win32 using the latest version of VS found (preferred).
+       -G "Visual Studio 12" ("12" builds for VS2013. Use "11" for VS2012 or "10" for VS2010.)
+       -G "NMake Makefiles" - to build an nmake makefile.
+       -G "Visual Studio 12 Win64" (to build an x64 version you must add the "Win64", Win32 is the default)
+5) Run one of the following to build Wireshark:
+   msbuild /m /p:Configuration=RelWithDebInfo wireshark.sln (preferred).
    Open Wireshark.sln in Windows Explorer to build in Visual Studio
-   msbuild wireshark.sln /m /p:Configuration=RelWithDebInfo
-7) In case you want to test the executable(s) inside the build tree:
-   Run setpath.bat whenever it gets updated (there is a message in each cmake
-   run whether it is necessary or not).
+   nmake /X- VERBOSE=1 (or cmake --build . -- VERBOSE=1 ) (if you generated nmake files).
+   Subsequent changes to source files and CMakeLists.txt will be automagically detected
+   and new build files generated, i.e. step 4) doesn't need to be run again.
+   Changes to the build environment, e.g. QT_BASE_DIR aren't detected so you must delete the
+   build dir and start form step 2) again.
+6) The executables can be run from the appropriate directory, e.g. run\RelWithDebInfo for VS solutions
+   or run\ for NMake files.
+   On macOS CMake creates an application bundle by default and places executables in
+   run/Wireshark.app/Contents/MacOS. It also creates a convenience wrapper script
+   (run/wireshark) which will run the Wireshark executable in the bundle.
+7) To build an installer, build the nsis_package_prep and then the nsis_package projects, e.g.
+   msbuild /m /p:Configuration=RelWithDebInfo nsis_package_prep.vcxproj
+   msbuild /m /p:Configuration=RelWithDebInfo nsis_package.vcxproj
+   nmake ???
 
 Why cmake?
 ==========
 - Can create project files for many IDEs including Qt Creator, Visual Studio,
   and XCode.
-- Fast
+- Fast, builds in parallel in Visual Studio or msbuild with the /m flag
 - Easier to understand/learn
 - Doesn't create any files in the source tree in case of out of tree builds
 - One build infrastructure for all of our tier 1 platforms (including Windows)
+- Out of tree builds permits both Win32 and Win64 builds without requiring a "clean" when swapping.
 
 Why not cmake?
 ==============
@@ -119,12 +149,20 @@ What works?
 ===========
 
 All the executables now build from clean source on:
-* 32bit openSUSE 11.3: (gnu)make and gcc
-* 64bit FedoraXXX
-* 32bit Ubuntu 9.04
-* 32bit Ubuntu 10.04
-* 64bit Debian Wheezy
-* OS X
+* 32 bit openSUSE 11.3: (gnu)make and gcc
+* 64 bit FedoraXXX
+* 32 bit Ubuntu 9.04
+* 32 bit Ubuntu 10.04
+* 64 bit Ubuntu 14.04
+* 64 bit Debian Wheezy
+* 32 bit OS X
+* 64 bit OS X
+* 32 bit Windows using Visual C++ 2013
+* 64 bit Windows using Visual C++ 2013
+* 64 bit Solaris 10
+
+The Buildbot runs CMake steps on Ubuntu, Win32, Win64, OS X, and Solaris.
+Windows packages are built using CMake steps.
 
 What needs to be done?
 ======================
@@ -134,34 +172,13 @@ What needs to be done?
 - Guides are not installed.
 - Build source package (using CPack).
   This is obsolete if we decide to release VCS snapshots instead
-- Build packages (Windows installer, RPM, SVR4, OS X installer dmg)
-  (using CPack).  This includes setting OS target version stuff
-  appropriately for OS X.
-- Add back checkAPI target.
-- Test and add support for other platforms (BSDs, Solaris, Win32, Win64,
-  ...) - we're currently doing CMake builds on Solaris.
+- Build packages using CPack: tarball, Windows installer + PortableApps, OS X
+  installer dmg, RPM, SVR4. This includes setting OS target version stuff
+  appropriately for OS X. We currently use NSIS for the Windows installer but
+  should probably use WiX instead.
 - Add support for cmake configurations.
-- Automatically figure out if *shark is running from the build directory
-  (making WIRESHARK_RUN_FROM_BUILD_DIRECTORY unnecessary like it is with
-  autofoo).
-  Sadly:
-
-      $ file run/qtshark
-      run/qtshark: Mach-O 64-bit x86_64 executable
-
-  so what you're running from the build directory is the executable
-  itself.  autofoo includes libtool in our case, so what you're running
-  from the build directory is a script that then runs the executable,
-  and the executable is in a .libs directory; the code that checks for
-  "running from the build directory?" checks for that.
-
-  We could perhaps check for the pathname containing "run/", although
-  that wouldn't help if we ran it while *in* the "run" directory;
-  getting an absolute path for the executable would be necessary for
-  that.
-- Get plugins loading when running *shark from the build directory.
-  That might involve handling ".libs" and "run" differently.
-- Get cross-compilation working (or ensure it does). It works with autofoo.
+- Get cross-compilation working (or ensure it does). It works with autofoo--and
+  people use it.
 - Handle -DFORTIFY_SOURCE=2 appropriately.  (Do a Web search for
   "cmake fortify" for some information.)
 - Define the GTK_DISABLE_ and GDK_DISABLE_ values as appropriate if we