summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.in84
-rw-r--r--configure.ac20
-rw-r--r--kconfig/Makefile99
-rw-r--r--kconfig/kconfig.mk171
4 files changed, 183 insertions, 191 deletions
diff --git a/Makefile.in b/Makefile.in
index 377cd56..66e0773 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -39,29 +39,37 @@ all: Makefile build
# Configuration variables
# Stuff found by ./configure
-DATE := @DATE@
-LOCAL := @enable_local@
-PROG_SED := @program_transform_name@
-PACKAGE_TARNAME := @PACKAGE_TARNAME@
-VERSION := @PACKAGE_VERSION@
-prefix := @prefix@
-exec_prefix := @exec_prefix@
-bindir := @bindir@
-libdir := @libdir@@sublibdir@
-docdir := @docdir@@subdocdir@
-datarootdir := @datarootdir@
-mandir := @mandir@
-install := @INSTALL@
-bash := @_BASH@
-grep := @EGREP@
-make := @MAKE@
-sed := @SED@
-libtool := @LIBTOOL@
-libtoolize := @LIBTOOLIZE@
-objcopy := @OBJCOPY@
-objdump := @OBJDUMP@
-readelf := @READELF@
-patch := @PATCH@
+export DATE := @DATE@
+export LOCAL := @enable_local@
+export PROG_SED := @program_transform_name@
+export PACKAGE_TARNAME := @PACKAGE_TARNAME@
+export VERSION := @PACKAGE_VERSION@
+export prefix := @prefix@
+export exec_prefix := @exec_prefix@
+export bindir := @bindir@
+export libdir := @libdir@@sublibdir@
+export docdir := @docdir@@subdocdir@
+export mandir := @mandir@
+export datarootdir := @datarootdir@
+export install := @INSTALL@
+export bash := @_BASH@
+export grep := @EGREP@
+export make := @MAKE@
+export sed := @SED@
+export libtool := @LIBTOOL@
+export libtoolize := @LIBTOOLIZE@
+export objcopy := @OBJCOPY@
+export objdump := @OBJDUMP@
+export readelf := @READELF@
+export patch := @PATCH@
+export CC := @CC@
+export CPP := @CPP@
+export CPPFLAGS := @CPPFLAGS@
+export CFLAGS := @CFLAGS@
+export LDFLAGS := @LDFLAGS@
+export LIBS := @LIBS@
+export curses_hdr := @ac_ct_curses_hdr@
+export gettext := @gettext@
# config options to push down to kconfig
KCONFIG:= @kconfig_options@
@@ -113,7 +121,7 @@ build install clean distclean mrproper uninstall:
else
# There were no additional MAKEFLAGS to add, do the job
-TARGETS := bin lib doc man
+TARGETS := bin lib lib-kconfig doc man
build: $(patsubst %,build-%,$(TARGETS))
@@ -137,10 +145,17 @@ uninstall: real-uninstall
#--------------------------------------
# Build rules
-build-bin: $(PROG_NAME) scripts/crosstool-NG.sh scripts/saveSample.sh scripts/showTuple.sh
+build-bin: $(PROG_NAME) \
+ scripts/crosstool-NG.sh \
+ scripts/saveSample.sh \
+ scripts/showTuple.sh
@chmod 755 $^
-build-lib: paths.mk config/configure.in
+build-lib: paths.mk \
+ config/configure.in
+
+build-lib-kconfig:
+ @$(MAKE) -C kconfig
build-doc:
@@ -229,6 +244,9 @@ clean-lib:
@echo " RM 'config/configure.in'"
@rm -f config/configure.in
+clean-lib-kconfig:
+ @$(MAKE) -C kconfig clean
+
clean-doc:
clean-man:
@@ -263,9 +281,12 @@ install-bin: $(DESTDIR)$(bindir)
# installations of the same VERSION, thus the patches must be removed prior
# to being installed. It is simpler to remove the whole lib/ directory, as it
# is the goal of the install-lib rule to install the lib/ directory...
-install-lib: uninstall-lib $(DESTDIR)$(libdir) install-lib-main install-lib-samples
+install-lib: uninstall-lib \
+ $(DESTDIR)$(libdir) \
+ install-lib-main \
+ install-lib-samples
-LIB_SUB_DIR := config contrib kconfig patches scripts
+LIB_SUB_DIR := config contrib patches scripts
$(patsubst %,install-lib-%-copy,$(LIB_SUB_DIR)): $(DESTDIR)$(libdir)
@echo " INSTDIR '$(patsubst install-lib-%-copy,%,$(@))/'"
@tar cf - --exclude='*.sh.in' $(patsubst install-lib-%-copy,%,$(@)) \
@@ -306,6 +327,13 @@ install-lib-samples: $(DESTDIR)$(libdir) install-lib-main
done
@$(install) -m 644 samples/samples.mk "$(DESTDIR)$(libdir)/samples/samples.mk"
+KCONFIG_FILES := conf mconf nconf kconfig.mk
+install-lib-kconfig: $(DESTDIR)$(libdir) install-lib-main
+ @echo " INST 'kconfig/'"
+ @for f in $(KCONFIG_FILES); do \
+ install -D "kconfig/$${f}" "$(DESTDIR)$(libdir)/kconfig/$${f}"; \
+ done
+
install-doc: $(DESTDIR)$(docdir)
@echo " INST 'docs/*.txt'"
@for doc_file in docs/*.txt; do \
diff --git a/configure.ac b/configure.ac
index ab9640a..0be5b90 100644
--- a/configure.ac
+++ b/configure.ac
@@ -251,11 +251,27 @@ AC_HEADER_STDC
AC_FUNC_MALLOC
AC_FUNC_REALLOC
AC_FUNC_ALLOCA
+
+#----------------------------------------
+# Check for gettext, for the kconfig frontends
+AC_SUBST([gettext])
+AC_CHECK_HEADERS(
+ [libintl.h],
+ [ac_ct_gettext_hdr=$ac_header; break])
+AS_IF(
+ [test -n "$ac_ct_gettext_hdr"],
+ [AC_CHECK_DECL(
+ [gettext],gettext=y,,
+ [#include <$ac_ct_gettext_hdr>])])
+
+#----------------------------------------
+# Check for ncurses, for the kconfig frontends
+AC_SUBST([ac_ct_curses_hdr])
AC_CHECK_HEADERS(
[ncurses/ncurses.h ncurses/curses.h ncursesw/curses.h ncurses.h curses.h],
- [ac_ct_curses_hdr_found=yes; break])
+ [ac_ct_curses_hdr=$ac_header; break])
AS_IF(
- [test -z "$ac_ct_curses_hdr_found"],
+ [test -z "$ac_ct_curses_hdr"],
[AC_MSG_ERROR([could not find curses header, required for the kconfig frontends])])
AC_SEARCH_LIBS(
[initscr],
diff --git a/kconfig/Makefile b/kconfig/Makefile
new file mode 100644
index 0000000..091d568
--- /dev/null
+++ b/kconfig/Makefile
@@ -0,0 +1,99 @@
+#-----------------------------------------------------------
+# Hmmm! Cheesy build!
+# Or: where I can unveil my make-fu... :-]
+
+all: conf mconf nconf
+ @true # Just be silent, you fscking son of a fscking beach...
+
+# Build flags
+CFLAGS = -DCONFIG_=\"CT_\" -DPACKAGE="\"crosstool-NG $(VERSION)\""
+LDFLAGS =
+
+# Compiler flags to use gettext
+ifeq ($(gettext),)
+INTL_CFLAGS = -DKBUILD_NO_NLS
+endif
+
+# Compiler and linker flags to use ncurses
+NCURSES_CFLAGS = -DCURSES_LOC="\"$(curses_hdr)\""
+NCURSES_LDFLAGS = $(LIBS)
+
+# Common source files
+COMMON_SRC = zconf.tab.c
+COMMON_OBJ = $(patsubst %.c,%.o,$(COMMON_SRC))
+COMMON_DEP = $(patsubst %.o,%.dep,$(COMMON_OBJ))
+$(COMMON_OBJ) $(COMMON_DEP): CFLAGS += $(INTL_CFLAGS)
+
+# lxdialog source files
+LX_SRC = $(wildcard lxdialog/*.c)
+LX_OBJ = $(patsubst %.c,%.o,$(LX_SRC))
+LX_DEP = $(patsubst %.o,%.dep,$(LX_OBJ))
+$(LX_OBJ) $(LX_DEP): CFLAGS += $(NCURSES_CFLAGS) $(INTL_CFLAGS)
+
+# What's needed to build 'conf'
+conf_SRC = conf.c
+conf_OBJ = $(patsubst %.c,%.o,$(conf_SRC))
+conf_DEP = $(patsubst %.o,%.dep,$(conf_OBJ))
+$(conf_OBJ) $(conf_DEP): CFLAGS += $(INTL_CFLAGS)
+
+# What's needed to build 'mconf'
+mconf_SRC = mconf.c
+mconf_OBJ = $(patsubst %.c,%.o,$(mconf_SRC))
+mconf_DEP = $(patsubst %.c,%.dep,$(mconf_SRC))
+$(mconf_OBJ) $(mconf_DEP): CFLAGS += $(NCURSES_CFLAGS) $(INTL_CFLAGS)
+mconf: LDFLAGS += $(NCURSES_LDFLAGS)
+
+# What's needed to build 'nconf'
+nconf_SRC = nconf.c nconf.gui.c
+nconf_OBJ = $(patsubst %.c,%.o,$(nconf_SRC))
+nconf_DEP = $(patsubst %.c,%.dep,$(nconf_SRC))
+$(nconf_OBJ) $(nconf_DEP): CFLAGS += $(INTL_CFLAGS)
+nconf: LDFLAGS += -lmenu -lpanel -lncurses
+
+# Under Cygwin, we need to auto-import some libs (which ones, exactly?)
+# for mconf and nconf to lin properly.
+ifeq ($(shell uname -o 2>/dev/null || echo unknown),Cygwin)
+mconf: LDFLAGS += -Wl,--enable-auto-import
+nconf: LDFLAGS += -Wl,--enable-auto-import
+endif
+
+# These are generated files:
+ALL_OBJS = $(sort $(COMMON_OBJ) $(LX_OBJ) $(conf_OBJ) $(mconf_OBJ) $(nconf_OBJ))
+ALL_DEPS = $(sort $(COMMON_DEP) $(LX_DEP) $(conf_DEP) $(mconf_DEP) $(nconf_DEP))
+
+# Cheesy auto-dependencies
+DEPS = $(COMMON_DEP)
+DEPS += $(conf_DEP)
+DEPS += $(mconf_DEP) $(LX_DEP)
+DEPS += $(nconf_DEP)
+-include $(DEPS)
+
+# Build the dependency for C files
+%.dep: %.c
+ @echo " DEP '$@'"
+ @$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -MM $< |$(sed) -r -e 's|([^:]+.o)( *:+)|$(<:.c=.o) $@\2|;' >$@
+
+# Build C files
+%.o: %.c
+ @echo " CC '$@'"
+ @$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -o $@ -c $<
+
+# Actual link
+mconf: $(COMMON_OBJ) $(LX_OBJ) $(mconf_OBJ)
+ @echo " LD '$@'"
+ @$(CC) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS)
+
+nconf: $(COMMON_OBJ) $(nconf_OBJ)
+ @echo " LD '$@'"
+ @$(CC) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS)
+
+conf: $(COMMON_OBJ) $(conf_OBJ)
+ @echo " LD '$@'"
+ @$(CC) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS)
+
+#-----------------------------------------------------------
+# Cleaning up the mess...
+
+clean:
+ @echo " RM 'kconfig'"
+ @rm -f conf mconf nconf $(ALL_OBJS) $(ALL_DEPS)
diff --git a/kconfig/kconfig.mk b/kconfig/kconfig.mk
index ab29e48..d930d37 100644
--- a/kconfig/kconfig.mk
+++ b/kconfig/kconfig.mk
@@ -2,9 +2,6 @@
# crosstool-NG configuration targets
# These targets are used from top-level makefile
-# The place where the kconfig stuff lies
-obj = kconfig
-
#-----------------------------------------------------------
# The configurators rules
@@ -13,17 +10,21 @@ PHONY += $(configurators)
$(configurators): config_files
-menuconfig: $(obj)/mconf
+CONF := $(CT_LIB_DIR)/kconfig/conf
+MCONF := $(CT_LIB_DIR)/kconfig/mconf
+NCONF := $(CT_LIB_DIR)/kconfig/nconf
+
+menuconfig:
@$(ECHO) " CONF $(KCONFIG_TOP)"
- $(SILENT)$< $(KCONFIG_TOP)
+ $(SILENT)$(MCONF) $(KCONFIG_TOP)
-nconfig: $(obj)/nconf
+nconfig:
@$(ECHO) " CONF $(KCONFIG_TOP)"
- $(SILENT)$< $(KCONFIG_TOP)
+ $(SILENT)$(NCONF) $(KCONFIG_TOP)
-oldconfig: $(obj)/conf .config
+oldconfig: .config
@$(ECHO) " CONF $(KCONFIG_TOP)"
- $(SILENT)$< --silent$@ $(KCONFIG_TOP)
+ $(SILENT)$(CONF) --silent$@ $(KCONFIG_TOP)
# Always be silent, the stdout an be >.config
extractconfig:
@@ -48,155 +49,3 @@ help-config::
@echo ' oldconfig - Update current config using a provided .config as base'
@echo ' extractconfig - Extract to stdout the configuration items from a'
@echo ' build.log file piped to stdin'
-
-#-----------------------------------------------------------
-# Hmmm! Cheesy build!
-# Or: where I can unveil my make-fu... :-]
-
-# Oh! Files not here are there, in fact! :-)
-vpath %.c $(CT_LIB_DIR)
-vpath %.h $(CT_LIB_DIR)
-
-# What is the compiler?
-HOST_CC ?= gcc -funsigned-char
-HOST_LD ?= gcc
-
-# Helpers
-check_gettext = $(CT_LIB_DIR)/kconfig/check.sh
-check_lxdialog = $(CT_LIB_DIR)/kconfig/lxdialog/check-lxdialog.sh
-
-# Build flags
-CFLAGS = -DCONFIG_=\"CT_\" -DPACKAGE="\"crosstool-NG $(CT_VERSION)\""
-LDFLAGS =
-
-# Compiler flags to use gettext
-INTL_CFLAGS = $(shell $(SHELL) $(check_gettext) $(HOST_CC) $(EXTRA_CFLAGS))
-
-# Compiler and linker flags to use ncurses
-NCURSES_CFLAGS = $(shell $(SHELL) $(check_lxdialog) -ccflags)
-NCURSES_LDFLAGS = $(shell $(SHELL) $(check_lxdialog) -ldflags $(HOST_CC))
-
-# Check that we have the required ncurses stuff installed for lxdialog (menuconfig)
-dochecklxdialog:
- $(SILENT)$(SHELL) $(check_lxdialog) -check $(HOST_CC) $(NCURSES_CFLAGS) $(NCURSES_LDFLAGS)
-
-# Common source files
-COMMON_SRC = kconfig/zconf.tab.c
-COMMON_OBJ = $(patsubst %.c,%.o,$(COMMON_SRC))
-COMMON_DEP = $(patsubst %.o,%.dep,$(COMMON_OBJ))
-$(COMMON_OBJ) $(COMMON_DEP): CFLAGS += $(INTL_CFLAGS)
-
-# lxdialog source files
-LX_SRC = $(patsubst $(CT_LIB_DIR)/%,%,$(wildcard $(CT_LIB_DIR)/kconfig/lxdialog/*.c))
-LX_OBJ = $(patsubst %.c,%.o,$(LX_SRC))
-LX_DEP = $(patsubst %.o,%.dep,$(LX_OBJ))
-$(LX_OBJ) $(LX_DEP): CFLAGS += $(NCURSES_CFLAGS) $(INTL_CFLAGS)
-
-# What's needed to build 'conf'
-conf_SRC = kconfig/conf.c
-conf_OBJ = $(patsubst %.c,%.o,$(conf_SRC))
-conf_DEP = $(patsubst %.o,%.dep,$(conf_OBJ))
-$(conf_OBJ) $(conf_DEP): CFLAGS += $(INTL_CFLAGS)
-
-# What's needed to build 'mconf'
-mconf_SRC = kconfig/mconf.c
-mconf_OBJ = $(patsubst %.c,%.o,$(mconf_SRC))
-mconf_DEP = $(patsubst %.c,%.dep,$(mconf_SRC))
-$(mconf_OBJ) $(mconf_DEP): CFLAGS += $(NCURSES_CFLAGS) $(INTL_CFLAGS)
-$(obj)/mconf: LDFLAGS += $(NCURSES_LDFLAGS)
-
-# What's needed to build 'nconf'
-nconf_SRC = kconfig/nconf.c kconfig/nconf.gui.c
-nconf_OBJ = $(patsubst %.c,%.o,$(nconf_SRC))
-nconf_DEP = $(patsubst %.c,%.dep,$(nconf_SRC))
-$(nconf_OBJ) $(nconf_DEP): CFLAGS += $(INTL_CFLAGS)
-$(obj)/nconf: LDFLAGS += -lmenu -lpanel -lncurses
-
-# Under Cygwin, we need to auto-import some libs (which ones, exactly?)
-# for mconf and nconf to lin properly.
-ifeq ($(shell uname -o 2>/dev/null || echo unknown),Cygwin)
-$(obj)/mconf: LDFLAGS += -Wl,--enable-auto-import
-$(obj)/nconf: LDFLAGS += -Wl,--enable-auto-import
-endif
-
-# These are generated files:
-ALL_OBJS = $(sort $(COMMON_OBJ) $(LX_OBJ) $(conf_OBJ) $(mconf_OBJ) $(nconf_OBJ))
-ALL_DEPS = $(sort $(COMMON_DEP) $(LX_DEP) $(conf_DEP) $(mconf_DEP) $(nconf_DEP))
-
-# Cheesy auto-dependencies
-# Only parse the following if a configurator was called, to avoid building
-# dependencies when not needed (eg. list-steps, list-samples...)
-# We must be careful what we enclose, because we need some of the variable
-# definitions for clean (and distclean) at least.
-# Just protecting the "-include $(DEPS)" line should be sufficient.
-# And in case we want menuconfig, we have to check that lxdialog
-# can find a curses lib.
-
-ifneq ($(strip $(MAKECMDGOALS)),)
-ifneq ($(strip $(filter $(configurators),$(MAKECMDGOALS))),)
-
-DEPS = $(COMMON_DEP)
-ifneq ($(strip $(filter oldconfig,$(MAKECMDGOALS))),)
-DEPS += $(conf_DEP)
-endif
-ifneq ($(strip $(filter menuconfig,$(MAKECMDGOALS))),)
-DEPS += $(mconf_DEP) $(LX_DEP)
-$(COMMON_OBJ) $(COMMON_DEP): |dochecklxdialog
-$(LX_OBJ) $(LX_DEP): |dochecklxdialog
-$(mconf_OBJ) $(mconf_DEP): |dochecklxdialog
-endif
-ifneq ($(strip $(filter nconfig,$(MAKECMDGOALS))),)
-DEPS += $(nconf_DEP)
-endif
-
--include $(DEPS)
-
-endif # MAKECMDGOALS contains a configurator rule
-endif # MAKECMDGOALS != ""
-
-# Each .o or .dep *can not* directly depend on kconfig/, because kconfig can
-# be touched during the build (who's touching it, btw?) so each .o or .dep
-# would be re-built when it should not be.
-# So manually check for presence of $(obj) (ie. kconfig), and only mkdir
-# if needed. After all, that's not so bad...
-# mkdir $(obj)/lxdialog, because we need it, and incidentally, that
-# also creates $(obj).
-define check_kconfig_dir
- $(SILENT)if [ ! -d $(obj)/lxdialog ]; then \
- $(ECHO) " MKDIR $(obj)"; \
- mkdir -p $(obj)/lxdialog; \
- fi
-endef
-
-# Build the dependency for C files
-%.dep: %.c $(CT_LIB_DIR)/kconfig/kconfig.mk
- $(check_kconfig_dir)
- @$(ECHO) " DEP $@"
- $(SILENT)$(HOST_CC) $(CFLAGS) $(EXTRA_CFLAGS) -MM $< |$(sed) -r -e 's|([^:]+.o)( *:+)|$(<:.c=.o) $@\2|;' >$@
-
-# Build C files
-%.o: %.c $(CT_LIB_DIR)/kconfig/kconfig.mk
- $(check_kconfig_dir)
- @$(ECHO) " CC $@"
- $(SILENT)$(HOST_CC) $(CFLAGS) $(EXTRA_CFLAGS) -o $@ -c $<
-
-# Actual link
-$(obj)/mconf: $(COMMON_OBJ) $(LX_OBJ) $(mconf_OBJ)
- @$(ECHO) ' LD $@'
- $(SILENT)$(HOST_LD) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS)
-
-$(obj)/nconf: $(COMMON_OBJ) $(nconf_OBJ)
- @$(ECHO) ' LD $@'
- $(SILENT)$(HOST_LD) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS)
-
-$(obj)/conf: $(COMMON_OBJ) $(conf_OBJ)
- @$(ECHO) ' LD $@'
- $(SILENT)$(HOST_LD) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS)
-
-#-----------------------------------------------------------
-# Cleaning up the mess...
-
-clean::
- @$(ECHO) " CLEAN kconfig"
- $(SILENT)rm -f kconfig/{,m,n}conf{,.exe} $(ALL_OBJS) $(ALL_DEPS)
- $(SILENT)rmdir --ignore-fail-on-non-empty kconfig{/lxdialog,} 2>/dev/null || true