checking in the recent efforts at optimizing clam
[feisty_meow.git] / scripts / clam / rules.def
index 2b506ab850568393cbfbcc0796187f8428c65cc6..abd5983dac3af0a7799995ee1edf8309f20c9d08 100644 (file)
@@ -3,9 +3,9 @@
 ###############################################################################
 
 #  This file contains composite macros and rules for creating objects.
-#  This file should be included in the user's makefile after the variables
+#  This file should be included in the user makefile after the variables
 #  have been initialized appropriately for the particular project being
-#  created.  The user's own targets should be placed after the include
+#  created.  The user targets should be placed after the include
 #  directive that specifies this file.
 
 ###############################################################################
@@ -19,22 +19,22 @@ ifneq "$(BUILD_AFTER)" ""
   LAST_TARGETS += $(BUILD_AFTER:%=%.make)
 endif
 
-# Make the default action be an error stop if we can't find an appropriate rule.
+# Make the default action be an error stop if we ca not find an appropriate rule.
 .DEFAULT:
        $(HIDER)echo
        $(HIDER)echo [$@] is missing files or has a makefile problem.
        $(HIDER)echo
-       $(HIDESH)$(CLAM_DIR)/exit_make.sh
+       $(HIDESH)$(CLAM_SCRIPTS)/exit_make.sh
 
 # This rule halts make for some supposedly devastating reason.  More
 # information should be printed out by the cause of the halt.
 %.halt:
-       @echo CLAM execution halted, the cause being $@...
-       $(HIDESH)$(CLAM_DIR)/exit_make.sh
+       @echo CLAM execution halted, the cause being: $@
+       $(HIDESH)$(CLAM_SCRIPTS)/exit_make.sh
 
 # Provides a time-stamp in the make log.
 show_date.%:
-       $(HIDER)echo "The time right now is $(shell date)"
+       $(HIDER)echo "{$(shell date)}"
 
 # The .make rule changes to the directory with the same first part of the
 # pattern and makes whatever projects are there.  This is used by the build
@@ -45,16 +45,19 @@ if [ -d $* ]; then \
   if [ -f "$*/$(MAKEFILE_NAME)" ]; then \
     $(MAKE) --silent -f "$(MAKEFILE_NAME)" NOT_FIRST_MAKE=t -C "$*"; \
   else \
-    echo Skipping makefile-less directory [$*]; \
+    echo "($@ skipping directory $*)"; \
   fi \
 else \
   echo Skipping missing directory [$*]; \
 fi'
-#used to include message for first case: echo "Entering directory [$*]"; 
+#hmmm: maybe convert above to a script also.
+
+# always run the exes listed in RUN_TARGETS.
+.PHONY: run_targets
 
 # "all" is the first target to execute in any makefile.  we capture it and
 # use it to produce the requested actions.
-all: start $(ACTUAL_FIRST_TARGETS) $(ACTUAL_TARGETS) $(ACTUAL_LAST_TARGETS) $(RUN_TARGETS:%=run_targets) finish 
+all: start $(ACTUAL_FIRST_TARGETS) $(ACTUAL_TARGETS) $(ACTUAL_LAST_TARGETS) run_targets finish 
 
 # "start" announces the beginning of compilation.
 start:
@@ -63,7 +66,7 @@ if [ ! -d "$(CLAM_TMP)" ]; then \
   mkdir "$(CLAM_TMP)"; \
 fi'
 ifeq "$(QUIET)" ""
-       $(HIDER)echo Project $(PROJECT) [$(shell basename $(shell dirname $(shell pwd) ) )/$(shell basename $(shell pwd) )] v. $(major).$(minor).$(revision).$(build).
+       $(HIDER)echo Project $(PROJECT) [$(shell echo $(CURRENT_DIR) | sed -e 's/.*\/\([^\/]*\)\/\([^\/]*\)/\1\/\2/')] v. $(major).$(minor).$(revision).$(build)
 endif
        $(HIDER)rm -f $(FLAG_FILES)
 
@@ -77,7 +80,7 @@ endif
 ifeq "$(NOT_FIRST_MAKE)" ""
        $(HIDESH) -c '\
 if [ ! -f "$(FAILURE_FILE)" ]; then \
-  $(SHELL) $(CLAM_DIR)/sound_play.sh $(CLAM_FINISH_SOUND); \
+  $(SHELL) $(FEISTY_MEOW_SCRIPTS)/multimedia/sound_play.sh $(CLAM_FINISH_SOUND); \
 fi'
 endif
 # toss the flag files so we do not see them again.
@@ -85,84 +88,59 @@ endif
 
 # runs the programs specified in the RUN_TARGETS variable.
 run_targets:
