X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/76a2d859317df1d5293a7121466599f66a74fcad..29155b3f6aa511b843164030f6a5652cae638b0c:/omk/rules/sysless/Makefile.rules diff --git a/omk/rules/sysless/Makefile.rules b/omk/rules/sysless/Makefile.rules index 6534d62..a197d7a 100644 --- a/omk/rules/sysless/Makefile.rules +++ b/omk/rules/sysless/Makefile.rules @@ -4,7 +4,7 @@ # (C) Copyright 2006, 2007, 2008, 2009, 2010 by Michal Sojka - Czech Technical University, FEE, DCE # # Homepage: http://rtime.felk.cvut.cz/omk/ -# Version: 0.2-16-g886e034 +# Version: 0.2-27-g254fd61 # # The OMK build system is distributed under the GNU General Public # License. See file COPYING for details. @@ -72,7 +72,7 @@ INVOCATION_DIR := $(INVOCATION_DIR:/%=%) INVOCATION_DIR := $(INVOCATION_DIR:\\%=%) endif -.PHONY: all default check-make-ver omkize +.PHONY: all default check-make-ver print-hints omkize ifdef W ifeq ("$(origin W)", "command line") @@ -84,7 +84,7 @@ ifndef OMK_WHOLE_TREE endif ifneq ($(OMK_WHOLE_TREE),1) -all: check-make-ver default +all: check-make-ver print-hints default @echo "Compilation finished" else # Run make in the top-level directory @@ -106,28 +106,26 @@ endif #========================= # Include the config file -# FIXME: I think CONFIG_FILE_OK variable is useless. We have three -# config files and it is not clearly defined to which file is this -# variable related. -ifneq ($(CONFIG_FILE_OK),y) ifndef CONFIG_FILE CONFIG_FILE := $(OUTPUT_DIR)/config.omk endif -ifneq ($(wildcard $(CONFIG_FILE)-default),) --include $(CONFIG_FILE)-default -else -ifneq ($(MAKECMDGOALS),default-config) -$(warning Please, run "make default-config" first) + +$(CONFIG_FILE)-default: + $(MAKE) default-config + +ifeq ($(MAKECMDGOALS),default-config) +export DEFAULT_CONFIG_PASS=1 endif + +ifneq ($(DEFAULT_CONFIG_PASS),1) +include $(CONFIG_FILE)-default endif -include $(OUTPUT_DIR)/config.target ifneq ($(wildcard $(CONFIG_FILE)),) -include $(CONFIG_FILE) -CONFIG_FILE_OK = y endif -endif #$(CONFIG_FILE_OK) CONFIG_FILES ?= $(wildcard $(CONFIG_FILE)-default) $(wildcard $(OUTPUT_DIR)/config.target) $(wildcard $(CONFIG_FILE)) @@ -145,7 +143,7 @@ endif override RELATIVE_DIR := $(RELATIVE_DIR:/%=%) override RELATIVE_DIR := $(RELATIVE_DIR:\\%=%) #$(warning RELATIVE_DIR = "$(RELATIVE_DIR)") -override BACK2TOP_DIR := $(shell echo $(RELATIVE_DIR)/ | sed -e 's_//_/_g' -e 's_/\./_/_g' -e 's_^\./__g' -e 's_\([^/][^/]*\)_.._g' -e 's_/$$__') +#override BACK2TOP_DIR := $(shell echo $(RELATIVE_DIR)/ | sed -e 's_//_/_g' -e 's_/\./_/_g' -e 's_^\./__g' -e 's_\([^/][^/]*\)_.._g' -e 's_/$$__') #$(warning BACK2TOP_DIR = "$(BACK2TOP_DIR)") #$(warning SOURCES_DIR = "$(SOURCES_DIR)") @@ -200,6 +198,9 @@ endif OMK_INCLUDED := 1 endif +print-hints: + @echo 'Use "make V=1" to see the verbose compile lines.' + check-make-ver: @GOOD_MAKE_VERSION=`echo $(MAKE_VERSION) | sed -n -e 's/^[4-9]\..*\|^3\.9[0-9].*\|^3\.8[1-9].*/y/p'` ; \ if [ x$$GOOD_MAKE_VERSION != xy ] ; then \ @@ -563,11 +564,17 @@ endif ifneq ($(LN_HEADERS),y) define cp_cmd -( echo " CP $(1:$(OUTPUT_DIR)/%=%) -> $(2:$(OUTPUT_DIR)/%=%)"; cp $(CPHEADER_FLAGS) $(1) $(2) ) +if ! cmp --quiet $(1) $(2); then \ + echo " CP $(1:$(OUTPUT_DIR)/%=%) -> $(2:$(OUTPUT_DIR)/%=%)"; \ + install -C -D $(CPHEADER_FLAGS) $(1) $(2) || exit 1; \ +fi endef else define cp_cmd -( echo " LN $(1:$(OUTPUT_DIR)/%=%) -> $(2:$(OUTPUT_DIR)/%=%)"; [ -f $(1) ] && ln -sf $(LNHEADER_FLAGS) $(1) $(2) ) +if ! cmp --quiet $(1) $(2); then \ + echo " LN $(1:$(OUTPUT_DIR)/%=%) -> $(2:$(OUTPUT_DIR)/%=%)"; \ + if [ -f $(1) ]; then d=$(2); mkdir -p $${d%/*} && ln -sf $(LNHEADER_FLAGS) $(1) $(2) || exit 1; else exit 1; fi; \ +fi endef endif @@ -577,21 +584,19 @@ endif # Syntax: $(call include-pass-template,,) define include-pass-template include-pass-local: include-pass-local-$(2) -include-pass-local-$(2): $$($(2)_GEN_HEADERS) $$(foreach f,$$(renamed_$(2)_GEN_HEADERS),$$(shell echo '$$(f)' | sed -e 's/^\(.*\)->.*$$$$/\1/')) - @$$(foreach f, $$($(2)_HEADERS), cmp --quiet $$(SOURCES_DIR)/$$(f) $(1)/$$(notdir $$(f)) \ - || $$(call cp_cmd,$$(SOURCES_DIR)/$$(f),$(1)/$$(notdir $$(f))) || exit 1 ; ) - @$$(foreach f, $$($(2)_GEN_HEADERS), cmp --quiet $$(f) $(1)/$$(notdir $$(f)) \ - || $$(call cp_cmd,$$(LOCAL_BUILD_DIR)/$$(f),$(1)/$$(notdir $$(f))) || exit 1 ; ) # FIXME: Use correct build dir, then document it - @$$(foreach f, $$(nobase_$(2)_HEADERS), cmp --quiet $$(SOURCES_DIR)/$$(f) $(1)/$$(f) \ - || ( mkdir -p $(1)/$$(dir $$(f)) && $$(call cp_cmd,$$(SOURCES_DIR)/$$(f),$(1)/$$(f)) ) || exit 1 ; ) +include-pass-local-$(2): $$($(2)_GEN_HEADERS) $$(foreach f,$$(renamed_$(2)_GEN_HEADERS),$$(shell f='$$(f)'; echo $$$${f%->*})) + @$$(foreach f, $$($(2)_HEADERS),$$(call cp_cmd,$$(SOURCES_DIR)/$$(f),$(1)/$$(notdir $$(f))); ) +# FIXME: Use correct build dir, then document it (in the line bellow) + @$$(foreach f, $$($(2)_GEN_HEADERS),$$(call cp_cmd,$$(LOCAL_BUILD_DIR)/$$(f),$(1)/$$(notdir $$(f))); ) + @$$(foreach f, $$(nobase_$(2)_HEADERS), $$(call cp_cmd,$$(SOURCES_DIR)/$$(f),$(1)/$$(f)); ) @$$(foreach f, $$(renamed_$(2)_HEADERS), \ - srcfname=`echo '$$(f)' | sed -e 's/^\(.*\)->.*$$$$/\1/'` ; destfname=`echo '$$(f)' | sed -e 's/^.*->\(.*\)$$$$/\1/'` ; \ - cmp --quiet $$(SOURCES_DIR)/$$$${srcfname} $(1)/$$$${destfname} \ - || ( mkdir -p `dirname $(1)/$$$${destfname}` && $$(call cp_cmd,$$(SOURCES_DIR)/$$$${srcfname},$(1)/$$$${destfname}) ) || exit 1 ; ) + f='$$(f)'; srcfname=$$$${f%->*}; destfname=$$$${f#*->}; \ + $$(call cp_cmd,$$(SOURCES_DIR)/$$$${srcfname},$(1)/$$$${destfname}); ) @$$(foreach f, $$(renamed_$(2)_GEN_HEADERS), \ - srcfname=`echo '$$(f)' | sed -e 's/^\(.*\)->.*$$$$/\1/'` ; destfname=`echo '$$(f)' | sed -e 's/^.*->\(.*\)$$$$/\1/'` ; \ - cmp --quiet $$$${srcfname} $(1)/$$$${destfname} \ - || ( mkdir -p `dirname $(1)/$$$${destfname}` && $$(call cp_cmd,$$(LOCAL_BUILD_DIR)/$$$${srcfname},$(1)/$$$${destfname}) ) || exit 1 ; ) + f='$$(f)'; srcfname=$$$${f%->*}; destfname=$$$${f#*->}; \ + $$(call cp_cmd,$$(LOCAL_BUILD_DIR)/$$$${srcfname},$(1)/$$$${destfname}); ) +# Suppress "Nothing to be done for `include-pass-local'" message if no headers are defined in Makefile.omk + @$$(if $$($(2)_HEADERS)$$($(2)_GEN_HEADERS)$$(nobase_$(2)_HEADERS)$$(renamed_$(2)_HEADERS)$$(renamed_$(2)_GEN_HEADERS),,true) endef #OMK:sysless.omk@Makefile.rules.sysless BUILD_DIR_NAME = _build$(addprefix /,$(PREFIX_DIR))