From 8c16829ebd8de96334818b2bc5a5e314b001d18c Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Thu, 17 Mar 2016 10:08:25 +0100 Subject: [PATCH] Add install targets for Windows On Windows, we set INSTALLTOP to default as follows: VC-WIN32: PREFIX: %ProgramFiles(x86)%\OpenSSL OPENSSLDIR: %CommonProgramFiles(x86)%\SSL VC-WIN64*: PREFIX: %ProgramW6432%\OpenSSL OPENSSLDIR: %CommonProgramW6432%\SSL Should those environment variables be missing, the following is used as fallback: PREFIX: %ProgramFiles%\OpenSSL OPENSSLDIR: %CommonProgramFiles%\SSL Reviewed-by: Andy Polyakov --- Configurations/windows-makefile.tmpl | 77 ++++++++++++++++++++++++---- INSTALL | 9 +++- NOTES.WIN | 27 +++++++++- 3 files changed, 101 insertions(+), 12 deletions(-) diff --git a/Configurations/windows-makefile.tmpl b/Configurations/windows-makefile.tmpl index 7a6a58f44b..cdc4436f5c 100644 --- a/Configurations/windows-makefile.tmpl +++ b/Configurations/windows-makefile.tmpl @@ -11,6 +11,19 @@ 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%'; + sub shlib { return () if $disabled{shared}; my $lib = shift; @@ -56,7 +69,7 @@ DEPS={- join(" ", map { (my $x = $_) =~ s|\.o$|$depext|; $x; } # 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 +86,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"); @@ -139,6 +145,10 @@ list-tests: @set PERL=$(PERL) @$(PERL) $(SRCDIR)\test\run_tests.pl list +install: install_sw install_ssldirs install_docs + +uninstall: uninstall_docs uninstall_sw + libclean: del /Q /F $(LIBS) $(SHLIBS) del lib.pdb @@ -155,6 +165,53 @@ clean: libclean depend: +# Install helper targets ############################################# + +install_sw: all install_dev install_engines install_runtime + +uninstall_sw: uninstall_runtime uninstall_engines uninstall_dev + +install_docs: + +uninstall_docs: + +install_ssldirs: + @$(PERL) $(SRCDIR)\util\mkdir-p.pl $(DESTDIR)$(OPENSSLDIR)\certs + @$(PERL) $(SRCDIR)\util\mkdir-p.pl $(DESTDIR)$(OPENSSLDIR)\private + +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)" + +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)" + +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" + @$(PERL) $(SRCDIR)\util\copy.pl $(PROGRAMS) "$(DESTDIR)$(INSTALLTOP)\bin" + +uninstall_runtime: + # Building targets ################################################### configdata.pm: {- $config{build_file_template} -} $(SRCDIR)\Configure diff --git a/INSTALL b/INSTALL index 36d93e7580..2377449dbb 100644 --- a/INSTALL +++ b/INSTALL @@ -49,6 +49,7 @@ $ perl Configure { VC-WIN32 | VC-WIN64A | VC-WIN64I | VC-CE } $ nmake $ nmake test + $ nmake install [If any of these steps fails, see section Installation in Detail below.] @@ -74,17 +75,23 @@ --------------------- There are several options to ./config (or ./Configure) to customize - the build: + the build (note that for Windows, the defaults for --prefix and + --openssldir depend in what configuration is used and what Windows + implementation OpenSSL is built on. More notes on this in NOTES.WIN): --prefix=DIR The top of the installation directory tree. Defaults are: Unix: /usr/local + Windows: C:\Program Files\OpenSSL + or C:\Program Files (x86)\OpenSSL OpenVMS: SYS$COMMON:[OPENSSL-'version'] --openssldir=DIR Directory for OpenSSL configuration files, and also the default certificate and key store. Defaults are: Unix: PREFIX/ssl (PREFIX is given by --prefix) + Windows: C:\Program Files\Common Files\SSL + or C:\Program Files (x86)\Common Files\SSL OpenVMS: SYS$COMMON:[SSL] --api=x.y.z Don't build with support for deprecated APIs below the diff --git a/NOTES.WIN b/NOTES.WIN index 969923914a..af924c85b2 100644 --- a/NOTES.WIN +++ b/NOTES.WIN @@ -22,6 +22,31 @@ supported. + Visual C++ (native Windows) + --------------------------- + + Installation directories + + The default installation directories are derived from environment + variables. + + For VC-WIN32, the following defaults are use: + + PREFIX: %ProgramFiles(86)%\OpenSSL + OPENSSLDIR: %CommonProgramFiles(86)%\SSL + + For VC-WIN32, the following defaults are use: + + PREFIX: %ProgramW6432%\OpenSSL + OPENSSLDIR: %CommonProgramW6432%\SSL + + Should those environment variables not exist (on a pure Win32 + installation for examples), these fallbacks are used: + + PREFIX: %ProgramFiles%\OpenSSL + OPENSSLDIR: %CommonProgramFiles%\SSL + + GNU C (Cygwin) -------------- @@ -54,7 +79,7 @@ with "conventional" Windows binaries you generate with/for MinGW. GNU C (MinGW/MSYS) - ------------- + ------------------ * Compiler and shell environment installation: -- 2.34.1