Commit 340da949 authored by Richard Levitte's avatar Richard Levitte
Browse files

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: default avatarRich Salz <rsalz@openssl.org>
parent e0b5108c
Loading
Loading
Loading
Loading
+5 −9
Original line number Diff line number Diff line
@@ -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
  }
+6 −5
Original line number Diff line number Diff line
@@ -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