Subject: Re: bug#12993: Wrong icon for Cygw32-Emacs

From: Eli Zaretskii <[email-masked]>
Date: Mon, 10 Dec 2012 16:08:03 +0200

> Date: Mon, 10 Dec 2012 15:40:18 +0200
> From: Eli Zaretskii <[email-masked]>
> Cc: [email-masked], [email-masked]
> 
> > I've pushed a change to the emacs-24 branch that should resolve the
> > problem. We weren't compiling Windows resources into the cygw32 Emacs
> > binary.
> 
> Why are such changes committed to the release branch?  This is a minor
> feature, certainly not a bugfix, while the changes are definitely
> non-trivial.  Please don't do that without discussion.

The more I look at the changes, the less I like them.  E.g., how do we
know that the various Windows utilities that access the resources will
DTRT with forward slashes?  Any references on the subject?

And what is this hunk about:

    === modified file 'src/unexw32.c'
    --- a/src/unexw32.c	2012-10-17 19:02:44 +0000
    +++ b/src/unexw32.c	2012-12-10 07:11:21 +0000
    @@ -85,13 +85,6 @@

     PIMAGE_SECTION_HEADER heap_section;

    -#ifdef HAVE_NTGUI
    -extern HINSTANCE hinst;
    -HINSTANCE hprevinst = NULL;
    -LPSTR lpCmdLine = "";
    -int nCmdShow = 0;
    -#endif /* HAVE_NTGUI */
    -
     /* Startup code for running on NT.  When we are running as the dumped
	version, we need to bootstrap our heap and .bss section into our
	address space before we can actually hand off control to the startup
    @@ -121,15 +114,6 @@
       /* Prevent Emacs from being locked up (eg. in batch mode) when
	  accessing devices that aren't mounted (eg. removable media drives).  */
       SetErrorMode (SEM_FAILCRITICALERRORS);
    -
    -  /* Invoke the NT CRT startup routine now that our housecleaning
    -     is finished.  */
    -#ifdef HAVE_NTGUI
    -  /* determine WinMain args like crt0.c does */
    -  hinst = GetModuleHandle (NULL);
    -  lpCmdLine = GetCommandLine ();
    -  nCmdShow = SW_SHOWDEFAULT;
    -#endif
       mainCRTStartup ();
     }

What do you know about lpCmdLine and nCmdShow, and "what crt0.c does"
with them, to be sure they can be removed?

And this hunk breaks the MS-DOS build:

    -temacs$(EXEEXT): $(START_FILES) stamp-oldxmenu $(obj) $(otherobj) $(lib)/libgnu.a
    +temacs$(EXEEXT): $(START_FILES) stamp-oldxmenu $(obj) $(otherobj) \
    +	         $(lib)/libgnu.a $(W32_RES)
	    $(CC) $(LD_FIRSTFLAG) $(ALL_CFLAGS) $(TEMACS_LDFLAGS) $(TEMACS_LDFLAGS2) \
    -	  -o temacs $(START_FILES) $(obj) $(otherobj) $(lib)/libgnu.a $(LIBES)
    +	  -o temacs $(START_FILES) $(obj) $(otherobj) $(lib)/libgnu.a $(LIBES) \
    +	  $(W32_RES_LINK)
	    test "$(CANNOT_DUMP)" = "yes" || \
	      test "X$(PAXCTL)" = X || $(PAXCTL) -r temacs$(EXEEXT)

(because W32_RES will be expanded to @W32_RES@ and W32_RES_LINK to
@W32_RES_LINK@, and GCC will barf).

Any reasons why not revert this changeset and apply it to the trunk
instead?