all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Joe Buehler <jbuehler@hekimian.com>
Subject: Re: [PATCHES] patches for compiling GNU emacs 21.2 under Cygwin
Date: Tue, 03 Dec 2002 09:14:05 -0500	[thread overview]
Message-ID: <asie31$nnk$1@main.gmane.org> (raw)
In-Reply-To: <7263-Wed27Nov2002204304+0200-eliz@is.elta.co.il>

Eli Zaretskii wrote:

> Please provide ChangeLog entries for each change.

I'll check the web for instructions on how to do that.

> Please also explain the changes the reason for which is not
> self-evident.  For example, in this change to Makefile.in:
> 
>  -	   (cd $(docdir); chmod a+r DOC*; rm DOC); \
>  +	   (cd ${docdir}; chmod a+r DOC*; if test "`echo DOC-*`" != "DOC-*"; \
>  +		then rm DOC; fi); \
> 
> why is it necessary to add this test?  Is there something special in
> the way the Cygwin port of Bash expands wildcards?

There are bugs in emacs (both build/install and runtime) if you cannot
undump.  I assume that CANNOT_UNDUMP has not been tested in a while, since
the bugs should show up regardless of platform.

The above fix is because no DOC-* file is installed by "make install"
when CANNOT_UNDUMP.  Only a DOC file is, and that promptly gets removed
without the above patch.

> The purpose of this change is also not clear enough:
> 
>  +#ifdef CANNOT_DUMP
>  +  FRAME_FOREGROUND_PIXEL(f) = FACE_TTY_DEFAULT_FG_COLOR;
>  +  FRAME_BACKGROUND_PIXEL(f) = FACE_TTY_DEFAULT_BG_COLOR;
>  +#endif
> 
> What is special about systems that cannot dump that requires this
> fragment?

If you look at the code, you will see that there is no code path that
initializes the frame foreground and background pixels when CANNOT_UNDUMP
is in effect.  So you end up with black on black, which is of course
unreadable.  It took me a while to find this, but that's what is going on.

