From 340da949ccde13f6506177e327ccc21f49f56d3b Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Sun, 28 Feb 2016 00:20:50 +0100 Subject: [PATCH] Make generation of dependency files more efficient when possible When building with GNU C, clang or VMS C, it's more efficient to generate dependency file and object file in one call rather than two. Have the dependency output in a temporary file and compare it with the previous one if available to see if replacement is waranted, thereby avoiding unnecessary reconstruction of Makefile / descrip.mms. Github issue #750 Reviewed-by: Rich Salz --- Configurations/descrip.mms.tmpl | 14 +++++--------- Configurations/unix-Makefile.tmpl | 11 ++++++----- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/Configurations/descrip.mms.tmpl b/Configurations/descrip.mms.tmpl index eb60b4ad81..b7e047ba7c 100644 --- a/Configurations/descrip.mms.tmpl +++ b/Configurations/descrip.mms.tmpl @@ -435,19 +435,15 @@ configdata.pm : {- sourcefile("Configurations", "descrip.mms.tmpl") -} $(SRCDIR) my $after = $unified_info{after}->{$obj.".OBJ"} || "\@ !"; return <<"EOF"; -$obj.MMS : $deps +$obj.OBJ : $deps ${before} SET DEFAULT $forward - \$(CC) \$(CFLAGS)${incs} /MMS=(FILE=${objd}${objn}.MMS,TARGET=$obj.OBJ) /NOOBJECT $srcs - SET DEFAULT $backward - ${after} - - PURGE $obj.MMS -$obj.OBJ : $obj.MMS - ${before} - SET DEFAULT $forward - \$(CC) \$(CFLAGS)${incs} /OBJECT=${objd}${objn}.OBJ /REPOSITORY=$backward $srcs + \$(CC) \$(CFLAGS)${incs} /MMS=(FILE=${objd}${objn}.tmp-MMS,TARGET=$obj.OBJ) /OBJECT=${objd}${objn}.OBJ /REPOSITORY=$backward $srcs SET DEFAULT $backward ${after} + \@ PIPE ( \$(PERL) -e "use File::Compare qw/compare_text/; my \$x = compare_text(""$obj.MMS"",""$obj.tmp-MMS""); exit(0x10000000 + (\$x == 0));" || - + RENAME $obj.tmp-MMS $obj.mms ) + \@ IF F\$SEARCH("$obj.tmp-MMS") .NES. "" THEN DELETE $obj.tmp-MMS;* - PURGE $obj.OBJ EOF } diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tmpl index b9fc5f87e7..cff0023a3e 100644 --- a/Configurations/unix-Makefile.tmpl +++ b/Configurations/unix-Makefile.tmpl @@ -847,11 +847,12 @@ $obj$objext: $obj$depext EOF } return <<"EOF"; -$obj$depext: $deps - \$(CC) \$(CFLAGS) $ecflags$incs -MM -MF \$\@ -MQ $obj$objext $srcs - touch \$\@ -$obj$objext: $obj$depext - \$(CC) \$(CFLAGS) $ecflags$incs -c -o \$\@ $srcs +$obj$objext: $deps + \$(CC) \$(CFLAGS) $ecflags$incs -MMD -MF $obj$depext.tmp -MT \$\@ -c -o \$\@ $srcs + \@touch $obj$depext.tmp + \@if ! cmp $obj$depext.tmp $obj$depext > /dev/null 2> /dev/null; then \\ + mv $obj$depext.tmp $obj$depext; \\ + fi EOF } # On Unix, we build shlibs from static libs, so we're ignoring the -- GitLab