Windows: Make DESTDIR work
[openssl.git] / Configurations / windows-makefile.tmpl
index 0a06b115afe53833d612691573dca73a2c3306b4..b2e6cf5d5ee6e07761ac68a41f84581fe21209f0 100644 (file)
@@ -87,32 +87,51 @@ GENERATED={- join(" ",
 
 # Do not edit these manually. Use Configure with --prefix or --openssldir
 # to change this!  Short explanation in the top comment in Configure
-INSTALLTOP={- # $prefix is used in the OPENSSLDIR perl snippet
-             #
-             our $prefix = $config{prefix} || "$win_installroot\\OpenSSL";
-              $prefix -}
-OPENSSLDIR={- #
-             # The logic here is that if no --openssldir was given,
-             # OPENSSLDIR will get the value from $prefix plus "/ssl".
-             # If --openssldir was given and the value is an absolute
-             # path, OPENSSLDIR will get its value without change.
-             # If the value from --openssldir is a relative path,
-             # OPENSSLDIR will get $prefix with the --openssldir
-             # value appended as a subdirectory.
-             #
-              use File::Spec::Functions;
-              our $openssldir =
-                  $config{openssldir} ?
-                      (file_name_is_absolute($config{openssldir}) ?
-                           $config{openssldir}
-                           : catdir($prefix, $config{openssldir}))
-                      : "$win_commonroot\\SSL";
-              $openssldir -}
+INSTALLTOP_dev={- # $prefix is used in the OPENSSLDIR perl snippet
+                  #
+                  use File::Spec::Functions qw(:DEFAULT splitpath);
+                  our ($prefix_dev, $prefix_dir, $prefix_file) =
+                      splitpath($config{prefix} || "$win_installroot\\OpenSSL",
+                                1);
+                  $prefix_dev -}
+INSTALLTOP_dir={- $prefix_dir -}
+OPENSSLDIR_dev={- #
+                  # The logic here is that if no --openssldir was given,
+                  # OPENSSLDIR will get the value from $prefix plus "/ssl".
+                  # If --openssldir was given and the value is an absolute
+                  # path, OPENSSLDIR will get its value without change.
+                  # If the value from --openssldir is a relative path,
+                  # OPENSSLDIR will get $prefix with the --openssldir
+                  # value appended as a subdirectory.
+                  #
+                  use File::Spec::Functions qw(:DEFAULT splitpath);
+                  my $openssldir =
+                      $config{openssldir} ?
+                          (file_name_is_absolute($config{openssldir}) ?
+                               $config{openssldir}
+                               : catdir($prefix, $config{openssldir}))
+                          : "$win_commonroot\\SSL";
+                  our ($openssldir_dev, $openssldir_dir, $openssldir_file) =
+                      splitpath($openssldir, 1);
+                  $openssldir_dev -}
+OPENSSLDIR_dir={- $openssldir_dir -}
 LIBDIR={- our $libdir = $config{libdir} || "lib";
           $libdir -}
-ENGINESDIR={- use File::Spec::Functions;
-              our $enginesdir = catdir($prefix,$libdir,"engines");
-             $enginesdir -}
+ENGINESDIR_dev={- use File::Spec::Functions qw(:DEFAULT splitpath);
+                  my $enginesdir = catdir($prefix,$libdir,"engines");
+                  our ($enginesdir_dev, $enginesdir_dir, $enginesdir_file) =
+                      splitpath($enginesdir, 1);
+                  $enginesdir_dev -}
+ENGINESDIR_dir={- $enginesdir_dir -}
+!IF "$(DESTDIR)" != ""
+INSTALLTOP=$(DESTDIR)$(INSTALLTOP_dir)
+OPENSSLDIR=$(DESTDIR)$(OPENSSLDIR_dir)
+ENGINESDIR=$(DESTDIR)$(ENGINESDIR_dir)
+!ELSE
+INSTALLTOP=$(INSTALLTOP_dev)$(INSTALLTOP_dir)
+OPENSSLDIR=$(OPENSSLDIR_dev)$(OPENSSLDIR_dir)
+ENGINESDIR=$(ENGINESDIR_dev)$(ENGINESDIR_dir)
+!ENDIF
 
 CC={- $target{cc} -}
 CFLAGS={- join(" ",(map { "-D".$_} @{$target{defines}}, @{$config{defines}})) -} {- join(" ", quotify_l("-DENGINESDIR=\"$enginesdir\"", "-DOPENSSLDIR=\"$openssldir\"")) -} {- $target{cflags} -} {- $config{cflags} -}
@@ -172,9 +191,12 @@ tests: build_generated \
        @rem {- output_on() if !$disabled{tests}; "" -}
 
 list-tests:
-       @set TOP=$(SRCDIR)
-       @set PERL=$(PERL)
+       @rem {- output_off() if $disabled{tests}; "" -}
+       @set SRCTOP=$(SRCDIR)
        @"$(PERL)" "$(SRCDIR)\test\run_tests.pl" list
+       @rem {- if ($disabled{tests}) { output_on(); } else { output_off(); } "" -}
+       @echo "Tests are not supported with your chosen Configure options"
+       @rem {- output_on() if !$disabled{tests}; "" -}
 
 install: install_sw install_ssldirs install_docs
 
@@ -189,7 +211,7 @@ libclean:
 
 clean: libclean
        -del /Q /F $(PROGRAMS) $(TESTPROGS) $(ENGINES) $(SCRIPTS)
-       -del /Q /S /F $(GENERATED)
+       -del /Q /F $(GENERATED)
        -del /Q /S /F *.d
        -del /Q /S /F *.obj
        -del /Q /S /F *.pdb
@@ -213,70 +235,74 @@ install_sw: all install_dev install_engines install_runtime
 
 uninstall_sw: uninstall_runtime uninstall_engines uninstall_dev
 
-install_docs:
-        "$(PERL)" "$(SRCDIR)\util\process_docs.pl" \
-                "--destdir=$(DESTDIR)$(INSTALLTOP)\html" --type=html
+install_docs: install_html_docs
 
-uninstall_docs:
+uninstall_docs: uninstall_html_docs
 
 install_ssldirs:
-       @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(DESTDIR)$(OPENSSLDIR)\certs"
-       @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(DESTDIR)$(OPENSSLDIR)\private"
-       @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(DESTDIR)$(OPENSSLDIR)\misc"
+       @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(OPENSSLDIR)\certs"
+       @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(OPENSSLDIR)\private"
+       @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(OPENSSLDIR)\misc"
        @"$(PERL)" "$(SRCDIR)\util\copy.pl" "$(SRCDIR)\apps\openssl.cnf" \
-                                       "$(DESTDIR)$(OPENSSLDIR)"
+                                       "$(OPENSSLDIR)"
        @"$(PERL)" "$(SRCDIR)\util\copy.pl" $(MISC_SCRIPTS) \
-                                        "$(DESTDIR)$(OPENSSLDIR)\misc"
+                                        "$(OPENSSLDIR)\misc"
 
 install_dev:
        @if "$(INSTALLTOP)"=="" ( echo INSTALLTOP should not be empty & exit 1 )
        @echo *** Installing development files
-       @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(DESTDIR)$(INSTALLTOP)\include\openssl"
+       @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(INSTALLTOP)\include\openssl"
        @"$(PERL)" "$(SRCDIR)\util\copy.pl" "$(SRCDIR)\include\openssl\*.h" \
-                                      "$(DESTDIR)$(INSTALLTOP)\include\openssl"
+                                      "$(INSTALLTOP)\include\openssl"
        @"$(PERL)" "$(SRCDIR)\util\copy.pl" $(BLDDIR)\include\openssl\*.h \
-                                      "$(DESTDIR)$(INSTALLTOP)\include\openssl"
-       @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(DESTDIR)$(INSTALLTOP)\$(LIBDIR)"
+                                      "$(INSTALLTOP)\include\openssl"
+       @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(INSTALLTOP)\$(LIBDIR)"
        @"$(PERL)" "$(SRCDIR)\util\copy.pl" $(LIBS) \
-                                      "$(DESTDIR)$(INSTALLTOP)\$(LIBDIR)"
+                                      "$(INSTALLTOP)\$(LIBDIR)"
        @if "$(SHLIBS)"=="" \
         "$(PERL)" "$(SRCDIR)\util\copy.pl" ossl_static.pdb \
-                                       "$(DESTDIR)$(INSTALLTOP)\$(LIBDIR)"
+                                       "$(INSTALLTOP)\$(LIBDIR)"
 
 uninstall_dev:
 
 install_engines:
        @if "$(INSTALLTOP)"=="" ( echo INSTALLTOP should not be empty & exit 1 )
        @echo *** Installing engines
-       @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(DESTDIR)$(ENGINESDIR)"
+       @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(ENGINESDIR)"
        @if not "$(ENGINES)"=="" \
-        "$(PERL)" "$(SRCDIR)\util\copy.pl" $(ENGINES) "$(DESTDIR)$(ENGINESDIR)"
+        "$(PERL)" "$(SRCDIR)\util\copy.pl" $(ENGINES) "$(ENGINESDIR)"
        @if not "$(ENGINES)"=="" \
-        "$(PERL)" "$(SRCDIR)\util\copy.pl" $(ENGINEPDBS) "$(DESTDIR)$(ENGINESDIR)"
+        "$(PERL)" "$(SRCDIR)\util\copy.pl" $(ENGINEPDBS) "$(ENGINESDIR)"
 
 uninstall_engines:
 
 install_runtime:
        @if "$(INSTALLTOP)"=="" ( echo INSTALLTOP should not be empty & exit 1 )
        @echo *** Installing runtime files
-       @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(DESTDIR)$(INSTALLTOP)\bin"
+       @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(INSTALLTOP)\bin"
        @if not "$(SHLIBS)"=="" \
-        "$(PERL)" "$(SRCDIR)\util\copy.pl" $(SHLIBS) "$(DESTDIR)$(INSTALLTOP)\bin"
+        "$(PERL)" "$(SRCDIR)\util\copy.pl" $(SHLIBS) "$(INSTALLTOP)\bin"
        @if not "$(SHLIBS)"=="" \
         "$(PERL)" "$(SRCDIR)\util\copy.pl" $(SHLIBPDBS) \
-                                        "$(DESTDIR)$(INSTALLTOP)\bin"
+                                        "$(INSTALLTOP)\bin"
        @"$(PERL)" "$(SRCDIR)\util\copy.pl" $(PROGRAMS) \
-                                        "$(DESTDIR)$(INSTALLTOP)\bin"
+                                        "$(INSTALLTOP)\bin"
        @"$(PERL)" "$(SRCDIR)\util\copy.pl" $(PROGRAMPDBS) \
-                                        "$(DESTDIR)$(INSTALLTOP)\bin"
+                                        "$(INSTALLTOP)\bin"
        @"$(PERL)" "$(SRCDIR)\util\copy.pl" $(BIN_SCRIPTS) \
-                                        "$(DESTDIR)$(INSTALLTOP)\bin"
+                                        "$(INSTALLTOP)\bin"
 
 uninstall_runtime:
 
+install_html_docs:
+        "$(PERL)" "$(SRCDIR)\util\process_docs.pl" \
+                "--destdir=$(INSTALLTOP)\html" --type=html
+
+uninstall_html_docs:
+
 # Building targets ###################################################
 
-configdata.pm: "{- $config{build_file_template} -}" "$(SRCDIR)\Configure"
+configdata.pm: "{- $config{build_file_template} -}" "$(SRCDIR)\Configurations\common.tmpl" "$(SRCDIR)\Configure" {- join(" ", map { '"'.$_.'"' } @{$config{build_infos}}) -}
        @echo "Detected changed: $?"
        @echo "Reconfiguring..."
        "$(PERL)" "$(SRCDIR)\Configure" reconf
@@ -342,7 +368,7 @@ EOF
 $target: "$args{generator}->[0]" $deps
        set ASM=\$(AS)
        $generator \$@.S
-       \$(CC) \$(CFLAGS) $incs /EP /C \$@.S > \$@.i && move /Y \$@.i \$@
+       \$(CC) $incs \$(CFLAGS) /EP /C \$@.S > \$@.i && move /Y \$@.i \$@
         del /Q \$@.S
 EOF
               }
@@ -355,7 +381,7 @@ EOF
           }
           return <<"EOF";
 $target: "$args{generator}->[0]" $deps
