]> git.ipfire.org Git - thirdparty/openssl.git/blobdiff - Configurations/unix-Makefile.tmpl
Generate doc/build.info with 'make update' rather than on the fly
[thirdparty/openssl.git] / Configurations / unix-Makefile.tmpl
index 4fab096121d6662a3266b46cd176cf3688d3c8b5..b0aff03ad10a172cebb8b46a613c7ba1f6369cc9 100644 (file)
@@ -80,8 +80,9 @@ SHLIBS={- join(" \\\n" . ' ' x 7,
 SHLIB_INFO={- join(" \\\n" . ' ' x 11,
                    fill_lines(" ", $COLUMNS - 11,
                           map { my $x = platform->sharedlib($_);
-                                my $y = platform->sharedlib_simple($_);
-                                $x ? "\"$x;$y\"" : () }
+                                my $y = platform->sharedlib_simple($_) // '';
+                                my $z = platform->sharedlib_import($_) // '';
+                                $x ? "\"$x;$y;$z\"" : () }
                           @{$unified_info{libraries}})) -}
 MODULES={- join(" \\\n" . ' ' x 8,
                 fill_lines(" ", $COLUMNS - 8,
@@ -111,6 +112,19 @@ DEPS={- join(" \\\n" . ' ' x 5,
 GENERATED_MANDATORY={- join(" \\\n" . ' ' x 20,
                             fill_lines(" ", $COLUMNS - 20,
                                        @{$unified_info{depends}->{""}})) -}
+GENERATED_PODS={- # common0.tmpl provides @generated
+                  join(" \\\n" . ' ' x 15,
+                       fill_lines(" ", $COLUMNS - 15,
+                                  map { my $x = $_;
+                                        (
+                                          grep { 
+                                                 $unified_info{attributes}->{depends}
+                                                 ->{$x}->{$_}->{pod} // 0
+                                               }
+                                              keys %{$unified_info{attributes}->{depends}->{$x}}
+                                        ) ? $x : ();
+                                      }
+                                      @generated)) -}
 GENERATED={- # common0.tmpl provides @generated
              join(" \\\n" . ' ' x 5,
                   fill_lines(" ", $COLUMNS - 5,
@@ -134,8 +148,9 @@ INSTALL_SHLIB_INFO={-
         join(" \\\n" . ' ' x 19,
              fill_lines(" ", $COLUMNS - 19,
                         map { my $x = platform->sharedlib($_);
-                              my $y = platform->sharedlib_simple($_);
-                              $x ? "\"$x;$y\"" : () }
+                              my $y = platform->sharedlib_simple($_) // '';
+                              my $z = platform->sharedlib_import($_) // '';
+                              $x ? "\"$x;$y;$z\"" : () }
                         grep { !$unified_info{attributes}->{libraries}->{$_}->{noinst} }
                         @{$unified_info{libraries}}))
 -}
@@ -455,6 +470,7 @@ LANG=C
 {- dependmagic('build_modules'); -}: build_modules_nodep
 {- dependmagic('build_programs'); -}: build_programs_nodep
 
+build_generated_pods: $(GENERATED_PODS)
 build_docs: build_man_docs build_html_docs
 build_man_docs: $(MANDOCS1) $(MANDOCS3) $(MANDOCS5) $(MANDOCS7)
 build_html_docs: $(HTMLDOCS1) $(HTMLDOCS3) $(HTMLDOCS5) $(HTMLDOCS7)
@@ -508,15 +524,20 @@ libclean:
                if [ "$$s" = ";" ]; then continue; fi; \
                s1=`echo "$$s" | cut -f1 -d";"`; \
                s2=`echo "$$s" | cut -f2 -d";"`; \
+               s3=`echo "$$s" | cut -f3 -d";"`; \
                $(ECHO) $(RM) $$s1; {- output_off() unless windowsdll(); "" -}\
                $(RM) apps/$$s1; \
                $(RM) test/$$s1; \
                $(RM) fuzz/$$s1; {- output_on() unless windowsdll(); "" -}\
                $(RM) $$s1; \
-               if [ "$$s1" != "$$s2" ]; then \
+               if [ "$$s2" != "" ]; then \
                        $(ECHO) $(RM) $$s2; \
                        $(RM) $$s2; \
                fi; \
+               if [ "$$s3" != "" ]; then \
+                       $(ECHO) $(RM) $$s3; \
+                       $(RM) $$s3; \
+               fi; \
        done
        $(RM) $(LIBS)
        $(RM) *{- platform->defext() -}
@@ -646,19 +667,23 @@ install_dev: install_runtime_libs
        @set -e; for s in $(INSTALL_SHLIB_INFO); do \
                s1=`echo "$$s" | cut -f1 -d";"`; \
                s2=`echo "$$s" | cut -f2 -d";"`; \
-               fn1=`basename $$s1`; \
-               fn2=`basename $$s2`; \
+               s3=`echo "$$s" | cut -f3 -d";"`; \
+               fn1=`basename "$$s1"`; \
+               fn2=`basename "$$s2"`; \
+               fn3=`basename "$$s3"`; \
                : {- output_off(); output_on() unless windowsdll() or sharedaix(); "" -}; \
-               if [ "$$fn1" != "$$fn2" ]; then \
+               if [ "$$fn2" != "" ]; then \
                        $(ECHO) "link $(DESTDIR)$(libdir)/$$fn2 -> $(DESTDIR)$(libdir)/$$fn1"; \
                        ln -sf $$fn1 $(DESTDIR)$(libdir)/$$fn2; \
                fi; \
                : {- output_off() unless windowsdll() or sharedaix(); output_on() if windowsdll(); "" -}; \
-               $(ECHO) "install $$s2 -> $(DESTDIR)$(libdir)/$$fn2"; \
-               cp $$s2 $(DESTDIR)$(libdir)/$$fn2.new; \
-               chmod 755 $(DESTDIR)$(libdir)/$$fn2.new; \
-               mv -f $(DESTDIR)$(libdir)/$$fn2.new \
-                     $(DESTDIR)$(libdir)/$$fn2; \
+               if [ "$$fn3" != "" ]; then \
+                       $(ECHO) "install $$s3 -> $(DESTDIR)$(libdir)/$$fn3"; \
+                       cp $$s3 $(DESTDIR)$(libdir)/$$fn3.new; \
+                       chmod 755 $(DESTDIR)$(libdir)/$$fn3.new; \
+                       mv -f $(DESTDIR)$(libdir)/$$fn3.new \
+                             $(DESTDIR)$(libdir)/$$fn3; \
+               fi; \
                : {- output_off() if windowsdll(); output_on() if sharedaix(); "" -}; \
                a=$(DESTDIR)$(libdir)/$$fn2; \
                $(ECHO) "install $$s1 -> $$a"; \
@@ -711,18 +736,22 @@ uninstall_dev: uninstall_runtime_libs
        @set -e; for s in $(INSTALL_SHLIB_INFO); do \
                s1=`echo "$$s" | cut -f1 -d";"`; \
                s2=`echo "$$s" | cut -f2 -d";"`; \
-               fn1=`basename $$s1`; \
-               fn2=`basename $$s2`; \
+               s3=`echo "$$s" | cut -f3 -d";"`; \
+               fn1=`basename "$$s1"`; \
+               fn2=`basename "$$s2"`; \
+               fn3=`basename "$$s3"`; \
                : {- output_off() if windowsdll(); "" -}; \
-               $(ECHO) "$(RM) $(DESTDIR)$(libdir)/$$fn2"; \
-               $(RM) $(DESTDIR)$(libdir)/$$fn2; \
-               if [ "$$fn1" != "$$fn2" -a -f "$(DESTDIR)$(libdir)/$$fn1" ]; then \
-                       $(ECHO) "$(RM) $(DESTDIR)$(libdir)/$$fn1"; \
-                       $(RM) $(DESTDIR)$(libdir)/$$fn1; \
+               $(ECHO) "$(RM) $(DESTDIR)$(libdir)/$$fn1"; \
+               $(RM) $(DESTDIR)$(libdir)/$$fn1; \
+               if [ -n "$$fn2" ]; then \
+                       $(ECHO) "$(RM) $(DESTDIR)$(libdir)/$$fn2"; \
+                       $(RM) $(DESTDIR)$(libdir)/$$fn2; \
                fi; \
                : {- output_on() if windowsdll(); "" -}{- output_off() unless windowsdll(); "" -}; \
-               $(ECHO) "$(RM) $(DESTDIR)$(libdir)/$$fn2"; \
-               $(RM) $(DESTDIR)$(libdir)/$$fn2; \
+               if [ -n "$$fn3" ]; then \
+                       $(ECHO) "$(RM) $(DESTDIR)$(libdir)/$$fn3"; \
+                       $(RM) $(DESTDIR)$(libdir)/$$fn3; \
+               fi; \
                : {- output_on() unless windowsdll(); "" -}; \
        done
        @ : {- output_on() if $disabled{shared}; "" -}
@@ -993,16 +1022,20 @@ uninstall_html_docs:
 
 # Developer targets (note: these are only available on Unix) #########
 
-update: generate errors ordinals
+# It's important that generate_buildinfo comes after ordinals, as ordinals
+# is sensitive to build.info changes.
+update: generate errors ordinals generate_buildinfo
 
 generate: generate_apps generate_crypto_bn generate_crypto_objects \
           generate_crypto_conf generate_crypto_asn1 generate_fuzz_oids
 
+generate_buildinfo: generate_doc_buildinfo
+
 .PHONY: doc-nits cmd-nits md-nits
-doc-nits: build_generated
+doc-nits: build_generated_pods
        $(PERL) $(SRCDIR)/util/find-doc-nits -n -l -e
 
-cmd-nits: build_generated apps/openssl
+cmd-nits: build_generated apps/openssl build_generated_pods
        $(PERL) $(SRCDIR)/util/find-doc-nits -c
 
 # This uses "mdl", the markdownlint application, which is written in ruby.
@@ -1012,7 +1045,7 @@ cmd-nits: build_generated apps/openssl
 # Finally, there's a Node.js version, which we haven't tried, that
 # can be found at https://github.com/DavidAnson/markdownlint
 md-nits:
-       mdl -s util/markdownlint.rb . NOTES-Windows.txt
+       mdl -s util/markdownlint.rb .
 
 # Test coverage is a good idea for the future
 #coverage: $(PROGRAMS) $(TESTPROGRAMS)
@@ -1060,6 +1093,11 @@ generate_fuzz_oids:
                                crypto/objects/obj_dat.h \
                                > fuzz/oids.txt )
 
+generate_doc_buildinfo:
+       ( $(PERL) -I$(BLDDIR) -Mconfigdata \
+                $(SRCDIR)/util/dofile.pl -o Makefile \
+                        $(SRCDIR)/doc/build.info.in > $(SRCDIR)/doc/build.info )
+
 # Set to -force to force a rebuild
 ERROR_REBUILD=
 errors:
@@ -1083,7 +1121,8 @@ errors:
            include/openssl/sslerr.h
            include/openssl/tls1.h
            include/openssl/dtls1.h
-           include/openssl/srtp.h );
+           include/openssl/srtp.h
+           include/openssl/sslerr_legacy.h );
    my @cryptoheaders_tmpl =
        qw( include/internal/dso.h
            include/internal/o_dir.h
@@ -1172,7 +1211,7 @@ FORCE:
 
 # Building targets ###################################################
 
-libcrypto.pc libssl.pc openssl.pc: configdata.pm $(LIBS) {- join(" ",map { platform->sharedlib_simple($_) // () } @{$unified_info{libraries}}) -}
+libcrypto.pc libssl.pc openssl.pc: configdata.pm $(LIBS) {- join(" ",map { platform->sharedlib_simple($_) // platform->sharedlib_import($_) // () } @{$unified_info{libraries}}) -}
 libcrypto.pc:
        @ ( echo 'prefix=$(INSTALLTOP)'; \
            echo 'exec_prefix=$${prefix}'; \
@@ -1251,7 +1290,10 @@ reconfigure reconf:
       # Depending on shared libraries:
       # On Windows POSIX layers, we depend on {libname}.dll.a
       # On Unix platforms, we depend on {shlibname}.so
-      return map { platform->sharedlib_simple($_) // platform->staticlib($_) } @_;
+      return map { platform->sharedlib_simple($_)
+                   // platform->sharedlib_import($_)
+                   // platform->staticlib($_)
+                 } @_;
   }
 
   sub generatesrc {
@@ -1449,15 +1491,25 @@ EOF
       my @deps = compute_lib_depends(@{$args{deps}});
       die "More than one exported symbol map" if scalar @defs > 1;
 
-      my $simple = platform->sharedlib_simple($args{lib});
       my $full = platform->sharedlib($args{lib});
+      # $import is for Windows and subsystems thereof, where static import
+      # libraries for DLLs are a thing.  On platforms that have this mechanism,
+      # $import has the name of this import library.  On platforms that don't
+      # have this mechanism, $import will be |undef|.
+      my $import = platform->sharedlib_import($args{lib});
+      # $simple is for platforms where full shared library names include the
+      # shared library version, and there's a simpler name that doesn't include
+      # that version.  On such platforms, $simple has the simpler name.  On
+      # other platforms, it will be |undef|.
+      my $simple = platform->sharedlib_simple($args{lib});
+
       my $argfile = defined $target{shared_argfileflag} ? $full.".args" : undef;
       my $shared_soname = "";
       $shared_soname .= ' '.$target{shared_sonameflag}.basename($full)
           if defined $target{shared_sonameflag};
       my $shared_imp = "";
-      $shared_imp .= ' '.$target{shared_impflag}.basename($simple)
-          if defined $target{shared_impflag};
+      $shared_imp .= ' '.$target{shared_impflag}.basename($import)
+          if defined $target{shared_impflag} && defined $import;
       my $shared_def = join("", map { ' '.$target{shared_defflag}.$_ } @defs);
 
       # There is at least one platform where the compiler-as-linker needs to
@@ -1488,7 +1540,7 @@ EOF
 
       my $recipe = '';
 
-      if ($simple ne $full) {
+      if (defined $simple) {
           if (sharedaix()) {
               $recipe .= <<"EOF";
 $simple: $full
@@ -1503,6 +1555,11 @@ $simple: $full
 EOF
           }
       }
+      if (defined $import) {
+      $recipe .= <<"EOF";
+$import: $full
+EOF
+      }
       $recipe .= <<"EOF";
 $full: $fulldeps
        \$(CC) \$(LIB_CFLAGS) $linkflags\$(LIB_LDFLAGS)$shared_soname$shared_imp \\
@@ -1513,12 +1570,16 @@ EOF
       if (windowsdll()) {
           $recipe .= <<"EOF";
        rm -f apps/$full
-       rm -f test/$full
        rm -f fuzz/$full
        cp -p $full apps/
-       cp -p $full test/
        cp -p $full fuzz/
 EOF
+          if (!$disabled{tests}) {
+            $recipe .= <<"EOF";
+       rm -f test/$full
+       cp -p $full test/
+EOF
+          }
       }
       $recipe .= <<"EOF" if defined $argfile;
 $argfile: $argfiledeps