
15 changed files with 1624 additions and 709 deletions
@ -0,0 +1,4 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
## vim: set noet :
|
||||
|
||||
SUBDIRS = kconfig
|
@ -1,354 +0,0 @@
|
||||
# Makefile.in for building crosstool-NG
|
||||
# This file serves as source for the ./configure operation
|
||||
|
||||
# This series of test is here because GNU make 3.81 will *not* use MAKEFLAGS
|
||||
# to set additional flags in the current Makfile ( see:
|
||||
# http://savannah.gnu.org/bugs/?20501 ), although the make manual says it
|
||||
# should ( see: http://www.gnu.org/software/make/manual/make.html#Options_002fRecursion )
|
||||
# so we have to work it around by calling ourselves back if needed
|
||||
|
||||
# So why do we need not to use the built rules and variables? Because we
|
||||
# need to generate scripts/crosstool-NG.sh from scripts/crosstool-NG.sh.in
|
||||
# and there is a built-in implicit rule '%.sh:' that has neither a pre-requisite
|
||||
# nor a command associated, and that built-in implicit rule takes precedence
|
||||
# over our non-built-in implicit rule '%: %.in', below.
|
||||
|
||||
# CT_MAKEFLAGS will be used later, below...
|
||||
|
||||
# Do not print directories as we descend into them
|
||||
ifeq ($(filter --no-print-directory,$(MAKEFLAGS)),) |
||||
CT_MAKEFLAGS += --no-print-directory
|
||||
endif |
||||
|
||||
# Use neither builtin rules, nor builtin variables
|
||||
# Note: dual test, because if -R and -r are given on the command line
|
||||
# (who knows?), MAKEFLAGS contains 'Rr' instead of '-Rr', while adding
|
||||
# '-Rr' to MAKEFLAGS adds it literaly ( and does not add 'Rr' )
|
||||
# Further: quad test because the flags 'rR' and '-rR' can be reordered.
|
||||
ifeq ($(filter Rr,$(MAKEFLAGS)),) |
||||
ifeq ($(filter -Rr,$(MAKEFLAGS)),) |
||||
ifeq ($(filter rR,$(MAKEFLAGS)),) |
||||
ifeq ($(filter -rR,$(MAKEFLAGS)),) |
||||
CT_MAKEFLAGS += -Rr
|
||||
endif # No -rR
|
||||
endif # No rR
|
||||
endif # No -Rr
|
||||
endif # No Rr
|
||||
|
||||
# Helper: print abbreviation of the command by default, or full command
|
||||
# if doing 'make V=1'.
|
||||
__silent = $(if $(V),,@printf ' %-7s %s\n' '$1' '$(if $2,$2,$(strip $<))' && )
|
||||
__silent_rm = $(call __silent,RM,$1)rm -f $1
|
||||
__silent_rmdir = $(call __silent,RMDIR,$1)rm -rf $1
|
||||
|
||||
# Remove any suffix rules
|
||||
.SUFFIXES: |
||||
|
||||
all: configure Makefile build |
||||
|
||||
###############################################################################
|
||||
# Configuration variables
|
||||
|
||||
# Stuff found by ./configure
|
||||
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 datarootdir := @datarootdir@
|
||||
export bindir := @bindir@
|
||||
export libdir := @libdir@
|
||||
export docdir := @docdir@
|
||||
export mandir := @mandir@
|
||||
export install := @INSTALL@
|
||||
export bash := @BASH_SHELL@
|
||||
export awk := @AWK@
|
||||
export grep := @GREP@
|
||||
export make := @MAKE@
|
||||
export sed := @SED@
|
||||
export wget := @wget@
|
||||
export curl := @curl@
|
||||
export libtool := @LIBTOOL@
|
||||
export libtoolize := @LIBTOOLIZE@
|
||||
export objcopy := @OBJCOPY@
|
||||
export objdump := @OBJDUMP@
|
||||
export readelf := @READELF@
|
||||
export patch := @PATCH@
|
||||
export gperf := @GPERF@
|
||||
export CPU_COUNT := @CPU_COUNT@
|
||||
|
||||
###############################################################################
|
||||
# Non-configure variables
|
||||
MAN_SECTION := 1
|
||||
MAN_SUBDIR := /man$(MAN_SECTION)
|
||||
|
||||
PROG_NAME := $(shell echo 'ct-ng' |$(sed) -r -e '$(PROG_SED)' )
|
||||
|
||||
###############################################################################
|
||||
# Sanity checks
|
||||
|
||||
# Check if Makefile is up to date:
|
||||
Makefile: Makefile.in |
||||
@echo "$< changed: you must re-run './configure'"
|
||||
@false
|
||||
|
||||
configure: configure.ac |
||||
@echo "$< changed: you must re-run './bootstrap'"
|
||||
@false
|
||||
|
||||
# If installing with DESTDIR, check it's an absolute path
|
||||
ifneq ($(strip $(DESTDIR)),) |
||||
ifneq ($(DESTDIR),$(abspath /$(DESTDIR)))
|
||||
$(error DESTDIR is not an absolute PATH: '$(DESTDIR)')
|
||||
endif
|
||||
endif |
||||
|
||||
###############################################################################
|
||||
# Global make rules
|
||||
|
||||
# If any extra MAKEFLAGS were added, re-run ourselves
|
||||
# See top of file for an explanation of why this is needed...
|
||||
ifneq ($(strip $(CT_MAKEFLAGS)),) |
||||
|
||||
# Somehow, the new auto-completion for make in the recent distributions
|
||||
# trigger a behavior where our Makefile calls itself recursively, in a
|
||||
# never-ending loop (except on lack of ressources, swap, PIDs...)
|
||||
# Avoid this situation by cutting the recursion short at the first
|
||||
# level.
|
||||
# This has the side effect of only showing the real targets, and hiding our
|
||||
# internal ones. :-)
|
||||
ifneq ($(MAKELEVEL),0) |
||||
$(error Recursion detected, bailing out...) |
||||
endif |
||||
|
||||
MAKEFLAGS += $(CT_MAKEFLAGS)
|
||||
build install clean distclean mrproper uninstall: |
||||
@$(MAKE) $@
|
||||
|
||||
else |
||||
# There were no additional MAKEFLAGS to add, do the job
|
||||
|
||||
TARGETS := bin lib lib-kconfig doc man
|
||||
|
||||
build: $(patsubst %,build-%,$(TARGETS)) |
||||
|
||||
install: build real-install |
||||
|
||||
clean: $(patsubst %,clean-%,$(TARGETS)) |
||||
|
||||
distclean: clean |
||||
$(call __silent_rm,Makefile kconfig/Makefile config/configure.in)
|
||||
|
||||
mrproper: distclean |
||||
$(call __silent_rmdir,autom4te.cache config/gen config/versions)
|
||||
$(call __silent_rm,config.log config.status configure)
|
||||
|
||||
uninstall: real-uninstall |
||||
|
||||
###############################################################################
|
||||
# Specific make rules
|
||||
|
||||
#--------------------------------------
|
||||
# Build rules
|
||||
|
||||
build-bin: $(PROG_NAME) \
|
||||
scripts/scripts.mk \
|
||||
scripts/crosstool-NG.sh \
|
||||
scripts/saveSample.sh
|
||||
|
||||
build-lib: paths.mk \
|
||||
paths.sh
|
||||
|
||||
build-lib-kconfig: |
||||
$(call __silent,ENTER,kconfig)$(MAKE) -C kconfig
|
||||
$(call __silent,LEAVE,kconfig):
|
||||
|
||||
build-doc: |
||||
|
||||
build-man: docs/$(PROG_NAME).1.gz |
||||
|
||||
docs/$(PROG_NAME).1.gz: docs/$(PROG_NAME).1 |
||||
$(call __silent,GZIP)gzip -c9n $< >$@
|
||||
|
||||
define sed_it |
||||
$(call __silent,SED,$@)$(sed) -r \
|
||||
-e 's,@@CT_BINDIR@@,$(bindir),g;' \
|
||||
-e 's,@@CT_LIBDIR@@,$(libdir),g;' \
|
||||
-e 's,@@CT_DOCDIR@@,$(docdir),g;' \
|
||||
-e 's,@@CT_MANDIR@@,$(mandir),g;' \
|
||||
-e 's,@@CT_PROG_NAME@@,$(PROG_NAME),g;' \
|
||||
-e 's,@@CT_VERSION@@,$(VERSION),g;' \
|
||||
-e 's,@@CT_DATE@@,$(DATE),g;' \
|
||||
-e 's,@@CT_make@@,$(make),g;' \
|
||||
-e 's,@@CT_bash@@,$(bash),g;' \
|
||||
-e 's,@@CT_awk@@,$(awk),g;' \
|
||||
-e 's,@@CT_wget@@,$(wget),g;' \
|
||||
-e 's,@@CT_curl@@,$(curl),g;' \
|
||||
-e 's,@@CT_cpucount@@,$(CPU_COUNT),g;' \
|
||||
$< >$@
|
||||
endef |
||||
|
||||
docs/$(PROG_NAME).1: docs/ct-ng.1.in Makefile |
||||
$(call sed_it)
|
||||
|
||||
$(PROG_NAME): ct-ng.in Makefile |
||||
$(call sed_it)
|
||||
$(call __silent,CHMOD,$@)chmod 755 $@
|
||||
|
||||
%: %.in Makefile |
||||
$(call sed_it)
|
||||
|
||||
__paths_vars = install bash awk grep make sed libtool \
|
||||
libtoolize objcopy objdump readelf patch gperf
|
||||
|
||||
# We create a script fragment that is parseable from inside a Makefile,
|
||||
# and one from inside a shell script.
|
||||
paths.mk: FORCE |
||||
$(call __silent,GEN,$@){ $(foreach w,$(__paths_vars),$(if $($w),echo 'export $w=$(subst ','\'',$($w))';)) :; } >$@
|
||||
|
||||
paths.sh: FORCE |
||||
$(call __silent,GEN,$@){ $(foreach w,$(__paths_vars),$(if $($w),echo 'export $w="$(subst ','\'',$($w))"';)) :; } >$@
|
||||
|
||||
FORCE: |
||||
|
||||
#--------------------------------------
|
||||
# Clean rules
|
||||
|
||||
clean-bin: |
||||
$(call __silent_rm,$(PROG_NAME))
|
||||
$(call __silent_rm,scripts/scripts.mk)
|
||||
$(call __silent_rm,scripts/crosstool-NG.sh)
|
||||
$(call __silent_rm,scripts/saveSample.sh)
|
||||
|
||||
clean-lib: |
||||
$(call __silent_rm,paths.mk paths.sh)
|
||||
|
||||
clean-lib-kconfig: |
||||
$(call __silent,ENTER,kconfig)$(MAKE) -C kconfig clean
|
||||
$(call __silent,LEAVE,kconfig):
|
||||
|
||||
clean-doc: |
||||
|
||||
clean-man: |
||||
$(call __silent_rm,docs/$(PROG_NAME).1)
|
||||
$(call __silent_rm,docs/$(PROG_NAME).1.gz)
|
||||
|
||||
#--------------------------------------
|
||||
# Check for --local setup
|
||||
|
||||
ifeq ($(strip $(LOCAL)),yes) |
||||
|
||||
real-install: |
||||
@true
|
||||
|
||||
real-uninstall: |
||||
@true
|
||||
|
||||
else |
||||
|
||||
#--------------------------------------
|
||||
# Install rules
|
||||
|
||||
real-install: $(patsubst %,install-%,$(TARGETS)) install-post |
||||
|
||||
install-bin: $(DESTDIR)$(bindir) |
||||
$(call __silent,INST,$(PROG_NAME))$(install) -m 755 $(PROG_NAME) "$(DESTDIR)$(bindir)/$(PROG_NAME)"
|
||||
|
||||
# If one is hacking crosstool-NG, the patch set might change between any two
|
||||
# installations of the same VERSION, thus the patches must be removed prior
|
||||
# to being installed. It is the responsibility of the user to call uninstall
|
||||
# first, if (s)he deems it necessary
|
||||
install-lib: $(DESTDIR)$(libdir) \
|
||||
install-lib-main \
|
||||
install-lib-samples
|
||||
|
||||
LIB_SUB_DIR := config contrib packages scripts
|
||||
$(patsubst %,install-lib-%-copy,$(LIB_SUB_DIR)): install-lib-%-copy: $(DESTDIR)$(libdir) |
||||
$(call __silent,INSTDIR,$*)tar cf - --exclude='*.sh.in' --exclude='*.in.in' --exclude=.gitignore $* \
|
||||
|(cd "$(DESTDIR)$(libdir)"; tar xf -)
|
||||
|
||||
# Dependency-only by default.
|
||||
$(patsubst %,install-lib-%,$(LIB_SUB_DIR)): install-lib-%: install-lib-%-copy |
||||
|
||||
install-lib-main: $(DESTDIR)$(libdir) $(patsubst %,install-lib-%,$(LIB_SUB_DIR)) |
||||
$(call __silent,INST,steps.mk)$(install) -m 644 steps.mk "$(DESTDIR)$(libdir)"
|
||||
$(call __silent,INST,paths.mk)$(install) -m 644 paths.mk "$(DESTDIR)$(libdir)"
|
||||
$(call __silent,INST,paths.sh)$(install) -m 644 paths.sh "$(DESTDIR)$(libdir)"
|
||||
|
||||
# Samples need a little love:
|
||||
# - change every occurrence of CT_TOP_DIR to CT_LIB_DIR
|
||||
install-lib-samples: $(DESTDIR)$(libdir) install-lib-main |
||||
$(call __silent,INSTDIR,samples)for samp_dir in samples/*/; do \
|
||||
mkdir -p "$(DESTDIR)$(libdir)/$${samp_dir}"; \
|
||||
$(sed) -r -e 's:\$$\{CT_TOP_DIR\}:\$$\{CT_LIB_DIR\}:;' \
|
||||
-e 's:^(CT_WORK_DIR)=.*:\1="\$${CT_TOP_DIR}/.build":;' \
|
||||
$${samp_dir}/crosstool.config \
|
||||
>"$(DESTDIR)$(libdir)/$${samp_dir}/crosstool.config"; \
|
||||
$(install) -m 644 "$${samp_dir}/reported.by" \
|
||||
"$(DESTDIR)$(libdir)/$${samp_dir}"; \
|
||||
for libc_cfg in "$${samp_dir}/"*libc*.config; do \
|
||||
[ -f "$${libc_cfg}" ] || continue; \
|
||||
$(install) -m 644 "$${libc_cfg}" \
|
||||
"$(DESTDIR)$(libdir)/$${samp_dir}"; \
|
||||
done; \
|
||||
[ -e "$${samp_dir}/broken" ] && \
|
||||
$(install) -m 644 "$${samp_dir}/broken" \
|
||||
"$(DESTDIR)$(libdir)/$${samp_dir}/" || :; \
|
||||
done
|
||||
@$(install) -m 644 samples/samples.mk "$(DESTDIR)$(libdir)/samples/samples.mk"
|
||||
|
||||
install-lib-kconfig: $(DESTDIR)$(libdir) install-lib-main |
||||
$(call __silent,MKDIR,$@)$(install) -m 755 -d "$(DESTDIR)$(libdir)/kconfig"
|
||||
$(call __silent,ENTER,kconfig)$(MAKE) -C kconfig install \
|
||||
DESTDIR=$(DESTDIR)$(libdir)/kconfig
|
||||
$(call __silent,LEAVE,kconfig):
|
||||
|
||||
install-doc: install-doc-$(if $(wildcard docs/MANUAL_ONLINE),message,real) |
||||
|
||||
install-doc-message: |
||||
@echo "********************************************************************"
|
||||
@echo " You are building from a development version that does not include"
|
||||
@echo " the documentation. Refer to the manual online at:"
|
||||
@echo " http://crosstool-ng.github.io/docs"
|
||||
@echo "********************************************************************"
|
||||
|
||||
install-doc-real: $(DESTDIR)$(docdir) |
||||
$(call __silent,INST,docs)for doc_file in docs/manual/*.md; do \
|
||||
$(install) -m 644 "$${doc_file}" "$(DESTDIR)$(docdir)"; \
|
||||
done
|
||||
|
||||
install-man: $(DESTDIR)$(mandir)$(MAN_SUBDIR) |
||||
$(call __silent,INST,$(PROG_NAME).1.gz)$(install) -m 644 docs/$(PROG_NAME).1.gz "$(DESTDIR)$(mandir)$(MAN_SUBDIR)"
|
||||
|
||||
$(sort $(DESTDIR)$(bindir) $(DESTDIR)$(libdir) $(DESTDIR)$(docdir) $(DESTDIR)$(mandir)$(MAN_SUBDIR)): |
||||
$(call __silent,MKDIR,$@)$(install) -m 755 -d "$@"
|
||||
|
||||
install-post: |
||||
@echo
|
||||
@echo "For auto-completion, do not forget to install '$(PROG_NAME).comp' into"
|
||||
@echo "your bash completion directory (usually /etc/bash_completion.d)"
|
||||
|
||||
#--------------------------------------
|
||||
# Uninstall rules
|
||||
|
||||
real-uninstall: $(patsubst %,uninstall-%,$(filter-out lib-kconfig,$(TARGETS))) |
||||
|
||||
uninstall-bin: |
||||
$(call __silent_rm,$(DESTDIR)$(bindir)/$(PROG_NAME))
|
||||
|
||||
uninstall-lib: |
||||
$(call __silent_rmdir,$(DESTDIR)$(libdir))
|
||||
|
||||
uninstall-doc: |
||||
$(call __silent_rmdir,$(DESTDIR)$(docdir))
|
||||
|
||||
uninstall-man: |
||||
$(call __silent_rm,$(DESTDIR)$(mandir)$(MAN_SUBDIR)/$(PROG_NAME).1.gz)
|
||||
|
||||
endif # Not --local
|
||||
|
||||
endif # No extra MAKEFLAGS were added
|
||||
|
||||
.PHONY: build $(patsubst %,build-%,$(TARGETS)) install |
@ -1,5 +1,5 @@
|
||||
# Autoconf |
||||
|
||||
## default y if !CONFIGURE_has_autoconf_2_63_or_newer |
||||
## default y if !CONFIGURE_has_autoreconf_2_63_or_newer |
||||
## default y if !CONFIGURE_has_autoconf_2_65_or_newer |
||||
## default y if !CONFIGURE_has_autoreconf_2_65_or_newer |
||||
## help Autoconf |
||||
|
@ -0,0 +1,33 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
## vim: set noet :
|
||||
|
||||
## TBD install into lib/crosstool-ng/kconfig?
|
||||
## TBD turn off program renaming for these? Or account for it in ct-ng script?
|
||||
pkglibexec_PROGRAMS = conf
|
||||
|
||||
AM_LFLAGS = -L -Pzconf
|
||||
AM_YFLAGS = -l -b zconf -p zconf
|
||||
|
||||
BUILT_SOURCES = zconf.c zconf.lex.c
|
||||
|
||||
AM_CPPFLAGS = -include config.h -DCONFIG_=\"CT_\"
|
||||
conf_SOURCES = conf.c zconf.c
|
||||
|
||||
# automake's support for yacc/lex/gperf is too idiosyncratic. It doesn't
|
||||
# support a common pattern of including lex-generated file into yacc, nor does
|
||||
# it support using a different base name for the generated C files.
|
||||
YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS)
|
||||
AM_V_YACC = $(am__v_YACC_@AM_V@)
|
||||
am__v_YACC_ = $(am__v_YACC_@AM_DEFAULT_V@)
|
||||
am__v_YACC_0 = @echo " YACC " $@;
|
||||
|
||||
LEXCOMPILE = $(LEX) $(AM_LFLAGS) $(LFLAGS)
|
||||
AM_V_LEX = $(am__v_LEX_@AM_V@)
|
||||
am__v_LEX_ = $(am__v_LEX_@AM_DEFAULT_V@)
|
||||
am__v_LEX_0 = @echo " LEX " $@;
|
||||
|
||||
zconf.c: zconf.y |
||||
$(AM_V_YACC)$(YACCCOMPILE) -o$@ $<
|
||||
|
||||
zconf.lex.c: zconf.l |
||||
$(AM_V_LEX)$(LEXCOMPILE) -o$@ $<
|
@ -1,118 +0,0 @@
|
||||
#-----------------------------------------------------------
|
||||
# Hmmm! Cheesy build!
|
||||
# Or: where I can unveil my make-fu... :-]
|
||||
|
||||
install = @INSTALL@
|
||||
sed = @SED@
|
||||
gperf = @GPERF@
|
||||
CC = @CC@
|
||||
LIBS = @LIBS@
|
||||
|
||||
V=1
|
||||
__silent = $(if $(V),,@printf ' %-7s %s\n' '$1' '$(if $2,$2,$(strip $<))' && )
|
||||
__silent_rm = $(call __silent,RM,$1)rm -f $1
|
||||
|
||||
PROGS = conf mconf nconf
|
||||
|
||||
all: $(PROGS) |
||||
@true # Just be silent, you fscking son of a fscking beach...
|
||||
|
||||
# Build flags
|
||||
CFLAGS = --include @top_builddir@/config.h -DCONFIG_=\"CT_\" \
|
||||
@CFLAGS@ @CPPFLAGS@
|
||||
LDFLAGS = @LDFLAGS@ @LIBINTL@
|
||||
|
||||
# Compiler flags to use gettext
|
||||
ifneq (@USE_NLS@,yes) |
||||
CFLAGS += -Wno-format-security -DKBUILD_NO_NLS
|
||||
endif |
||||
|
||||
# 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 += -I. |
||||
|
||||
# lxdialog source files
|
||||
LX_SRC = $(sort $(wildcard lxdialog/*.c))
|
||||
LX_OBJ = $(patsubst %.c,%.o,$(LX_SRC))
|
||||
LX_DEP = $(patsubst %.o,%.dep,$(LX_OBJ))
|
||||
$(LX_OBJ) $(LX_DEP): CFLAGS += @CURSES_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 += |
||||
|
||||
# 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 += @CURSES_CFLAGS@ |
||||
mconf: LDFLAGS += @CURSES_LIBS@ |
||||
|
||||
# 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 += |
||||
nconf: LDFLAGS += @MENU_LIBS@ @PANEL_LIBS@ @CURSES_LIBS@ |
||||
|
||||
# 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 |
||||
$(call __silent,DEP,$@)$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -MM $< |$(sed) -r -e 's|([^:]+.o)( *:+)|$(<:.c=.o) $@\2|;' >$@
|
||||
|
||||
# Generate the grammar parser
|
||||
zconf.tab.o: zconf.tab.c zconf.lex.c |
||||
zconf.tab.dep: zconf.tab.c zconf.lex.c |
||||
|
||||
.PRECIOUS: zconf.tab.c |
||||
zconf.tab.c: zconf.y |
||||
$(call __silent,BISON)bison -l -b zconf -p zconf $<
|
||||
|
||||
zconf.lex.c: zconf.l |
||||
$(call __silent,LEX)flex -L -Pzconf -o$@ $<
|
||||
|
||||
# Build C files
|
||||
%.o: %.c |
||||
$(call __silent,CC)$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -o $@ -c $<
|
||||
|
||||
# Actual link
|
||||
mconf: $(COMMON_OBJ) $(LX_OBJ) $(mconf_OBJ) |
||||
$(call __silent,LD,$@)$(CC) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS)
|
||||
|
||||
nconf: $(COMMON_OBJ) $(nconf_OBJ) |
||||
$(call __silent,LD,$@)$(CC) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS)
|
||||
|
||||
conf: $(COMMON_OBJ) $(conf_OBJ) |
||||
$(call __silent,LD,$@)$(CC) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS)
|
||||
|
||||
#-----------------------------------------------------------
|
||||
# Installation
|
||||
install: $(patsubst %,install-%,$(PROGS)) install-kconfig.mk |
||||
|
||||
$(patsubst %,install-%,$(PROGS)): install-%: % |
||||
$(call __silent,INSTALL,$<)$(install) -m 0755 $< $(DESTDIR)/$<
|
||||
|
||||
install-kconfig.mk: kconfig.mk |
||||
$(call __silent,INSTALL,$<)$(install) -m 0644 $< $(DESTDIR)/$<
|
||||
|
||||
#-----------------------------------------------------------
|
||||
# Cleaning up the mess...
|
||||
|
||||
clean: |
||||
$(call __silent,RM,objs)rm -f $(ALL_OBJS) $(ALL_DEPS)
|
||||
$(call __silent_rm,$(PROGS))
|
||||
$(call __silent_rm,zconf.tab.c zconf.lex.c lex.backup)
|
@ -0,0 +1,347 @@
|
||||
#! /bin/sh |
||||
# Wrapper for compilers which do not understand '-c -o'. |
||||
|
||||
scriptversion=2012-10-14.11; # UTC |
||||
|
||||
# Copyright (C) 1999-2014 Free Software Foundation, Inc. |
||||
# Written by Tom Tromey <tromey@cygnus.com>. |
||||
# |
||||
# This program is free software; you can redistribute it and/or modify |
||||
# it under the terms of the GNU General Public License as published by |
||||
# the Free Software Foundation; either version 2, or (at your option) |
||||
# any later version. |
||||
# |
||||
# This program is distributed in the hope that it will be useful, |
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
# GNU General Public License for more details. |
||||
# |
||||
# You should have received a copy of the GNU General Public License |
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
|
||||
# As a special exception to the GNU General Public License, if you |
||||
# distribute this file as part of a program that contains a |
||||
# configuration script generated by Autoconf, you may include it under |
||||
# the same distribution terms that you use for the rest of that program. |
||||
|
||||
# This file is maintained in Automake, please report |
||||
# bugs to <bug-automake@gnu.org> or send patches to |
||||
# <automake-patches@gnu.org>. |
||||
|
||||
nl=' |
||||
' |
||||
|
||||
# We need space, tab and new line, in precisely that order. Quoting is |
||||
# there to prevent tools from complaining about whitespace usage. |
||||
IFS=" "" $nl" |
||||
|
||||
file_conv= |
||||
|
||||
# func_file_conv build_file lazy |
||||
# Convert a $build file to $host form and store it in $file |
||||
# Currently only supports Windows hosts. If the determined conversion |
||||
# type is listed in (the comma separated) LAZY, no conversion will |
||||
# take place. |
||||
func_file_conv () |
||||
{ |
||||
file=$1 |
||||
case $file in |
||||
/ | /[!/]*) # absolute file, and not a UNC file |
||||
if test -z "$file_conv"; then |
||||
# lazily determine how to convert abs files |
||||
case `uname -s` in |
||||
MINGW*) |
||||
file_conv=mingw |
||||
;; |
||||
CYGWIN*) |
||||
file_conv=cygwin |
||||
;; |
||||
*) |
||||
file_conv=wine |
||||
;; |
||||
esac |
||||
fi |
||||
case $file_conv/,$2, in |
||||
*,$file_conv,*) |
||||
;; |
||||
mingw/*) |
||||
file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` |
||||
;; |
||||
cygwin/*) |
||||
file=`cygpath -m "$file" || echo "$file"` |
||||
;; |
||||
wine/*) |
||||
file=`winepath -w "$file" || echo "$file"` |
||||
;; |
||||
esac |
||||
;; |
||||
esac |
||||
} |
||||
|
||||
# func_cl_dashL linkdir |
||||
# Make cl look for libraries in LINKDIR |
||||
func_cl_dashL () |
||||
{ |
||||
func_file_conv "$1" |
||||
if test -z "$lib_path"; then |
||||
lib_path=$file |
||||
else |
||||
lib_path="$lib_path;$file" |
||||
fi |
||||
linker_opts="$linker_opts -LIBPATH:$file" |
||||
} |
||||
|
||||
# func_cl_dashl library |
||||
# Do a library search-path lookup for cl |
||||
func_cl_dashl () |
||||
{ |
||||
lib=$1 |
||||
found=no |
||||
save_IFS=$IFS |
||||
IFS=';' |
||||
for dir in $lib_path $LIB |
||||
do |
||||
IFS=$save_IFS |
||||
if $shared && test -f "$dir/$lib.dll.lib"; then |
||||
found=yes |
||||
lib=$dir/$lib.dll.lib |
||||
break |
||||
fi |
||||
if test -f "$dir/$lib.lib"; then |
||||
found=yes |
||||
lib=$dir/$lib.lib |
||||
break |
||||
fi |
||||
if test -f "$dir/lib$lib.a"; then |
||||
found=yes |
||||
lib=$dir/lib$lib.a |
||||
break |
||||
fi |
||||
done |
||||
IFS=$save_IFS |
||||
|
||||
if test "$found" != yes; then |
||||
lib=$lib.lib |
||||
fi |
||||
} |
||||
|
||||
# func_cl_wrapper cl arg... |
||||
# Adjust compile command to suit cl |
||||
func_cl_wrapper () |
||||
{ |
||||
# Assume a capable shell |
||||
lib_path= |
||||
shared=: |
||||
linker_opts= |
||||
for arg |
||||
do |
||||
if test -n "$eat"; then |
||||
eat= |
||||
else |
||||
case $1 in |
||||
-o) |
||||
# configure might choose to run compile as 'compile cc -o foo foo.c'. |
||||
eat=1 |
||||
case $2 in |
||||
*.o | *.[oO][bB][jJ]) |
||||
func_file_conv "$2" |
||||
set x "$@" -Fo"$file" |
||||
shift |
||||
;; |
||||
*) |
||||
func_file_conv "$2" |
||||
set x "$@" -Fe"$file" |
||||
shift |
||||
;; |
||||
esac |
||||
;; |
||||
-I) |
||||
eat=1 |
||||
func_file_conv "$2" mingw |
||||
set x "$@" -I"$file" |
||||
shift |
||||
;; |
||||
-I*) |
||||
func_file_conv "${1#-I}" mingw |
||||
set x "$@" -I"$file" |
||||
shift |
||||
;; |
||||
-l) |
||||
eat=1 |
||||
func_cl_dashl "$2" |
||||
set x "$@" "$lib" |
||||
shift |
||||
;; |
||||
-l*) |
||||
func_cl_dashl "${1#-l}" |
||||
set x "$@" "$lib" |
||||
shift |
||||
;; |
||||
-L) |
||||
eat=1 |
||||
func_cl_dashL "$2" |
||||
;; |
||||
-L*) |
||||
func_cl_dashL "${1#-L}" |
||||
;; |
||||
-static) |
||||
shared=false |
||||
;; |
||||
-Wl,*) |
||||
arg=${1#-Wl,} |
||||
save_ifs="$IFS"; IFS=',' |
||||
for flag in $arg; do |
||||
IFS="$save_ifs" |
||||
linker_opts="$linker_opts $flag" |
||||
done |
||||
IFS="$save_ifs" |
||||
;; |
||||
-Xlinker) |
||||
eat=1 |
||||
linker_opts="$linker_opts $2" |
||||
;; |
||||
-*) |
||||
set x "$@" "$1" |
||||
shift |
||||
;; |
||||
*.cc | *.CC | *.cxx | *.CXX | *.[cC]++) |
||||
func_file_conv "$1" |
||||
set x "$@" -Tp"$file" |
||||
shift |
||||
;; |
||||
*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) |
||||
func_file_conv "$1" mingw |
||||
set x "$@" "$file" |
||||
shift |
||||
;; |
||||
*) |
||||
set x "$@" "$1" |
||||
shift |
||||
;; |
||||
esac |
||||
fi |
||||
shift |
||||
done |
||||
if test -n "$linker_opts"; then |
||||
linker_opts="-link$linker_opts" |
||||
fi |
||||
exec "$@" $linker_opts |
||||
exit 1 |
||||
} |
||||
|
||||
eat= |
||||
|
||||
case $1 in |
||||
'') |
||||
echo "$0: No command. Try '$0 --help' for more information." 1>&2 |
||||
exit 1; |
||||
;; |
||||
-h | --h*) |
||||
cat <<\EOF |
||||
Usage: compile [--help] [--version] PROGRAM [ARGS] |
||||
|
||||
Wrapper for compilers which do not understand '-c -o'. |
||||
Remove '-o dest.o' from ARGS, run PROGRAM with the remaining |
||||
arguments, and rename the output as expected. |
||||
|
||||
If you are trying to build a whole package this is not the |
||||
right script to run: please start by reading the file 'INSTALL'. |
||||
|
||||
Report bugs to <bug-automake@gnu.org>. |
||||
EOF |
||||
exit $? |
||||
;; |
||||
-v | --v*) |
||||
echo "compile $scriptversion" |
||||
exit $? |
||||
;; |
||||
cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) |
||||
func_cl_wrapper "$@" # Doesn't return... |
||||
;; |
||||
esac |
||||
|
||||
ofile= |
||||
cfile= |
||||
|
||||
for arg |
||||
do |
||||
if test -n "$eat"; then |
||||
eat= |
||||
else |
||||
case $1 in |
||||
-o) |
||||
# configure might choose to run compile as 'compile cc -o foo foo.c'. |
||||
# So we strip '-o arg' only if arg is an object. |
||||
eat=1 |
||||
case $2 in |
||||
*.o | *.obj) |
||||
ofile=$2 |
||||
;; |
||||
*) |
||||
set x "$@" -o "$2" |
||||
shift |
||||
;; |
||||
esac |
||||
;; |
||||
*.c) |
||||
cfile=$1 |
||||
set x "$@" "$1" |
||||
shift |
||||
;; |
||||
*) |
||||
set x "$@" "$1" |
||||
shift |
||||
;; |
||||
esac |
||||
fi |
||||
shift |
||||
done |
||||
|
||||
if test -z "$ofile" || test -z "$cfile"; then |
||||
# If no '-o' option was seen then we might have been invoked from a |
||||
# pattern rule where we don't need one. That is ok -- this is a |
||||
# normal compilation that the losing compiler can handle. If no |
||||
# '.c' file was seen then we are probably linking. That is also |
||||
# ok. |
||||
exec "$@" |
||||
fi |
||||
|
||||
# Name of file we expect compiler to create. |
||||
cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` |
||||
|
||||
# Create the lock directory. |
||||
# Note: use '[/\\:.-]' here to ensure that we don't use the same name |
||||
# that we are using for the .o file. Also, base the name on the expected |
||||
# object file name, since that is what matters with a parallel build. |
||||
lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d |
||||
while true; do |
||||
if mkdir "$lockdir" >/dev/null 2>&1; then |
||||
break |
||||
fi |
||||
sleep 1 |
||||
done |
||||
# FIXME: race condition here if user kills between mkdir and trap. |
||||
trap "rmdir '$lockdir'; exit 1" 1 2 15 |
||||
|
||||
# Run the compile. |
||||
"$@" |
||||
ret=$? |
||||
|
||||
if test -f "$cofile"; then |
||||
test "$cofile" = "$ofile" || mv "$cofile" "$ofile" |
||||
elif test -f "${cofile}bj"; then |
||||
test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" |
||||
fi |
||||
|
||||
rmdir "$lockdir" |
||||
exit $ret |
||||
|
||||
# Local Variables: |
||||
# mode: shell-script |
||||
# sh-indentation: 2 |
||||
# eval: (add-hook 'write-file-hooks 'time-stamp) |
||||
# time-stamp-start: "scriptversion=" |
||||
# time-stamp-format: "%:y-%02m-%02d.%02H" |
||||
# time-stamp-time-zone: "UTC" |
||||
# time-stamp-end: "; # UTC" |
||||
# End: |
@ -0,0 +1,791 @@
|
||||
#! /bin/sh |
||||
# depcomp - compile a program generating dependencies as side-effects |
||||
|
||||
scriptversion=2013-05-30.07; # UTC |
||||
|
||||
# Copyright (C) 1999-2014 Free Software Foundation, Inc. |
||||
|
||||
# This program is free software; you can redistribute it and/or modify |
||||
# it under the terms of the GNU General Public License as published by |
||||
# the Free Software Foundation; either version 2, or (at your option) |
||||
# any later version. |
||||
|
||||
# This program is distributed in the hope that it will be useful, |
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
# GNU General Public License for more details. |
||||
|
||||
# You should have received a copy of the GNU General Public License |
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
|
||||
# As a special exception to the GNU General Public License, if you |
||||
# distribute this file as part of a program that contains a |
||||
# configuration script generated by Autoconf, you may include it under |
||||
# the same distribution terms that you use for the rest of that program. |
||||
|
||||
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. |
||||
|
||||
case $1 in |
||||
'') |
||||
echo "$0: No command. Try '$0 --help' for more information." 1>&2 |
||||
exit 1; |
||||
;; |
||||
-h | --h*) |
||||
cat <<\EOF |
||||
Usage: depcomp [--help] [--version] PROGRAM [ARGS] |
||||
|
||||
Run PROGRAMS ARGS to compile a file, generating dependencies |
||||
as side-effects. |
||||
|
||||
Environment variables: |
||||
depmode Dependency tracking mode. |
||||
source Source file read by 'PROGRAMS ARGS'. |
||||
object Object file output by 'PROGRAMS ARGS'. |
||||
DEPDIR directory where to store dependencies. |
||||
depfile Dependency file to output. |
||||
tmpdepfile Temporary file to use when outputting dependencies. |
||||
libtool Whether libtool is used (yes/no). |
||||
|
||||
Report bugs to <bug-automake@gnu.org>. |
||||
EOF |
||||
exit $? |
||||
;; |
||||
-v | --v*) |
||||
echo "depcomp $scriptversion" |
||||
exit $? |
||||
;; |
||||
esac |
||||
|
||||
# Get the directory component of the given path, and save it in the |
||||
# global variables '$dir'. Note that this directory component will |
||||
# be either empty or ending with a '/' character. This is deliberate. |
||||
set_dir_from () |
||||
{ |
||||
case $1 in |
||||
*/*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; |
||||
*) dir=;; |
||||
esac |
||||
} |
||||
|
||||
# Get the suffix-stripped basename of the given path, and save it the |
||||
# global variable '$base'. |
||||
set_base_from () |
||||
{ |
||||
base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` |
||||
} |
||||
|
||||
# If no dependency file was actually created by the compiler invocation, |
||||
# we still have to create a dummy depfile, to avoid errors with the |
||||
# Makefile "include basename.Plo" scheme. |
||||
make_dummy_depfile () |
||||
{ |
||||
echo "#dummy" > "$depfile" |
||||
} |
||||
|
||||
# Factor out some common post-processing of the generated depfile. |
||||
# Requires the auxiliary global variable '$tmpdepfile' to be set. |
||||
aix_post_process_depfile () |
||||
{ |
||||
# If the compiler actually managed to produce a dependency file, |
||||
# post-process it. |
||||
if test -f "$tmpdepfile"; then |
||||
# Each line is of the form 'foo.o: dependency.h'. |
||||
# Do two passes, one to just change these to |
||||
# $object: dependency.h |
||||
# and one to simply output |
||||
# dependency.h: |
||||
# which is needed to avoid the deleted-header problem. |
||||
{ sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" |
||||
sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" |
||||
} > "$depfile" |
||||
rm -f "$tmpdepfile" |
||||
else |
||||
make_dummy_depfile |
||||
fi |
||||
} |
||||
|
||||
# A tabulation character. |
||||
tab=' ' |
||||
# A newline character. |
||||
nl=' |
||||
' |
||||
# Character ranges might be problematic outside the C locale. |
||||
# These definitions help. |
||||
upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ |
||||
lower=abcdefghijklmnopqrstuvwxyz |
||||
digits=0123456789 |
||||
alpha=${upper}${lower} |
||||
|
||||
if test -z "$depmode" || test -z "$source" || test -z "$object"; then |
||||
echo "depcomp: Variables source, object and depmode must be set" 1>&2 |
||||
exit 1 |
||||
fi |
||||
|
||||
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. |
||||
depfile=${depfile-`echo "$object" | |
||||
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} |
||||
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} |
||||
|
||||
rm -f "$tmpdepfile" |
||||
|
||||
# Avoid interferences from the environment. |
||||
gccflag= dashmflag= |
||||
|
||||
# Some modes work just like other modes, but use different flags. We |
||||
# parameterize here, but still list the modes in the big case below, |
||||
# to make depend.m4 easier to write. Note that we *cannot* use a case |
||||
# here, because this file can only contain one case statement. |
||||
if test "$depmode" = hp; then |
||||
# HP compiler uses -M and no extra arg. |
||||
gccflag=-M |
||||
depmode=gcc |
||||
fi |
||||
|
||||
if test "$depmode" = dashXmstdout; then |
||||
# This is just like dashmstdout with a different argument. |
||||
dashmflag=-xM |
||||
depmode=dashmstdout |
||||
fi |
||||
|
||||
cygpath_u="cygpath -u -f -" |
||||
if test "$depmode" = msvcmsys; then |
||||
# This is just like msvisualcpp but w/o cygpath translation. |
||||
# Just convert the backslash-escaped backslashes to single forward |
||||
# slashes to satisfy depend.m4 |
||||
cygpath_u='sed s,\\\\,/,g' |
||||
depmode=msvisualcpp |
||||
fi |
||||
|
||||
if test "$depmode" = msvc7msys; then |
||||
# This is just like msvc7 but w/o cygpath translation. |
||||
# Just convert the backslash-escaped backslashes to single forward |
||||
# slashes to satisfy depend.m4 |
||||
cygpath_u='sed s,\\\\,/,g' |
||||
depmode=msvc7 |
||||
fi |
||||
|
||||
if test "$depmode" = xlc; then |
||||
# IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. |
||||
gccflag=-qmakedep=gcc,-MF |
||||
depmode=gcc |
||||
fi |
||||
|
||||
case "$depmode" in |
||||
gcc3) |
||||
## gcc 3 implements dependency tracking that does exactly what |
||||
## we want. Yay! Note: for some reason libtool 1.4 doesn't like |
||||
## it if -MD -MP comes after the -MF stuff. Hmm. |
||||
## Unfortunately, FreeBSD c89 acceptance of flags depends upon |
||||
## the command line argument order; so add the flags where they |
||||
## appear in depend2.am. Note that the slowdown incurred here |
||||
## affects only configure: in makefiles, %FASTDEP% shortcuts this. |
||||
for arg |
||||
do |
||||
case $arg in |
||||
-c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; |
||||
*) set fnord "$@" "$arg" ;; |
||||
esac |
||||
shift # fnord |
||||
shift # $arg |
||||
done |
||||
"$@" |
||||
stat=$? |
||||
if test $stat -ne 0; then |
||||
rm -f "$tmpdepfile" |
||||
exit $stat |
||||
fi |
||||
mv "$tmpdepfile" "$depfile" |
||||
;; |
||||
|
||||
gcc) |
||||
## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. |
||||
## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. |
||||
## (see the conditional assignment to $gccflag above). |
||||
## There are various ways to get dependency output from gcc. Here's |
||||
## why we pick this rather obscure method: |
||||
## - Don't want to use -MD because we'd like the dependencies to end |
||||
## up in a subdir. Having to rename by hand is ugly. |
||||
## (We might end up doing this anyway to support other compilers.) |
||||
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like |
||||
## -MM, not -M (despite what the docs say). Also, it might not be |
||||
## supported by the other compilers which use the 'gcc' depmode. |
||||
## - Using -M directly means running the compiler twice (even worse |
||||
## than renaming). |
||||
if test -z "$gccflag"; then |
||||
gccflag=-MD, |
||||
fi |
||||
"$@" -Wp,"$gccflag$tmpdepfile" |
||||
stat=$? |
||||
if test $stat -ne 0; then |
||||
rm -f "$tmpdepfile" |
||||
exit $stat |
||||
fi |
||||
rm -f "$depfile" |
||||
echo "$object : \\" > "$depfile" |
||||
# The second -e expression handles DOS-style file names with drive |
||||
# letters. |
||||
sed -e 's/^[^:]*: / /' \ |
||||
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" |
||||
## This next piece of magic avoids the "deleted header file" problem. |
||||
## The problem is that when a header file which appears in a .P file |
||||
## is deleted, the dependency causes make to die (because there is |
||||
## typically no way to rebuild the header). We avoid this by adding |
||||
## dummy dependencies for each header file. Too bad gcc doesn't do |
||||
## this for us directly. |
||||
## Some versions of gcc put a space before the ':'. On the theory |
||||
## that the space means something, we add a space to the output as |
||||
## well. hp depmode also adds that space, but also prefixes the VPATH |
||||
## to the object. Take care to not repeat it in the output. |
||||
## Some versions of the HPUX 10.20 sed can't process this invocation |
||||
## correctly. Breaking it into two sed invocations is a workaround. |
||||
tr ' ' "$nl" < "$tmpdepfile" \ |
||||
| sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ |
||||
| sed -e 's/$/ :/' >> "$depfile" |
||||
rm -f "$tmpdepfile" |
||||
;; |
||||
|
||||
hp) |
||||
# This case exists only to let depend.m4 do its work. It works by |
||||
# looking at the text of this script. This case will never be run, |
||||
# since it is checked for above. |
||||
exit 1 |
||||
;; |
||||
|
||||
sgi) |
||||
if test "$libtool" = yes; then |
||||
"$@" "-Wp,-MDupdate,$tmpdepfile" |
||||
else |
||||
"$@" -MDupdate "$tmpdepfile" |
||||
fi |
||||
stat=$? |
||||
if test $stat -ne 0; then |
||||
rm -f "$tmpdepfile" |
||||
exit $stat |
||||
fi |
||||
rm -f "$depfile" |
||||
|
||||
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files |
||||
echo "$object : \\" > "$depfile" |
||||
# Clip off the initial element (the dependent). Don't try to be |
||||
# clever and replace this with sed code, as IRIX sed won't handle |
||||
# lines with more than a fixed number of characters (4096 in |
||||
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; |
||||
# the IRIX cc adds comments like '#:fec' to the end of the |
||||
# dependency line. |
||||
tr ' ' "$nl" < "$tmpdepfile" \ |
||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ |
||||
| tr "$nl" ' ' >> "$depfile" |
||||
echo >> "$depfile" |
||||
# The second pass generates a dummy entry for each header file. |
||||
tr ' ' "$nl" < "$tmpdepfile" \ |
||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ |
||||
>> "$depfile" |
||||
else |
||||
make_dummy_depfile |
||||
fi |
||||
rm -f "$tmpdepfile" |
||||
;; |
||||
|
||||
xlc) |
||||
# This case exists only to let depend.m4 do its work. It works by |
||||
# looking at the text of this script. This case will never be run, |
||||
# since it is checked for above. |
||||
exit 1 |
||||
;; |
||||
|
||||
aix) |
||||
# The C for AIX Compiler uses -M and outputs the dependencies |
||||
# in a .u file. In older versions, this file always lives in the |
||||
# current directory. Also, the AIX compiler puts '$object:' at the |
||||
# start of each line; $object doesn't have directory information. |
||||
# Version 6 uses the directory in both cases. |
||||
set_dir_from "$object" |
||||
set_base_from "$object" |
||||
if test "$libtool" = yes; then |
||||
tmpdepfile1=$dir$base.u |
||||
tmpdepfile2=$base.u |
||||
tmpdepfile3=$dir.libs/$base.u |
||||
"$@" -Wc,-M |
||||
else |
||||
tmpdepfile1=$dir$base.u |
||||
tmpdepfile2=$dir$base.u |
||||
tmpdepfile3=$dir$base.u |
||||
"$@" -M |
||||
fi |
||||
stat=$? |
||||
if test $stat -ne 0; then |
||||
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" |
||||
exit $stat |
||||
fi |
||||
|
||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" |
||||
do |
||||
test -f "$tmpdepfile" && break |
||||
done |
||||
aix_post_process_depfile |
||||
;; |
||||
|
||||
tcc) |
||||
# tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 |
||||
# FIXME: That version still under development at the moment of writing. |
||||
# Make that this statement remains true also for stable, released |
||||
# versions. |
||||
# It will wrap lines (doesn't matter whether long or short) with a |
||||
# trailing '\', as in: |
||||
# |
||||
# foo.o : \ |
||||
# foo.c \ |
||||
# foo.h \ |
||||
# |
||||
# It will put a trailing '\' even on the last line, and will use leading |
||||
# spaces rather than leading tabs (at least since its commit 0394caf7 |
||||
# "Emit spaces for -MD"). |
||||
"$@" -MD -MF "$tmpdepfile" |
||||
stat=$? |
||||
if test $stat -ne 0; then |
||||
rm -f "$tmpdepfile" |
||||
exit $stat |
||||
fi |
||||
rm -f "$depfile" |
||||
# Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. |
||||
# We have to change lines of the first kind to '$object: \'. |
||||
sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" |
||||
# And for each line of the second kind, we have to emit a 'dep.h:' |
||||
# dummy dependency, to avoid the deleted-header problem. |
||||
sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" |
||||
rm -f "$tmpdepfile" |
||||
;; |
||||
|
||||
## The order of this option in the case statement is important, since the |
||||
## shell code in configure will try each of these formats in the order |
||||
## listed in this file. A plain '-MD' option would be understood by many |
||||
## compilers, so we must ensure this comes after the gcc and icc options. |
||||
pgcc) |
||||
# Portland's C compiler understands '-MD'. |
||||
# Will always output deps to 'file.d' where file is the root name of the |
||||
# source file under compilation, even if file resides in a subdirectory. |
||||
# The object file name does not affect the name of the '.d' file. |
||||
# pgcc 10.2 will output |
||||
# foo.o: sub/foo.c sub/foo.h |
||||
# and will wrap long lines using '\' : |
||||
# foo.o: sub/foo.c ... \ |
||||
# sub/foo.h ... \ |
||||
# ... |
||||
set_dir_from "$object" |
||||
# Use the source, not the object, to determine the base name, since |
||||
# that's sadly what pgcc will do too. |
||||
set_base_from "$source" |
||||
tmpdepfile=$base.d |
||||
|
||||
# For projects that build the same source file twice into different object |
||||
# files, the pgcc approach of using the *source* file root name can cause |
||||
# problems in parallel builds. Use a locking strategy to avoid stomping on |
||||
# the same $tmpdepfile. |
||||
lockdir=$base.d-lock |
||||
trap " |
||||
echo '$0: caught signal, cleaning up...' >&2 |
||||
rmdir '$lockdir' |
||||
exit 1 |
||||
" 1 2 13 15 |
||||
numtries=100 |
||||
i=$numtries |
||||
while test $i -gt 0; do |
||||
# mkdir is a portable test-and-set. |
||||
if mkdir "$lockdir" 2>/dev/null; then |
||||
# This process acquired the lock. |
||||
"$@" -MD |
||||
stat=$? |
||||
# Release the lock. |
||||
rmdir "$lockdir" |
||||
break |
||||
else |
||||
# If the lock is being held by a different process, wait |
||||
# until the winning process is done or we timeout. |
||||
while test -d "$lockdir" && test $i -gt 0; do |
||||
sleep 1 |
||||
i=`expr $i - 1` |
||||
done |
||||
fi |
||||
i=`expr $i - 1` |
||||
done |
||||
trap - 1 2 13 15 |
||||
if test $i -le 0; then |
||||
echo "$0: failed to acquire lock after $numtries attempts" >&2 |
||||
echo "$0: check lockdir '$lockdir'" >&2 |
||||
exit 1 |
||||
fi |
||||
|
||||
if test $stat -ne 0; then |
||||
rm -f "$tmpdepfile" |
||||
exit $stat |
||||
fi |
||||
rm -f "$depfile" |
||||
# Each line is of the form `foo.o: dependent.h', |
||||
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. |
||||
# Do two passes, one to just change these to |
||||
# `$object: dependent.h' and one to simply `dependent.h:'. |
||||
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" |
||||
# Some versions of the HPUX 10.20 sed can't process this invocation |
||||
# correctly. Breaking it into two sed invocations is a workaround. |
||||
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ |
||||
| sed -e 's/$/ :/' >> "$depfile" |
||||
rm -f "$tmpdepfile" |
||||
;; |
||||
|
||||
hp2) |
||||
# The "hp" stanza above does not work with aCC (C++) and HP's ia64 |
||||
# compilers, which have integrated preprocessors. The correct option |
||||
# to use with these is +Maked; it writes dependencies to a file named |
||||
# 'foo.d', which lands next to the object file, wherever that |
||||
# happens to be. |
||||
# Much of this is similar to the tru64 case; see comments there. |
||||
set_dir_from "$object" |
||||
set_base_from "$object" |
||||
if test "$libtool" = yes; then |
||||
tmpdepfile1=$dir$base.d |
||||
tmpdepfile2=$dir.libs/$base.d |
||||
"$@" -Wc,+Maked |
||||
else |
||||
tmpdepfile1=$dir$base.d |
||||
tmpdepfile2=$dir$base.d |
||||
"$@" +Maked |
||||
fi |
||||
stat=$? |
||||
if test $stat -ne 0; then |
||||
rm -f "$tmpdepfile1" "$tmpdepfile2" |
||||
exit $stat |
||||
fi |
||||
|
||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" |
||||
do |
||||
test -f "$tmpdepfile" && break |
||||
done |
||||
if test -f "$tmpdepfile"; then |
||||
sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" |
||||
# Add 'dependent.h:' lines. |
||||
sed -ne '2,${ |
||||
s/^ *// |
||||
s/ \\*$// |
||||
s/$/:/ |
||||
p |
||||
}' "$tmpdepfile" >> "$depfile" |
||||
else |
||||
make_dummy_depfile |
||||
fi |
||||
rm -f "$tmpdepfile" "$tmpdepfile2" |
||||
;; |
||||
|
||||
tru64) |
||||
# The Tru64 compiler uses -MD to generate dependencies as a side |
||||
# effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. |
||||
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put |
||||
# dependencies in 'foo.d' instead, so we check for that too. |
||||
# Subdirectories are respected. |
||||
set_dir_from "$object" |
||||
set_base_from "$object" |
||||
|
||||
if test "$libtool" = yes; then |
||||
# Libtool generates 2 separate objects for the 2 libraries. These |
||||
# two compilations output dependencies in $dir.libs/$base.o.d and |
||||
# in $dir$base.o.d. We have to check for both files, because |
||||
# one of the two compilations can be disabled. We should prefer |
||||
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is |
||||
# automatically cleaned when .libs/ is deleted, while ignoring |
||||
# the former would cause a distcleancheck panic. |
||||
tmpdepfile1=$dir$base.o.d # libtool 1.5 |
||||
tmpdepfile2=$dir.libs/$base.o.d # Likewise. |
||||
tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 |
||||
"$@" -Wc,-MD |
||||
else |
||||
tmpdepfile1=$dir$base.d |
||||
tmpdepfile2=$dir$base.d |
||||
tmpdepfile3=$dir$base.d |
||||
"$@" -MD |
||||
fi |
||||
|
||||
stat=$? |
||||
if test $stat -ne 0; then |
||||
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" |
||||
exit $stat |
||||
fi |
||||
|
||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" |
||||
do |
||||
test -f "$tmpdepfile" && break |
||||
done |
||||
# Same post-processing that is required for AIX mode. |
||||
aix_post_process_depfile |
||||
;; |
||||
|
||||
msvc7) |
||||
if test "$libtool" = yes; then |
||||
showIncludes=-Wc,-showIncludes |
||||
else |
||||
showIncludes=-showIncludes |
||||
fi |
||||
"$@" $showIncludes > "$tmpdepfile" |
||||
stat=$? |
||||
grep -v '^Note: including file: ' "$tmpdepfile" |
||||
if test $stat -ne 0; then |
||||
rm -f "$tmpdepfile" |
||||
exit $stat |
||||
fi |
||||
rm -f "$depfile" |
||||
echo "$object : \\" > "$depfile" |
||||
# The first sed program below extracts the file names and escapes |
||||
# backslashes for cygpath. The second sed program outputs the file |
||||
# name when reading, but also accumulates all include files in the |
||||
# hold buffer in order to output them again at the end. This only |
||||
# works with sed implementations that can handle large buffers. |
||||
sed < "$tmpdepfile" -n ' |
||||
/^Note: including file: *\(.*\)/ { |
||||
s//\1/ |
||||
s/\\/\\\\/g |
||||
p |
||||
}' | $cygpath_u | sort -u | sed -n ' |
||||
s/ /\\ /g |
||||
s/\(.*\)/'"$tab"'\1 \\/p |
||||
s/.\(.*\) \\/\1:/ |
||||
H |
||||
$ { |
||||
s/.*/'"$tab"'/ |
||||
G |
||||