Explorar el Código

MinGW: embed manifests in EXEs

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@41457 15284696-431f-4ddb-bdfa-cd5b030d7da7
Glynn Clements hace 15 años
padre
commit
1eb22f2f58

+ 3 - 3
Makefile

@@ -20,6 +20,7 @@
 MODULE_TOPDIR = .
 
 include $(MODULE_TOPDIR)/include/Make/Dir.make
+include $(MODULE_TOPDIR)/include/Make/Compile.make
 
 DATE := $(shell date '+%d_%m_%Y')
 
@@ -79,11 +80,10 @@ default:
 	@if [ `wc -l < "$(ERRORLOG)"` -gt 8 ] ; then false ; else true ; fi
 
 manifests:
-ifneq ($(strip $(MINGW)),)
+ifeq ($(MANIFEST),external)
 	find $(ARCH_DISTDIR) -type f -name '*.exe' | \
 	while read file ; do \
-	    cmd=`basename "$$file" .exe` ; \
-	    sed "s/@CMD@/$$cmd/" mswindows/generic.manifest > "$$file".manifest ; \
+	    $(MAKE) "$$file".manifest ; \
 	done
 endif
 

+ 1 - 1
gem/Makefile

@@ -8,7 +8,7 @@ GEM = gem$(GRASS_VERSION_MAJOR)$(GRASS_VERSION_MINOR)
 default: $(ARCH_BINDIR)/$(GEM)$(EXE)
 
 $(ARCH_BINDIR)/$(GEM)$(EXE): $(ARCH_OBJS)
-	$(CC) $(LDFLAGS) $(EXTRA_LDFLAGS) -o $@ $(filter %.o,$^) $(FMODE_OBJ) $(LIBES) $(EXTRA_LIBS)
+	$(call linker_base,$(LINK),$(LDFLAGS) $(EXTRA_LDFLAGS),$(FMODE_OBJ) $(LIBES) $(EXTRA_LIBS))
 
 install: $(UNIX_BIN)/$(GEM)$(EXE)
 

+ 21 - 1
include/Make/Compile.make

@@ -4,7 +4,18 @@ NLS_CFLAGS = -DPACKAGE=\"$(PACKAGE)\"
 
 LINK = $(CC)
 
-linker_x = $(1) $(LDFLAGS) $(EXTRA_LDFLAGS) -o $@ $(filter %.o,$^) $(FMODE_OBJ) $(LIBES) $(EXTRA_LIBS) $(MATHLIB) $(XDRLIB)
+ifeq ($(MANIFEST),external)
+PRELINK=$(MAKE) $@.manifest
+else
+ifeq ($(MANIFEST),internal)
+PRELINK=$(MAKE) $(MANIFEST_OBJ)
+else
+PRELINK=:
+endif
+endif
+
+linker_base = $(PRELINK) && $(1) $(2) -o $@ $(filter %.o,$^) $(filter %.res,$^) $(3)
+linker_x = $(call linker_base,$(1),$(LDFLAGS) $(EXTRA_LDFLAGS),$(FMODE_OBJ) $(MANIFEST_OBJ) $(LIBES) $(EXTRA_LIBS) $(MATHLIB) $(XDRLIB))
 linker_c = $(call linker_x,$(CC))
 linker_cxx = $(call linker_x,$(CXX))
 linker = $(call linker_x,$(LINK))
@@ -36,4 +47,13 @@ $(OBJDIR)/%.o : %.cpp $(LOCAL_HEADERS) $(EXTRA_HEADERS) | $(OBJDIR)
 depend: $(C_SOURCES) $(CC_SOURCES) $(CPP_SOURCES)
 	-$(CC) -E -MM -MG $(ALL_CFLAGS) $^ | sed 's!^[0-9a-zA-Z_.-]*\.o:!$$(OBJDIR)/&!' > $(DEPFILE)
 
+%.manifest.res: %.manifest.rc %.exe.manifest
+	$(WINDRES) --input=$< --input-format=rc --output=$@ --output-format=coff
+
+%.manifest.rc:
+	sed 's/@CMD@/$(notdir $*)/' $(MODULE_TOPDIR)/mswindows/generic.manifest.rc > $@
+
+%.exe.manifest:
+	sed 's/@CMD@/$(notdir $*)/' $(MODULE_TOPDIR)/mswindows/generic.manifest > $@
+
 -include $(DEPFILE)