-       $(HIDESH) -c '\
-if [ ! -z "$(RUN_TARGETS)" ]; then \
-  if [ -f "$(DIRTY_FILE)" -o -f "$(SUBMAKE_FLAG)" ]; then \
-    total_exitval=0; \
-    for program_name in $(RUN_TARGETS); do \
-      base=`basename $$program_name`; \
-      "$$program_name"; \
-      exitval=$$?; \
-      if [ $$exitval -ne 0 ]; then \
-        echo -e "ERROR: $$program_name at `date`"; \
-        total_exitval=$$(($$total_exitval + 1)); \
-      fi; \
-    done; \
-    if [ $$total_exitval -ne 0 ]; then \
-      echo "FAILURE: errors occurred in RUN_TARGETS."; \
-    fi; \
-  fi; \
-fi'
-#hmmm: run targets needs to work on a hierarchy.
-#hmmm: old idea?    exit $$total_exitval; \
+       $(HIDESH)"$(CLAM_SCRIPTS)/target_runner.sh"
 
 # "make_subdirs" travels down each subdirectory and builds using make.
 make_subdirs:
-       $(HIDESH) -c '\
-for i in *; do \
-  if [ -d $$i ]; then \
-    if [ -f $$i/$(MAKEFILE_NAME) -a ! $$i -ef `pwd` ]; then \
-      echo; \
-      (cd $$i; $(MAKE) --silent NOT_FIRST_MAKE=t -f $(MAKEFILE_NAME) ); \
-    else \
-      echo Skipping makefile-less directory $$i...; \
-      echo; \
-    fi \
-  fi \
-done; \
-exit 0'
-##echo Entering $$i now...; 
+       $(HIDESH)$(CLAM_SCRIPTS)/make_subdirs.sh
 
 # "clean" is a default target that removes object files, libs, executable
 # files and such that were created by the project.  it invokes the makefile
 # again with the CLEAN variable defined so that this can be passed down into
 # all subsequent makes.
-clean: 
-       $(HIDER)$(MAKE) --silent CLEAN=t ready_to_clean
-
-ready_to_clean: $(OTHER_CLEANS) clean_subdirs
-       @echo Whacking [$(CLEANUPS)].
+clean: establish_cleanup_variable $(OTHER_CLEANS) scratch_other_cleans clean_subdirs add_to_cleanups_variable ready_to_clean
+       @# no code here.
+
+establish_cleanup_variable:
+       $(eval CLEAN := true)
+
+scratch_other_cleans:
+       $(eval OTHER_CLEANS := )
+
+# add late breaking items to the cleanup list.  this is mainly the actual
+# targets to build, since those are not specified until the user makefile
+# is included.  we take a liberty here and also add different versions of
+# the file suffixes so we can clean all versions of the targets.
+add_to_cleanups_variable: $(SUPPLEMENTAL_CLEANUP_TARGETS)
+       $(eval CLEANUPS = $(ACTUAL_TARGETS) $(CLEANUPS) )
+#      $(eval CLEANUPS = $(ACTUAL_TARGETS) $(ACTUAL_TARGETS:%.exe=%) $(ACTUAL_TARGETS:%.dll=%.so) $(ACTUAL_TARGETS:%.so=%.dll) $(CLEANUPS) )
+#      echo "new CLEANUPS variable: $(CLEANUPS)"
+
+# main cleaning task.
+ready_to_clean:
+ifneq "$(CLEANUPS)" ""
+       @echo Whacking [$(notdir $(CLEANUPS))]
+endif
        $(HIDESH) -c '\
-echo the other cleans were: $(OTHER_CLEANS); \
-echo the clean list is: $(CLEANUPS); \
 if [ ! -z "$(CLEANUPS)" ]; then \
-  for i in $(CLEANUPS) nonexistentishfileforlist; do \
-    rm -rf "$$i"; \
+  for spork19 in $(CLEANUPS) nonexistentishfileforlist; do \
+    rm -rf "$$spork19"; \
   done \
 fi'
 
+############################################################################
+
 # "clean_subdirs" travels down each subdirectory and cleans using make.
 clean_subdirs:
-       $(HIDESH) -c '\
-for i in *; do \
-  if [ -d "$$i" ]; then \
-    if [ -f "$$i/$(MAKEFILE_NAME)" -a ! "$$i" -ef `pwd` ]; then \
-      (cd "$$i"; $(MAKE) --silent NOT_FIRST_MAKE=t -f $(MAKEFILE_NAME) clean); \
-    else \
-      echo "Skipping makefile-less directory $$i..."; \
-    fi \
-  fi \
-done; \
-exit 0'
-###echo Cleaning "$$i" now...; 
+       $(HIDESH)$(CLAM_SCRIPTS)/clean_subdirs.sh
 
 # "rm_links" removes the files in the current directory that are links
 # to other files.  this is only useful in a unix environment.
 rm_links:
        $(HIDESH) -c '\
-for i in *; do \
-  if [ -h "$$i" ]; then \
-    /bin/rm -f "$$i"; \
+for gujira26 in *; do \
+  if [ -h "$$gujira26" ]; then \
+    /bin/rm -f "$$gujira26"; \
   fi \
 done; \
 exit 0'