yann@197: # Makefile.in for building crosstool-NG yann@182: # This file serves as source for the ./configure operation yann@182: yann@1156: # This series of test is here because GNU make 3.81 will *not* use MAKEFLAGS yann@1156: # to set additional flags in the current Makfile ( see: yann@1156: # http://savannah.gnu.org/bugs/?20501 ), although the make manual says it yann@1156: # should ( see: http://www.gnu.org/software/make/manual/make.html#Options_002fRecursion ) yann@1156: # so we have to work it around by calling ourselves back if needed yann@1156: yann@1156: # So why do we need not to use the built rules and variables? Because we yann@1156: # need to generate scripts/crosstool-NG.sh from scripts/crosstool-NG.sh.in yann@1156: # and there is a built-in implicit rule '%.sh:' that has neither a pre-requisite yann@1156: # nor a command associated, and that built-in implicit rule takes precedence yann@1156: # over our non-built-in implicit rule '%: %.in', below. yann@1156: yann@1156: # CT_MAKEFLAGS will be used later, below... yann@1156: yann@1156: # Do not print directories as we descend into them yann@1156: ifeq ($(filter --no-print-directory,$(MAKEFLAGS)),) yann@1156: CT_MAKEFLAGS += --no-print-directory yann@1156: endif yann@1156: yann@1156: # Use neither builtin rules, nor builtin variables yann@1156: # Note: dual test, because if -R and -r are given on the command line yann@1156: # (who knows?), MAKEFLAGS contains 'Rr' instead of '-Rr', while adding yann@1156: # '-Rr' to MAKEFLAGS adds it literaly ( and does not add 'Rr' ) yann@1156: ifeq ($(filter Rr,$(MAKEFLAGS)),) yann@1156: ifeq ($(filter -Rr,$(MAKEFLAGS)),) yann@1156: CT_MAKEFLAGS += -Rr yann@1156: endif # No -Rr yann@1156: endif # No Rr yann@1156: yann@1156: # Remove any suffix rules yann@1156: .SUFFIXES: yann@554: yann@382: all: Makefile build yann@382: yann@1047: ############################################################################### yann@182: # Configuration variables yann@182: yann@2834: # Stuff found by ./configure yann@2835: export DATE := @DATE@ yann@2835: export LOCAL := @enable_local@ yann@2835: export PROG_SED := @program_transform_name@ yann@2835: export PACKAGE_TARNAME := @PACKAGE_TARNAME@ yann@2835: export VERSION := @PACKAGE_VERSION@ yann@2835: export prefix := @prefix@ yann@2835: export exec_prefix := @exec_prefix@ yann@2835: export bindir := @bindir@ yann@2835: export libdir := @libdir@@sublibdir@ yann@2835: export docdir := @docdir@@subdocdir@ yann@2835: export mandir := @mandir@ yann@2835: export datarootdir := @datarootdir@ yann@2835: export install := @INSTALL@ yann@2835: export bash := @_BASH@ yann@2839: export grep := @GREP@ yann@2835: export make := @MAKE@ yann@2835: export sed := @SED@ yann@2835: export libtool := @LIBTOOL@ yann@2835: export libtoolize := @LIBTOOLIZE@ yann@2835: export objcopy := @OBJCOPY@ yann@2835: export objdump := @OBJDUMP@ yann@2835: export readelf := @READELF@ yann@2835: export patch := @PATCH@ yann@2835: export CC := @CC@ yann@2835: export CPP := @CPP@ yann@2835: export CPPFLAGS := @CPPFLAGS@ yann@2835: export CFLAGS := @CFLAGS@ yann@2835: export LDFLAGS := @LDFLAGS@ yann@2835: export LIBS := @LIBS@ yann@2835: export curses_hdr := @ac_ct_curses_hdr@ yann@2835: export gettext := @gettext@ yann@1109: yann@2481: # config options to push down to kconfig yann@2834: KCONFIG:= @kconfig_options@ yann@2481: yann@1109: ############################################################################### yann@2026: # Non-configure variables yann@2026: MAN_SECTION := 1 yann@2026: MAN_SUBDIR := /man$(MAN_SECTION) yann@2026: yann@2834: PROG_NAME := $(shell echo 'ct-ng' |$(sed) -r -e '$(PROG_SED)' ) yann@2620: yann@2026: ############################################################################### yann@1109: # Sanity checks yann@1109: yann@1109: # Check if Makefile is up to date: yann@1109: Makefile: Makefile.in yann@1109: @echo "$< did changed: you must re-run './configure'" yann@1109: @false yann@1109: yann@1109: # If installing with DESTDIR, check it's an absolute path yann@1109: ifneq ($(strip $(DESTDIR)),) yann@1109: ifneq ($(DESTDIR),$(abspath /$(DESTDIR))) yann@1109: $(error DESTDIR is not an absolute PATH: '$(DESTDIR)') yann@1109: endif yann@1109: endif yann@182: yann@182: ############################################################################### yann@182: # Global make rules yann@182: yann@1156: # If any extra MAKEFLAGS were added, re-run ourselves yann@1156: # See top of file for an explanation of why this is needed... yann@1156: ifneq ($(strip $(CT_MAKEFLAGS)),) yann@1156: yann@2505: # Somehow, the new auto-completion for make in the recent distributions yann@2505: # trigger a behavior where our Makefile calls itself recursively, in a yann@2505: # never-ending loop (except on lack of ressources, swap, PIDs...) yann@2505: # Avoid this situation by cutting the recursion short at the first yann@2505: # level. yann@2505: # This has the side effect of only showing the real targets, and hiding our yann@2505: # internal ones. :-) yann@2505: ifneq ($(MAKELEVEL),0) yann@2505: $(error Recursion detected, bailing out...) yann@2505: endif yann@2505: yann@1156: MAKEFLAGS += $(CT_MAKEFLAGS) yann@2834: build install clean distclean mrproper uninstall: yann@1156: @$(MAKE) $@ yann@1156: yann@1156: else yann@1156: # There were no additional MAKEFLAGS to add, do the job yann@1156: yann@2835: TARGETS := bin lib lib-kconfig doc man yann@182: yann@555: build: $(patsubst %,build-%,$(TARGETS)) yann@182: yann@1101: install: build real-install yann@555: yann@555: clean: $(patsubst %,clean-%,$(TARGETS)) yann@182: yann@182: distclean: clean yann@554: @echo " RM 'Makefile'" yann@182: @rm -f Makefile yann@182: yann@2834: mrproper: distclean yann@2834: @echo " RM 'autostuff'" yann@2834: @ rm -rf autom4te.cache config.log config.status configure yann@2834: yann@1048: uninstall: real-uninstall yann@182: yann@182: ############################################################################### yann@182: # Specific make rules yann@182: yann@182: #-------------------------------------- yann@182: # Build rules yann@182: yann@2835: build-bin: $(PROG_NAME) \ yann@2835: scripts/crosstool-NG.sh \ yann@2835: scripts/saveSample.sh \ yann@2835: scripts/showTuple.sh yann@1297: @chmod 755 $^ yann@182: yann@2838: build-lib: config/configure.in \ yann@2838: paths.mk \ yann@2838: paths.sh yann@2835: yann@2835: build-lib-kconfig: yann@2835: @$(MAKE) -C kconfig yann@182: yann@555: build-doc: yann@555: yann@2620: build-man: docs/$(PROG_NAME).1.gz yann@309: yann@2620: docs/$(PROG_NAME).1.gz: docs/$(PROG_NAME).1 yann@554: @echo " GZIP '$@'" yann@317: @gzip -c9 $< >$@ yann@182: yann@2621: define sed_it yann@2621: @echo " SED '$@'" yann@2834: @$(sed) -r -e 's,@@CT_BINDIR@@,$(bindir),g;' \ yann@2834: -e 's,@@CT_LIBDIR@@,$(libdir),g;' \ yann@2834: -e 's,@@CT_DOCDIR@@,$(docdir),g;' \ yann@2834: -e 's,@@CT_MANDIR@@,$(mandir),g;' \ yann@2621: -e 's,@@CT_PROG_NAME@@,$(PROG_NAME),g;' \ yann@2621: -e 's,@@CT_VERSION@@,$(VERSION),g;' \ yann@2621: -e 's,@@CT_DATE@@,$(DATE),g;' \ yann@2621: -e 's,@@CT_make@@,$(make),g;' \ yann@2621: -e 's,@@CT_bash@@,$(bash),g;' \ yann@2621: $< >$@ yann@2621: endef yann@2621: yann@2622: docs/$(PROG_NAME).1: docs/ct-ng.1.in Makefile yann@2622: $(call sed_it) yann@2622: yann@2623: $(PROG_NAME): ct-ng.in Makefile yann@2621: $(call sed_it) yann@2621: yann@470: %: %.in Makefile yann@2621: $(call sed_it) yann@1153: yann@1153: # We create a script fragment that is parseable from inside a Makefile, yann@2838: # and one from inside a shell script yann@2481: paths.mk: FORCE yann@1153: @echo " GEN '$@'" yann@2838: @(echo 'export install=$(install)'; \ yann@2838: echo 'export bash=$(bash)'; \ yann@2838: echo 'export grep=$(grep)'; \ yann@2838: echo 'export make=$(make)'; \ yann@2838: echo 'export sed=$(sed)'; \ yann@2838: echo 'export libtool=$(libtool)'; \ yann@2838: echo 'export libtoolize=$(libtoolize)'; \ yann@2838: echo 'export objcopy=$(objcopy)'; \ yann@2838: echo 'export objdump=$(objdump)'; \ yann@2838: echo 'export readelf=$(readelf)'; \ yann@2838: echo 'export patch=$(patch)'; \ yann@2838: ) >$@ yann@2838: yann@2838: paths.sh: FORCE yann@2838: @echo " GEN '$@'" yann@2838: @(echo 'export install="$(install)"'; \ yann@2838: echo 'export bash="$(bash)"'; \ yann@2838: echo 'export grep="$(grep)"'; \ yann@2838: echo 'export make="$(make)"'; \ yann@2838: echo 'export sed="$(sed)"'; \ yann@2838: echo 'export libtool="$(libtool)"'; \ yann@2838: echo 'export libtoolize="$(libtoolize)"'; \ yann@2838: echo 'export objcopy="$(objcopy)"'; \ yann@2838: echo 'export objdump="$(objdump)"'; \ yann@2838: echo 'export readelf="$(readelf)"'; \ yann@2838: echo 'export patch="$(patch)"'; \ yann@2838: ) >$@ yann@182: yann@2481: config/configure.in: FORCE yann@2481: @echo " GEN '$@'" yann@2481: @{ printf "# Generated file, do not edit\n"; \ yann@2481: printf "# Default values as found by ./configure\n"; \ yann@2481: for var in $(KCONFIG); do \ yann@2481: printf "\n"; \ yann@2481: printf "config CONFIGURE_$${var%%=*}\n"; \ yann@2481: if [ "$${var#*=}" = "y" ]; then \ yann@2631: printf " def_bool y\n"; \ yann@2631: else \ yann@2631: printf " bool\n"; \ yann@2481: fi; \ yann@2481: done; \ yann@2481: } >$@ yann@2481: yann@2481: FORCE: yann@2481: yann@182: #-------------------------------------- yann@182: # Clean rules yann@182: yann@182: clean-bin: yann@2620: @echo " RM '$(PROG_NAME)'" yann@2620: @rm -f $(PROG_NAME) yann@1339: @echo " RM 'scripts/crosstool-NG.sh'" yann@1158: @rm -f scripts/crosstool-NG.sh yann@1339: @echo " RM 'scripts/saveSample.sh'" yann@1186: @rm -f scripts/saveSample.sh yann@1339: @echo " RM 'scripts/showTuple.sh'" yann@1336: @rm -f scripts/showTuple.sh yann@182: yann@182: clean-lib: yann@2838: @echo " RM 'paths'" yann@2838: @rm -f paths.mk paths.sh yann@2481: @echo " RM 'config/configure.in'" yann@2481: @rm -f config/configure.in yann@182: yann@2835: clean-lib-kconfig: yann@2835: @$(MAKE) -C kconfig clean yann@2835: yann@182: clean-doc: yann@555: yann@555: clean-man: yann@2620: @echo " RM 'docs/$(PROG_NAME).1'" yann@2620: @rm -f docs/$(PROG_NAME).1 yann@2620: @echo " RM 'docs/$(PROG_NAME).1.gz'" yann@2620: @rm -f docs/$(PROG_NAME).1.gz yann@182: yann@182: #-------------------------------------- yann@554: # Check for --local setup yann@182: yann@2834: ifeq ($(strip $(LOCAL)),yes) yann@1048: yann@1101: real-install: yann@1297: @true yann@1048: yann@1048: real-uninstall: yann@1048: @true yann@1048: yann@1048: else yann@285: yann@554: #-------------------------------------- yann@554: # Install rules yann@554: yann@1876: real-install: $(patsubst %,install-%,$(TARGETS)) install-post yann@1048: yann@2834: install-bin: $(DESTDIR)$(bindir) yann@2620: @echo " INST '$(PROG_NAME)'" yann@2834: @$(install) -m 755 $(PROG_NAME) "$(DESTDIR)$(bindir)/$(PROG_NAME)" yann@182: yann@555: # If one is hacking crosstool-NG, the patch set might change between any two yann@555: # installations of the same VERSION, thus the patches must be removed prior yann@555: # to being installed. It is simpler to remove the whole lib/ directory, as it yann@555: # is the goal of the install-lib rule to install the lib/ directory... yann@2835: install-lib: uninstall-lib \ yann@2835: $(DESTDIR)$(libdir) \ yann@2835: install-lib-main \ yann@2835: install-lib-samples yann@182: yann@2835: LIB_SUB_DIR := config contrib patches scripts yann@2834: $(patsubst %,install-lib-%-copy,$(LIB_SUB_DIR)): $(DESTDIR)$(libdir) yann@1994: @echo " INSTDIR '$(patsubst install-lib-%-copy,%,$(@))/'" yann@1994: @tar cf - --exclude='*.sh.in' $(patsubst install-lib-%-copy,%,$(@)) \ yann@2834: |(cd "$(DESTDIR)$(libdir)"; tar xf -) yann@1994: yann@1994: # Huh? It seems we need at least one command to make this rule kick-in. yann@1994: install-lib-%: install-lib-%-copy; @true yann@1994: yann@1994: # Huh? that one does not inherit the -opy dependency, above... yann@1994: install-lib-scripts: install-lib-scripts-copy yann@2834: @chmod a+x $(DESTDIR)$(libdir)/scripts/crosstool-NG.sh yann@2834: @chmod a+x $(DESTDIR)$(libdir)/scripts/saveSample.sh yann@2834: @rm -f "$(DESTDIR)$(libdir)/scripts/addToolVersion.sh" yann@1994: yann@2834: install-lib-main: $(DESTDIR)$(libdir) $(patsubst %,install-lib-%,$(LIB_SUB_DIR)) yann@1994: @echo " INST 'steps.mk'" yann@2834: @$(install) -m 644 steps.mk "$(DESTDIR)$(libdir)/steps.mk" yann@2838: @echo " INST 'paths'" yann@2838: @$(install) -m 644 paths.mk paths.sh "$(DESTDIR)$(libdir)" yann@182: yann@182: # Samples need a little love: yann@425: # - change every occurrence of CT_TOP_DIR to CT_LIB_DIR yann@2834: install-lib-samples: $(DESTDIR)$(libdir) install-lib-main yann@1994: @echo " INSTDIR 'samples/'" yann@2577: @for samp_dir in samples/*/; do \ yann@2834: mkdir -p "$(DESTDIR)$(libdir)/$${samp_dir}"; \ yann@2422: $(sed) -r -e 's:\$$\{CT_TOP_DIR\}:\$$\{CT_LIB_DIR\}:;' \ yann@2422: -e 's:^(CT_WORK_DIR)=.*:\1="\$${CT_TOP_DIR}/.build":;' \ yann@2577: $${samp_dir}/crosstool.config \ yann@2834: >"$(DESTDIR)$(libdir)/$${samp_dir}/crosstool.config"; \ yann@2577: $(install) -m 644 "$${samp_dir}/reported.by" \ yann@2834: "$(DESTDIR)$(libdir)/$${samp_dir}"; \ yann@2577: for libc_cfg in "$${samp_dir}/"*libc*.config; do \ yann@2577: [ -f "$${libc_cfg}" ] || continue; \ yann@2577: $(install) -m 644 "$${libc_cfg}" \ yann@2834: "$(DESTDIR)$(libdir)/$${samp_dir}"; \ yann@2577: done; \ yann@182: done yann@2834: @$(install) -m 644 samples/samples.mk "$(DESTDIR)$(libdir)/samples/samples.mk" yann@182: yann@2835: KCONFIG_FILES := conf mconf nconf kconfig.mk yann@2835: install-lib-kconfig: $(DESTDIR)$(libdir) install-lib-main yann@2835: @echo " INST 'kconfig/'" yann@2835: @for f in $(KCONFIG_FILES); do \ yann@2835: install -D "kconfig/$${f}" "$(DESTDIR)$(libdir)/kconfig/$${f}"; \ yann@2835: done yann@2835: yann@2834: install-doc: $(DESTDIR)$(docdir) yann@2076: @echo " INST 'docs/*.txt'" yann@2076: @for doc_file in docs/*.txt; do \ yann@2834: $(install) -m 644 "$${doc_file}" "$(DESTDIR)$(docdir)"; \ yann@182: done yann@249: yann@2834: install-man: $(DESTDIR)$(mandir)$(MAN_SUBDIR) yann@2620: @echo " INST '$(PROG_NAME).1.gz'" yann@2834: @$(install) -m 644 docs/$(PROG_NAME).1.gz "$(DESTDIR)$(mandir)$(MAN_SUBDIR)" yann@182: yann@2834: $(sort $(DESTDIR)$(bindir) $(DESTDIR)$(libdir) $(DESTDIR)$(docdir) $(DESTDIR)$(mandir)$(MAN_SUBDIR)): yann@1994: @echo " MKDIR '$@/'" yann@1153: @$(install) -m 755 -d "$@" yann@182: yann@1876: install-post: yann@1876: @echo yann@2620: @echo "For auto-completion, do not forget to install '$(PROG_NAME).comp' into" yann@1994: @echo "your bash completion directory (usually /etc/bash_completion.d)" yann@182: yann@182: #-------------------------------------- yann@182: # Uninstall rules yann@182: yann@1048: real-uninstall: $(patsubst %,uninstall-%,$(TARGETS)) yann@1048: yann@554: uninstall-bin: yann@2834: @echo " RM '$(DESTDIR)$(bindir)/$(PROG_NAME)'" yann@2834: @rm -f "$(DESTDIR)$(bindir)/$(PROG_NAME)" yann@182: yann@554: uninstall-lib: yann@2834: @echo " RMDIR '$(DESTDIR)$(libdir)/'" yann@2834: @rm -rf "$(DESTDIR)$(libdir)" yann@298: yann@554: uninstall-doc: yann@2834: @echo " RMDIR '$(DESTDIR)$(docdir)/'" yann@2834: @rm -rf "$(DESTDIR)$(docdir)" yann@554: yann@554: uninstall-man: yann@2834: @echo " RM '$(DESTDIR)$(mandir)$(MAN_SUBDIR)/$(PROG_NAME).1.gz'" yann@2834: @rm -f "$(DESTDIR)$(mandir)$(MAN_SUBDIR)/$(PROG_NAME).1"{,.gz} yann@1048: yann@1048: endif # Not --local yann@1156: yann@1156: endif # No extra MAKEFLAGS were added michael@2694: michael@2694: .PHONY: build $(patsubst %,build-%,$(TARGETS)) install