X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=Configurations%2Fwindows-makefile.tmpl;h=66529a2edad7f785a996a36e3f2aa52372f445af;hp=f16df75b47ad356815b866142d82f7dca5cf6d34;hb=0973b47040df02bfa56e4a91b25621027467b16c;hpb=f919c12f5c8b92f0318c650573e774fe6522c27c diff --git a/Configurations/windows-makefile.tmpl b/Configurations/windows-makefile.tmpl index f16df75b47..66529a2eda 100644 --- a/Configurations/windows-makefile.tmpl +++ b/Configurations/windows-makefile.tmpl @@ -4,6 +4,7 @@ ## {- join("\n## ", @autowarntext) -} {- our $objext = $target{obj_extension} || ".obj"; + our $resext = $target{res_extension} || ".res"; our $depext = $target{dep_extension} || ".d"; our $exeext = $target{exe_extension} || ".exe"; our $libext = $target{lib_extension} || ".lib"; @@ -11,7 +12,7 @@ our $shlibextimport = $target{shared_import_extension} || ".lib"; our $dsoext = $target{dso_extension} || ".dll"; - our $sover = $config{shlib_major}."_".$config{shlib_minor}; + (our $sover_dirname = $config{shlib_version_number}) =~ s|\.|_|g; my $win_installenv = $target{build_scheme}->[2] eq "VC-W32" ? @@ -31,14 +32,20 @@ $win_commonroot = $ENV{$win_commonroot}; sub shlib { - return () if $disabled{shared}; my $lib = shift; + return () if $disabled{shared} || $lib =~ /\.a$/; + return () unless defined $unified_info{sharednames}->{$lib}; return $unified_info{sharednames}->{$lib} . $shlibext; } + sub lib { + (my $lib = shift) =~ s/\.a$//; + return $lib . $libext; + } + sub shlib_import { - return () if $disabled{shared}; my $lib = shift; + return () if $disabled{shared} || $lib =~ /\.a$/; return $lib . $shlibextimport; } @@ -67,12 +74,12 @@ MINOR={- $config{minor} -} SHLIB_VERSION_NUMBER={- $config{shlib_version_number} -} -LIBS={- join(" ", map { $_.$libext } @{$unified_info{libraries}}) -} +LIBS={- join(" ", map { lib($_) } @{$unified_info{libraries}}) -} SHLIBS={- join(" ", map { shlib($_) } @{$unified_info{libraries}}) -} SHLIBPDBS={- join(" ", map { local $shlibext = ".pdb"; shlib($_) } @{$unified_info{libraries}}) -} ENGINES={- join(" ", map { dso($_) } @{$unified_info{engines}}) -} ENGINEPDBS={- join(" ", map { local $dsoext = ".pdb"; dso($_) } @{$unified_info{engines}}) -} -PROGRAMS={- join(" ", map { $_.$exeext } @{$unified_info{programs}}) -} +PROGRAMS={- our @PROGRAMS = map { $_.$exeext } @{$unified_info{programs}}; join(" ", @PROGRAMS) -} PROGRAMPDBS={- join(" ", map { $_.".pdb" } @{$unified_info{programs}}) -} SCRIPTS={- join(" ", @{$unified_info{scripts}}) -} {- output_off() if $disabled{makedepend}; "" -} @@ -88,7 +95,7 @@ GENERATED={- join(" ", grep { /\.o$/ } keys %{$unified_info{sources}} ), ( grep { /\.h$/ } keys %{$unified_info{generate}} )) -} -INSTALL_LIBS={- join(" ", map { $_.$libext } @{$unified_info{install}->{libraries}}) -} +INSTALL_LIBS={- join(" ", map { lib($_) } @{$unified_info{install}->{libraries}}) -} INSTALL_SHLIBS={- join(" ", map { shlib($_) } @{$unified_info{install}->{libraries}}) -} INSTALL_SHLIBPDBS={- join(" ", map { local $shlibext = ".pdb"; shlib($_) } @{$unified_info{install}->{libraries}}) -} INSTALL_ENGINES={- join(" ", map { dso($_) } @{$unified_info{install}->{engines}}) -} @@ -100,19 +107,23 @@ BIN_SCRIPTS=$(BLDDIR)\tools\c_rehash.pl MISC_SCRIPTS=$(BLDDIR)\apps\CA.pl $(BLDDIR)\apps\tsget.pl {- output_on() if $disabled{apps}; "" -} +APPS_OPENSSL={- use File::Spec::Functions; + catfile("apps","openssl") -} + # Do not edit these manually. Use Configure with --prefix or --openssldir # to change this! Short explanation in the top comment in Configure INSTALLTOP_dev={- # $prefix is used in the OPENSSLDIR perl snippet # use File::Spec::Functions qw(:DEFAULT splitpath); - our $prefix = $config{prefix} || "$win_installroot\\OpenSSL"; + our $prefix = canonpath($config{prefix} + || "$win_installroot\\OpenSSL"); our ($prefix_dev, $prefix_dir, $prefix_file) = splitpath($prefix, 1); $prefix_dev -} -INSTALLTOP_dir={- $prefix_dir -} +INSTALLTOP_dir={- canonpath($prefix_dir) -} OPENSSLDIR_dev={- # # The logic here is that if no --openssldir was given, - # OPENSSLDIR will get the value from $prefix plus "/ssl". + # OPENSSLDIR will get the value "$win_commonroot\\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, @@ -123,21 +134,21 @@ OPENSSLDIR_dev={- # our $openssldir = $config{openssldir} ? (file_name_is_absolute($config{openssldir}) ? - $config{openssldir} + canonpath($config{openssldir}) : catdir($prefix, $config{openssldir})) - : "$win_commonroot\\SSL"; + : canonpath("$win_commonroot\\SSL"); our ($openssldir_dev, $openssldir_dir, $openssldir_file) = splitpath($openssldir, 1); $openssldir_dev -} -OPENSSLDIR_dir={- $openssldir_dir -} +OPENSSLDIR_dir={- canonpath($openssldir_dir) -} LIBDIR={- our $libdir = $config{libdir} || "lib"; $libdir -} ENGINESDIR_dev={- use File::Spec::Functions qw(:DEFAULT splitpath); - our $enginesdir = catdir($prefix,$libdir,"engines-$sover"); + our $enginesdir = catdir($prefix,$libdir,"engines-$sover_dirname"); our ($enginesdir_dev, $enginesdir_dir, $enginesdir_file) = splitpath($enginesdir, 1); $enginesdir_dev -} -ENGINESDIR_dir={- $enginesdir_dir -} +ENGINESDIR_dir={- canonpath($enginesdir_dir) -} !IF "$(DESTDIR)" != "" INSTALLTOP=$(DESTDIR)$(INSTALLTOP_dir) OPENSSLDIR=$(DESTDIR)$(OPENSSLDIR_dir) @@ -159,8 +170,8 @@ LDOUTFLAG={- $target{loutflag} || "/out:" -}$(OSSL_EMPTY) EX_LIBS={- $target{ex_libs} -} LIB_CFLAGS={- join(" ", $target{lib_cflags}, $target{shared_cflag}) || "" -} LIB_LDFLAGS={- $target{shared_ldflag} || "" -} -DSO_CFLAGS={- join(" ", $target{dso_cflags}, $target{shared_cflag}) || "" -} -DSO_LDFLAGS={- join(" ", $target{dso_lflags}, $target{shared_ldflag}) || "" -} +DSO_CFLAGS={- $target{dso_cflags} || "" -} +DSO_LDFLAGS={- $target{dso_ldflag} || "" -} BIN_CFLAGS={- $target{bin_cflags} -} BIN_LDFLAGS={- $target{bin_lflags} -} @@ -197,11 +208,17 @@ build_programs_nodep: $(PROGRAMS) $(SCRIPTS) # Kept around for backward compatibility build_apps build_tests: build_programs +# Convenience target to prebuild all generated files, not just the mandatory +# ones +build_all_generated: $(GENERATED_MANDATORY) $(GENERATED) + test: tests {- dependmagic('tests'); -}: build_programs_nodep build_engines_nodep @rem {- output_off() if $disabled{tests}; "" -} + -mkdir $(BLDDIR)\test\test-runs set SRCTOP=$(SRCDIR) set BLDTOP=$(BLDDIR) + set RESULT_D=$(BLDDIR)\test\test-runs set PERL=$(PERL) set OPENSSL_DEBUG_MEMORY=on "$(PERL)" "$(SRCDIR)\test\run_tests.pl" $(TESTS) @@ -225,16 +242,21 @@ libclean: "$(PERL)" -e "map { m/(.*)\.dll$$/; unlink glob """$$1.*"""; } @ARGV" $(SHLIBS) "$(PERL)" -e "map { m/(.*)\.dll$$/; unlink glob """apps/$$1.*"""; } @ARGV" $(SHLIBS) "$(PERL)" -e "map { m/(.*)\.dll$$/; unlink glob """test/$$1.*"""; } @ARGV" $(SHLIBS) + "$(PERL)" -e "map { m/(.*)\.dll$$/; unlink glob """fuzz/$$1.*"""; } @ARGV" $(SHLIBS) -del /Q /F $(LIBS) -del /Q ossl_static.pdb clean: libclean - -del /Q /F $(PROGRAMS) $(ENGINES) $(SCRIPTS) + {- join("\n\t", map { "-del /Q /F $_" } @PROGRAMS) -} + -del /Q /F $(ENGINES) + -del /Q /F $(SCRIPTS) -del /Q /F $(GENERATED) -del /Q /S /F *.d -del /Q /S /F *.obj -del /Q /S /F *.pdb - -del /Q /S /F *.exp + -del /Q /F *.exp + -del /Q /F apps\*.exp + -del /Q /F engines\*.exp -del /Q /S /F engines\*.ilk -del /Q /S /F engines\*.lib -del /Q /S /F apps\*.lib @@ -352,11 +374,14 @@ configdata.pm: "$(SRCDIR)\Configure" {- join(" ", map { '"'.$_.'"' } @{$config{b # It takes a list of library names and outputs a list of dependencies sub compute_lib_depends { if ($disabled{shared}) { - return map { $_ =~ /\.a$/ ? $`.$libext : $_.$libext } @_; + return map { lib($_) } @_; } - die "Linking with static OpenSSL libraries is not supported in this configuration\n" - if grep /\.a$/, @_; - return map { shlib_import($_) } @_; + foreach (@_) { + (my $l = $_) =~ s/\.a$//; + die "Linking with static variants of shared libraries is not supported in this configuration\n" + if $l ne $_ && shlib($l); + } + return map { shlib_import($_) or lib($_) } @_; } sub generatesrc { @@ -421,7 +446,6 @@ EOF sub src2obj { my %args = @_; - my $obj = $args{obj}; my @srcs = map { (my $x = $_) =~ s/\.s$/.asm/; $x } ( @{$args{srcs}} ); my $srcs = '"'.join('" "', @srcs).'"'; @@ -436,6 +460,13 @@ EOF dso => '$(DSO_CFLAGS)', bin => '$(BIN_CFLAGS)' } -> {$args{intent}}; my $makedepprog = $config{makedepprog}; + if ($srcs[0] =~ /\.rc$/) { + return <<"EOF"; +$args{obj}: $deps + \$(RC) \$(RCOUTFLAG)\$\@ $srcs +EOF + } + (my $obj = $args{obj}) =~ s|\.o$||; if ($srcs[0] =~ /\.asm$/) { return <<"EOF"; $obj$objext: $deps @@ -469,51 +500,44 @@ EOF my %args = @_; my $lib = $args{lib}; my $shlib = $args{shlib}; - (my $mkdef_key = $lib) =~ s/^lib//i; - my $objs = join("\n", map { $_.$objext } @{$args{objs}}); - my $linklibs = join("", - map { "\n$_" } compute_lib_depends(@{$args{deps}})); - my $deps = join(" ", - (map { $_.$objext } @{$args{objs}}), - compute_lib_depends(@{$args{deps}})); - my $ordinalsfile = defined($args{ordinals}) ? $args{ordinals}->[1] : ""; - my $mkdef_pl = abs2rel(rel2abs(catfile($config{sourcedir}, - "util", "mkdef.pl")), - rel2abs($config{builddir})); - my $mkrc_pl = abs2rel(rel2abs(catfile($config{sourcedir}, - "util", "mkrc.pl")), - rel2abs($config{builddir})); + my @objs = map { (my $x = $_) =~ s|\.o$|$objext|; $x } + grep { $_ =~ m/\.(?:o|res)$/ } + @{$args{objs}}; + my @defs = grep { $_ =~ /\.def$/ } @{$args{objs}}; + my @deps = compute_lib_depends(@{$args{deps}}); + die "More than one exported symbols list" if scalar @defs > 1; + my $linklibs = join("", map { "$_\n" } @deps); + my $objs = join("\n", @objs); + my $deps = join(" ", @objs, @defs, @deps); my $target = shlib_import($lib); + my $shared_def = join("", map { " /def:$_" } @defs); return <<"EOF" -$target: $deps "$ordinalsfile" "$mkdef_pl" - "\$(PERL)" "$mkdef_pl" "$mkdef_key" 32 > $shlib.def - "\$(PERL)" -i.tmp -pe "s|^LIBRARY\\s+${mkdef_key}32|LIBRARY $shlib|;" $shlib.def - DEL $shlib.def.tmp - "\$(PERL)" "$mkrc_pl" $shlib$shlibext > $shlib.rc - \$(RC) \$(RCOUTFLAG)$shlib.res $shlib.rc +$target: $deps IF EXIST $shlib$shlibext.manifest DEL /F /Q $shlib$shlibext.manifest \$(LD) \$(LDFLAGS) \$(LIB_LDFLAGS) \\ - /implib:\$@ \$(LDOUTFLAG)$shlib$shlibext /def:$shlib.def @<< || (DEL /Q \$(\@B).* $shlib.* && EXIT 1) -$objs $shlib.res$linklibs \$(EX_LIBS) + /implib:\$@ \$(LDOUTFLAG)$shlib$shlibext$shared_def @<< || (DEL /Q \$(\@B).* $shlib.* && EXIT 1) +$objs +$linklibs\$(EX_LIBS) << IF EXIST $shlib$shlibext.manifest \\ \$(MT) \$(MTFLAGS) \$(MTINFLAG)$shlib$shlibext.manifest \$(MTOUTFLAG)$shlib$shlibext IF EXIST apps\\$shlib$shlibext DEL /Q /F apps\\$shlib$shlibext IF EXIST test\\$shlib$shlibext DEL /Q /F test\\$shlib$shlibext + IF EXIST fuzz\\$shlib$shlibext DEL /Q /F fuzz\\$shlib$shlibext COPY $shlib$shlibext apps COPY $shlib$shlibext test + COPY $shlib$shlibext fuzz EOF } sub obj2dso { my %args = @_; my $dso = $args{lib}; my $dso_n = basename($dso); - my $objs = join("\n", map { $_.$objext } @{$args{objs}}); - my $linklibs = join("", - map { "\n$_" } compute_lib_depends(@{$args{deps}})); - my $deps = join(" ", - (map { $_.$objext } @{$args{objs}}), - compute_lib_depends(@{$args{deps}})); + my @objs = map { (my $x = $_) =~ s|\.o$|$objext|; $x } @{$args{objs}}; + my @deps = compute_lib_depends(@{$args{deps}}); + my $objs = join("\n", @objs); + my $linklibs = join("", map { "$_\n" } @deps); + my $deps = join(" ", @objs, @deps); return <<"EOF"; $dso$dsoext: $deps IF EXIST $dso$dsoext.manifest DEL /F /Q $dso$dsoext.manifest @@ -523,43 +547,48 @@ EXPORTS bind_engine @1 v_check @2 << -$objs$linklibs \$(EX_LIBS) +$objs +$linklibs \$(EX_LIBS) << IF EXIST $dso$dsoext.manifest \\ \$(MT) \$(MTFLAGS) \$(MTINFLAG)$dso$dsoext.manifest \$(MTOUTFLAG)$dso$dsoext EOF } sub obj2lib { + my %args = @_; + my $lib = $args{lib}; + # 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"}; + return "" unless $disabled{"shared"} || $lib =~ /\.a$/; - my %args = @_; - my $lib = $args{lib}; - my $objs = join("\n", map { $_.$objext } @{$args{objs}}); - my $deps = join(" ", map { $_.$objext } @{$args{objs}}); + $lib =~ s/\.a$//; + my @objs = map { (my $x = $_) =~ s|\.o$|$objext|; $x } @{$args{objs}}; + my $objs = join("\n", @objs); + my $deps = join(" ", @objs); return <<"EOF"; $lib$libext: $deps \$(AR) \$(ARFLAGS) \$(AROUTFLAG)$lib$libext @<< -\$** +$objs << EOF } sub obj2bin { my %args = @_; my $bin = $args{bin}; - my $objs = join("\n", map { $_.$objext } @{$args{objs}}); - my $linklibs = join("", - map { "\n$_" } compute_lib_depends(@{$args{deps}})); - my $deps = join(" ", - (map { $_.$objext } @{$args{objs}}), - compute_lib_depends(@{$args{deps}})); + my @objs = map { (my $x = $_) =~ s|\.o$|$objext|; $x } @{$args{objs}}; + my @deps = compute_lib_depends(@{$args{deps}}); + my $objs = join("\n", @objs); + my $linklibs = join("", map { "$_\n" } @deps); + my $deps = join(" ", @objs, @deps); return <<"EOF"; $bin$exeext: $deps IF EXIST $bin$exeext.manifest DEL /F /Q $bin$exeext.manifest \$(LD) \$(LDFLAGS) \$(BIN_LDFLAGS) \$(LDOUTFLAG)$bin$exeext @<< -$objs setargv.obj$linklibs \$(EX_LIBS) +$objs +setargv.obj +$linklibs\$(EX_LIBS) << IF EXIST $bin$exeext.manifest \\ \$(MT) \$(MTFLAGS) \$(MTINFLAG)$bin$exeext.manifest \$(MTOUTFLAG)$bin$exeext