1 # CLAM System default rule and target definitions.
3 ###############################################################################
5 # This file contains composite macros and rules for creating objects.
6 # This file should be included in the user's makefile after the variables
7 # have been initialized appropriately for the particular project being
8 # created. The user's own targets should be placed after the include
9 # directive that specifies this file.
11 ###############################################################################
13 # This ensures that any of other projects required by this one (defined through
14 # BUILD_BEFORE) get created before the real work in this project is done.
15 ifneq "$(BUILD_BEFORE)" ""
16 FIRST_TARGETS += $(BUILD_BEFORE:%=%.make)
18 ifneq "$(BUILD_AFTER)" ""
19 LAST_TARGETS += $(BUILD_AFTER:%=%.make)
22 # Make the default action be an error stop if we can't find an appropriate rule.
25 $(HIDER)echo [$@] is missing files or has a makefile problem.
27 $(HIDESH)$(CLAM_DIR)/exit_make.sh
29 # This rule halts make for some supposedly devastating reason. More
30 # information should be printed out by the cause of the halt.
32 @echo CLAM execution halted, the cause being $@...
33 $(HIDESH)$(CLAM_DIR)/exit_make.sh
35 # Provides a time-stamp in the make log.
37 $(HIDER)echo "The time right now is $(shell date)"
39 # The .make rule changes to the directory with the same first part of the
40 # pattern and makes whatever projects are there. This is used by the build
45 if [ -f "$*/$(MAKEFILE_NAME)" ]; then \
46 $(MAKE) --silent -f "$(MAKEFILE_NAME)" NOT_FIRST_MAKE=t -C "$*"; \
48 echo Skipping makefile-less directory [$*]; \
51 echo Skipping missing directory [$*]; \
53 #used to include message for first case: echo "Entering directory [$*]";
55 # "all" is the first target to execute in any makefile. we capture it and
56 # use it to produce the requested actions.
57 all: start $(ACTUAL_FIRST_TARGETS) $(ACTUAL_TARGETS) $(ACTUAL_LAST_TARGETS) $(RUN_TARGETS:%=run_targets) finish
59 # "start" announces the beginning of compilation.
62 if [ ! -d "$(CLAM_TMP)" ]; then \
63 mkdir "$(CLAM_TMP)"; \
66 $(HIDER)echo Project $(PROJECT) [$(shell basename $(shell dirname $(shell pwd) ) )/$(shell basename $(shell pwd) )] v. $(major).$(minor).$(revision).$(build).
68 $(HIDER)rm -f $(FLAG_FILES)
70 # "finish" announces the end of compilation. if there are targets to
71 # run, then they are executed here.
74 $(HIDER)echo Finished $(PROJECT).
76 $(HIDER)rm -f $(FLAG_FILES) $(SUB_FLAG_FILES)
77 ifeq "$(NOT_FIRST_MAKE)" ""
79 if [ ! -f "$(FAILURE_FILE)" ]; then \
80 $(SHELL) $(CLAM_DIR)/sound_play.sh $(CLAM_FINISH_SOUND); \
83 # toss the flag files so we do not see them again.
84 $(HIDER)rm -f "$(DIRTY_FILE)" "$(SUBMAKE_FLAG)"
86 # runs the programs specified in the RUN_TARGETS variable.
89 if [ ! -z "$(RUN_TARGETS)" ]; then \
90 if [ -f "$(DIRTY_FILE)" -o -f "$(SUBMAKE_FLAG)" ]; then \
92 for program_name in $(RUN_TARGETS); do \
93 base=`basename $$program_name`; \
96 if [ $$exitval -ne 0 ]; then \
97 echo -e "ERROR: $$program_name at `date`"; \
98 total_exitval=$$(($$total_exitval + 1)); \
101 if [ $$total_exitval -ne 0 ]; then \
102 echo "FAILURE: errors occurred in RUN_TARGETS."; \
106 #hmmm: run targets needs to work on a hierarchy.
107 #hmmm: old idea? exit $$total_exitval; \
109 # "make_subdirs" travels down each subdirectory and builds using make.
113 if [ -d $$i ]; then \
114 if [ -f $$i/$(MAKEFILE_NAME) -a ! $$i -ef `pwd` ]; then \
116 (cd $$i; $(MAKE) --silent NOT_FIRST_MAKE=t -f $(MAKEFILE_NAME) ); \
118 echo Skipping makefile-less directory $$i...; \
124 ##echo Entering $$i now...;
126 # "clean" is a default target that removes object files, libs, executable
127 # files and such that were created by the project. it invokes the makefile
128 # again with the CLEAN variable defined so that this can be passed down into
129 # all subsequent makes.
131 $(HIDER)$(MAKE) --silent CLEAN=t ready_to_clean
133 ready_to_clean: $(OTHER_CLEANS) clean_subdirs
134 @echo Whacking [$(CLEANUPS)].
136 echo the other cleans were: $(OTHER_CLEANS); \
137 echo the clean list is: $(CLEANUPS); \
138 if [ ! -z "$(CLEANUPS)" ]; then \
139 for i in $(CLEANUPS) nonexistentishfileforlist; do \
144 # "clean_subdirs" travels down each subdirectory and cleans using make.
148 if [ -d "$$i" ]; then \
149 if [ -f "$$i/$(MAKEFILE_NAME)" -a ! "$$i" -ef `pwd` ]; then \
150 (cd "$$i"; $(MAKE) --silent NOT_FIRST_MAKE=t -f $(MAKEFILE_NAME) clean); \
152 echo "Skipping makefile-less directory $$i..."; \
157 ###echo Cleaning "$$i" now...;
159 # "rm_links" removes the files in the current directory that are links
160 # to other files. this is only useful in a unix environment.
164 if [ -h "$$i" ]; then \