>  -  (if (memq system-type '(hpux dgux usg-unix-v irix linux gnu/linux))
>  +  (if (memq system-type '(hpux dgux usg-unix-v irix linux gnu/linux cygwin))
> 
> Since we are introducing a new value for system-type, it should be
> documented in the ELisp manual, I think.

Are you asking for a patch from me or is this a note to others who work
on that?

> In this change:
> 
>  +#ifdef CYGWIN
>  +#define _CYGWIN_EXE_SUFFIX .exe
>  +#else
>  +#define _CYGWIN_EXE_SUFFIX
>  +#endif
>  +
>   install: ${archlibdir}
> 	 @echo
> 	 @echo "Installing utilities for users to run."
> 	 for file in ${INSTALLABLES} ; do \
> 	   $(INSTALL_PROGRAM) $(INSTALL_STRIP) $${file} ${bindir}/$${file} ; \
>  -	  chmod a+rx ${bindir}/$${file}; \
>  +	  chmod a+rx ${bindir}/$${file}_CYGWIN_EXE_SUFFIX; \
> 	 done
> 	 for file in ${INSTALLABLE_SCRIPTS} ; do \
> 	   $(INSTALL_PROGRAM) ${srcdir}/$${file} ${bindir}/$${file} ; \
> 	   chmod a+rx ${bindir}/$${file}; \
> 	 done
> 
> I don't really understand why is it necessary to introduce
> _CYGWIN_EXE_SUFFIX.  On Windows, there's no need to run "chmod a+rx"
> on *.exe programs.  If the issue is that there's no etags, say, but
> etags.exe, and that chmod will print an error message if run on a
> non-existent file, why not test if $$(file) exists and only run chmod
> if it does?  Isn't that a simpler and cleaner solution?

Whatever solution you like is fine with me -- the problem is that the
file does need execute permission, and it is not being created with it.
Cygwin maps between Windows ACLs and UNIX permissions bits -- the chmod
command actually does do something useful here -- it is changing Windows
permissions to settings that are seen as "a+rx" under Cygwin.

The .exe suffix is necessary because binaries on Win9x machines require
the suffix to run -- the Cygwin port of emacs does indeed run non-X11
or X11 under Windows 9x!

>  --- src/Makefile.in	2001-12-17 09:09:32.000000000 -0500
>  +++ src/Makefile.in	2002-08-02 11:59:25.000000000 -0400
>  @@ -836,7 +836,11 @@
>   emacs: temacs ${etc}DOC ${lisp}
>   #ifdef CANNOT_DUMP
> 	 rm -f emacs
>  +#ifdef CYGWIN
>  +	ln temacs.exe emacs
>  +#else
> 	 ln temacs emacs
>  +#endif
> 
> I think it's cleaner to introduce the EXE variable here, make it
> empty on all platforms except Cygwin, and then use it everywhere,
> instead of adding many #ifdef's.

Whatever you want to do, go for it.  I submitted the patches with
the expectation that they would provide the information necessary to
get an official Cygwin port.  I don't care how they are changed to
conform to the official way of doing things.

>  +/* let's not be adventurous */
>  +#define SYSTEM_MALLOC 1
> 
> Why is that a good idea?  Isn't it better to use gmalloc and ralloc?
> That should make an Emacs whose memory footprint does not grow that
> much, I think.  What is so ``adventurous'' in using that?

Cygwin has its complexities in the area of memory usage.  I did not
use emacs malloc to avoid one more source of headaches -- it was unclear
at the beginning that I would ever get the thing to work, because Cygwin's
fork() is very sensitive to where things reside in memory.  I will try
it now that there is a stable emacs Cygwin port, and let you know what happens.

> Also, what about many "#ifdef WINDOWSNT" and "#ifdef DOS_NT" that we
> have in the sources--are none of them appropriate for the Cygwin
> build?  For example, what about setting system_eol_type (on coding.c)
> to CODING_CR_LF?  Or about the part of editfns.c that gets the user
> id from the enviroment variable USERNAME?  Or support for drive
> letters in file names in fileio.c?  Isn't it better not to lose these
> and other Windows-specific features?

Drive letters in file names is one thing that is currently missing that
would be really nice to have.  The problem is one of time -- it would take
time to run through all the DOS and Windows #ifdefs, and I have already
spent a lot of my company's time on this port.  And -- I have what I need
for the moment -- an X11 emacs that runs on remote NT machines in the
Cygwin environment.  The #ifdefs cannot be turned on and expected to just work,
because Cygwin is more like a UNIX environment than a Windows environment,
and all sorts of things will break or just do the wrong thing.

> I think Someone(tm) should also go through all the *.el files, look
> for code that's specific to system-type windows-nt, and see which ones
> should also work for system-type cygwin.

I think I looked for system-type things when the chown problems were fixed,
but I will look again.

By the way, it may not be clear, but this emace port is currently an official
Cygwin package that is part of their download setup, and a number of people
are using it.  It may not be perfect in the eyes of the emacs hackers,
but there haven't been any bugs reported in the last couple months.

Joe Buehler

  parent reply	other threads:[~2002-12-03 14:14 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-09-26 19:10 [PATCHES] patches for compiling GNU emacs 21.2 under Cygwin Joe Buehler
2002-11-27 17:43 ` Eli Zaretskii
2002-11-28  8:01   ` Roman Belenov
2002-11-28 17:13     ` Eli Zaretskii
2002-11-29  5:57       ` Roman Belenov
2002-12-02 16:13   ` Stefan Monnier
2002-12-02 18:18     ` Eli Zaretskii
2002-12-02 19:21       ` Stefan Monnier
2002-12-02 20:36       ` Jason Rumney
2002-12-03  5:50         ` Eli Zaretskii
2002-12-03 14:17         ` Joe Buehler
2002-12-03 14:14   ` Joe Buehler [this message]
2002-12-03 16:37     ` Joe Buehler
2002-12-03 18:24       ` Eli Zaretskii
2002-12-03 18:21     ` Eli Zaretskii
2002-12-04  7:39       ` Roman Belenov
2002-12-03 23:16     ` Kim F. Storm
2002-12-04 11:07     ` Richard Stallman
2002-12-04 11:07     ` Richard Stallman
2002-12-04 14:25       ` Eli Zaretskii
2002-12-04 18:39         ` Joe Buehler
2002-12-05  6:02           ` Eli Zaretskii
2002-12-06 13:31             ` Richard Stallman
2002-12-07 19:04               ` Eli Zaretskii
     [not found] <E18LD00-0004Ov-00@fencepost.gnu.org>
2002-12-09  6:12 ` Eli Zaretskii
2002-12-09 14:57   ` Joe Buehler

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='asie31$nnk$1@main.gmane.org' \
    --to=jbuehler@hekimian.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.