summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/wireshark/package.py
blob: b9cf722cee494d14f9a8b7116b02c585eaba21de (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)


from spack.package import *


class Wireshark(CMakePackage):
    """Graphical network analyzer and capture tool"""

    homepage = "https://www.wireshark.org"
    url = "https://www.wireshark.org/download/src/all-versions/wireshark-2.6.0.tar.xz"

    license("GPL-2.0-or-later")

    version("3.2.1", sha256="589f640058d6408ebbd695a80ebbd6e7bd99d8db64ecda253d27100dfd27e85b")
    version("3.2.0", sha256="4cfd33a19a454ff4002243e9d04d6afd64280a109a21ae652a192f2be2b1b66c")
    version("3.1.0", sha256="a7b54f9e35fc69291dcac5104ecbef8260534a75dec5b8105605b6c423fd3de3")
    version("3.0.8", sha256="b4bd8189934d82330a053c5b10398f2b625b1e1c8818831ab61739b2d7aa7561")
    version("2.6.0", sha256="711c7f01d27a8817d58277a5487cef3e3c7bab1c8caaf8f4c92aa21015b9117f")

    variant("libssh", default=False, description="Build with libssh")
    variant("nghttp2", default=False, description="Build with nghttp2")
    variant("qt", default=False, description="Build with qt")
    variant("headers", default=True, description="Install headers")

    depends_on("bison", type="build")
    depends_on("c-ares")
    depends_on("doxygen", type="build")
    depends_on("flex", type="build")
    depends_on("git", type="build")
    depends_on("glib")
    depends_on("gnutls")
    depends_on("libgcrypt@1.4.2:")
    depends_on("libmaxminddb")
    depends_on("libtool@2.2.2:", type="build")
    depends_on("libpcap")
    depends_on("lua@5.0.0:5.2")
    depends_on("krb5")
    depends_on("pkgconfig", type="build")
    depends_on("libssh", when="+libssh")
    depends_on("nghttp2", when="+nghttp2")
    depends_on("qt@4.8:", when="+qt")

    def patch(self):
        # These try to capture from the network and run not compiled programs
        filter_file("suite_capture", "", "CMakeLists.txt")
        filter_file("suite_unittests", "", "CMakeLists.txt")

    def cmake_args(self):
        args = [
            "-DENEABLE_CARES=ON",
            "-DENABLE_GNUTLS=ON",
            "-DENABLE_LUA=ON",
            "-DENABLE_MAXMINDDB=ON",
            "-DYACC_EXECUTABLE=" + self.spec["bison"].prefix.bin.yacc,
            "-DGIT_EXECUTABLE=" + self.spec["git"].prefix.bin.git,
            "-DPCAP_INCLUDE_DIR=" + self.spec["libpcap"].prefix.include,
            "-DPCAP_LIB=" + str(self.spec["libpcap"].libs),
            "-DLUA_INCLUDE_DIR=" + self.spec["lua"].prefix.include,
            "-DLUA_LIBRARY=" + str(self.spec["lua"].libs),
            "-DBUILD_wireshark_gtk=OFF",
            "-DENABLE_PORTAUDIO=OFF",
            "-DENABLE_GTK3=OFF",
            "-DBUILD_SMI=OFF",
        ]

        if self.spec.satisfies("+qt"):
            args.append("-DBUILD_wireshark=ON")
            args.append("-DENABLE_APPLICATION_BUNDLE=ON")
            if self.spec["qt"].version >= Version("5"):
                args.append("-DENABLE_QT5=ON")
            else:
                args.append("-DENABLE_QT5=OFF")
        else:
            args.append("-DBUILD_wireshark=OFF")
            args.append("-DENABLE_APPLICATION_BUNDLE=OFF")
            args.append("-DENABLE_QT5=OFF")

        if self.spec.satisfies("+libssh"):
            args.append("-DBUILD_sshdump=ON")
            args.append("-DBUILD_ciscodump=ON")
        else:
            args.append("-DBUILD_sshdump=OFF")
            args.append("-DBUILD_ciscodump=OFF")

        if self.spec.satisfies("+nghttp2"):
            args.append("-DBUILD_NGHTTP2=ON")
        else:
            args.append("-DBUILD_NGHTTP2=OFF")

        return args

    @run_after("install")
    def symlink(self):
        if self.spec.satisfies("platform=darwin"):
            link(
                join_path(self.prefix, "Wireshark.app/Contents/MacOS/Wireshark"),
                self.prefix.bin.wireshark,
            )

    @run_after("install")
    def install_headers(self):
        if self.spec.satisfies("+headers"):
            folders = [
                ".",
                "epan/crypt",
                "epan/dfilter",
                "epan/dissectors",
                "epan/ftypes",
                "epan/wmem",
                "wiretap",
                "wsutil",
            ]
            for folder in folders:
                mkdirp(join_path(prefix.include.wireshark, folder))
                install(join_path(folder, "*.h"), join_path(prefix.include.wireshark, folder))