-       \$(CC) \$(CFLAGS) $incs /EP /C "$args{generator}->[0]" > \$@.i && move /Y \$@.i \$@
+       \$(CC) $incs \$(CFLAGS) /EP /C "$args{generator}->[0]" > \$@.i && move /Y \$@.i \$@
 EOF
       }
   }
@@ -393,13 +419,13 @@ s/^Note: including file: *//;
 END { print '$obj$objext: ',join(" ", sort keys \%collect),"\\n" }
 <<
 $obj$objext: $obj$depext
-       \$(CC) \$(CFLAGS) $ecflags$incs -c \$(COUTFLAG)\$\@ @<<
+       \$(CC) $incs \$(CFLAGS) $ecflags -c \$(COUTFLAG)\$\@ @<<
 $srcs
 <<
 EOF
     return <<"EOF"     if ($disabled{makedepend});
 $obj$objext: $deps
-       \$(CC) \$(CFLAGS) $ecflags$incs -c \$(COUTFLAG)\$\@ $srcs
+       \$(CC) $incs \$(CFLAGS) $ecflags -c \$(COUTFLAG)\$\@ $srcs
 EOF
  }
 
@@ -477,7 +503,7 @@ EOF
      return <<"EOF";
 $lib$libext: $deps
        \$(AR) \$(ARFLAGS) \$(AROUTFLAG)$lib$libext @<<
