]> rtime.felk.cvut.cz Git - omk.git/blob - snippets/sources-list
Fix handling of renamed_include_HEADER in sources-list target
[omk.git] / snippets / sources-list
1
2 # Rules that creates the list of files which are used during
3 # compilation. The list reflects conditional compilation depending on
4 # config.omk and other variables.
5
6 SOURCES_LIST_FN=sources.txt
7 ifndef SOURCES_LIST
8 SOURCES_LIST_DIR:=$(RELATIVE_DIR)
9 SOURCES_LIST:=$(OUTPUT_DIR)/$(SOURCES_LIST_DIR)/$(SOURCES_LIST_FN)
10 SOURCES_LIST_D := $(LOCAL_BUILD_DIR)/$(SOURCES_LIST_FN).d
11 export SOURCES_LIST SOURCES_LIST_DIR SOURCES_LIST_D
12 endif
13
14 ifeq ($(MAKECMDGOALS),sources-list)
15 NEED_SOURCES_LIST=y
16 endif
17 ifeq ($(MAKECMDGOALS),TAGS)
18 NEED_SOURCES_LIST=y
19 endif
20 ifeq ($(MAKECMDGOALS),tags)
21 NEED_SOURCES_LIST=y
22 endif
23
24 ifeq ($(NEED_SOURCES_LIST),y) # avoid execution of find command bellow if it is not useful
25 .PHONY: sources-list
26 sources-list: $(SOURCES_LIST)
27
28 $(SOURCES_LIST): $(CONFIG_FILES) $(shell find -name $(MAKEFILE_OMK))
29         @echo -n "" > "$(SOURCES_LIST).tmp"
30         @echo -n "" > "$(SOURCES_LIST_D).tmp"
31         @$(MAKE) --no-print-directory sources-list-pass
32         @echo "# Automatically generated list of files in '$(RELATIVE_DIR)' that are used during OMK compilation" > "$(SOURCES_LIST).tmp2"
33         @cat "$(SOURCES_LIST).tmp"|sort|uniq >> "$(SOURCES_LIST).tmp2"
34         @rm "$(SOURCES_LIST).tmp"
35         @mv "$(SOURCES_LIST).tmp2" "$(SOURCES_LIST)"
36         @echo "$(SOURCES_LIST): \\" > "$(SOURCES_LIST_D).tmp2"
37         @cat "$(SOURCES_LIST_D).tmp"|grep -v "$(SOURCES_LIST_D).tmp"|sort|uniq|\
38                 sed -e 's/$$/\\/' >> "$(SOURCES_LIST_D).tmp2"
39         @rm "$(SOURCES_LIST_D).tmp"
40         @mv "$(SOURCES_LIST_D).tmp2" "$(SOURCES_LIST_D)"
41 endif
42
43 $(eval $(call omk_pass_template,sources-list-pass,$$(LOCAL_BUILD_DIR),,always))
44
45 sources-list-pass-local:
46         @$(foreach m,$(MAKEFILE_LIST),echo '  $(m)' >> "$(SOURCES_LIST_D).tmp";)
47         @$(foreach h,$(include_HEADERS) $(nobase_include_HEADERS) $(kernel_HEADERS),\
48           echo "$(RELATIVE_DIR:$(SOURCES_LIST_DIR)/%=%)/$(h)" >> "$(SOURCES_LIST).tmp";)
49         @$(foreach ch,$(config_include_HEADERS), \
50           echo "$(USER_INCLUDE_DIR:$(OUTPUT_DIR)/$(addsuffix /,$(SOURCES_LIST_DIR))%=%)/$(ch)" >> "$(SOURCES_LIST).tmp";)
51         @$(foreach h,$(renamed_include_HEADERS),echo '$(h)'|sed -e 's|\(.*\)->.*|$(RELATIVE_DIR:$(SOURCES_LIST_DIR)/%=%)/\1|' >> "$(SOURCES_LIST).tmp";)
52         @$(foreach bin,$(lib_LIBRARIES) $(shared_LIBRARIES) $(bin_PROGRAMS) $(test_PROGRAMS) $(utils_PROGRAMS) \
53           $(kernel_LIBRARIES) $(rtlinux_LIBRARIES) $(kernel_MODULES),\
54           $(foreach src,$(filter-out %.o,$($(bin)_SOURCES)),echo "$(addsuffix /,$(RELATIVE_DIR:$(SOURCES_LIST_DIR)/%=%))$(src)" >> "$(SOURCES_LIST).tmp";))
55
56 ############ TAGS ###########
57
58 ifeq ($(MAKECMDGOALS),TAGS)
59 ETAGS=etags
60 TAGS_CMD = $(ETAGS)
61 TAGS: $(SOURCES_LIST)
62         @$(MAKE) --no-print-directory do-tags
63 endif
64 ifeq ($(MAKECMDGOALS),tags) 
65 CTAGS=ctags -N
66 TAGS_CMD = $(CTAGS)
67 tags: $(SOURCES_LIST)
68         @$(MAKE) --no-print-directory do-tags
69 endif
70 export TAGS_CMD
71
72 ifeq ($(MAKECMDGOALS),do-tags)
73 .PHONY: do-tags
74 do-tags: $(shell sed -e '/^\#/d' $(SOURCES_LIST))
75         @$(QUIET_CMD_ECHO) "  TAGS    $(SOURCES_LIST_FN)"
76         $(Q)$(TAGS_CMD) $^
77 endif
78
79 ############ CSCOPE ###########
80
81 cscope: $(SOURCES_LIST)
82         @$(QUIET_CMD_ECHO) "  CSCOPE  < $(SOURCES_LIST_FN)"
83         $(Q)sed -e '/^#/d' $(SOURCES_LIST)|cscope -b -i-
84 #FIXME: see doc to -i in cscope(1)
85
86 # Local Variables:
87 # mode:makefile
88 # End: