aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/config/Makefile
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2020-04-12 00:09:52 +0200
committerJo-Philipp Wich <jo@mein.io>2020-04-12 00:10:47 +0200
commit7b1d809a8d8620032553845cf4a8819a19508687 (patch)
treee9c221f4cee621bbbfa2d02ac2870b0d3caaa4a4 /scripts/config/Makefile
parent6c16d64b2a0bb063a89225dcaabd50c00bce7aa2 (diff)
downloadupstream-7b1d809a8d8620032553845cf4a8819a19508687.tar.gz
upstream-7b1d809a8d8620032553845cf4a8819a19508687.tar.bz2
upstream-7b1d809a8d8620032553845cf4a8819a19508687.zip
Revert "build: scripts/config - update to kconfig-v5.6"
This reverts commit dcf3e63a35d05e7e5103819c0f17195bfafe9baa. The kconfig update requires further testing and refinement until it can remain in tree. Main problems are: - Recursive deps are now fatal instead of a warning - Previously legal syntax now leads to hard failures - It fails all package builds since multiple days The updated kconfig implementation needs to cope with the current status quo in the various package feeds before we can reconsider it for master. It is not desirable that single broken packages can hard-fail the entire build pipeline. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'scripts/config/Makefile')
-rw-r--r--scripts/config/Makefile174
1 files changed, 76 insertions, 98 deletions
diff --git a/scripts/config/Makefile b/scripts/config/Makefile
index eb55b759a8..1f9184e3aa 100644
--- a/scripts/config/Makefile
+++ b/scripts/config/Makefile
@@ -1,124 +1,102 @@
-# SPDX-License-Identifier: GPL-2.0
# ===========================================================================
# OpenWrt configuration targets
-
-.PHONY: clean all
-all: conf mconf
-clean:
- rm -f *.o lxdialog/*.o *.moc $(clean-files) conf mconf qconf
-
-clean-files :=
+# These targets are used from top-level makefile
# ===========================================================================
-# Variables needed by the upstream Makefile
-
-# Avoids displaying 'UPD mconf-cfg' in an otherwise quiet make menuconfig
-kecho:=true
-
-CONFIG_SHELL:=$(SHELL)
-srctree:=.
-src:=.
-obj:=.
-Q:=$(if $V,,@)
-cmd = $(cmd_$(1))
-dot-target = $(dir $@).$(notdir $@)
-
-# taken from ../Kbuild.include
-define filechk
- $(Q)set -e; \
- mkdir -p $(dir $@); \
- trap "rm -f $(dot-target).tmp" EXIT; \
- { $(filechk_$(1)); } > $(dot-target).tmp; \
- if [ ! -r $@ ] || ! cmp -s $@ $(dot-target).tmp; then \
- $(kecho) ' UPD $@'; \
- mv -f $(dot-target).tmp $@; \
- fi
-endef
-
-### Stripped down upstream Makefile follows:
-# ===========================================================================
+# Shared Makefile for the various kconfig executables:
+# conf: Used for defconfig, oldconfig and related targets
+# mconf: Used for the mconfig target.
+# Utilizes the lxdialog package
+# qconf: Used for the xconfig target
+# Based on Qt which needs to be installed to compile it
# object files used by all kconfig flavours
-common-objs := confdata.o expr.o lexer.lex.o parser.tab.o preprocess.o \
- symbol.o util.o
-
-$(obj)/lexer.lex.o: $(obj)/parser.tab.h
-HOSTCFLAGS_lexer.lex.o := -I $(srctree)/$(src)
-HOSTCFLAGS_parser.tab.o := -I $(srctree)/$(src)
-# conf: Used for defconfig, oldconfig and related targets
-hostprogs-y += conf
-conf-objs := conf.o $(common-objs)
-# mconf: Used for the menuconfig target based on lxdialog
-hostprogs-y += mconf
-lxdialog := $(addprefix lxdialog/, \
- checklist.o inputbox.o menubox.o textbox.o util.o yesno.o)
-mconf-objs := mconf.o $(lxdialog) $(common-objs)
+# Platform specific fixes
+#
+# FreeBSD
-HOSTLDLIBS_mconf = $(shell . $(obj)/mconf-cfg && echo $$libs)
-$(foreach f, mconf.o $(lxdialog), \
- $(eval HOSTCFLAGS_$f = $$(shell . $(obj)/mconf-cfg && echo $$$$cflags)))
+check_lxdialog = $(shell $(SHELL) $(CURDIR)/lxdialog/check-lxdialog.sh -$(1))
+export CFLAGS += -DKBUILD_NO_NLS -I. $(call check_lxdialog,ccflags)
+export CXXFLAGS += -DKBUILD_NO_NLS
-$(addprefix $(obj)/, mconf.o $(lxdialog)): $(obj)/mconf-cfg
-
-# qconf: Used for the xconfig target based on Qt
-hostprogs-y += qconf
+conf-objs := conf.o zconf.tab.o
+mconf-objs := mconf.o zconf.tab.o
qconf-cxxobjs := qconf.o
-qconf-objs := images.o $(common-objs)
-
-HOSTLDLIBS_qconf = $(shell . $(obj)/qconf-cfg && echo $$libs)
-HOSTCXXFLAGS_qconf.o = $(shell . $(obj)/qconf-cfg && echo $$cflags)
+qconf-objs := zconf.tab.o
-$(obj)/qconf.o: $(obj)/qconf-cfg $(obj)/qconf.moc
+lxdialog-objs := \
+ lxdialog/checklist.o lxdialog/util.o lxdialog/inputbox.o \
+ lxdialog/textbox.o lxdialog/yesno.o lxdialog/menubox.o
-quiet_cmd_moc = MOC $@
- cmd_moc = $(shell . $(obj)/qconf-cfg && echo $$moc) -i $< -o $@
+clean-files := zconf.tab.c zconf.lex.c zconf.hash.c
+# Remove qconf junk files
+clean-files += $(qconf-cxxobjs) qconf.moc .tmp_qtcheck qconf
-$(obj)/%.moc: $(src)/%.h $(obj)/qconf-cfg
- $(call cmd,moc)
-
-# check if necessary packages are available, and configure build flags
-filechk_conf_cfg = $(CONFIG_SHELL) $<
-
-$(obj)/%conf-cfg: $(src)/%conf-cfg.sh FORCE
- $(call filechk,conf_cfg)
+all: conf mconf
-clean-files += *conf-cfg
+conf: $(conf-objs)
+mconf: $(mconf-objs) $(lxdialog-objs)
+ $(CC) -o $@ $^ $(call check_lxdialog,ldflags $(CC))
+qconf: $(qconf-cxxobjs) $(qconf-objs)
+ $(CXX) -o $@ $^ $(HOSTLOADLIBES_qconf)
-# ===========================================================================
-# OpenWrt rules and final adjustments that need to be made after reading the
-# full upstream Makefile
+clean:
+ rm -f *.o lxdialog/*.o $(clean-files) conf mconf
-FORCE:
+zconf.tab.o: zconf.lex.c zconf.hash.c confdata.c
-ifdef BUILD_SHIPPED_FILES
-shipped-files := lexer.lex.c parser.tab.c parser.tab.h
-clean-files += $(shipped-files)
+kconfig_load.o: lkc_defs.h
-.SECONDARY: $(shipped-files)
+zconf.tab.c: zconf.y $(wildcard zconf.tab.c_shipped)
+zconf.lex.c: zconf.l $(wildcard zconf.lex.c_shipped)
+zconf.hash.c: zconf.gperf $(wildcard zconf.hash.c_shipped)
-%.tab.c %.tab.h: %.y
- bison -l -d -b $* $<
+%.tab.c: %.y
+ cp $@_shipped $@ || bison -l -b $* -p $(notdir $*) $<
%.lex.c: %.l
- flex -L -o$@ $<
+ cp $@_shipped $@ || flex -L -P$(notdir $*) -o$@ $<
+
+%.hash.c: %.gperf
+ cp $@_shipped $@ || gperf < $< > $@
+
+ifeq ($(MAKECMDGOALS),qconf)
+qconf.o: .tmp_qtcheck
+.tmp_qtcheck: Makefile
+-include .tmp_qtcheck
+
+# Qt needs some extra effort...
+.tmp_qtcheck:
+ @set -e; echo " CHECK qt"; \
+ if pkg-config --exists Qt5Core; then \
+ cflags="-std=c++11 -fPIC `pkg-config --cflags Qt5Core Qt5Gui Qt5Widgets`"; \
+ libs=`pkg-config --libs Qt5Core Qt5Gui Qt5Widgets`; \
+ moc=`pkg-config --variable=host_bins Qt5Core`/moc; \
+ elif pkg-config --exists QtCore; then \
+ cflags=`pkg-config --cflags QtCore QtGui`; \
+ libs=`pkg-config --libs QtCore QtGui`; \
+ moc=`pkg-config --variable=moc_location QtCore`; \
+ else \
+ echo >&2 "*"; \
+ echo >&2 "* Could not find Qt via pkg-config."; \
+ echo >&2 "* Please install either Qt 4.8 or 5.x. and make sure it's in PKG_CONFIG_PATH"; \
+ echo >&2 "*"; \
+ exit 1; \
+ fi; \
+ echo "KC_QT_CFLAGS=$$cflags" > $@; \
+ echo "KC_QT_LIBS=$$libs" >> $@; \
+ echo "KC_QT_MOC=$$moc" >> $@
endif
-$(foreach f, mconf.o $(lxdialog), \
- $(eval $f: CFLAGS+=$$(HOSTCFLAGS_$f)))
+#Define compiler flags to build qconf
+HOSTLOADLIBES_qconf = $(KC_QT_LIBS)
+HOSTCXXFLAGS_qconf.o = $(KC_QT_CFLAGS)
-$(obj)/lexer.lex.o: CFLAGS += $(HOSTCFLAGS_lexer.lex.o)
-$(obj)/parser.tab.o: CFLAGS += $(HOSTCFLAGS_parser.tab.o)
-$(obj)/qconf.o: CXXFLAGS+=$(HOSTCXXFLAGS_qconf.o)
-
-conf: $(conf-objs)
+qconf.o: qconf.moc
+qconf.o: CXXFLAGS+=$(HOSTCXXFLAGS_qconf.o)
-# The *conf-cfg file is used (then filtered out) as the first prerequisite to
-# avoid sourcing it before the script is built, when trying to compute CFLAGS
-# for the actual first prerequisite. This avoids errors like:
-# '/bin/sh: ./mconf-cfg: No such file or directory'
-mconf: mconf-cfg $(mconf-objs)
- $(CC) -o $@ $(filter-out mconf-cfg,$^) $(HOSTLDLIBS_mconf)
+moc = $(KC_QT_MOC) -i $< -o $@
-qconf: qconf-cfg $(qconf-cxxobjs) $(qconf-objs)
- $(CXX) -o $@ $(filter-out qconf-cfg,$^) $(HOSTLDLIBS_qconf)
+%.moc: %.h .tmp_qtcheck
+ $(call moc)