Skip to content

Commit fd3a218

Browse files
Pavel SiskaPavel Šiška
authored andcommitted
CMake: introduce support for building .tar.gz and .rpm packages
1 parent 2c324ab commit fd3a218

File tree

5 files changed

+252
-0
lines changed

5 files changed

+252
-0
lines changed

CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ option(ENABLE_INPUT_NFB "Enable build of input NFB plugin" OFF)
1919
option(ENABLE_OUTPUT_UNIREC "Enable build of output UNIREC plugin" OFF)
2020

2121
option(ENABLE_PROCESS_EXPERIMENTAL "Enable build of experimental process plugins" OFF)
22+
option(ENABLE_RPMBUILD "Enable build of RPM package" ON)
2223

2324
set(CMAKE_C_STANDARD 11)
2425
set(CMAKE_C_STANDARD_REQUIRED ON)
@@ -43,3 +44,4 @@ include(cmake/dependencies.cmake)
4344

4445
add_subdirectory(external)
4546
add_subdirectory(src)
47+
add_subdirectory(pkg)

pkg/CMakeLists.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
if (NOT RELEASE)
2+
string(TIMESTAMP RELEASE "%Y%m%d%H%M%S")
3+
endif()
4+
5+
set(TGZ_FILE "${CMAKE_CURRENT_BINARY_DIR}/ipfixprobe-${VERSION}-${RELEASE}.tar.gz")
6+
7+
add_subdirectory(tgz)
8+
9+
if (ENABLE_RPMBUILD)
10+
add_subdirectory(rpm)
11+
endif()

