Mail Archives: cygwin/2002/08/06/10:49:23
--------------000903000601040200030105
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
Here is the second alpha version of a script to compile GNU emacs 21.2
under Cygwin.
The X11 version of emacs works fine.
This second alpha version fixes the non-X11 version of emacs somewhat.
Input is processed now, however there is still a serious problem --
control-G will kill the xterm (or is it emacs?) after a shell
process buffer is started.
There were problems reported when Xaw3d was installed, so deinstall
that before you try building this.
Joe Buehler
--------------000903000601040200030105
Content-Type: text/plain;
name="emacs-21.2.install"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="emacs-21.2.install"
#!/bin/bash
#
# script to build and install GNU emacs under Cygwin
#
# NOTE: The Windows "rebase" utility must be findable in PATH.
#
VERSION=21.2
DESTDIR=/usr/local/gnu-emacs
# where to put rebased dlls (until Cygwin fixes this)
REBASEDIR="$DESTDIR"/rebased-dlls
# This is for use by emacs.exe once it is built.
export PATH="$REBASEDIR:$PATH"
#
# Automatic rebasing of dlls used by emacs.exe causes problems because
# emacs wants the heap in the range 0x00000000 - 0x0fffffff because of
# the way that it represents pointers internally.
#
# So we make copies of the dlls that collide and rebase them for emacs
# to use. Once the official copies of these libraries are fixed, this
# hack can go away.
#
rebase_dlls_used_by_emacs()
{
if [ ! -d "$DESTDIR" ]; then
mkdir -p "$DESTDIR" &&
chmod 755 "$DESTDIR"
fi &&
rm -fr "$REBASEDIR" &&
mkdir -p "$REBASEDIR" &&
chmod 755 "$REBASEDIR" &&
while read DLL BASE NEWBASE; do
echo "*** rebasing $DLL"
cp -p "$DLL" "$REBASEDIR" &&
(
cd "$REBASEDIR" &&
rebase -b $NEWBASE $(basename "$DLL")
)
done <<-\!
/usr/X11R6/bin/libICE.dll 10001000 0x60700000
/usr/X11R6/bin/libSM.dll 00331000 0x60800000
/usr/X11R6/bin/libX11.dll 00911000 0x60900000
/usr/X11R6/bin/libXext.dll 009f1000 0x60a00000
/usr/X11R6/bin/libXpm.dll 00a11000 0x60b00000
/usr/bin/cygjpeg6b.dll 00a31000 0x60c00000
/usr/bin/cygpng12.dll 00a61000 0x60d00000
/usr/bin/cygz.dll 00a91000 0x60e00000
/usr/bin/cygtiff3.dll 00ab1000 0x60f00000
!
}
#
# patches to GNU emacs source required for Cygwin build
#
patch_emacs_source_for_cygwin()
{
patch -p0 -N <<-\!
diff -u -r -N -x '*~*' configure configure
--- configure 2002-03-15 07:46:09.000000000 -0500
+++ configure 2002-08-01 14:10:03.000000000 -0400
@@ -1628,6 +1628,7 @@
i[3456]86-*-* )
machine=intel386
case "${canonical}" in
+ *-cygwin ) opsys=cygwin ;;
*-lynxos* ) opsys=lynxos ;;
*-isc1.* | *-isc2.[01]* ) opsys=386-ix ;;
*-isc2.2* ) opsys=isc2-2 ;;
diff -u -r -N -x '*~*' lib-src/Makefile.in lib-src/Makefile.in
--- lib-src/Makefile.in 2001-10-18 20:31:27.000000000 -0400
+++ lib-src/Makefile.in 2002-08-02 12:22:31.000000000 -0400
@@ -297,7 +297,7 @@
@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}.exe; \
done
for file in ${INSTALLABLE_SCRIPTS} ; do \
$(INSTALL_PROGRAM) ${srcdir}/$${file} ${bindir}/$${file} ; \
diff -u -r -N -x '*~*' src/Makefile.in src/Makefile.in
--- 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,7 @@
emacs: temacs ${etc}DOC ${lisp}
#ifdef CANNOT_DUMP
rm -f emacs
- ln temacs emacs
+ ln temacs.exe emacs
#else
#ifdef HAVE_SHM
LC_ALL=C ./temacs -nl -batch -l loadup dump
@@ -1231,7 +1231,7 @@
bootstrap-emacs: bootstrap-temacs bootstrap-doc
#ifdef CANNOT_DUMP
- ln temacs bootstrap-emacs
+ ln temacs.exe bootstrap-emacs
#else
#ifdef HAVE_SHM
./temacs -nl -batch -l loadup bootstrap
diff -u -r -N -x '*~*' src/fileio.c src/fileio.c
--- src/fileio.c 2002-03-13 14:52:18.000000000 -0500
+++ src/fileio.c 2002-08-01 15:34:10.000000000 -0400
@@ -23,7 +23,7 @@
#include <config.h>
-#if defined (USG5) || defined (BSD_SYSTEM) || defined (LINUX)
+#if defined (USG5) || defined (BSD_SYSTEM) || defined (LINUX) || defined (CYGWIN)
#include <fcntl.h>
#endif
diff -u -r -N -x '*~*' src/keyboard.c src/keyboard.c
--- src/keyboard.c 2002-01-28 11:33:19.000000000 -0500
+++ src/keyboard.c 2002-08-01 15:24:01.000000000 -0400
@@ -6163,7 +6163,7 @@
if (n_to_read > sizeof cbuf)
n_to_read = sizeof cbuf;
#else /* no FIONREAD */
-#if defined (USG) || defined (DGUX)
+#if defined (USG) || defined (DGUX) || defined(CYGWIN)
/* Read some input if available, but don't wait. */
n_to_read = sizeof cbuf;
fcntl (input_fd, F_SETFL, O_NDELAY);
@@ -6220,9 +6220,9 @@
);
#ifndef FIONREAD
-#if defined (USG) || defined (DGUX)
+#if defined (USG) || defined (DGUX) || defined (CYGWIN)
fcntl (input_fd, F_SETFL, 0);
-#endif /* USG or DGUX */
+#endif /* USG or DGUX or CYGWIN */
#endif /* no FIONREAD */
for (i = 0; i < nread; i++)
{
diff -u -r -N -x '*~*' src/mem-limits.h src/mem-limits.h
--- src/mem-limits.h 2000-03-08 13:49:46.000000000 -0500
+++ src/mem-limits.h 2002-08-01 16:54:47.000000000 -0400
@@ -45,6 +45,10 @@
#define BSD4_2
#endif
+#ifdef CYGWIN
+#define BSD4_2
+#endif
+
#ifndef BSD4_2
#ifndef USG
#ifndef MSDOS
diff -u -r -N -x '*~*' src/s/cygwin.h src/s/cygwin.h
--- src/s/cygwin.h 1969-12-31 19:00:00.000000000 -0500
+++ src/s/cygwin.h 2002-08-02 11:01:43.000000000 -0400
@@ -0,0 +1,197 @@
+/* Template for system description header files.
+ This file describes the parameters that system description files
+ should define or not.
+ Copyright (C) 1985, 1986, 1992, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Emacs.
+
+GNU Emacs is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Emacs is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Emacs; see the file COPYING. If not, write to
+the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+
+/*
+ * Define symbols to identify the version of Unix this is.
+ * Define all the symbols that apply correctly.
+ */
+
+/* #define UNIPLUS */
+/* #define USG5 */
+/* #define USG */
+/* #define HPUX */
+/* #define UMAX */
+/* #define BSD4_1 */
+/* #define BSD4_2 */
+/* #define BSD4_3 */
+/* #define BSD_SYSTEM */
+/* #define VMS */
+
+/* SYSTEM_TYPE should indicate the kind of system you are using.
+ It sets the Lisp variable system-type. */
+
+#define SYSTEM_TYPE "cygwin"
+
+/* NOMULTIPLEJOBS should be defined if your system's shell
+ does not have "job control" (the ability to stop a program,
+ run some other program, then continue the first one). */
+
+/* #define NOMULTIPLEJOBS */
+
+/* Emacs can read input using SIGIO and buffering characters itself,
+ or using CBREAK mode and making C-g cause SIGINT.
+ The choice is controlled by the variable interrupt_input.
+
+ Define INTERRUPT_INPUT to make interrupt_input = 1 the default (use SIGIO)
+
+ Emacs uses the presence or absence of the SIGIO and BROKEN_SIGIO macros
+ to indicate whether or not signal-driven I/O is possible. It uses
+ INTERRUPT_INPUT to decide whether to use it by default.
+
+ SIGIO can be used only on systems that implement it (4.2 and 4.3).
+ CBREAK mode has two disadvantages
+ 1) At least in 4.2, it is impossible to handle the Meta key properly.
+ I hear that in system V this problem does not exist.
+ 2) Control-G causes output to be discarded.
+ I do not know whether this can be fixed in system V.
+
+ Another method of doing input is planned but not implemented.
+ It would have Emacs fork off a separate process
+ to read the input and send it to the true Emacs process
+ through a pipe. */
+
+#define INTERRUPT_INPUT
+#undef INTERRUPT_INPUT
+
+/* Letter to use in finding device name of first pty,
+ if system supports pty's. 'a' means it is /dev/ptya0 */
+
+/* #define FIRST_PTY_LETTER 'a' */
+
+/*
+ * Define HAVE_TERMIOS if the system provides POSIX-style
+ * functions and macros for terminal control.
+ *
+ * Define HAVE_TERMIO if the system provides sysV-style ioctls
+ * for terminal control.
+ *
+ * Do not define both. HAVE_TERMIOS is preferred, if it is
+ * supported on your system.
+ */
+
+#define HAVE_TERMIOS
+/* #define HAVE_TERMIO */
+
+/*
+ * Define HAVE_PTYS if the system supports pty devices.
+ */
+
+#undef HAVE_PTYS
+
+/*
+ * Define NONSYSTEM_DIR_LIBRARY to make Emacs emulate
+ * The 4.2 opendir, etc., library functions.
+ */
+
+/* #define NONSYSTEM_DIR_LIBRARY */
+
+/* Define this symbol if your system has the functions bcopy, etc. */
+
+#define BSTRING
+
+/* subprocesses should be defined if you want to
+ have code for asynchronous subprocesses
+ (as used in M-x compile and M-x shell).
+ This is generally OS dependent, and not supported
+ under most USG systems. */
+
+#define subprocesses
+
+/* If your system uses COFF (Common Object File Format) then define the
+ preprocessor symbol "COFF". */
+
+/* #define COFF */
+
+/* define MAIL_USE_FLOCK if the mailer uses flock
+ to interlock access to /usr/spool/mail/$USER.
+ The alternative is that a lock file named
+ /usr/spool/mail/$USER.lock. */
+
+/* #define MAIL_USE_FLOCK */
+
+/* Define CLASH_DETECTION if you want lock files to be written
+ so that Emacs can tell instantly when you try to modify
+ a file that someone else has modified in his Emacs. */
+
+#define CLASH_DETECTION
+
+/* Define this if your operating system declares signal handlers to
+ have a type other than the usual. `The usual' is `void' for ANSI C
+ systems (i.e. when the __STDC__ macro is defined), and `int' for
+ pre-ANSI systems. If you're using GCC on an older system, __STDC__
+ will be defined, but the system's include files will still say that
+ signal returns int or whatever; in situations like that, define
+ this to be what the system's include files want. */
+/* #define SIGTYPE int */
+
+/* If the character used to separate elements of the executable path
+ is not ':', #define this to be the appropriate character constant. */
+/* #define SEPCHAR ':' */
+
+/* Define this if the system can use mmap for buffer text allocation. */
+/* #define USE_MMAP_FOR_BUFFERS 1 */
+
+/* ============================================================ */
+
+/* Here, add any special hacks needed
+ to make Emacs work on this system. For example,
+ you might define certain system call names that don't
+ exist on your system, or that do different things on
+ your system and must be used only through an encapsulation
+ (Which you should place, by convention, in sysdep.c). */
+
+/* Some compilers tend to put everything declared static
+ into the initialized data area, which becomes pure after dumping Emacs.
+ On these systems, you must #define static as nothing to foil this.
+ Note that emacs carefully avoids static vars inside functions. */
+
+/* #define static */
+
+/* If the system's imake configuration file defines `NeedWidePrototypes'
+ as `NO', we must define NARROWPROTO manually. Such a define is
+ generated in the Makefile generated by `xmkmf'. If we don't
+ define NARROWPROTO, we will see the wrong function prototypes
+ for X functions taking float or double parameters. */
+
+/* #define NARROWPROTO 1 */
+
+/* ============================================================ */
+
+/* After adding support for a new system, modify the large case
+ statement in the `configure' script to recognize reasonable
+ configuration names, and add a description of the system to
+ `etc/MACHINES'.
+
+ If you've just fixed a problem in an existing configuration file,
+ you should also check `etc/MACHINES' to make sure its descriptions
+ of known problems in that configuration should be updated. */
+
+#define PENDING_OUTPUT_COUNT(FILE) ((FILE)->_p - (FILE)->_bf._base)
+#define GETPGRP_NO_ARG 1
+#define SYSV_SYSTEM_DIR 1
+#define CYGWIN 1
+
+#define CANNOT_DUMP 1
+#define POSIX_SIGNALS 1
+#define SYSTEM_MALLOC 1
+#define LINKER $(CC)
!
}
#
# compile and install GNU emacs
#
build_and_install_emacs()
{
rm -fr emacs-"$VERSION" &&
tar -xf emacs-"$VERSION".tar.gz --gzip &&
(
cd emacs-"$VERSION" &&
patch_emacs_source_for_cygwin
) &&
rm -fr emacs-"$VERSION"-build &&
mkdir emacs-"$VERSION"-build &&
(
cd emacs-"$VERSION"-build &&
CFLAGS=-g ../emacs-"$VERSION"/configure --prefix="$DESTDIR" &&
make &&
make install
) &&
rm -fr emacs-"$VERSION"-build &&
rm -fr emacs-"$VERSION" &&
mv "$DESTDIR"/bin/emacs "$DESTDIR"/bin/emacs-orig &&
cat <<-! >"$DESTDIR"/bin/emacs &&
#!/bin/bash
unset TERMCAP
export TERMINFO=/usr/lib/terminfo
export PATH="$REBASEDIR:\$PATH"
exec "$DESTDIR"/bin/emacs-"$VERSION" "\$@"
!
chmod 755 "$DESTDIR"/bin/emacs
}
if [ ! -f emacs-"$VERSION".tar.gz ]; then
echo "$0: The file emacs-$VERSION.tar.gz is not in the current directory." >&2
exit 1
fi &&
rebase_dlls_used_by_emacs &&
build_and_install_emacs &&
true
--------------000903000601040200030105
Content-Type: text/plain; charset=us-ascii
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Bug reporting: http://cygwin.com/bugs.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
--------------000903000601040200030105--
- Raw text -