X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=Configurations%2Fwindows-makefile.tmpl;h=ecb0d4cfffcc275eb9fc536ca4566ec35d84b3fa;hp=6f3c8483e25df1e28447c289ab9ef3bdb7b0bf4f;hb=5f94746fa476150b0279d980991fbdf19eaa538d;hpb=2fe730362812e3c7d364197449a9439e3cb5915b diff --git a/Configurations/windows-makefile.tmpl b/Configurations/windows-makefile.tmpl index 6f3c8483e2..ecb0d4cfff 100644 --- a/Configurations/windows-makefile.tmpl +++ b/Configurations/windows-makefile.tmpl @@ -11,6 +11,23 @@ our $shlibextimport = $target{shared_import_extension} || ".lib"; our $dsoext = $target{dso_extension} || ".dll"; + my $win_installenv = + $target{build_scheme}->[2] eq "VC-W32" ? + "ProgramFiles(x86)" : "ProgramW6432"; + my $win_commonenv = + $target{build_scheme}->[2] eq "VC-W32" + ? "CommonProgramFiles(x86)" : "CommonProgramW6432"; + our $win_installroot = + defined($ENV{$win_installenv}) + ? $win_installenv : 'ProgramFiles'; + our $win_commonroot = + defined($ENV{$win_commonenv}) + ? $win_commonenv : 'CommonProgramFiles'; + + # expand variables early + $win_installroot = $ENV{$win_installroot}; + $win_commonroot = $ENV{$win_commonroot}; + sub shlib { return () if $disabled{shared}; my $lib = shift; @@ -43,20 +60,25 @@ SHLIB_VERSION_NUMBER={- $config{shlib_version_number} -} LIBS={- join(" ", map { $_.$libext } @{$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 } grep { !m|^test\\| } @{$unified_info{programs}}) -} +PROGRAMPDBS={- join(" ", map { $_.".pdb" } grep { !m|^test\\| } @{$unified_info{programs}}) -} TESTPROGS={- join(" ", map { $_.$exeext } grep { m|^test\\| } @{$unified_info{programs}}) -} SCRIPTS={- join(" ", @{$unified_info{scripts}}) -} +{- output_off() if $disabled{makedepend}; "" -} DEPS={- join(" ", map { (my $x = $_) =~ s|\.o$|$depext|; $x; } grep { $unified_info{sources}->{$_}->[0] =~ /\.c$/ } keys %{$unified_info{sources}}); -} +{- output_on() if $disabled{makedepend}; "" -} # 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} || "/usr/local"; + our $prefix = $config{prefix} || "$win_installroot\\OpenSSL"; $prefix -} OPENSSLDIR={- # # The logic here is that if no --openssldir was given, @@ -73,16 +95,9 @@ OPENSSLDIR={- # (file_name_is_absolute($config{openssldir}) ? $config{openssldir} : catdir($prefix, $config{openssldir})) - : catdir($prefix, "ssl"); + : "$win_commonroot\\SSL"; $openssldir -} -LIBDIR={- # - # if $prefix/lib$target{multilib} is not an existing - # directory, then assume that it's not searched by linker - # automatically, in which case adding $target{multilib} suffix - # causes more grief than we're ready to tolerate, so don't... - our $multilib = - -d "$prefix/lib$target{multilib}" ? $target{multilib} : ""; - our $libdir = $config{libdir} || "lib$multilib"; +LIBDIR={- our $libdir = $config{libdir} || "lib"; $libdir -} ENGINESDIR={- use File::Spec::Functions; our $enginesdir = catdir($prefix,$libdir,"engines"); @@ -91,12 +106,14 @@ ENGINESDIR={- use File::Spec::Functions; CC={- $target{cc} -} CFLAGS={- join(" ",(map { "-D".$_} @{$target{defines}}, @{$config{defines}})) -} {- join(" ", quotify_l("-DENGINESDIR=\"$enginesdir\"", "-DOPENSSLDIR=\"$openssldir\"")) -} {- $target{cflags} -} {- $config{cflags} -} COUTFLAG={- $target{coutflag} || "/Fo" -} +RC={- $target{rc} || "rc" -} +RCOUTFLAG={- $target{rcoutflag} || "/fo" -} LD={- $target{ld} || "link" -} 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} -} @@ -128,19 +145,109 @@ build_apps_nodep: $(PROGRAMS) $(SCRIPTS) build_tests: configdata.pm build_tests_nodep depend build_tests_nodep: $(TESTPROGS) -test tests: build_tests_nodep build_apps_nodep build_engines_nodep depend +test: tests +tests: build_tests_nodep build_apps_nodep build_engines_nodep depend + @rem {- output_off() if $disabled{tests}; "" -} set SRCTOP=$(SRCDIR) set BLDTOP=$(BLDDIR) set PERL=$(PERL) $(PERL) $(SRCDIR)\test\run_tests.pl $(TESTS) + @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}; "" -} list-tests: @set TOP=$(SRCDIR) @set PERL=$(PERL) @$(PERL) $(SRCDIR)\test\run_tests.pl list +install: install_sw install_ssldirs install_docs + +uninstall: uninstall_docs uninstall_sw + +libclean: + $(PERL) -e "map { m/(.*)\.dll$$/; unlink glob """$$1.*"""; } @ARGV" $(SHLIBS) + -del /Q /F $(LIBS) + -del /Q ossl_static.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: +# Install helper targets ############################################# + +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 + +uninstall_docs: + +install_ssldirs: + @$(PERL) $(SRCDIR)\util\mkdir-p.pl "$(DESTDIR)$(OPENSSLDIR)\certs" + @$(PERL) $(SRCDIR)\util\mkdir-p.pl "$(DESTDIR)$(OPENSSLDIR)\private" + @$(PERL) $(SRCDIR)\util\copy.pl $(SRCDIR)\apps\openssl.cnf \ + "$(DESTDIR)$(OPENSSLDIR)" + +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\copy.pl $(SRCDIR)\include\openssl\*.h \ + "$(DESTDIR)$(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)" + @$(PERL) $(SRCDIR)\util\copy.pl $(LIBS) \ + "$(DESTDIR)$(INSTALLTOP)\$(LIBDIR)" + @if "$(SHLIBS)"=="" \ + $(PERL) $(SRCDIR)\util\copy.pl ossl_static.pdb \ + "$(DESTDIR)$(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)" + @if not "$(ENGINES)"=="" \ + $(PERL) $(SRCDIR)\util\copy.pl $(ENGINES) "$(DESTDIR)$(ENGINESDIR)" + @if not "$(ENGINES)"=="" \ + $(PERL) $(SRCDIR)\util\copy.pl $(ENGINEPDBS) "$(DESTDIR)$(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" + @if not "$(SHLIBS)"=="" \ + $(PERL) $(SRCDIR)\util\copy.pl $(SHLIBS) "$(DESTDIR)$(INSTALLTOP)\bin" + @if not "$(SHLIBS)"=="" \ + $(PERL) $(SRCDIR)\util\copy.pl $(SHLIBPDBS) \ + "$(DESTDIR)$(INSTALLTOP)\bin" + @$(PERL) $(SRCDIR)\util\copy.pl $(PROGRAMS) \ + "$(DESTDIR)$(INSTALLTOP)\bin" + @$(PERL) $(SRCDIR)\util\copy.pl $(PROGRAMPDBS) \ + "$(DESTDIR)$(INSTALLTOP)\bin" + @$(PERL) $(SRCDIR)\util\copy.pl $(SCRIPTS) \ + "$(DESTDIR)$(INSTALLTOP)\bin" + @$(PERL) $(SRCDIR)\util\copy.pl tools\c_rehash.pl \ + "$(DESTDIR)$(INSTALLTOP)\bin" + +uninstall_runtime: + # Building targets ################################################### configdata.pm: {- $config{build_file_template} -} $(SRCDIR)\Configure @@ -152,7 +259,7 @@ configdata.pm: {- $config{build_file_template} -} $(SRCDIR)\Configure @echo "*** Please run the same make command again ***" @echo "*** ***" @echo "**************************************************" - @( exit 1 ) + @exit 1 {- use File::Basename; @@ -167,13 +274,67 @@ 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 $generator_incs = join("", map { " -I".$_ } @{$args{generator_incs}}); + my $incs = join("", map { " /I ".$_ } @{$args{incs}}); + my $deps = join(" ", @{$args{generator_deps}}, @{$args{deps}}); + + if ($target !~ /\.asm$/) { + return <<"EOF"; +$target: $args{generator}->[0] $deps + \$(PERL)$generator_incs $generator > \$@ +EOF + } else { + if ($args{generator}->[0] =~ /\.pl$/) { + $generator = '$(PERL)'.$generator_incs.' '.$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] $deps + set ASM=\$(AS) + $generator \$@.S + \$(CC) \$(CFLAGS) $incs /EP /C \$@.S > \$@.i && move /Y \$@.i \$@ + del /Q \$@.S +EOF + } + # Otherwise.... + return <<"EOF"; +$target: $args{generator}->[0] $deps + set ASM=\$(AS) + $generator \$@ +EOF + } + return <<"EOF"; +$target: $args{generator}->[0] $deps + \$(CC) \$(CFLAGS) $incs /EP /C $args{generator}->[0] > \$@.i && move /Y \$@.i \$@ +EOF + } + } + sub src2obj { my %args = @_; my $obj = $args{obj}; - my @srcs = map { (my $x = $_) =~ s/\.[sS]$/.asm/; $x } ( @{$args{srcs}} ); + my @srcs = map { (my $x = $_) =~ s/\.s$/.asm/; $x + } ( @{$args{srcs}} ); my $srcs = join(" ", @srcs); my $deps = join(" ", @srcs, @{$args{deps}}); my $incs = join("", map { " /I ".$_ } @{$args{incs}}); + unless ($disabled{zlib}) { + if ($withargs{zlib_include}) { + $incs .= " /I ".$withargs{zlib_include}; + } + } my $ecflags = { lib => '$(LIB_CFLAGS)', dso => '$(DSO_CFLAGS)', bin => '$(BIN_CFLAGS)' } -> {$args{intent}}; @@ -184,7 +345,7 @@ $obj$objext: $deps \$(AS) \$(ASFLAGS) \$(ASOUTFLAG)\$\@ $srcs EOF } - return <<"EOF"; + return <<"EOF" if (!$disabled{makedepend}); $obj$depext: $deps \$(CC) \$(CFLAGS) $ecflags$inc /Zs /showIncludes $srcs 2>&1 | \\ \$(PERL) -n << > $obj$depext @@ -192,11 +353,15 @@ chomp; s/^Note: including file: *//; \$\$collect{\$\$_} = 1; END { print '$obj$objext: ',join(" ", sort keys \%collect),"\\n" } -< $shlib.def - \$(LD) \$(LDFLAGS) \$(SHARED_LDFLAGS) \\ - /implib:$target \$(LDOUTFLAG)$shlib$shlibext /def:$shlib.def @<< -$objs$linklibs \$(EX_LIBS) + \$(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 + \$(LD) \$(LDFLAGS) \$(LIB_LDFLAGS) \\ + /implib:\$@ \$(LDOUTFLAG)$shlib$shlibext /def:$shlib.def @<< || (DEL /Q \$(\@B).* $shlib.* && EXIT 1) +$objs $shlib.res$linklibs \$(EX_LIBS) << + IF EXIST apps\\$shlib$shlibext DEL /Q /F apps\\$shlib$shlibext + IF EXIST test\\$shlib$shlibext DEL /Q /F test\\$shlib$shlibext + COPY $shlib$shlibext apps + COPY $shlib$shlibext test EOF } sub obj2dso { @@ -251,6 +427,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}}); @@ -258,7 +439,7 @@ EOF return <<"EOF"; $lib$libext: $deps \$(AR) \$(ARFLAGS) \$(AROUTFLAG)$lib$libext @<< -$objs +\$\? << EOF }