Windows: When installing libraries and executables, install .pdb files as well

Reviewed-by: Rich Salz <rsalz@openssl.org>
diff --git a/CHANGES b/CHANGES
index ea4f515..b096ec6f0 100644
--- a/CHANGES
+++ b/CHANGES
@@ -4,6 +4,12 @@
 
  Changes between 1.0.2g and 1.1.0  [xx XXX xxxx]
 
+  *) With Windows Visual Studio builds, the .pdb files are installed
+     alongside the installed libraries and executables.  For a static
+     library installation, ossl_static.pdb is the associate compiler
+     generated .pdb file to be used when linking programs.
+     [Richard Levitte]
+
   *) Remove openssl.spec.  Packaging files belong with the packagers.
      [Richard Levitte]
 
diff --git a/Configurations/10-main.conf b/Configurations/10-main.conf
index c708f5e..f928d1f 100644
--- a/Configurations/10-main.conf
+++ b/Configurations/10-main.conf
@@ -1247,8 +1247,8 @@
         coutflag         => "/Fo",
         rc               => "rc",
         rcoutflag        => "/fo",
-        lib_cflags       => add("/Zi /Fdlib"),
-        dso_cflags       => "/Zi",
+        lib_cflags       => add("/Zi /Fdossl_static"),
+        dso_cflags       => "/Zi /Fddso",
         bin_cflags       => "/Zi /Fdapp",
         lflags           => add("/debug"),
         shared_ldflag    => "/dll",
diff --git a/Configurations/windows-makefile.tmpl b/Configurations/windows-makefile.tmpl
index 3be7f76..408a87f 100644
--- a/Configurations/windows-makefile.tmpl
+++ b/Configurations/windows-makefile.tmpl
@@ -60,8 +60,11 @@
 
 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}}) -}
 
@@ -165,7 +168,7 @@
 libclean:
 	$(PERL) -e "map { m/(.*)\.dll$$/; unlink glob """$$1.*"""; } @ARGV" $(SHLIBS)
 	-del /Q /F $(LIBS)
-	-del lib.pdb
+	-del ossl_static.pdb
 
 clean: libclean
 	-del /Q /F $(PROGRAMS) $(TESTPROGS) $(ENGINES) $(SCRIPTS)
@@ -204,6 +207,9 @@
 	@$(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:
 
@@ -213,6 +219,8 @@
 	@$(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:
 
@@ -222,7 +230,13 @@
 	@$(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"
+	@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"
 
 uninstall_runtime: