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