Windows: take care of manifest files
authorRichard Levitte <levitte@openssl.org>
Thu, 14 Jul 2016 07:23:36 +0000 (09:23 +0200)
committerRichard Levitte <levitte@openssl.org>
Thu, 14 Jul 2016 07:27:07 +0000 (09:27 +0200)
The easiest way to take care of manifest files is to integrate them
into the associated binary (.exe or .dll).  MT (the Manifest Tool) is
the utility to use for this.

Reviewed-by: Rich Salz <rsalz@openssl.org>
Configurations/00-base-templates.conf
Configurations/windows-makefile.tmpl

index 515cf00e20af867a67ee6deeeeffd40599e32c47..9cd7aabb81d7c3ca3affb521dd43d5894a654d10 100644 (file)
         ar              => "lib",
         arflags         => "/nologo",
         aroutflag       => "/out:",
+        mt              => "mt",
+        mtflags         => "-nologo",
+        mtinflag        => "-manifest ",
+        mtoutflag       => "-outputresource:",
 
         build_file      => "makefile",
         build_scheme    => [ "unified", "windows" ],
index c9a7a26f040628bcc4e2ffbc95cfc0dbc4b1614a..bb2c6bdf82d814411d16faad579a6af26175a47d 100644 (file)
@@ -157,6 +157,11 @@ AR={- $target{ar} -}
 ARFLAGS= {- $target{arflags} -}
 AROUTFLAG={- $target{aroutflag} || "/out:" -}
 
+MT={- $target{mt} -}
+MTFLAGS= {- $target{mtflags} -}
+MTINFLAG={- $target{mtinflag} || "-manifest " -}
+MTOUTFLAG={- $target{mtoutflag} || "-outputresource:" -}
+
 AS={- $target{as} -}
 ASFLAGS={- $target{asflags} -}
 ASOUTFLAG={- $target{asoutflag} -}
@@ -460,10 +465,13 @@ $target: $deps "$ordinalsfile" "$mkdef_pl"
        DEL $shlib.def.tmp
        "\$(PERL)" "$mkrc_pl" $shlib$shlibext > $shlib.rc
        \$(RC) \$(RCOUTFLAG)$shlib.res $shlib.rc
+       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)
 <<
+       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
        COPY $shlib$shlibext apps
@@ -482,6 +490,7 @@ EOF
                     compute_lib_depends(@{$args{deps}}));
      return <<"EOF";
 $dso$dsoext: $deps
+       IF EXIST $dso$dsoext.manifest DEL /F /Q $dso$dsoext.manifest
        \$(LD) \$(LDFLAGS) \$(DSO_LDFLAGS) \$(LDOUTFLAG)$dso$dsoext /def:<< @<<
 LIBRARY         $dso_n
 EXPORTS
@@ -490,6 +499,8 @@ EXPORTS
 <<
 $objs$linklibs \$(EX_LIBS)
 <<
+       IF EXIST $dso$dsoext.manifest \\
+          \$(MT) \$(MTFLAGS) \$(MTINFLAG) $dso$dsoext.manifest \$(MTOUTFLAG)$dso$dsoext
 EOF
  }
  sub obj2lib {
@@ -520,9 +531,12 @@ EOF
                     compute_lib_depends(@{$args{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)
 <<
+       IF EXIST $bin$exeext.manifest \\
+          \$(MT) \$(MTFLAGS) \$(MTINFLAG) $bin$exeext.manifest \$(MTOUTFLAG)$bin$exeext
 EOF
   }
   sub in2script {