Wireshark-dev: [Wireshark-dev] CMake support out of source plugin compilation
From: Maarten Bezemer <maarten.bezemer@xxxxxxxxx>
Date: Thu, 13 Nov 2014 14:21:16 +0100
Hello, This email is (a bit) long, as I am trying to explain the Wireshark patches I send, as requested by Graham Bloice. First of all: I am new to Wireshark and its development. Furthermore I am also new to cmake development/scripting. So I'll explain my context/background in this to make clear why I started this 'quest': I am working on writing an ASN.1 dissector for a custom protocol we are trying to implement. Soon I decided it is inconvenient to need to full Wireshark source for the development of a simple dissector plugin. Hence I decided to go for 'out of source' plugin development, which seemed possible according to some examples. These examples copied (cmake) helper scripts and somewhat modified them to make them work. This is only slightly better than requiring the complete Wireshark source, as these copied scripts do not stay up-to-date. I am working on providing patches to adjust Wireshark to have the required scripts installed along Wireshark. Now I got asked to start a thread on this mailing list to provide information on the patches. My first (and most important) commit [1] adds cmake scripts to find the Wireshark development (cmake) scripts. The main component is the WiresharkConfig.cmake.in. This template file is used to fill in all details of a particular build. Same goes for WiresharkConfigVersion.cmake. As said I am not a cmake expert, but I understood [2] that both are required by the FindWireshark.cmake script. This script is used by find_package(Wireshark) to actually find the Wireshark development information. Next, I noticed that Wireshark and its plugins require glib, so I provided a patch that adds FindGLIB2.cmake to the Wireshark development installation [3]. And additionally, I provided a new cmake variable containing the Wireshark (shared) library, in order to help developers linking their code to the Wireshark library [4]. These three patches together, provide out of code cmake support for Wireshark. As I mentioned, I want to build an ASN.1 based dissector, so I would like to have the asn2wrs.py script available to generate the C source code from my asn-files. The first patch in the 'asn.1 series' [5] adds a FindAsn2Wrs.cmake script, that is able to find the asn2wrs.py file and makes it location available in the cmake variable ASN2WRS_EXECUTABLE. It also modifies UseAsn2Wrs.cmake to make use of this new variable. Next, I futher modified UseAsn2Wrs.cmake, as it assumes it is only used in the Wireshark sources [6,7]. And finally, it is added to the wireshark development installation e.g. the wireshark-dev.deb package [8]. These 4 patches make asn2wrs.py available for an out of source cmake build of a ASN.1 dissector. Besides these patches, I noticed that building the Debian packages (using either dpkg-build or pbuilder) result in an erroneous Wireshark installation. Theglobal plugin folder is set to '/usr//usr/lib/..etc..', so none of the plugins are found (and thus not loaded). This issue is fixed by [9]. But, fixing this issue showed anther problem: Since [10], CMAKE_INSTALL_LIBDIR is assumed to be relative to the installation prefix. But, it only got changed/updated at a single location. So building the Debian packages (obviously) failed, as everything got installed in /lib. /bin, etc instead of /usr/bin, /usr/lib, etc. Patch [11] fixes this issue. Currently, I am working on making the make-dissector-reg.py script also available for out of source builds. On my machine it is already working. I did not send the required patches yet, as I am in the process of cleaning up. Hopefully, I clarified the patches I send for review. If not, please ask and I'll try to explain better/in more detail. While I am at it, there is one thing I would like to ask here: I noticed that some tools like idl2wrs, idl2deb and asn2deb are installed in /usr/bin (see bedian/wireshark-dev.install). But, the asn2wrs.py script is installed in /usr/share/pyshared. This seems inconsistent... Is there any reason for this? Furthermore, adding these scripts in /usr/bin makes to available as (user) terminal commands, which seems odd, as these scripts are not going to be used by 'regular' users... So I would propose to put them all to /usr/share/pyshared, especially as i am intending to make make-dissector- reg.py also available, resulting in even more Wireshark development scripts getting installed. Regards, Maarten Bezemer References: 1: https://code.wireshark.org/review/5235/ 2: http://www.cmake.org/Wiki/CMake/Tutorials/Packaging 3: https://code.wireshark.org/review/5252 4: https://code.wireshark.org/review/5251 5: https://code.wireshark.org/review/5253 6: https://code.wireshark.org/review/5254 7: https://code.wireshark.org/review/5255 8: https://code.wireshark.org/review/5256 9: https://code.wireshark.org/review/5232 10: https://code.wireshark.org/review/5149 11: https://code.wireshark.org/review/5233
- Follow-Ups:
- Re: [Wireshark-dev] CMake support out of source plugin compilation
- From: Graham Bloice
- Re: [Wireshark-dev] CMake support out of source plugin compilation
- Prev by Date: [Wireshark-dev] Visual Studio 2013 Community Edition
- Next by Date: Re: [Wireshark-dev] CMake support out of source plugin compilation
- Previous by thread: Re: [Wireshark-dev] Visual Studio 2013 Community Edition
- Next by thread: Re: [Wireshark-dev] CMake support out of source plugin compilation
- Index(es):