From 0972bb86fa968772ee67403723bab78717353328 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 3 Feb 2018 18:24:20 +0000 Subject: [PATCH] use meson build Autotools does not appear to be what maintainer wants, so how about meson that is a build system that sucks less. It promises greatness, and is already in use by some major projects. See youtube for meson briefing. Anyhow, the whole point of trying to get some sort of build system implemented properly is to make contributing to project trivial, stop distributions to have packaging problem, make cross compilation easy, and so on. Reference: https://github.com/cloudflare/pmtud/pull/5 Reference: https://www.youtube.com/watch?v=gHdTzdXkhRY Signed-off-by: Sami Kerola --- .gitignore | 7 +--- .gitmodules | 9 ----- .travis.yml | 20 +++++++++ Makefile | 94 +++++++++---------------------------------- configure | 13 ++++++ deps/libnetfilter_log | 1 - deps/libnfnetlink | 1 - deps/libpcap | 1 - meson.build | 47 ++++++++++++++++++++++ src/sched.c | 1 - 10 files changed, 101 insertions(+), 93 deletions(-) create mode 100644 .travis.yml create mode 100755 configure delete mode 160000 deps/libnetfilter_log delete mode 160000 deps/libnfnetlink delete mode 160000 deps/libpcap create mode 100644 meson.build diff --git a/.gitignore b/.gitignore index 611c640..a35d983 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,2 @@ -lib*.a -pmtud -core -tests/venv -pmtud_*.deb +/build +/pmtud_*.deb diff --git a/.gitmodules b/.gitmodules index 9eb2261..e69de29 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +0,0 @@ -[submodule "deps/libpcap"] - path = deps/libpcap - url = https://github.com/the-tcpdump-group/libpcap.git -[submodule "deps/libnfnetlink"] - path = deps/libnfnetlink - url = git://git.netfilter.org/libnfnetlink.git -[submodule "deps/libnetfilter_log"] - path = deps/libnetfilter_log - url = git://git.netfilter.org/libnetfilter_log.git diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..ef3b17f --- /dev/null +++ b/.travis.yml @@ -0,0 +1,20 @@ +sudo: false +language: c +dist: trusty +addons: + apt: + packages: + - "python3" + - "python3-pip" +install: + - mkdir ninjadir + - export PATH="`pwd`/ninjadir:${PATH}" + - wget https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-linux.zip + - unzip ninja-linux.zip -d ninjadir + - pip3 install --user meson +compiler: + - gcc + - clang +script: + - meson build + - ninja -C build test diff --git a/Makefile b/Makefile index c7eab0a..c57bb1e 100644 --- a/Makefile +++ b/Makefile @@ -1,82 +1,33 @@ -CC ?= clang -LDOPTS += -Wl,-z,now -Wl,-z,relro -pie -COPTSWARN = -Wall -Wextra -Wno-unused-parameter -Wpointer-arith -Werror -COPTSSEC = -D_FORTIFY_SOURCE=2 +pmtud: + ninja -C build -ifeq ($(CC), cc) - CC = clang -endif - -ifeq ($(CC), clang) - COPTSSEC+=-fstack-protector-strong -else - COPTSSEC+=-fstack-protector -endif - -COPTSDEBUG=-g -ggdb -O0 -ifeq ($(BUILD), debugaddress) - COPTSDEBUG=-g -ggdb -O0 -fsanitize=address -fsanitize=undefined -endif -ifeq ($(BUILD), release) - MARCH=-march=corei7 - COPTSDEBUG=-g -ggdb -O3 $(MARCH) -endif - -COPTS+=$(CFLAGS) $(COPTSDEBUG) $(COPTSWARN) $(COPTSSEC) -fPIE \ - -Ideps/libpcap -I deps/libnfnetlink/include -Ideps/libnetfilter_log/include - -all: pmtud - -pmtud: libpcap.a libnetfilter_log.a libnfnetlink.a src/*.c src/*.h Makefile - $(CC) $(COPTS) \ - src/main.c src/utils.c src/net.c src/uevent.c \ - src/hashlimit.c src/csiphash.c src/sched.c \ - src/bitmap.c src/nflog.c \ - libpcap.a libnetfilter_log.a libnfnetlink.a \ - $(LDOPTS) \ - -o pmtud - -libpcap.a: deps/libpcap - (cd deps/libpcap && ./configure && make) - cp deps/libpcap/libpcap.a . - -libnfnetlink.a: deps/libnfnetlink - (cd deps/libnfnetlink && ./autogen.sh && CFLAGS="-fpic" ./configure --enable-static && make) - cp deps/libnfnetlink/src/.libs/libnfnetlink.a . +clean: + ninja -C build clean -libnetfilter_log.a: deps/libnetfilter_log libnfnetlink.a - (cd deps/libnetfilter_log && ./autogen.sh \ - && PKG_CONFIG_PATH=$$PWD/../libnfnetlink CFLAGS="-fpic" ./configure --enable-static \ - && make CPPFLAGS=-I$$PWD/../libnfnetlink/include LDFLAGS=-L$$PWD/../libnfnetlink/src/.libs) - cp deps/libnetfilter_log/src/.libs/libnetfilter_log.a . +install: + DESTDIR=$(DESTDIR) ninja -C build install -clean: - rm -rf pmtud pmtud_*.deb +dist: + ninja -C build dist -distclean: clean - rm -f lib*.a - -(cd deps/libpcap && make clean && make distclean) - -(cd deps/libnfnetlink && make clean && make distclean) - -(cd deps/libnetfilter_log && make clean && make distclean) +check: + ninja -C build test format: - clang-format-3.5 -i src/*.c src/*.h - + clang-format -i src/*.c src/*.h # Release process # --------------- -GITVER := $(shell git describe --tags --always --dirty=-dev) -VERSION := $(shell python -c 'print "$(GITVER)"[1:].partition("-")[0]') -ITERATION := $(shell python -c 'print ("$(GITVER)"[1:].partition("-")[2] or "0")') -NEXT_VERSION := v0.$(shell python -c 'print int("$(GITVER)"[1:].partition("-")[0][2:]) + 1') +PREV_VERSION := $(shell git describe --abbrev=0 --tags) +NEXT_VERSION := v$(shell echo $(PREV_VERSION) | tr -d v | awk '{print $$1+0.1}') .PHONY: release release: - @echo "[*] Curr version: $(VERSION)-$(ITERATION)" + @echo "[*] Curr version: $(shell git describe --tags)" @echo "[*] Next version: $(NEXT_VERSION)" echo "$(NEXT_VERSION) (`date '+%Y%m%d-%H%M'`)" > RELEASE_NOTES.tmp - git log --reverse --date=short --format="- %ad %s" tags/v$(VERSION)..HEAD >> RELEASE_NOTES.tmp + git log --reverse --date=short --format="- %ad %s" tags/$(PREV_VERSION)..HEAD >> RELEASE_NOTES.tmp echo "" >> RELEASE_NOTES.tmp cat RELEASE_NOTES >> RELEASE_NOTES.tmp mv RELEASE_NOTES.tmp RELEASE_NOTES @@ -84,33 +35,26 @@ release: git commit -m "Release $(NEXT_VERSION)" git tag $(NEXT_VERSION) @echo "[*] To push the release run:" - @echo "git push origin master; git push origin $(NEXT_VERSION)" + @echo "git push origin master && git push origin $(NEXT_VERSION)" # Build process # ------------- BIN_PREFIX ?= /usr/local/bin PACKAGE_ROOT := $(shell pwd)/tmp/packaging - .PHONY: print-builddeps cf-package -CFDEPENDENCIES = python flex bison gcc make pkg-config +CFDEPENDENCIES = gcc make pkg-config meson print-builddeps: @echo $(CFDEPENDENCIES) $(DEPENDENCIES) - cf-package: - @echo "[*] resetting submodules" - git submodule sync --quiet - git submodule update --init --recursive --quiet @echo "[*] rebuilding" -$(MAKE) clean - -$(MAKE) distclean - $(MAKE) pmtud BUILD=release CC=gcc + $(MAKE) pmtud -mkdir -p $(PACKAGE_ROOT)/$(BIN_PREFIX) - cp pmtud $(PACKAGE_ROOT)/$(BIN_PREFIX) - + cp build/pmtud $(PACKAGE_ROOT)/$(BIN_PREFIX) fakeroot fpm -C $(PACKAGE_ROOT) \ -s dir \ -t deb \ diff --git a/configure b/configure new file mode 100755 index 0000000..4777900 --- /dev/null +++ b/configure @@ -0,0 +1,13 @@ +#!/bin/sh + +if [ $# -ne 0 ]; then + meson configure build + echo '' + echo 'Configuration can be changed like this:' + echo ' meson configure build -Dprefix=/tmp/foobar' + echo ' More info: http://mesonbuild.com/Configuring-a-build-directory.html' + # See also: http://mesonbuild.com/howtox.html + exit 1 +fi +meson build +exit $? diff --git a/deps/libnetfilter_log b/deps/libnetfilter_log deleted file mode 160000 index a1b392b..0000000 --- a/deps/libnetfilter_log +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a1b392b4156db984ab2b695a4a70d113f70cb9b8 diff --git a/deps/libnfnetlink b/deps/libnfnetlink deleted file mode 160000 index 7633f0c..0000000 --- a/deps/libnfnetlink +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 7633f0c1679988ad18e4de9afc8a277510298139 diff --git a/deps/libpcap b/deps/libpcap deleted file mode 160000 index ee5d6f1..0000000 --- a/deps/libpcap +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ee5d6f1375b3fc74dcb927ab3d2db8125f956b39 diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..9c71602 --- /dev/null +++ b/meson.build @@ -0,0 +1,47 @@ +project('outlier', 'c', + default_options : [ + 'c_std=c99', + 'buildtype=debugoptimized', + 'warning_level=1', + ], + license : 'BSD 3-clause', + version : 'v0.6', + meson_version : '>= 0.44.0', +) + +conf = configuration_data() +conf.set('_GNU_SOURCE', 1) +config_h = configure_file( + output : 'config.h', + configuration : conf) + +add_project_arguments('-include', 'config.h', language : 'c') + +pmtud_sources = ''' + src/bitmap.c + src/csiphash.c + src/hashlimit.c + src/hashlimit.h + src/main.c + src/net.c + src/nflog.c + src/pmtud.h + src/sched.c + src/uevent.c + src/uevent.h + src/utils.c +'''.split() + +libpcap_dep = dependency('pcap') +libnfnetlink_dep = dependency('libnfnetlink') +libnetfilter_log_dep = dependency('libnetfilter_log') + +executable('pmtud', + pmtud_sources, + dependencies: [ + libpcap_dep, + libnfnetlink_dep, + libnetfilter_log_dep, + ], + install: true, +) diff --git a/src/sched.c b/src/sched.c index 213b0e7..7752371 100644 --- a/src/sched.c +++ b/src/sched.c @@ -2,7 +2,6 @@ // // Copyright (c) 2015 CloudFlare, Inc. -#define _GNU_SOURCE #include int taskset(int taskset_cpu)