[1/2] batman-adv: Re-add compat-patches infrastructure
Commit Message
Some patches were added again in the mainline kernel which make it rather
hard to allow building of the unmodified batman-adv sources against older
kernel versions.
Just switch again to the old build infrastructure again. It creates a
copy of the sources in net/batman-adv which can be patched and then
compiled+linked to create build/net/batman-adv/batman-adv.ko
Signed-off-by: Sven Eckelmann <sven@narfation.org>
---
.gitignore | 13 +-----------
Makefile | 38 +++++++++++++++++++++++++++-------
compat-patches/README | 27 ++++++++++++++++++++++++
compat-patches/replacements.sh | 5 +++++
4 files changed, 64 insertions(+), 19 deletions(-)
create mode 100644 compat-patches/README
create mode 100755 compat-patches/replacements.sh
@@ -1,14 +1,3 @@
-/.cache.mk
/compat-autoconf.h
/compat-autoconf.h.tmp
-/compat-sources/**/.*
-/compat-sources/**/*.o
-/modules.order
-/Module.symvers
-/net/batman-adv/batman-adv.ko
-/net/batman-adv/.batman-adv.ko.cmd
-/net/batman-adv/batman-adv.mod.c
-/net/batman-adv/modules.order
-/net/batman-adv/*.o
-/net/batman-adv/.*.o.cmd
-/.tmp_versions
+/build/
@@ -24,6 +24,7 @@ export CONFIG_BATMAN_ADV_SYSFS=n
export CONFIG_BATMAN_ADV_TRACING=n
PWD:=$(shell pwd)
+BUILD_DIR=$(PWD)/build
KERNELPATH ?= /lib/modules/$(shell uname -r)/build
# sanity check: does KERNELPATH exist?
ifeq ($(shell cd $(KERNELPATH) && pwd),)
@@ -32,17 +33,24 @@ endif
export KERNELPATH
RM ?= rm -f
+MKDIR := mkdir -p
+PATCH_FLAGS = --batch --fuzz=0 --forward --strip=1 --unified --version-control=never -g0 --remove-empty-files --no-backup-if-mismatch --reject-file=-
+PATCH := patch $(PATCH_FLAGS) -i
CP := cp -fpR
LN := ln -sf
DEPMOD := depmod -a
+SOURCE = $(wildcard net/batman-adv/*.[ch]) net/batman-adv/Makefile
+SOURCE_BUILD = $(wildcard $(BUILD_DIR)/net/batman-adv/*.[ch]) $(BUILD_DIR)/net/batman-adv/Makefile
+SOURCE_STAMP = $(BUILD_DIR)/net/batman-adv/.compat-prepared
+
REVISION= $(shell if [ -d "$(PWD)/.git" ]; then \
echo $$(git --git-dir="$(PWD)/.git" describe --always --dirty --match "v*" |sed 's/^v//' 2> /dev/null || echo "[unknown]"); \
fi)
NOSTDINC_FLAGS += \
- -I$(PWD)/compat-include/ \
- -I$(PWD)/include/ \
- -include $(PWD)/compat.h \
+ -I$(PWD)/../compat-include/ \
+ -I$(PWD)/../include/ \
+ -include $(PWD)/../compat.h \
$(CFLAGS)
ifneq ($(REVISION),)
@@ -55,8 +63,8 @@ export batman-adv-y
BUILD_FLAGS := \
- M=$(PWD) \
- PWD=$(PWD) \
+ M=$(BUILD_DIR) \
+ PWD=$(BUILD_DIR) \
REVISION=$(REVISION) \
CONFIG_BATMAN_ADV=m \
CONFIG_BATMAN_ADV_DEBUG=$(CONFIG_BATMAN_ADV_DEBUG) \
@@ -70,18 +78,34 @@ BUILD_FLAGS := \
CONFIG_BATMAN_ADV_BATMAN_V=$(CONFIG_BATMAN_ADV_BATMAN_V) \
INSTALL_MOD_DIR=updates/
-all: config
+all: config $(SOURCE_STAMP)
$(MAKE) -C $(KERNELPATH) $(BUILD_FLAGS) modules
clean:
$(RM) compat-autoconf.h*
$(MAKE) -C $(KERNELPATH) $(BUILD_FLAGS) clean
-install: config
+install: config $(SOURCE_STAMP)
$(MAKE) -C $(KERNELPATH) $(BUILD_FLAGS) modules_install
$(DEPMOD)
config:
$(PWD)/gen-compat-autoconf.sh $(PWD)/compat-autoconf.h
+$(SOURCE_STAMP): $(SOURCE) compat-patches/* compat-patches/replacements.sh
+ $(MKDIR) $(BUILD_DIR)/net/batman-adv/
+ @$(LN) ../Makefile $(BUILD_DIR)/Makefile
+ @$(RM) $(SOURCE_BUILD)
+ @$(CP) $(SOURCE) $(BUILD_DIR)/net/batman-adv/
+ @set -e; \
+ patches="$$(ls -1 compat-patches/|grep '.patch$$'|sort)"; \
+ for i in $${patches}; do \
+ echo ' COMPAT_PATCH '$${i};\
+ cd $(BUILD_DIR); \
+ $(PATCH) ../compat-patches/$${i}; \
+ cd - > /dev/null; \
+ done
+ compat-patches/replacements.sh
+ touch $(SOURCE_STAMP)
+
.PHONY: all clean install config
new file mode 100644
@@ -0,0 +1,27 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+WARNING
+=======
+
+Please avoid using the compat-patches/ to implement support for old kernels.
+This should be the last resort.
+
+ * it is nearly always possible to use compat-includes/ to do the same with a
+ lot less problems
+
+ * maintaining these patches is *censored*
+
+GENERATING A PATCH
+==================
+
+If it not possible to avoid a patch then please make the patch as small as
+possible. Even refactor the code which has to be patched to reduce the
+size/number of the changes.
+
+Please use git-format-patches to generate them and order them inside via the
+XXXX- prefix before the patch name.
+
+ git format-patch --no-stat --full-index --no-renames --binary \
+ --diff-algorithm=histogram --no-signature \
+ --format=format:'From: %an <%ae>%nDate: %aD%nSubject: %B' \
+ -1
new file mode 100755
@@ -0,0 +1,5 @@
+#! /bin/sh
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (C) 2007-2018 B.A.T.M.A.N. contributors
+
+set -e