-\$\?
+\$**
 <<
 EOF
  }
@@ -521,20 +547,15 @@ EOF
 
       foreach my $type (("dso", "lib", "bin", "script")) {
           next unless defined($unified_info{dirinfo}->{$dir}->{products}->{$type});
-          if ($type eq "lib") {
-              foreach my $lib (@{$unified_info{dirinfo}->{$dir}->{products}->{$type}}) {
-                  push @actions, <<"EOF";
-       \$(AR) \$(ARFLAGS) \$(AROUTFLAG)$lib$libext @<<
-\$\?
-<<
-EOF
-              }
-          } else {
+          # For lib object files, we could update the library.  However,
+          # LIB on Windows doesn't work that way, so we won't create any
+          # actions for it, and the dependencies are already taken care of.
+          if ($type ne "lib") {
               foreach my $prod (@{$unified_info{dirinfo}->{$dir}->{products}->{$type}}) {
                   if (dirname($prod) eq $dir) {
                       push @deps, $prod.$extinfo{$type};
                   } else {
-                      push @actions, "\t@ : No support to produce $type ".join(", ", @{$unified_info{dirinfo}->{$dir}->{products}->{$type}});
+                      push @actions, "\t@rem No support to produce $type ".join(", ", @{$unified_info{dirinfo}->{$dir}->{products}->{$type}});
                   }
               }
           }