Subject: bug#17176: closed (Re: bug#17176: 24.3.50; Problem with manifests on cygw32 build with new binutils)

From: [email-masked] (GNU bug Tracking System)
Date: Thu, 03 Apr 2014 19:13:03 +0000

Your bug report

#17176: 24.3.50; Problem with manifests on cygw32 build with new binutils

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
17176: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=17176
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#17176: 24.3.50; Problem with manifests on cygw32 build with new binutils
From: Ken Brown <[email-masked]>
To: [email-masked]
Date: Thu, 03 Apr 2014 15:12:38 -0400
List-Id: <debbugs-submit.debbugs.gnu.org>

Version: 24.4

Patch applied as rev 116901 on the emacs-24 branch.

Subject: 24.3.50; Problem with manifests on cygw32 build with new binutils
From: Ken Brown <[email-masked]>
To: [email-masked]
Date: Wed, 02 Apr 2014 15:07:23 -0400
List-Id: <debbugs-submit.debbugs.gnu.org>

binutils has changed so that, on Cygwin, executables have a manifest 
built in by default.  A consequence is that the cygw32 build of emacs 
produces an emacs.exe which, after it is stripped, won't run:

$ ./emacs-stripped.exe
-bash: ./emacs-stripped.exe: cannot execute binary file

This is presumably caused by the fact that the cygw32 build already 
incorporates a manifest via nt/emacs.res.  The following patch fixes 
this and does some related manifest-related cleanup:

=== modified file 'configure.ac'
--- configure.ac        2014-03-27 21:29:32 +0000
+++ configure.ac        2014-04-02 17:47:41 +0000
@@ -1834,11 +1834,6 @@
    W32_OBJ="w32fns.o w32menu.o w32reg.o w32font.o w32term.o"
    W32_OBJ="$W32_OBJ w32xfns.o w32select.o w32uniscribe.o"
    EMACSRES="emacs.res"
-  case "$canonical" in
-    x86_64-*-*) EMACS_MANIFEST="emacs-x64.manifest" ;;
-    *) EMACS_MANIFEST="emacs-x86.manifest" ;;
-  esac
-  UPDATE_MANIFEST=update-game-score.exe.manifest
    if test "${opsys}" = "cygwin"; then
      W32_LIBS="$W32_LIBS -lkernel32 -luser32 -lgdi32 -lole32 -lcomdlg32"
      W32_LIBS="$W32_LIBS -lusp10 -lcomctl32 -lwinspool"
@@ -1846,6 +1841,11 @@
      # the rc file), not a linker script.
      W32_RES_LINK="-Wl,emacs.res"
    else
+    case "$canonical" in
+      x86_64-*-*) EMACS_MANIFEST="emacs-x64.manifest" ;;
+      *) EMACS_MANIFEST="emacs-x86.manifest" ;;
+    esac
+    UPDATE_MANIFEST=update-game-score.exe.manifest
      W32_OBJ="$W32_OBJ w32.o w32console.o w32heap.o w32inevt.o w32proc.o"
      W32_LIBS="$W32_LIBS -lwinmm -lgdi32 -lcomdlg32"
      W32_LIBS="$W32_LIBS -lmpr -lwinspool -lole32 -lcomctl32 -lusp10"

=== modified file 'nt/emacs.rc'
--- nt/emacs.rc 2014-03-21 10:12:53 +0000
+++ nt/emacs.rc 2014-04-02 18:30:53 +0000
@@ -1,10 +1,12 @@
  Emacs ICON   icons/emacs.ico
  32649 CURSOR icons/hand.cur
-#if defined (WIN64) || defined (__x86_64__)
+#ifndef __CYGWIN__
+#ifdef WIN64
  1 24 "emacs-x64.manifest"
  #else
  1 24 "emacs-x86.manifest"
  #endif
+#endif

  #ifndef VS_VERSION_INFO
  #define VS_VERSION_INFO 1

=== modified file 'src/Makefile.in'
--- src/Makefile.in     2014-01-12 17:27:17 +0000
+++ src/Makefile.in     2014-04-02 18:29:50 +0000
@@ -259,7 +259,7 @@

  ## emacs.res if HAVE_W32
  EMACSRES = @EMACSRES@
-## emacs-*.manifest if HAVE_W32
+## emacs-*.manifest if WINDOWSNT
  EMACS_MANIFEST = @EMACS_MANIFEST@
  ## If HAVE_W32, compiler arguments for including
  ## the resource file in the binary.

OK to apply to the emacs-24 branch?

Ken