+ 1 - 1
include/Make/Etc.make

@@ -12,7 +12,7 @@ include $(MODULE_TOPDIR)/include/Make/Compile.make
 
 etc: $(ETC)/$(PGM)$(EXE) html
 
-$(ETC)/$(PGM)$(EXE): $(ARCH_OBJS) $(DEPENDENCIES) 
+$(ETC)/$(PGM)$(EXE): $(ARCH_OBJS) $(DEPENDENCIES)
 	$(call linker)
 
 .PHONY: etc

+ 3 - 0
include/Make/Grass.make

@@ -83,7 +83,10 @@ VECT_CFLAGS =  $(GDALCFLAGS) $(GEOSCFLAGS)
 
 # Object with _fmode which must be linked to each executable on Windows
 ifdef MINGW
+WINDRES = windres
 FMODE_OBJ = $(BASE_LIBDIR)/fmode.o
+MANIFEST_OBJ = $(OBJDIR)/$(basename $(notdir $@)).manifest.res
+MANIFEST = internal
 endif
 
 # lexical analyzer and default options

+ 2 - 2
lib/init/Makefile

@@ -126,13 +126,13 @@ $(ETC)/functions.sh: functions.sh
 	$(INSTALL_DATA) $< $@
 
 $(ETC)/echo$(EXE) $(ETC)/run$(EXE): $(ETC)/%$(EXE): $(OBJDIR)/%.o
-	$(CC) $(LDFLAGS) $< -o $@
+	$(call linker_base,$(LINK),$(LDFLAGS),)
 
 $(ETC)/clean_temp$(EXE) $(ETC)/lock$(EXE): $(ETC)/%$(EXE): $(OBJDIR)/%.o
 	$(call linker)
 
 $(ETC)/winlocale$(EXE): $(OBJDIR)/winlocale.o
-	$(CC) $(LDFLAGS) $(EXTRA_LDFLAGS) -o $@ $^ -lkernel32
+	$(call linker_base,$(LINK),$(LDFLAGS) $(EXTRA_LDFLAGS), -lkernel32)
 
 $(ETC)/VERSIONNUMBER:
 	rm -f $@

+ 3 - 5
lib/vector/diglib/Makefile

@@ -19,8 +19,6 @@ else
 	TESTFILE = test32.ok
 endif
 
-TEST = $(OBJDIR)/test$(EXE)
-
 default: lib
 	@echo "==============TEST============="
 	$(MAKE) test
@@ -28,11 +26,11 @@ default: lib
 test: $(OBJDIR)/test.tmp $(TESTFILE)
 	diff $(OBJDIR)/test.tmp $(TESTFILE)
 
-$(OBJDIR)/test.tmp: $(TEST)
+$(OBJDIR)/test.tmp: $(OBJDIR)/test$(EXE)
 	cd $(OBJDIR) && $(call run_grass,./test)
 
 #  Test portable read/write functions
-$(TEST):  $(OBJDIR)/test.o $(DIG2DEP)
+$(OBJDIR)/test$(EXE):  $(OBJDIR)/test.o $(DIG2DEP)
 	$(call linker)
 
-$(TEST): LIBES = $(DIG2LIB)
+$(OBJDIR)/test$(EXE): LIBES = $(DIG2LIB)

+ 2 - 0
mswindows/generic.manifest.rc

@@ -0,0 +1,2 @@
+#include "winuser.h"
+1 RT_MANIFEST "@CMD@.exe.manifest"

+ 1 - 1
tools/Makefile

@@ -11,4 +11,4 @@ $(TOOLSDIR)/mkhtml.py: mkhtml.py
 	$(INSTALL) $< $@
 
 $(TOOLSDIR)/g.echo$(EXE): $(OBJDIR)/g.echo.o
-	$(CC) $(LDFLAGS) $(EXTRA_LDFLAGS) -o $@ $^
+	$(call linker_base,$(LINK),$(LDFLAGS) $(EXTRA_LDFLAGS),)