]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
Make forward declarations work much better than before.
authorwolf <wolf@0785d39b-7218-0410-832d-ea1e28bc413d>
Wed, 24 Feb 1999 12:56:20 +0000 (12:56 +0000)
committerwolf <wolf@0785d39b-7218-0410-832d-ea1e28bc413d>
Wed, 24 Feb 1999 12:56:20 +0000 (12:56 +0000)
git-svn-id: https://svn.dealii.org/trunk@890 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/deal.II/Makefile
deal.II/deal.II/source/Makefile

index 568f6fe47abde56c795c74f40df6356815d70ca3..e277543fe0489bdc7f56a5dd5e5e7b2c9038ac9f 100644 (file)
@@ -14,7 +14,7 @@ examples:
        cd examples ; make
 
 lib-clean:
-       -rm -f *~ include/*~ include/*/*~
+       -rm -f *~ include/*~ include/*/*~ include/basic/forward-declarations.h*
        cd lib ; make clean
 
 examples-clean:
index 2ddec2e403e069f5ff22ef4b2033345b5c36be93..607304eb6fd72436358f4657a7b97abe16ba824f 100644 (file)
@@ -17,6 +17,8 @@ include $D/deal.II/Make.global_options
 cc-files = $(wildcard */*.cc)
 h-files  = $(wildcard ../include/*/*.h)
 
+forward-declarations = ../include/basic/forward-declarations.h
+
 # strip subdirectories from cc file names, preprend a "../lib/[g]o"
 # and change the suffix. We place the object files with or without
 # debug info in different directories, since we want to use the
@@ -46,9 +48,46 @@ all: 1d 2d 3d
 
 
 # rule how to make the file containing all the forward declarations
-../include/basic/forward-declarations.h: $(filter-out %forward-declarations.h,$(h-files))
+# this rule is rather complicated, it works as follows:
+#
+# - if this is the outermost 'make', then create a file $@.old.
+#   if the forward declaration file $@ already exists, then copy
+#   it over, otherwise leave it empty. this way, we always have
+#   a file to run diff on
+# - write the forward declarations for the presently available
+#   header files to $@.new
+# - we would like to compare the output of the script generating
+#   the forward declarations with the old file, or the empty
+#   string if there is no such file; this is why we created $@.old
+# - if the files differ, we would like to copy over the old file.
+# - this can either be done using shell programming using 'if [...]'
+#   or using conditionals inside 'make'. the first way is not 
+#   portable over different shells, however, and I also do not know
+#   how to write it. the second way has a problem also: conditionals
+#   are evaluated at the time the Makefile is read first, so we
+#   can't compare against $@.old, since this file does not exist at
+#   that time.
+# - we therefore invoke a second 'make', which can compare the two
+#   files against each other in a preconditional clause and
+#   copy over the file if necessary.
+# - delete the two temporary files
+$(forward-declarations): $(filter-out $(forward-declarations),$(h-files))
+ifeq (0,${MAKELEVEL})
+       @echo ============================ Checking $@
+       @touch $@.old
+       -@cp $@ $@.old
+       @perl ../Make_forward_declarations $(filter-out $(forward-declarations),$(h-files)) > $@.new
+       @make --silent $@
+       @rm $@.old $@.new
+else
+  ifneq (,$(shell diff $(forward-declarations).old $(forward-declarations).new))
        @echo ============================ Generating $@
-       @perl ../Make_forward_declarations $(filter-out %forward-declarations.h,$(h-files)) > $@
+       @cp $@.new $@
+  else
+       @echo "============================          $@ needs no change"
+  endif
+endif
+
 
 
 
@@ -141,7 +180,7 @@ clean:
 #programs which use the 2d *and* the 3d library;
 #if the files within these libraries had the same names,
 #we may get into trouble.
-../lib/Makefile.dep: $(cc-files) $(h-files) Makefile ../Make.global_options
+../lib/Makefile.dep: $(cc-files) $(filter-out $(forward-declarations),$(h-files)) Makefile ../Make.global_options
        @echo ============================ Remaking Makefile
        @echo "# This Makefile was automatically generated by ../source/Makefile" \
                > ../lib/Makefile.dep

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.