Unified build - fix make depend
authorRichard Levitte <levitte@openssl.org>
Fri, 12 Feb 2016 13:05:06 +0000 (14:05 +0100)
committerRichard Levitte <levitte@openssl.org>
Fri, 12 Feb 2016 22:05:43 +0000 (23:05 +0100)
There was a catch 22, where 'make depend' directly after configuring
in an otherwise pristine build tree would fail because buildinf.h
didn't exist yet.

This change has the depend building targets depend on the same other
targets as the object file building targets, so the generation of
buildinf.h and similar files would kick in during 'make depend'.

Reviewed-by: Rich Salz <rsalz@openssl.org>
Configurations/README
Configurations/common.tmpl
Configurations/descrip.mms.tmpl
Configurations/unix-Makefile.tmpl

index b67506a590d8675c62691f657a258add010e421a..89fc65ca21da9dc949e6baf9de4d61ba45d0b137 100644 (file)
@@ -488,6 +488,7 @@ They are all expected to return a string with the lines they produce.
 
                         src2dep(obj => "PATH/TO/objectfile",
                                 srcs => [ "PATH/TO/sourcefile", ... ],
+                                deps => [ "dep1", ... ],
                                 incs => [ "INCL/PATH", ... ]);
 
                   'obj' has the dependent object file as well as
@@ -496,7 +497,8 @@ They are all expected to return a string with the lines they produce.
                   'srcs' has the list of source files to build the
                   object file, with the first item being the source
                   file that directly corresponds to the object file.
-                  'incs' is a list of include file directories.
+                  'deps' is a list of explicit dependencies.  'incs'
+                  is a list of include file directories.
 
     src2obj     - function that produces build file lines to build an
                   object file from source files and associated data.
@@ -513,8 +515,8 @@ They are all expected to return a string with the lines they produce.
                   'srcs' has the list of source files to build the
                   object file, with the first item being the source
                   file that directly corresponds to the object file.
-                  'deps' is a list of dependencies.  'incs' is a list
-                  of include file directories.
+                  'deps' is a list of explicit dependencies.  'incs'
+                  is a list of include file directories.
 
     obj2lib     - function that produces build file lines to build a
                   static library file ("libfoo.a" in Unix terms) from
index a750e21a33a8c33ec1718c941e481d4c9d881114..3bd73241a46ba1f699cf5d2977fe478ba1e52f8f 100644 (file)
@@ -45,6 +45,7 @@
                                    @{$unified_info{includes}->{$obj}} ]);
          $OUT .= src2dep(obj => $obj_no_o,
                          srcs => $unified_info{sources}->{$obj},
+                         deps => [ reducedepends(resolvedepends($obj)) ],
                          incs => [ @{$unified_info{includes}->{$bin}},
                                    @{$unified_info{includes}->{$obj}} ]);
      }
index 4732782072529d0d3ed1a35afd57707f08b6dc1c..ef745edc1ed7fd8d4cafec8433c0b6d1a170314a 100644 (file)
@@ -408,6 +408,7 @@ descrip.mms : {- sourcefile("Configurations", "descrip.mms.tmpl") -} $(SRCDIR)Co
   sub src2dep {
       my %args = @_;
       my $dep = $args{obj};
+      my $deps = join(", -\n\t\t", @{$args{srcs}}, @{$args{deps}});
 
       # Because VMS C isn't very good at combining a /INCLUDE path with
       # #includes having a relative directory (like '#include "../foo.h"),
@@ -432,7 +433,7 @@ descrip.mms : {- sourcefile("Configurations", "descrip.mms.tmpl") -} $(SRCDIR)Co
       my $after = $unified_info{after}->{$dep.".OBJ"} || "\@ !";
 
       return <<"EOF";
-$dep.MMS : $srcs
+$dep.MMS : $deps
         ${before}
         SET DEFAULT $forward
         \$(CC) \$(CFLAGS)${incs} /MMS=(TARGET=.OBJ)/OBJECT=${depd}${depn}.MMS $srcs
index e013f1577b60f94908fed89a63c1e1b08755352f..1db92a8c003389f6153133d3df66815291b7cac0 100644 (file)
@@ -708,11 +708,12 @@ Makefile: {- $config{build_file_template} -} $(SRCDIR)/Configure $(SRCDIR)/confi
       my $dep = $args{obj}.'$(DEP_EXT)';
       my $obj = $args{obj}.'$(OBJ_EXT)';
       my $srcs = join(" ", @{$args{srcs}});
+      my $deps = join(" ", @{$args{srcs}}, @{$args{deps}});
       my $incs = join(" ", map { " -I".$_ } @{$args{incs}});
       my $makedepprog = $config{makedepprog};
       if ($makedepprog eq "makedepend") {
           return <<"EOF";
-$dep : $srcs
+$dep : $deps
        rm -f \$\@.tmp; touch \$\@.tmp
        \$(MAKEDEPEND) -f\$\@.tmp -o"|$obj"\
            -- -DOPENSSL_DOING_MAKEDEPEND \$(DEPFLAGS)$incs \
@@ -722,7 +723,7 @@ $dep : $srcs
 EOF
       }
       return <<"EOF";
-$dep : $srcs Makefile
+$dep : $deps Makefile
        \$(CC) -DOPENSSL_DOING_MAKEDEPEND \$(DEPFLAGS)$incs -MM -MF \$\@ -MQ $obj $srcs
 EOF
   }