Harmonize Unix Makefile template with Windows dito
[openssl.git] / Configurations / windows-makefile.tmpl
index 6f3c8483e25df1e28447c289ab9ef3bdb7b0bf4f..cb1b4e696d90b67899c5bc97c0af596de228b19d 100644 (file)
@@ -96,7 +96,7 @@ LDFLAGS={- $target{lflags} -}
 LDOUTFLAG={- $target{loutflag} || "/out:" -}
 EX_LIBS={- $target{ex_libs} -}
 LIB_CFLAGS={- join(" ", $target{lib_cflags}, $target{shared_cflag}) || "" -}
-SHARED_LDFLAGS={- $target{shared_ldflag} || "" -}
+LIB_LDFLAGS={- $target{shared_ldflag} || "" -}
 DSO_CFLAGS={- join(" ", $target{dso_cflags}, $target{shared_cflag}) || "" -}
 DSO_LDFLAGS={- join(" ", $target{dso_lflags}, $target{shared_ldflag}) || "" -}
 BIN_CFLAGS={- $target{bin_cflags} -}
@@ -139,6 +139,20 @@ list-tests:
        @set PERL=$(PERL)
        @$(PERL) $(SRCDIR)\test\run_tests.pl list
 
+libclean:
+       del /Q /F $(LIBS) $(SHLIBS)
+       del lib.pdb
+
+clean: libclean
+       del /Q /F $(PROGRAMS) $(TESTPROGS) $(ENGINES) $(SCRIPTS)
+       del /Q /S /F *.asm
+       del /Q /S /F *.d
+       del /Q /S /F *.obj
+       del /Q /S /F *.pdb
+       del /Q /S /F *.exp
+       del /Q /S /F engines\*.ilk
+       del /Q /S /F engines\*.lib
+
 depend:
 
 # Building targets ###################################################
@@ -167,6 +181,54 @@ configdata.pm: {- $config{build_file_template} -} $(SRCDIR)\Configure
      return map { shlib_import($_) } @_;
  }
 
+  sub generatesrc {
+      my %args = @_;
+      (my $target = $args{src}) =~ s/\.[sS]$/.asm/;
+      my $generator = join(" ", @{$args{generator}});
+      my $incs = join("", map { " /I ".$_ } @{$args{incs}});
+
+      if ($target !~ /\.asm$/) {
+          return <<"EOF";
+$target: $args{generator}->[0]
+       \$(PERL) $generator > \$@
+EOF
+      } else {
+          if ($args{generator}->[0] =~ /\.pl$/) {
+              $generator = '$(PERL) '.$generator;
+          } elsif ($args{generator}->[0] =~ /\.S$/) {
+              $generator = undef;
+          } else {
+              die "Generator type for $src unknown: $generator\n";
+          }
+
+          if (defined($generator)) {
+              # If the target is named foo.S in build.info, we want to
+              # end up generating foo.s in two steps.
+              if ($args{src} =~ /\.S$/) {
+                   return <<"EOF";
+$target: $args{generator}->[0]
+       set ASM=\$(AS)
+       set CC=\$(CC)
+       $generator \$@.S
+       \$(CC) \$(CFLAGS) $incs /EP /C \$@.S > \$@
+        del /Q \$@.S
+EOF
+              }
+              # Otherwise....
+              return <<"EOF";
+$target: $args{generator}->[0]
+       set ASM=\$(AS)
+       set CC=\$(CC)
+       $generator \$@
+EOF
+          }
+          return <<"EOF";
+$target: $args{generator}->[0]
+       \$(CC) \$(CFLAGS) $incs /EP /C \$< > \$@
+EOF
+      }
+  }
+
  sub src2obj {
      my %args = @_;
      my $obj = $args{obj};
@@ -222,7 +284,7 @@ EOF
      return <<"EOF"
 $target: $deps $ordinalsfile
        \$(PERL) $mkdef_pl "$mkdef_key" 32 > $shlib.def
-       \$(LD) \$(LDFLAGS) \$(SHARED_LDFLAGS) \\
+       \$(LD) \$(LDFLAGS) \$(LIB_LDFLAGS) \\
                /implib:$target \$(LDOUTFLAG)$shlib$shlibext /def:$shlib.def @<<
 $objs$linklibs \$(EX_LIBS)
 <<
@@ -251,6 +313,11 @@ $objs$linklibs \$(EX_LIBS)
 EOF
  }
  sub obj2lib {
+     # Because static libs and import libs are both named the same in native
+     # Windows, we can't have both.  We skip the static lib in that case,
+     # as the shared libs are what we use anyway.
+     return "" unless $disabled{"shared"};
+
      my %args = @_;
      my $lib = $args{lib};
      my $objs = join("\n", map { $_.$objext } @{$args{objs}});