Wireshark mailing list archives

Re: CMake for Windows


From: Roland Knall <rknall () gmail com>
Date: Wed, 26 Jun 2013 11:10:51 +0200

Hi

As I am somewhat converse in cmake, I can give you a few pointers, if you like.

In general for each package a cmake system should look for, a
Find<PackageName>.cmake file should exist in either one of two places:

- The local directory (in wireshark underneath <src>/cmake/modules/Find....
- Or the global cmake directory <cmake_install_dir>/Modules/Find...

Those packages usually comply to a definition, where you can provide a
searchpath by setting a directory before including the package.

So if you have a CMakeLists.txt with the following context:


........
INCLUDE(Findzlib)
IF(ZLIB_FOUND)

   ...

ENDIF(ZLIB_FOUND)
....


then you can set a search path by using:

...
IF(WIN32)
    SET(ZLIB_INCLUDE_DIRS "c:\\wireshark-win32-libs\\zlib125\\include")
    SET(ZLIB_LIBRARY_DIRS "c:\\wireshark-win32-libs\\zlib125\\bin"
"c:\\wireshark-win32-libs\\zlib125\\lib" )
ENDIF(WIN32)
INCLUDE(Findzlib)
....

But setting static routes should be avoided, so better set a relative
path (aka ${PROJECT_BINARY_DIR}/../..) or
using a system variable.

If you have to call a script, you should do this by using either
EXECUTE_PROCESS or better create a CUSTOM_TARGET which you can depend
on, so that the right libraries will allways be downloaded, if they
cannot be found.

Finally, if you include user-editable scripts, they should start with
CMake...... and end in .txt. Something like config.CMake should be
avoided, as it is nmake specific.

kind regards,
Roland



On Fri, Jun 21, 2013 at 1:55 AM, Graham Bloice
<graham.bloice () trihedral com> wrote:
As the starter for some planned major improvements|changes to the win32
build, I'd like to get CMake working for building Wireshark on Windows.

I know what I'm doing with the nmake builds, and have once built
successfully on Ubuntu with CMake, but that's about it for my CMake
knowledge, so I'm looking for support (Joerg?) to do this, so that:

a) I don't break CMake on other platforms
b) I actually get CMake working on Windows

The first issue I ran into was that CMake wasn't able to find all the third
party libraries we link with, and required very laborious editing of the
required items in the CMake GUI.

Currently the third party libs are retrieved by a bash script run via nmake
(tools\win-setup.sh) that I'm leaving alone for the moment.  That script
pulls the required libraries from wireshark.org as zip bundles and then
expands all the bundles into a single "libs" directory, the path to which is
configured by the user in "config.nmake".

My current trunk contents of this "libs" directory is shown below:

AirPcap_Devpack_4_1_0_1622
c-ares-1.9.1-1-win32ws
GeoIP-1.4.8-2-win32ws
gnutls-2.12.18-1.2-win32ws
gtk2
kfw-3-2-2-i386-ws-vc6
libsmi-svn-40773-win32ws
lua5.1.4
nasm-2.09.08
portaudio_v19_2
upx303w
user-guide
WinSparkle-0.3-44-g2c8d9d3-win32ws
WpdPack
zlib125

Most of these directories contain the required items in three
sub-directories; "bin" for DLL's, "include" for headers and "lib" for .lib
import libraries used when linking but some don't follow this pattern (blame
the originating projects) and the gtk2 directory is an enormous bit-bucket
of all things gnome including glib.

So, given all the above, how do I get CMake to search the "libs" directory
for the required items?  I'm not adverse to adding a config.CMake for the
user to edit as required.  I suspect I'll need to add some custom CMake
search packages?? to do this on win32.

Graham

___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <wireshark-dev () wireshark org>
Archives:    http://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
             mailto:wireshark-dev-request () wireshark org?subject=unsubscribe
___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <wireshark-dev () wireshark org>
Archives:    http://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
             mailto:wireshark-dev-request () wireshark org?subject=unsubscribe


Current thread: