Author: rblasch
Date: Thu Aug 14 13:40:45 2008
New Revision: 30234

Modified:
   trunk/config/gen/makefiles/root.in
   trunk/tools/dev/pbc_to_exe_gen.pl

Log:
[win32] Embed Microsoft Application Manifest if available.

In recent versions, Microsoft added a descriptor to spell out dependencies.
These should be embedded into the executable.


Modified: trunk/config/gen/makefiles/root.in
==============================================================================
--- trunk/config/gen/makefiles/root.in  (original)
+++ trunk/config/gen/makefiles/root.in  Thu Aug 14 13:40:45 2008
@@ -777,7 +777,8 @@
     $(MINIPARROT)
        $(LINK) @[EMAIL PROTECTED]@ \
        $(SRC_DIR)/main$(O) $(SRC_DIR)/parrot_config$(O) \
-       @rpath_blib@ $(ALL_PARROT_LIBS) $(LINKFLAGS) $(LINK_DYNAMIC) \
+       @rpath_blib@ $(ALL_PARROT_LIBS) $(LINKFLAGS) $(LINK_DYNAMIC)
+#CONDITIONED_LINE(win32):      if exist [EMAIL PROTECTED] mt.exe -manifest 
[EMAIL PROTECTED] -outputresource:$@;1
 
 pbc_to_exe.pir : $(PARROT) tools/dev/pbc_to_exe_gen.pl
        $(PERL) tools/dev/pbc_to_exe_gen.pl \
@@ -806,6 +807,7 @@
     lib/Parrot/OpLib/core.pm $(SRC_DIR)/null_config$(O)
        $(LINK) @[EMAIL PROTECTED]@ $(SRC_DIR)/main$(O) 
$(SRC_DIR)/null_config$(O) \
        @rpath_blib@ $(ALL_PARROT_LIBS) $(LINKFLAGS)
+#CONDITIONED_LINE(win32):      if exist [EMAIL PROTECTED] mt.exe -manifest 
[EMAIL PROTECTED] -outputresource:$@;1
 
 $(INSTALLABLEPARROT) : $(SRC_DIR)/main$(O) $(GEN_HEADERS) $(LIBPARROT) \
     lib/Parrot/OpLib/core.pm $(SRC_DIR)/install_config$(O) \
@@ -813,6 +815,7 @@
        $(LINK) @[EMAIL PROTECTED]@ \
     $(SRC_DIR)/main$(O) \
     $(ALL_PARROT_LIBS) $(LINKFLAGS) $(SRC_DIR)/install_config$(O)
+#CONDITIONED_LINE(win32):      if exist [EMAIL PROTECTED] mt.exe -manifest 
[EMAIL PROTECTED] -outputresource:$@;1
 
 $(INC_DIR)/parrot.h : $(INC_DIR)/pbcversion.h $(INC_DIR)/vtable.h
 
@@ -876,6 +879,7 @@
 $(LIBPARROT_STATIC) : $(O_FILES)
        $(MKPATH) @blib_dir@
        $(AR_CR) @[EMAIL PROTECTED]@ @ar_extra@ $(O_FILES)
+#CONDITIONED_LINE(win32):      if exist [EMAIL PROTECTED] mt.exe -manifest 
[EMAIL PROTECTED] -outputresource:$@;2
        $(RANLIB) $@
 
 $(LIBPARROT_SHARED) : $(O_FILES)
@@ -883,6 +887,7 @@
        $(LD) $(LD_SHARE_FLAGS) $(LDFLAGS) @[EMAIL PROTECTED]@ 
@libparrot_soname@ \
 #CONDITIONED_LINE(cygchkdll):          
-Wl,--out-implib=blib/lib/libparrot.dll.a \
                $(O_FILES) $(C_LIBS) $(ICU_SHARED)
+#CONDITIONED_LINE(win32):      if exist [EMAIL PROTECTED] mt.exe -manifest 
[EMAIL PROTECTED] -outputresource:$@;2
 #CONDITIONED_LINE(libparrot_shared_alias):     ( cd @blib_dir@ ; ln -sf 
@libparrot_shared@ @libparrot_shared_alias@ )
 
 
@@ -896,11 +901,13 @@
        $(LINK) @[EMAIL PROTECTED]@ \
     $(SRC_DIR)/parrot_debugger$(O) \
     @rpath_blib@ $(ALL_PARROT_LIBS) $(LINKFLAGS)
+#CONDITIONED_LINE(win32):      if exist [EMAIL PROTECTED] mt.exe -manifest 
[EMAIL PROTECTED] -outputresource:$@;1
 
 $(INSTALLABLEPDB) : $(SRC_DIR)/parrot_debugger$(O) $(LIBPARROT)
        $(LINK) @[EMAIL PROTECTED]@ \
     $(SRC_DIR)/parrot_debugger$(O) \
     $(ALL_PARROT_LIBS) $(LINKFLAGS)
+#CONDITIONED_LINE(win32):      if exist [EMAIL PROTECTED] mt.exe -manifest 
[EMAIL PROTECTED] -outputresource:$@;1
 
 #
 # Parrot Disassembler
@@ -912,11 +919,13 @@
        $(LINK) @[EMAIL PROTECTED]@ \
     $(SRC_DIR)/pbc_disassemble$(O) \
     @rpath_blib@ $(ALL_PARROT_LIBS) $(LINKFLAGS)