pkg/rpm/CMakeLists.txt

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
find_program(RPMBUILD_EXECUTABLE NAMES rpmbuild REQUIRED)
2+
3+
set(RPMBUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/rpmbuild")
4+
5+
file(MAKE_DIRECTORY
6+
"${RPMBUILD_DIR}/BUILD"
7+
"${RPMBUILD_DIR}/RPMS"
8+
"${RPMBUILD_DIR}/SOURCES"
9+
"${RPMBUILD_DIR}/SPECS"
10+
"${RPMBUILD_DIR}/SRPMS"
11+
)
12+
13+
set(SOURCE_TGZ "ipfixprobe-${VERSION}.tar.gz")
14+
set(SPEC_FILE_IN "${CMAKE_CURRENT_SOURCE_DIR}/ipfixprobe.spec.in")
15+
set(SPEC_FILE "${RPMBUILD_DIR}/SPECS/ipfixprobe.spec")
16+
set(RPMBUILD_ARGS
17+
"-ba" "${SPEC_FILE}"
18+
"--define" "_topdir ${RPMBUILD_DIR}/"
19+
)
20+
21+
if (ENABLE_INPUT_PCAP)
22+
list(APPEND RPMBUILD_ARGS "--with" "input_pcap")
23+
endif()
24+
25+
if (ENABLE_INPUT_DPDK)
26+
list(APPEND RPMBUILD_ARGS "--with" "input_dpdk")
27+
endif()
28+
29+
if (ENABLE_INPUT_NFB)
30+
list(APPEND RPMBUILD_ARGS "--with" "input_nfb")
31+
endif()
32+
33+
if (ENABLE_OUTPUT_UNIREC)
34+
list(APPEND RPMBUILD_ARGS "--with" "output_unirec")
35+
endif()
36+
37+
if (ENABLE_PROCESS_EXPERIMENTAL)
38+
list(APPEND RPMBUILD_ARGS "--with" "process_experimental")
39+
endif()
40+
41+
configure_file("${SPEC_FILE_IN}" "${SPEC_FILE}" @ONLY)
42+
43+
add_custom_target(rpm
44+
COMMENT "Generating SRPM and RPM packages..."
45+
WORKING_DIRECTORY "${RPMBUILD_DIR}"
46+
47+
COMMAND "${CMAKE_COMMAND}" "-E" "copy" "${TGZ_FILE}" "SOURCES/${SOURCE_TGZ}"
48+
COMMAND "${RPMBUILD_EXECUTABLE}" ${RPMBUILD_ARGS}
49+
)
50+
51+
add_dependencies(
52+
rpm
53+
tgz
54+
)
55+
56+
add_custom_command(TARGET rpm POST_BUILD
57+
COMMENT "SRPM and RPM packages are located in ${RPMBUILD_DIR}/"
58+
COMMAND ;
59+
)

pkg/rpm/ipfixprobe.spec.in

Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
%bcond_with input_pcap
2+
%bcond_with input_dpdk
3+
%bcond_with input_nfb
4+
%bcond_with output_unirec
5+
%bcond_with process_experimental
6+
7+
Name: ipfixprobe
8+
Version: @VERSION@
9+
Release: @RELEASE@%{?dist}
10+
Summary: IPFIX flow exporter with various extending IPFIX elements exported by plugins.
11+
URL: https://github.com/CESNET/ipfixprobe
12+
Group: Liberouter
13+
License: BSD
14+
Vendor: CESNET, z.s.p.o.
15+
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}
16+
Provides: ipfixprobe
17+
Source0: %{name}-%{version}.tar.gz
18+
19+
%if %{with input_pcap}
20+
%package input-pcap
21+
Summary: Input plugin to read packets from files and interfaces using libpcap.
22+
23+
%description input-pcap
24+
Input plugin for libpcap.
25+
26+
BuildRequires: libpcap-devel
27+
Requires: libpcap
28+
%endif
29+
30+
%if %{with input_dpdk}
31+
%package input-dpdk
32+
Summary: Input plugin to read packets from interfaces using dpdk.
33+
34+
%description input-dpdk
35+
Input plugin for dpdk.
36+
37+
BuildRequires: dpdk-devel
38+
Requires: dpdk
39+
%endif
40+
41+
%if %{with input_nfb}
42+
%package input-nfb
43+
Summary: Input plugin to read packets from nfb cards.
44+
45+
%description input-nfb
46+
Input plugin for nfb cards.
47+
48+
BuildRequires: nfb-framework
49+
Requires: nfb-framework
50+
%endif
51+
52+
%if %{with output_unirec}
53+
%package output-unirec
54+
Summary: Output plugin to export records in unirec format.
55+
56+
%description output-unirec
57+
Output plugin for unirec.
58+
59+
BuildRequires: unirec
60+
Requires: unirec
61+
%endif
62+
63+
%if %{with process_experimental}
64+
%package process-experimental
65+
Summary: Experimental process plugins.
66+
67+
%description process-experimental
68+
Experimental process plugins.
69+
70+
%endif
71+
72+
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}
73+
BuildRequires: gcc >= 8
74+
BuildRequires: gcc-c++ >= 8
75+
BuildRequires: make
76+
BuildRequires: cmake >= 3.12
77+
BuildRequires: libunwind-devel
78+
BuildRequires: libatomic-devel
79+
BuildRequires: pthread
80+
Requires: libatomic
81+
Requires: fuse3
82+
Requires: telemetry
83+
Requires: lz4
84+
Requires: openssl
85+
BuildRequires: doxygen
86+
BuildRequires: pkgconfig
87+
BuildRequires: lz4-devel
88+
BuildRequires: openssl-devel
89+
90+
# Make sure that build is always performed out-of-source
91+
%undefine __cmake_in_source_build
92+
93+
%description
94+
The package contains tools, configuration files and traffic samples
95+
that make up the main components of the test environment.
96+
97+
%prep
98+
%autosetup
99+
100+
%build
101+
%cmake -DCMAKE_BUILD_TYPE=Release %{?with_input_pcap:-DENABLE_INPUT_PCAP=ON} %{?with_input_dpdk:-DENABLE_INPUT_DPDK=ON} %{?with_input_nfb:-DENABLE_INPUT_NFB=ON} %{?with_output_unirec: -DENABLE_OUTPUT_UNIREC=ON} %{?with_process_experimental: -DENABLE_PROCESS_EXPERIMENTAL=ON}
102+
%cmake_build
103+
104+
%install
105+
%cmake_install
106+
107+
%files
108+
%license LICENSE
109+
%{_bindir}/ipfixprobe
110+
%{_libdir}/ipfixprobe/input/libipfixprobe-input-raw.so
111+
112+
%{_libdir}/ipfixprobe/output/libipfixprobe-output-ipfix.so
113+
%{_libdir}/ipfixprobe/output/libipfixprobe-output-text.so
114+
115+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-basicplus.so
116+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-bstats.so
117+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-dns.so
118+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-dnssd.so
119+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-flowhash.so
120+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-http.so
121+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-icmp.so
122+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-pstats.so
123+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-phists.so
124+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-ovpn.so
125+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-vlan.so
126+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-osquery.so
127+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-netbios.so
128+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-tls.so
129+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-wg.so
130+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-smtp.so
131+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-quic.so
132+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-idpcontent.so
133+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-mqtt.so
134+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-passivedns.so
135+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-ssadetector.so
136+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-ssdp.so
137+
138+
%{_libdir}/ipfixprobe/storage/libipfixprobe-storage-cache.so
139+
140+
%if %{with input_pcap}
141+
%files input-pcap
142+
%{_libdir}/ipfixprobe/input/libipfixprobe-input-pcap.so
143+
%endif
144+
145+
%if %{with input_nfb}
146+
%files input-nfb
147+
%{_libdir}/ipfixprobe/input/libipfixprobe-input-nfb.so
148+
%endif
149+
150+
%if %{with input_dpdk}
151+
%files input-dpdk
152+
%{_libdir}/ipfixprobe/input/libipfixprobe-input-dpdk.so
153+
%endif
154+
155+
%if %{with output_unirec}
156+
%files output-unirec
157+
%{_libdir}/ipfixprobe/output/libipfixprobe-output-unirec.so
158+
%endif
159+
160+
%if %{with process_experimental}
161+
%files process-experimental
162+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-nettisa.so
163+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-sip.so
164+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-rtsp.so
165+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-mpls.so
166+
%{_libdir}/ipfixprobe/process/libipfixprobe-process-ntp.so
167+
%endif
168+
169+
%changelog

pkg/tgz/CMakeLists.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
find_package(Git REQUIRED)
2+
3+
add_custom_target(tgz
4+
COMMENT "Generating tar.gz package..."
5+
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
6+
COMMAND
7+
"${GIT_EXECUTABLE}" "archive"
8+
"--prefix=ipfixprobe-${VERSION}/"
9+
"--output=${TGZ_FILE}"
10+
"HEAD"
11+
)

0 commit comments

Comments
 (0)