+#CONDITIONED_LINE(win32):      if exist [EMAIL PROTECTED] mt.exe -manifest 
[EMAIL PROTECTED] -outputresource:$@;1
 
 $(INSTALLABLEDIS) : $(SRC_DIR)/pbc_disassemble$(O) $(LIBPARROT)
        $(LINK) @[EMAIL PROTECTED]@ \
     $(SRC_DIR)/pbc_disassemble$(O) \
     $(ALL_PARROT_LIBS) $(LINKFLAGS)
+#CONDITIONED_LINE(win32):      if exist [EMAIL PROTECTED] mt.exe -manifest 
[EMAIL PROTECTED] -outputresource:$@;1
 
 #
 # Parrot Dump
@@ -926,6 +935,7 @@
        $(LINK) @[EMAIL PROTECTED]@ \
     $(SRC_DIR)/pdump$(O) \
     $(SRC_DIR)/packdump$(O) @rpath_blib@ $(ALL_PARROT_LIBS) $(LINKFLAGS)
+#CONDITIONED_LINE(win32):      if exist [EMAIL PROTECTED] mt.exe -manifest 
[EMAIL PROTECTED] -outputresource:$@;1
 
 $(SRC_DIR)/pdump$(O) : $(GEN_HEADERS)
 
@@ -933,6 +943,7 @@
        $(LINK) @[EMAIL PROTECTED]@ \
     $(SRC_DIR)/pdump$(O) \
     $(SRC_DIR)/packdump$(O) $(ALL_PARROT_LIBS) $(LINKFLAGS)
+#CONDITIONED_LINE(win32):      if exist [EMAIL PROTECTED] mt.exe -manifest 
[EMAIL PROTECTED] -outputresource:$@;1
 
 
 # pbc_info
@@ -940,6 +951,7 @@
        $(LINK) @[EMAIL PROTECTED]@ \
     $(SRC_DIR)/pbc_info$(O) \
     @rpath_blib@ $(ALL_PARROT_LIBS) $(LINKFLAGS)
+#CONDITIONED_LINE(win32):      if exist [EMAIL PROTECTED] mt.exe -manifest 
[EMAIL PROTECTED] -outputresource:$@;1
 
 $(SRC_DIR)/pbc_info$(O) : $(GEN_HEADERS)
 
@@ -947,6 +959,7 @@
        $(LINK) @[EMAIL PROTECTED]@ \
     $(SRC_DIR)/pbc_info$(O) \
     $(ALL_PARROT_LIBS) $(LINKFLAGS)
+#CONDITIONED_LINE(win32):      if exist [EMAIL PROTECTED] mt.exe -manifest 
[EMAIL PROTECTED] -outputresource:$@;1
 
 #
 # Parrot Bytecode File Merger
@@ -956,14 +969,15 @@
        $(LINK) @[EMAIL PROTECTED]@ \
     $(SRC_DIR)/pbc_merge$(O) \
     $(SRC_DIR)/parrot_config$(O) \
-    $(SRC_DIR)/string_primitives$(O) \
     @rpath_blib@ $(ALL_PARROT_LIBS) $(LINK_DYNAMIC) $(LINKFLAGS)
+#CONDITIONED_LINE(win32):      if exist [EMAIL PROTECTED] mt.exe -manifest 
[EMAIL PROTECTED] -outputresource:$@;1
 
 $(INSTALLABLEPBCMERGE) : $(SRC_DIR)/pbc_merge$(O) $(LIBPARROT)
        $(LINK) @[EMAIL PROTECTED]@ \
     $(SRC_DIR)/pbc_merge$(O) \
     $(SRC_DIR)/install_config$(O) \
     $(ALL_PARROT_LIBS) $(LINKFLAGS)
+#CONDITIONED_LINE(win32):      if exist [EMAIL PROTECTED] mt.exe -manifest 
[EMAIL PROTECTED] -outputresource:$@;1
 
 
 ###############################################################################

Modified: trunk/tools/dev/pbc_to_exe_gen.pl
==============================================================================
--- trunk/tools/dev/pbc_to_exe_gen.pl   (original)
+++ trunk/tools/dev/pbc_to_exe_gen.pl   Thu Aug 14 13:40:45 2008
@@ -434,10 +434,36 @@
     say link
     .local int status
     status = spawnw link
-    unless status goto linked
+    unless status goto check_manifest
 
     die "linking failed"
 
+  check_manifest:
+    # Check if there is a MSVC app manifest
+    .local pmc file 
+    file = new 'File'
+    .local string manifest_file_name
+    manifest_file_name  = exefile
+    manifest_file_name .= '.manifest'
+    .local pmc manifest_exists
+    manifest_exists = file.'exists'( manifest_file_name )
+    unless manifest_exists goto linked 
+
+  embed_manifest:
+    # MSVC app manifest exists, embed it
+    .local string embed_manifest
+    embed_manifest  = 'mt.exe -manifest '
+    embed_manifest .= manifest_file_name
+    embed_manifest .= ' -outputresource:'
+    embed_manifest .= exefile
+    embed_manifest .= ';1'
+
+    say embed_manifest
+    .local int embed_manifest_status
+    embed_manifest_status = spawnw embed_manifest
+    unless embed_manifest_status goto linked 
+    die 'manifest embedding failed'
+ 
   linked:
     print "Linked: "
     say exefile

Reply via email to