Support building Emacs on MS-Windows using the Posix configury.

lib/Makefile.am: If building for MS-Windows, include
 nt/gnulib.mk instead of lib/gnulib.mk.
 configure.ac: Adapt to MSYS build on MS-Windows.
 Makefile.in (NTDIR): New variable, for the MSYS build on
 MS-Windows.
 (SUBDIR): Add $(NTDIR).
 (.PHONY): Add epaths-force-w32.
 (msys_to_w32): New variable.
 (epaths-force-w32, install-nt, uninstall-nt): New targets.
 (lib-src src): Add $(NTLIB) to prerequisites.
 (lib lib-src lisp leim nt): Add 'nt'.
 (config.status): Use $(CFG).
 (.PHONY): Add install-$(NTDIR) and uninstall-$(NTDIR).
 (install, install-arch-dep): Add install-$(NTDIR).
 (uninstall): Depend on uninstall-$(NTDIR).
 (mostlyclean, clean, distclean, bootstrap-clean): Add 'nt'.
 * GNUmakefile (CFG): New variable, uses mingw-cfg.site as
 CONFIG_SITE for the MSYS build on MS-Windows.
 (Makefile): Use $(CFG).
 .bzrignore: Ignore *.res, *.tmp, and *.map.  Remove
 src/emacs.res.

 etc/NEWS: Advertise the MSYS build on MS-Windows.

 leim/Makefile.in (leim-list.el, check-declare): Use reveal-filename.

 lib-src/update-game-score.c [WINDOWSNT]: Include "ntlib.h".
 lib-src/ntlib.h (sleep): Update prototype.
 (geteuid): Add prototype.
 lib-src/ntlib.c (sleep): Now returns an unsigned value.
 (getgid): New function.
 lib-src/Makefile.in (CLIENTW, LIB_WSOCK32, LIBS_ECLIENT, NTLIB)
 (CLIENTRES, WINDRES, NTINC, NTDEPS): New variables.
 (INSTALLABLES): Add $(CLIENTW).
 (LIBS_MOVE): Use $(LIB_WSOCK32).
 ($(DESTDIR)${archlibdir}): Use $(EXEEXT) on update-game-score.
 (test-distrib${EXEEXT}): Use $(EXEEXT) on test-distrib.
 (etags${EXEEXT}, ebrowse${EXEEXT}, ctags${EXEEXT})
 (profile${EXEEXT}, make-docfile${EXEEXT}, movemail${EXEEXT})
 (emacsclient${EXEEXT}, hexl${EXEEXT}, update-game-score${EXEEXT}):
 Add $(NTLIB) to prerequisites.  Use $(EXEEXT).
 (pop.o): Add pop.h to prerequisites.
 (emacsclientw${EXEEXT}, ntlib.o): New targets.
 (emacsclient.res): New target.

 lisp/subr.el (reveal-filename): New function.
 lisp/loadup.el: Compute Emacs executable versions on MS-Windows,
 where executables have the .exe extension.  Add a hard link
 emacs-XX.YY.ZZ.exe on MS-Windows.
 lisp/Makefile.in (XARGS_LIMIT): New variable.
 (custom-deps, finder-data, autoloads)
 ($(MH_E_DIR)/mh-loaddefs.el, $(TRAMP_DIR)/tramp-loaddefs.el)
 ($(CAL_DIR)/cal-loaddefs.el, $(CAL_DIR)/diary-loaddefs.el)
 ($(CAL_DIR)/hol-loaddefs.el): Use reveal-filename.
 (compile-main): Limit xargs according to $(XARGS_LIMIT).

 nt/msysconfig.sh: New file.
 nt/mingw-cfg.site: New file.
 nt/makefile.w32-in (LOCAL_FLAGS): Add -DOLD_PATHS=1.
 nt/inc/unistd.h: Include pwd.h and sys/types.h.
 nt/inc/sys/time.h (_TIMEVAL_DEFINED, timerisset, timercmp)
 (timerclear): Define.
 (gettimeofday): Adjust signature to be Posix compatible, by using
 the 'restrict' keyword.
 nt/inc/sys/stat.h (UTIME_NOW, UTIME_OMIT): Define.
 (struct _stat, struct _stati64): Define.
 nt/inc/sys/socket.h (timeval): Define only for MSVC.
 (FD_SET, FD_CLR, FD_ISSET, fd_set): Redefine only if
 EMACS_CONFIG_H is defined.
 (timeval): Undefine only for MSVC.
 nt/inc/ms-w32.h (HAVE___BUILTIN_UNWIND_INIT, restrict)
 (HAVE_WINDOW_SYSTEM, HAVE_MENUS, EMACS_CONFIGURATION)
 (EMACS_CONFIG_OPTIONS, HAVE_LONG_LONG_INT)
 (HAVE_UNSIGNED_LONG_LONG_INT): Define only if not already defined.
 (fileno): Move definition after including stdio.h.
 (sigset_t): Guard typedef by _W64.
 nt/gnulib.mk: New file.
 nt/epaths.nt: New file.
 nt/addpm.c [!OLD_PATHS]: Include src/epaths.h, instead of having a
 copy of the file names there.
 <env_vars> [!OLD_PATHS]: Use macros from epaths.h instead of
 literal strings.
 nt/Makefile.in: New file.
 nt/INSTALL.MSYS: New file.
 nt/INSTALL: Mention INSTALL.MSYS.

 src/w32.c: Include epaths.h.
 (init_environment): Use cmdproxy.exe without leading directories.
 Support emacs.exe in src; point SHELL to cmdproxy in ../nt in that
 case.
 (gettimeofday): Adjust signature and return value to Posix
 expectations.
 src/unexw32.c (open_output_file): Delete the existing emacs.exe
 before creating it, to break the hard link to the versioned
 executable.
 src/Makefile.in (EMACS_MANIFEST, CM_OBJ, TEMACS_POST_LINK)
 (ADDSECTION, EMACS_HEAPSIZE, MINGW_TEMACS_POST_LINK)
 (FIRSTFILE_OBJ): New variables.
 (W32_RES): Rename to EMACSRES.  All users changed.
 (base_obj): Use $(CM_OBJ).
 (ALLOBJS): Use $(FIRSTFILE_OBJ).
 (emacs$(EXEEXT)): Depend on $(ADDSECTION).
 (temacs$(EXEEXT)): Use $(TEMACS_POST_LINK), and move
 $(W32_RES_LINK) before $(LIBES).
 (emacs.res): Depend on $(EMACS_MANIFEST).  Put emacs.rc in nt.
This commit is contained in:
Eli Zaretskii 2013-05-16 15:48:54 +03:00
commit df065a0b9a
37 changed files with 2963 additions and 227 deletions

View file

@ -1,3 +1,31 @@
2013-05-16 Eli Zaretskii <eliz@gnu.org>
* lib/Makefile.am: If building for MS-Windows, include
nt/gnulib.mk instead of lib/gnulib.mk.
* configure.ac: Adapt to MSYS build on MS-Windows.
* Makefile.in (NTDIR): New variable, for the MSYS build on
MS-Windows.
(SUBDIR): Add $(NTDIR).
(.PHONY): Add epaths-force-w32.
(msys_to_w32): New variable.
(epaths-force-w32, install-nt, uninstall-nt): New targets.
(lib-src src): Add $(NTLIB) to prerequisites.
(lib lib-src lisp leim nt): Add 'nt'.
(config.status): Use $(CFG).
(.PHONY): Add install-$(NTDIR) and uninstall-$(NTDIR).
(install, install-arch-dep): Add install-$(NTDIR).
(uninstall): Depend on uninstall-$(NTDIR).
(mostlyclean, clean, distclean, bootstrap-clean): Add 'nt'.
* GNUmakefile (CFG): New variable, uses mingw-cfg.site as
CONFIG_SITE for the MSYS build on MS-Windows.
(Makefile): Use $(CFG).
* .bzrignore: Ignore *.res, *.tmp, and *.map. Remove
src/emacs.res.
2013-05-16 Paul Eggert <eggert@cs.ucla.edu>
Merge from gnulib, incorporating:

View file

@ -32,6 +32,11 @@
# run "configure" by hand. But run autogen.sh first, if the source
# was checked out directly from the repository.
ifneq ($(MSYSTEM),)
CFG = CONFIG_SITE=$(CURDIR)/nt/mingw-cfg.site
else
CFG =
endif
# If a Makefile already exists, just use it.
@ -70,7 +75,7 @@ configure:
Makefile: configure
@echo >&2 'There seems to be no Makefile in this directory.'
@echo >&2 'Running ./configure ...'
./configure
$(CFG) ./configure
@echo >&2 'Makefile built.'
endif

View file

@ -93,6 +93,9 @@ version=@version@
### for, like `mips-dec-ultrix' or `sparc-sun-sunos'.
configuration=@configuration@
### The nt/ subdirectory gets built only for MinGW
NTDIR=@NTDIR@
# ==================== Where To Install Things ====================
# Location to install Emacs.app under GNUstep / Mac OS X.
@ -272,23 +275,23 @@ EMACS = ${EMACS_NAME}${EXEEXT}
EMACSFULL = `echo emacs-${version} | sed '$(TRANSFORM)'`${EXEEXT}
# Subdirectories to make recursively.
SUBDIR = lib lib-src src lisp leim
SUBDIR = $(NTDIR) lib lib-src src lisp leim
# The subdir makefiles created by config.status.
SUBDIR_MAKEFILES_IN = @SUBDIR_MAKEFILES_IN@
SUBDIR_MAKEFILES = `echo $(SUBDIR_MAKEFILES_IN:.in=) | sed 's|$(srcdir)/||g'`
# Subdirectories to install, and where they'll go.
# lib-src's makefile knows how to install it, so we don't do that here.
# Directories that cannot simply be copied, eg info,
# are treated separately.
# quail appears twice because in out-of-tree builds, it exists twice.
# Subdirectories to install, and where they'll go. lib-src's and nt's
# makefiles know how to install them, so we don't do that here.
# Directories that cannot simply be copied, eg info, are treated
# separately. quail appears twice because in out-of-tree builds, it
# exists twice.
COPYDIR = ${srcdir}/etc ${srcdir}/lisp ${srcdir}/leim/ja-dic ${srcdir}/leim/quail leim/quail
COPYDESTS = $(DESTDIR)${etcdir} $(DESTDIR)${lispdir} $(DESTDIR)${leimdir}/ja-dic $(DESTDIR)${leimdir}/quail $(DESTDIR)${leimdir}/quail
all: ${SUBDIR}
.PHONY: all ${SUBDIR} blessmail epaths-force FRC
.PHONY: all ${SUBDIR} blessmail epaths-force epaths-force-w32 FRC
removenullpaths=sed -e 's/^://g' -e 's/:$$//g' -e 's/::/:/g'
@ -315,7 +318,20 @@ epaths-force: FRC
-e 's;\(#.*PATH_DOC\).*$$;\1 "${docdir}";') && \
${srcdir}/build-aux/move-if-change epaths.h.$$$$ src/epaths.h
lib-src src: lib
# Convert MSYS-style /x/foo file name into x:/foo that Windows can grok.
msys_to_w32=sed -e 's,^/\([A-Za-z]\)/,\1:/,'
# The w32 build needs a slightly different editing, and it uses
# nt/epaths.nt as the template.
epaths-force-w32: FRC
@(w32srcdir=`echo "${srcdir}" | ${msys_to_w32}` ; \
sed < ${srcdir}/nt/epaths.nt > epaths.h.$$$$ \
-e '/^.*#/s/@VER@/${version}/g' \
-e '/^.*#/s/@CFG@/${configuration}/g' \
-e "/^.*#/s|@SRC@|$${w32srcdir}|g") && \
${srcdir}/build-aux/move-if-change epaths.h.$$$$ src/epaths.h
lib-src src: $(NTDIR) lib
src: lib-src FRC
@ -324,7 +340,7 @@ src: lib-src FRC
lisp leim: src
# These targets should be "${SUBDIR} without `src'".
lib lib-src lisp leim: Makefile FRC
lib lib-src lisp leim nt: Makefile FRC
cd $@ && $(MAKE) all $(MFLAGS) \
CC='${CC}' CFLAGS='${CFLAGS}' CPPFLAGS='${CPPFLAGS}' \
LDFLAGS='${LDFLAGS}' MAKE='${MAKE}'
@ -378,9 +394,9 @@ $(MAKEFILE_NAME): config.status $(srcdir)/src/config.in \
config.status: ${srcdir}/configure ${srcdir}/lisp/version.el
if [ -x ./config.status ]; then \
./config.status --recheck; \
$(CFG) ./config.status --recheck; \
else \
$(srcdir)/configure $(CONFIGURE_FLAGS); \
$(CFG) $(srcdir)/configure $(CONFIGURE_FLAGS); \
fi
AUTOCONF_INPUTS = $(srcdir)/configure.ac $(srcdir)/aclocal.m4
@ -417,13 +433,14 @@ $(srcdir)/src/stamp-h.in: $(AUTOCONF_INPUTS)
# ==================== Installation ====================
.PHONY: install install-arch-dep install-arch-indep install-doc install-info
.PHONY: install-man install-etc install-strip uninstall
.PHONY: install-man install-etc install-strip install-$(NTDIR)
.PHONY: uninstall uninstall-$(NTDIR)
## If we let lib-src do its own installation, that means we
## don't have to duplicate the list of utilities to install in
## this Makefile as well.
install: all install-arch-indep install-doc install-arch-dep blessmail
install: all install-arch-indep install-doc install-arch-dep install-$(NTDIR) blessmail
@true
## Ensure that $subdir contains a subdirs.el file.
@ -444,7 +461,7 @@ write_subdir=if [ -f $${subdir}/subdirs.el ]; \
### Install the executables that were compiled specifically for this machine.
### We do install-arch-indep first because the executable needs the
### Lisp files and DOC file to work properly.
install-arch-dep: src install-arch-indep install-doc
install-arch-dep: src install-arch-indep install-doc install-$(NTDIR)
umask 022; ${MKDIR_P} $(DESTDIR)${bindir}
cd lib-src && \
$(MAKE) install $(MFLAGS) prefix=${prefix} \
@ -464,6 +481,16 @@ install-arch-dep: src install-arch-indep install-doc
rm -rf ${ns_appresdir}/share; \
fi
### Windows-specific install target for installing programs produced
### in nt/, and its Posix do-nothing shadow.
install-:
install-nt:
cd $(NTDIR) && \
$(MAKE) install $(MFLAGS) prefix=${prefix} \
exec_prefix=${exec_prefix} bindir=${bindir} \
libexecdir=${libexecdir} archlibdir=${archlibdir} \
INSTALL_STRIP=${INSTALL_STRIP}
## In the share directory, we are deleting:
## applications (with emacs.desktop, also found in etc/)
## emacs (basically empty except for unneeded site-lisp directories)
@ -678,11 +705,12 @@ install-strip:
### create (but not the noninstalled files such as `make all' would create).
###
### Don't delete the lisp and etc directories if they're in the source tree.
uninstall:
uninstall: uninstall-$(NTDIR)
cd lib-src && \
$(MAKE) $(MFLAGS) uninstall \
prefix=${prefix} exec_prefix=${exec_prefix} \
bindir=${bindir} libexecdir=${libexecdir} archlibdir=${archlibdir}
-unset CDPATH; \
for dir in $(DESTDIR)${lispdir} $(DESTDIR)${etcdir} ; do \
if [ -d $${dir} ]; then \
@ -727,6 +755,15 @@ uninstall:
[ -s $${file} ] || rm -f $$file; \
done
### Windows-specific uninstall target for removing programs produced
### in nt/, and its Posix do-nothing shadow.
uninstall-:
uninstall-nt:
cd $(NTDIR) && \
$(MAKE) $(MFLAGS) uninstall \
prefix=${prefix} exec_prefix=${exec_prefix} \
bindir=${bindir} libexecdir=${libexecdir} archlibdir=${archlibdir}
FRC:
# ==================== Cleaning up and miscellanea ====================
@ -744,6 +781,7 @@ mostlyclean: FRC
(cd lwlib; $(MAKE) $(MFLAGS) mostlyclean)
(cd lib; $(MAKE) $(MFLAGS) mostlyclean)
(cd lib-src; $(MAKE) $(MFLAGS) mostlyclean)
(cd nt; $(MAKE) $(MFLAGS) mostlyclean)
-(cd doc/emacs && $(MAKE) $(MFLAGS) mostlyclean)
-(cd doc/misc && $(MAKE) $(MFLAGS) mostlyclean)
-(cd doc/lispref && $(MAKE) $(MFLAGS) mostlyclean)
@ -765,6 +803,7 @@ clean: FRC
(cd lwlib; $(MAKE) $(MFLAGS) clean)
(cd lib; $(MAKE) $(MFLAGS) clean)
(cd lib-src; $(MAKE) $(MFLAGS) clean)
(cd nt; $(MAKE) $(MFLAGS) clean)
-(cd doc/emacs && $(MAKE) $(MFLAGS) clean)
-(cd doc/misc && $(MAKE) $(MFLAGS) clean)
-(cd doc/lispref && $(MAKE) $(MFLAGS) clean)
@ -791,6 +830,7 @@ distclean: FRC
(cd lwlib; $(MAKE) $(MFLAGS) distclean)
(cd lib; $(MAKE) $(MFLAGS) distclean)
(cd lib-src; $(MAKE) $(MFLAGS) distclean)
(cd nt; $(MAKE) $(MFLAGS) distclean)
(cd doc/emacs && $(MAKE) $(MFLAGS) distclean)
(cd doc/misc && $(MAKE) $(MFLAGS) distclean)
(cd doc/lispref && $(MAKE) $(MFLAGS) distclean)
@ -809,6 +849,7 @@ bootstrap-clean: FRC
(cd lwlib; $(MAKE) $(MFLAGS) maintainer-clean)
(cd lib; $(MAKE) $(MFLAGS) maintainer-clean)
(cd lib-src; $(MAKE) $(MFLAGS) maintainer-clean)
(cd nt; $(MAKE) $(MFLAGS) maintainer-clean)
-(cd doc/emacs && $(MAKE) $(MFLAGS) maintainer-clean)
-(cd doc/misc && $(MAKE) $(MFLAGS) maintainer-clean)
-(cd doc/lispref && $(MAKE) $(MFLAGS) maintainer-clean)

View file

@ -192,7 +192,7 @@ OPTION_DEFAULT_ON([toolkit-scroll-bars],[don't use Motif or Xaw3d scroll bars])
OPTION_DEFAULT_ON([xaw3d],[don't use Xaw3d])
OPTION_DEFAULT_ON([xim],[don't use X11 XIM])
OPTION_DEFAULT_OFF([ns],[use NeXTstep (Cocoa or GNUstep) windowing system])
OPTION_DEFAULT_OFF([w32], [use native MS Windows GUI])
OPTION_DEFAULT_OFF([w32], [use native MS Windows GUI in a Cygwin build])
OPTION_DEFAULT_ON([gpm],[don't use -lgpm for mouse support on a GNU/Linux console])
OPTION_DEFAULT_ON([dbus],[don't compile with D-Bus support])
@ -376,7 +376,7 @@ AC_ARG_ENABLE(gtk-deprecation-warnings,
## Make sure CDPATH doesn't affect cd (in case PWD is relative).
unset CDPATH
case "${srcdir}" in
/* ) ;;
[[\\/]]* | ?:[[\\/]]*) ;;
. )
## We may be able to use the $PWD environment variable to make this
## absolute. But sometimes PWD is inaccurate.
@ -554,6 +554,11 @@ case "${canonical}" in
i[3456]86-*-* )
case "${canonical}" in
*-darwin* ) opsys=darwin ;;
*-mingw32 )
opsys=mingw32
# MinGW overrides and adds some system headers in nt/inc.
GCC_TEST_OPTIONS="-I $srcdir/nt/inc"
;;
*-sysv4.2uw* ) opsys=unixware ;;
*-sysv5uw* ) opsys=unixware ;;
*-sysv5OpenUNIX* ) opsys=unixware ;;
@ -602,6 +607,11 @@ else
test "x$NON_GCC_TEST_OPTIONS" != x && CC="$CC $NON_GCC_TEST_OPTIONS"
fi
dnl This is used in lib/Makefile.am to use nt/gnulib.mk, the
dnl alternative to lib/gnulib.mk, so as to avoid generating header files
dnl that clash with MinGW.
AM_CONDITIONAL([BUILDING_FOR_WINDOWSNT], [test "x$opsys" = "xmingw32"])
# Avoid gnulib's tests for HAVE_WORKING_O_NOATIME and HAVE_WORKING_O_NOFOLLOW,
# as we don't use them.
AC_DEFUN([gl_FCNTL_O_FLAGS])
@ -635,6 +645,9 @@ if test "$ac_test_CFLAGS" != set; then
if test $emacs_cv_prog_cc_g3 != yes; then
CFLAGS=$emacs_save_CFLAGS
fi
if test $opsys = mingw32; then
CFLAGS="$CFLAGS -gdwarf-2"
fi
fi
case $CFLAGS in
@ -852,6 +865,16 @@ fi
AC_SUBST(LN_S_FILEONLY)
dnl AC_PROG_LN_S sets LN_S to 'cp -pR' for MinGW, on the premise that 'ln'
dnl doesn't support links to directories, as in "ln file dir". But that
dnl use is non-portable, and OTOH MinGW wants to use hard links for Emacs
dnl executables at "make install" time.
dnl See http://lists.gnu.org/archive/html/emacs-devel/2013-04/msg00475.html
dnl for more details.
if test "$opsys" = "mingw32"; then
LN_S="ln"
fi
AC_PATH_PROG(INSTALL_INFO, install-info, :,
$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin)
dnl Don't use GZIP, which is used by gzip for additional parameters.
@ -957,7 +980,6 @@ AC_SUBST(CANNOT_DUMP)
UNEXEC_OBJ=unexelf.o
case "$opsys" in
# MSDOS uses unexcoff.o
# MSWindows uses unexw32.o
aix4-2)
UNEXEC_OBJ=unexaix.o
;;
@ -970,6 +992,9 @@ case "$opsys" in
hpux10-20 | hpux11)
UNEXEC_OBJ=unexhp9k800.o
;;
mingw32)
UNEXEC_OBJ=unexw32.o
;;
sol2-10)
# Use the Solaris dldump() function, called from unexsol.c, to dump
# emacs, instead of the generic ELF dump code found in unexelf.c.
@ -1064,6 +1089,7 @@ C_SWITCH_SYSTEM=
## additional optimization. --nils@exp-math.uni-essen.de
test "$opsys" = "aix4.2" && test "x$GCC" != "xyes" && \
C_SWITCH_SYSTEM="-ma -qmaxmem=4000"
test "$opsys" = "mingw32" && C_SWITCH_SYSTEM="-mtune=pentium4"
## gnu-linux might need -D_BSD_SOURCE on old libc5 systems.
## It is redundant in glibc2, since we define _GNU_SOURCE.
AC_SUBST(C_SWITCH_SYSTEM)
@ -1083,8 +1109,8 @@ case "$opsys" in
## Motif needs -lgen.
unixware) LIBS_SYSTEM="-lsocket -lnsl -lelf -lgen" ;;
esac
AC_SUBST(LIBS_SYSTEM)
AC_SUBST(LIBS_SYSTEM)
### Make sure subsequent tests use flags consistent with the build flags.
@ -1122,6 +1148,10 @@ case $opsys in
;;
hpux10-20 | hpux11 )
;;
mingw32 )
LIB_MATH=
SYSTEM_TYPE=windows-nt
;;
dnl NB this may be adjusted below.
netbsd | openbsd )
SYSTEM_TYPE=berkeley-unix
@ -1197,11 +1227,15 @@ AC_DEFUN([PKG_CHECK_MODULES], [
fi
])
if test "${with_sound}" != "no"; then
# Sound support for GNU/Linux and the free BSDs.
AC_CHECK_HEADERS(machine/soundcard.h sys/soundcard.h soundcard.h,
have_sound_header=yes)
# Sound support for GNU/Linux, the free BSDs, and MinGW.
AC_CHECK_HEADERS(machine/soundcard.h sys/soundcard.h soundcard.h mmsystem.h,
have_sound_header=yes, [], [
#ifdef __MINGW32__
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#endif
])
# Emulation library used on NetBSD.
AC_CHECK_LIB(ossaudio, _oss_ioctl, LIBSOUND=-lossaudio, LIBSOUND=)
AC_SUBST(LIBSOUND)
@ -1241,7 +1275,7 @@ if test "${with_sound}" != "no"; then
if test x$have_sound_header = xyes || test $HAVE_ALSA = yes; then
case "$opsys" in
dnl defined __FreeBSD__ || defined __NetBSD__ || defined __linux__
gnu-linux|freebsd|netbsd)
gnu-linux|freebsd|netbsd|mingw32)
AC_DEFINE(HAVE_SOUND, 1, [Define to 1 if you have sound support.])
;;
esac
@ -1563,31 +1597,98 @@ AC_SUBST(NS_OBJC_OBJ)
HAVE_W32=no
W32_OBJ=
W32_LIBS=
W32_RES=
EMACSRES=
CLIENTRES=
CLIENTW=
W32_RES_LINK=
EMACS_MANIFEST=
if test "${with_w32}" != no; then
if test "${opsys}" != "cygwin"; then
AC_MSG_ERROR([Using w32 with an autotools build is only supported for Cygwin.])
case "${opsys}" in
cygwin)
AC_CHECK_HEADER([windows.h], [HAVE_W32=yes],
[AC_MSG_ERROR([`--with-w32' was specified, but windows.h
cannot be found.])])
;;
mingw32)
## Using --with-w32 with MinGW is a no-op, but we allow it.
;;
*)
AC_MSG_ERROR([Using w32 with an autotools build is only supported for Cygwin and MinGW32.])
;;
esac
fi
if test "${opsys}" = "mingw32"; then
AC_MSG_CHECKING([whether Windows API headers are recent enough])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <windows.h>
#include <usp10.h>]],
[[void test(PIMAGE_NT_HEADERS pHeader)
{PIMAGE_SECTION_HEADER pSection = IMAGE_FIRST_SECTION(pHeader);}]])],
[emacs_cv_w32api=yes
HAVE_W32=yes],
emacs_cv_w32api=no)
AC_MSG_RESULT($emacs_cv_w32api)
if test "${emacs_cv_w32api}" = "no"; then
AC_MSG_ERROR([the Windows API headers are too old to support this build.])
fi
AC_CHECK_HEADER([windows.h], [HAVE_W32=yes],
[AC_MSG_ERROR([`--with-w32' was specified, but windows.h
cannot be found.])])
fi
FIRSTFILE_OBJ=
NTDIR=
LIBS_ECLIENT=
LIB_WSOCK32=
NTLIB=
CM_OBJ="cm.o"
XARGS_LIMIT=
if test "${HAVE_W32}" = "yes"; then
AC_DEFINE(HAVE_NTGUI, 1, [Define to use native MS Windows GUI.])
AC_CHECK_TOOL(WINDRES, [windres],
[AC_MSG_ERROR([No resource compiler found.])])
W32_OBJ="w32fns.o w32menu.o w32reg.o w32font.o w32term.o"
W32_OBJ="$W32_OBJ w32xfns.o w32select.o w32uniscribe.o"
W32_LIBS="$W32_LIBS -lkernel32 -luser32 -lgdi32 -lole32 -lcomdlg32"
W32_LIBS="$W32_LIBS -lusp10 -lcomctl32 -lwinspool"
W32_RES="emacs.res"
# Tell the linker that emacs.res is an object (which we compile from
# the rc file), not a linker script.
W32_RES_LINK="-Wl,emacs.res"
EMACSRES="emacs.res"
case "$canonical" in
x86_64-*-*) EMACS_MANIFEST="emacs-x64.manifest" ;;
*) EMACS_MANIFEST="emacs-x86.manifest" ;;
esac
if test "${opsys}" = "cygwin"; then
W32_LIBS="$W32_LIBS -lkernel32 -luser32 -lgdi32 -lole32 -lcomdlg32"
W32_LIBS="$W32_LIBS -lusp10 -lcomctl32 -lwinspool"
# Tell the linker that emacs.res is an object (which we compile from
# the rc file), not a linker script.
W32_RES_LINK="-Wl,emacs.res"
else
W32_OBJ="$W32_OBJ w32.o w32console.o w32heap.o w32inevt.o w32proc.o"
W32_OBJ="$W32_OBJ w32notify.o"
W32_LIBS="$W32_LIBS -lwinmm -lgdi32 -lcomdlg32"
W32_LIBS="$W32_LIBS -lmpr -lwinspool -lole32 -lcomctl32 -lusp10"
W32_RES_LINK="\$(EMACSRES)"
CLIENTRES="emacsclient.res"
CLIENTW="emacsclientw\$(EXEEXT)"
FIRSTFILE_OBJ=firstfile.o
NTDIR=nt
CM_OBJ=
LIBS_ECLIENT="-lcomctl32"
LIB_WSOCK32="-lwsock32"
NTLIB="ntlib.$ac_objext"
XARGS_LIMIT="-s 10000"
fi
fi
AC_SUBST(W32_OBJ)
AC_SUBST(W32_LIBS)
AC_SUBST(W32_RES)
AC_SUBST(EMACSRES)
AC_SUBST(EMACS_MANIFEST)
AC_SUBST(CLIENTRES)
AC_SUBST(CLIENTW)
AC_SUBST(W32_RES_LINK)
AC_SUBST(FIRSTFILE_OBJ)
AC_SUBST(NTDIR)
AC_SUBST(CM_OBJ)
AC_SUBST(LIBS_ECLIENT)
AC_SUBST(LIB_WSOCK32)
AC_SUBST(NTLIB)
AC_SUBST(XARGS_LIMIT)
if test "${HAVE_W32}" = "yes"; then
window_system=w32
@ -1912,7 +2013,7 @@ fi
### Use -lrsvg-2 if available, unless `--with-rsvg=no' is specified.
HAVE_RSVG=no
if test "${HAVE_X11}" = "yes" || test "${HAVE_NS}" = "yes"; then
if test "${HAVE_X11}" = "yes" || test "${HAVE_NS}" = "yes" || test "${opsys}" = "mingw32"; then
if test "${with_rsvg}" != "no"; then
RSVG_REQUIRED=2.11.0
RSVG_MODULE="librsvg-2.0 >= $RSVG_REQUIRED"
@ -1955,43 +2056,45 @@ HAVE_GTK=no
GTK_OBJ=
check_gtk2=no
gtk3_pkg_errors=
if test "${with_gtk3}" = "yes" || test "${with_gtk}" = "yes" || test "$USE_X_TOOLKIT" = "maybe"; then
GLIB_REQUIRED=2.28
GTK_REQUIRED=3.0
GTK_MODULES="gtk+-3.0 >= $GTK_REQUIRED glib-2.0 >= $GLIB_REQUIRED"
if test "${opsys}" != "mingw32"; then
if test "${with_gtk3}" = "yes" || test "${with_gtk}" = "yes" || test "$USE_X_TOOLKIT" = "maybe"; then
GLIB_REQUIRED=2.28
GTK_REQUIRED=3.0
GTK_MODULES="gtk+-3.0 >= $GTK_REQUIRED glib-2.0 >= $GLIB_REQUIRED"
dnl Checks for libraries.
PKG_CHECK_MODULES(GTK, $GTK_MODULES, pkg_check_gtk=yes, pkg_check_gtk=no)
if test "$pkg_check_gtk" = "no" && test "$with_gtk3" = "yes"; then
AC_MSG_ERROR($GTK_PKG_ERRORS)
dnl Checks for libraries.
PKG_CHECK_MODULES(GTK, $GTK_MODULES, pkg_check_gtk=yes, pkg_check_gtk=no)
if test "$pkg_check_gtk" = "no" && test "$with_gtk3" = "yes"; then
AC_MSG_ERROR($GTK_PKG_ERRORS)
fi
if test "$pkg_check_gtk" = "yes"; then
AC_DEFINE(HAVE_GTK3, 1, [Define to 1 if using GTK 3 or later.])
GTK_OBJ=emacsgtkfixed.o
term_header=gtkutil.h
USE_GTK_TOOLKIT="GTK3"
if test "x$ac_enable_gtk_deprecation_warnings" = x; then
GTK_CFLAGS="$GTK_CFLAGS -DGDK_DISABLE_DEPRECATION_WARNINGS"
fi
else
check_gtk2=yes
gtk3_pkg_errors="$GTK_PKG_ERRORS "
fi
fi
if test "$pkg_check_gtk" = "yes"; then
AC_DEFINE(HAVE_GTK3, 1, [Define to 1 if using GTK 3 or later.])
GTK_OBJ=emacsgtkfixed.o
term_header=gtkutil.h
USE_GTK_TOOLKIT="GTK3"
if test "x$ac_enable_gtk_deprecation_warnings" = x; then
GTK_CFLAGS="$GTK_CFLAGS -DGDK_DISABLE_DEPRECATION_WARNINGS"
fi
else
check_gtk2=yes
gtk3_pkg_errors="$GTK_PKG_ERRORS "
fi
fi
if test "${with_gtk2}" = "yes" || test "$check_gtk2" = "yes"; then
GLIB_REQUIRED=2.10
GTK_REQUIRED=2.10
GTK_MODULES="gtk+-2.0 >= $GTK_REQUIRED glib-2.0 >= $GLIB_REQUIRED"
if test "${with_gtk2}" = "yes" || test "$check_gtk2" = "yes"; then
GLIB_REQUIRED=2.10
GTK_REQUIRED=2.10
GTK_MODULES="gtk+-2.0 >= $GTK_REQUIRED glib-2.0 >= $GLIB_REQUIRED"
dnl Checks for libraries.
PKG_CHECK_MODULES(GTK, $GTK_MODULES, pkg_check_gtk=yes, pkg_check_gtk=no)
if test "$pkg_check_gtk" = "no" &&
{ test "$with_gtk" = yes || test "$with_gtk2" = "yes"; }
then
AC_MSG_ERROR($gtk3_pkg_errors$GTK_PKG_ERRORS)
dnl Checks for libraries.
PKG_CHECK_MODULES(GTK, $GTK_MODULES, pkg_check_gtk=yes, pkg_check_gtk=no)
if test "$pkg_check_gtk" = "no" &&
{ test "$with_gtk" = yes || test "$with_gtk2" = "yes"; }
then
AC_MSG_ERROR($gtk3_pkg_errors$GTK_PKG_ERRORS)
fi
test "$pkg_check_gtk" = "yes" && USE_GTK_TOOLKIT="GTK2"
fi
test "$pkg_check_gtk" = "yes" && USE_GTK_TOOLKIT="GTK2"
fi
if test x"$pkg_check_gtk" = xyes; then
@ -2161,6 +2264,8 @@ if test "${with_gnutls}" = "yes" ; then
AC_DEFINE(HAVE_GNUTLS, 1, [Define if using GnuTLS.])
fi
OLD_CFLAGS=$CFLAGS
OLD_LIBS=$LIBS
CFLAGS="$CFLAGS $LIBGNUTLS_CFLAGS"
LIBS="$LIBGNUTLS_LIBS $LIBS"
AC_CHECK_FUNCS(gnutls_certificate_set_verify_function, HAVE_GNUTLS_CALLBACK_CERTIFICATE_VERIFY=yes)
@ -2168,6 +2273,13 @@ if test "${with_gnutls}" = "yes" ; then
if test "${HAVE_GNUTLS_CALLBACK_CERTIFICATE_VERIFY}" = "yes"; then
AC_DEFINE(HAVE_GNUTLS_CALLBACK_CERTIFICATE_VERIFY, 1, [Define if using GnuTLS certificate verification callbacks.])
fi
# Windows loads GnuTLS dynamically
if test "${opsys}" = "mingw32"; then
CFLAGS=$OLD_CFLAGS
LIBS=$OLD_LIBS
LIBGNUTLS_LIBS=
fi
fi
AC_SUBST(LIBGNUTLS_LIBS)
@ -2283,6 +2395,9 @@ case $opsys in
hpux* | aix4-2 )
test "X$ac_cv_lib_Xmu_XmuConvertStandardSelection" != "Xyes" && LIBXMU=
;;
mingw32 )
LIBXMU=
;;
esac
AC_SUBST(LIBXMU)
@ -2541,10 +2656,10 @@ AC_SUBST(M17N_FLT_CFLAGS)
AC_SUBST(M17N_FLT_LIBS)
### Use -lXpm if available, unless `--with-xpm=no'.
### mingw32 doesn't use -lXpm, since it loads the library dynamically.
HAVE_XPM=no
LIBXPM=
if test "${HAVE_W32}" = "yes"; then
if test "${HAVE_W32}" = "yes" && test "${opsys}" = "cygwin"; then
if test "${with_xpm}" != "no"; then
SAVE_CPPFLAGS="$CPPFLAGS"
SAVE_LDFLAGS="$LDFLAGS"
@ -2605,19 +2720,33 @@ no_return_alloc_pixels
fi
fi
### FIXME: Perhaps regroup to minimize code duplication due to MinGW's
### slightly different requirements wrt image libraries (it doesn't
### use -lXpm because it loads the xpm shared library dynamically at
### run time).
if test "${opsys}" = "mingw32"; then
if test "${with_xpm}" != "no"; then
AC_CHECK_HEADER(X11/xpm.h, HAVE_XPM=yes, HAVE_XPM=no, [
#define FOR_MSW 1])
fi
if test "${HAVE_XPM}" = "yes"; then
AC_DEFINE(HAVE_XPM, 1, [Define to 1 if you have the Xpm library (-lXpm).])
fi
fi
AC_SUBST(LIBXPM)
### Use -ljpeg if available, unless `--with-jpeg=no'.
### mingw32 doesn't use -ljpeg, since it loads the library dynamically.
HAVE_JPEG=no
LIBJPEG=
if test "${HAVE_X11}" = "yes" || test "${HAVE_W32}" = "yes"; then
if test "${opsys}" = "mingw32"; then
if test "${with_jpeg}" != "no"; then
dnl Checking for jpeglib.h can lose because of a redefinition of
dnl HAVE_STDLIB_H.
AC_CHECK_HEADER(jerror.h,
[AC_CHECK_LIB(jpeg, jpeg_destroy_compress, HAVE_JPEG=yes)])
dnl HAVE_STDLIB_H.
AC_CHECK_HEADER(jerror.h, HAVE_JPEG=yes, HAVE_JPEG=no)
fi
AH_TEMPLATE(HAVE_JPEG, [Define to 1 if you have the jpeg library (-ljpeg).])dnl
if test "${HAVE_JPEG}" = "yes"; then
AC_DEFINE(HAVE_JPEG)
@ -2629,6 +2758,25 @@ if test "${HAVE_X11}" = "yes" || test "${HAVE_W32}" = "yes"; then
[AC_MSG_WARN([libjpeg found, but not version 6b or later])
HAVE_JPEG=no])
fi
elif test "${HAVE_X11}" = "yes" || test "${HAVE_W32}" = "yes"; then
if test "${with_jpeg}" != "no"; then
dnl Checking for jpeglib.h can lose because of a redefinition of
dnl HAVE_STDLIB_H.
AC_CHECK_HEADER(jerror.h,
[AC_CHECK_LIB(jpeg, jpeg_destroy_compress, HAVE_JPEG=yes)])
fi
AH_TEMPLATE(HAVE_JPEG, [Define to 1 if you have the jpeg library (-ljpeg).])dnl
if test "${HAVE_JPEG}" = "yes"; then
AC_DEFINE(HAVE_JPEG)
AC_EGREP_CPP([version= *(6[2-9]|[7-9][0-9])],
[#include <jpeglib.h>
version=JPEG_LIB_VERSION
],
[AC_DEFINE(HAVE_JPEG)],
[AC_MSG_WARN([libjpeg found, but not version 6b or later])
HAVE_JPEG=no])
fi
if test "${HAVE_JPEG}" = "yes"; then
LIBJPEG=-ljpeg
fi
@ -2636,9 +2784,30 @@ fi
AC_SUBST(LIBJPEG)
### Use -lpng if available, unless `--with-png=no'.
### mingw32 doesn't use -lpng, since it loads the library dynamically.
HAVE_PNG=no
LIBPNG=
if test "${HAVE_X11}" = "yes" || test "${HAVE_W32}" = "yes"; then
if test "${opsys}" = "mingw32"; then
if test "${with_png}" != "no"; then
AC_CHECK_HEADER(png.h, HAVE_PNG=yes, HAVE_PNG=no)
fi
if test "${HAVE_PNG}" = "yes"; then
AC_DEFINE(HAVE_PNG, 1, [Define to 1 if you have the png library (-lpng).])
AC_CHECK_DECL(png_longjmp,
[],
[AC_DEFINE(PNG_DEPSTRUCT, [],
[Define to empty to suppress deprecation warnings when building
with --enable-gcc-warnings and with libpng versions before 1.5,
which lack png_longjmp.])],
[[#ifdef HAVE_LIBPNG_PNG_H
# include <libpng/png.h>
#else
# include <png.h>
#endif
]])
fi
elif test "${HAVE_X11}" = "yes" || test "${HAVE_W32}" = "yes"; then
if test "${with_png}" != "no"; then
# Debian unstable as of July 2003 has multiple libpngs, and puts png.h
# in /usr/include/libpng.
@ -2669,9 +2838,17 @@ fi
AC_SUBST(LIBPNG)
### Use -ltiff if available, unless `--with-tiff=no'.
### mingw32 doesn't use -ltiff, since it loads the library dynamically.
HAVE_TIFF=no
LIBTIFF=
if test "${HAVE_X11}" = "yes" || test "${HAVE_W32}" = "yes"; then
if test "${opsys}" = "mingw32"; then
if test "${with_tiff}" != "no"; then
AC_CHECK_HEADER(tiffio.h, HAVE_TIFF=yes, HAVE_TIFF=no)
fi
if test "${HAVE_TIFF}" = "yes"; then
AC_DEFINE(HAVE_TIFF, 1, [Define to 1 if you have the tiff library (-ltiff).])
fi
elif test "${HAVE_X11}" = "yes" || test "${HAVE_W32}" = "yes"; then
if test "${with_tiff}" != "no"; then
AC_CHECK_HEADER(tiffio.h,
[tifflibs="-lz -lm"
@ -2689,9 +2866,17 @@ fi
AC_SUBST(LIBTIFF)
### Use -lgif or -lungif if available, unless `--with-gif=no'.
### mingw32 doesn't use -lgif/-lungif, since it loads the library dynamically.
HAVE_GIF=no
LIBGIF=
if test "${HAVE_X11}" = "yes" && test "${with_gif}" != "no" \
if test "${opsys}" = "mingw32"; then
if test "${with_gif}" != "no"; then
AC_CHECK_HEADER(gif_lib.h, HAVE_GIF=yes, HAVE_GIF=no)
fi
if test "${HAVE_GIF}" = "yes"; then
AC_DEFINE(HAVE_GIF, 1, [Define to 1 if you have a gif (or ungif) library.])
fi
elif test "${HAVE_X11}" = "yes" && test "${with_gif}" != "no" \
|| test "${HAVE_W32}" = "yes"; then
AC_CHECK_HEADER(gif_lib.h,
# EGifPutExtensionLast only exists from version libungif-4.1.0b1.
@ -2847,13 +3032,18 @@ fi
### Use libxml (-lxml2) if available
### mingw32 doesn't use -lxml2, since it loads the library dynamically.
HAVE_LIBXML2=no
if test "${with_xml2}" != "no"; then
### I'm not sure what the version number should be, so I just guessed.
PKG_CHECK_MODULES(LIBXML2, libxml-2.0 > 2.6.17, HAVE_LIBXML2=yes, HAVE_LIBXML2=no)
if test "${HAVE_LIBXML2}" = "yes"; then
LIBS="$LIBXML2_LIBS $LIBS"
AC_CHECK_LIB(xml2, htmlReadMemory, HAVE_LIBXML2=yes, HAVE_LIBXML2=no)
if test "${opsys}" != "mingw32"; then
LIBS="$LIBXML2_LIBS $LIBS"
AC_CHECK_LIB(xml2, htmlReadMemory, HAVE_LIBXML2=yes, HAVE_LIBXML2=no)
else
LIBXML2_LIBS=""
fi
if test "${HAVE_LIBXML2}" = "yes"; then
AC_DEFINE(HAVE_LIBXML2, 1, [Define to 1 if you have the libxml library (-lxml2).])
else
@ -2866,6 +3056,10 @@ AC_SUBST(LIBXML2_LIBS)
AC_SUBST(LIBXML2_CFLAGS)
# If netdb.h doesn't declare h_errno, we must declare it by hand.
# On MinGW, that is provided by nt/inc/sys/socket.h and w32.c.
if test "${opsys}" = "mingw32"; then
emacs_cv_netdb_declares_h_errno=yes
fi
AC_CACHE_CHECK(whether netdb declares h_errno,
emacs_cv_netdb_declares_h_errno,
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <netdb.h>]],
@ -2876,8 +3070,10 @@ if test $emacs_cv_netdb_declares_h_errno = yes; then
fi
# sqrt and other floating-point functions such as fmod and frexp
# are found in -lm on most systems.
AC_CHECK_LIB(m, sqrt)
# are found in -lm on most systems, but mingw32 doesn't use -lm.
if test "${opsys}" != "mingw32"; then
AC_CHECK_LIB(m, sqrt)
fi
# Check for mail-locking functions in a "mail" library. Probably this should
# have the same check as for liblockfile below.
@ -2941,6 +3137,9 @@ case "$opsys" in
test $ac_cv_header_maillock_h = yes && mail_lock=no
fi
;;
mingw32)
mail_lock="none-needed" ;;
esac
BLESSMAIL_TARGET=
@ -2949,6 +3148,8 @@ case "$mail_lock" in
lockf) AC_DEFINE(MAIL_USE_LOCKF, 1, [Define if the mailer uses lockf to interlock the mail spool.]) ;;
none-needed) ;;
*) BLESSMAIL_TARGET="need-blessmail" ;;
esac
AC_SUBST(BLESSMAIL_TARGET)
@ -3020,25 +3221,29 @@ AC_DEFUN([tputs_link_source], [
return 0;
}]])
])
# Maybe curses should be tried earlier?
# See http://debbugs.gnu.org/cgi/bugreport.cgi?bug=9736#35
for tputs_library in '' tinfo ncurses terminfo termcap curses; do
OLIBS=$LIBS
if test -z "$tputs_library"; then
LIBS_TERMCAP=
msg='none required'
else
LIBS_TERMCAP=-l$tputs_library
msg=$LIBS_TERMCAP
LIBS="$LIBS_TERMCAP $LIBS"
fi
AC_RUN_IFELSE([tputs_link_source], [], [msg=no],
[AC_LINK_IFELSE([tputs_link_source], [], [msg=no])])
LIBS=$OLIBS
if test "X$msg" != Xno; then
break
fi
done
if test "${opsys}" = "mingw32"; then
msg='none required'
else
# Maybe curses should be tried earlier?
# See http://debbugs.gnu.org/cgi/bugreport.cgi?bug=9736#35
for tputs_library in '' tinfo ncurses terminfo termcap curses; do
OLIBS=$LIBS
if test -z "$tputs_library"; then
LIBS_TERMCAP=
msg='none required'
else
LIBS_TERMCAP=-l$tputs_library
msg=$LIBS_TERMCAP
LIBS="$LIBS_TERMCAP $LIBS"
fi
AC_RUN_IFELSE([tputs_link_source], [], [msg=no],
[AC_LINK_IFELSE([tputs_link_source], [], [msg=no])])
LIBS=$OLIBS
if test "X$msg" != Xno; then
break
fi
done
fi
AC_MSG_RESULT([$msg])
if test "X$msg" = Xno; then
AC_MSG_ERROR([The required function `tputs' was not found in any library.
@ -3084,6 +3289,11 @@ fail;
fi
;;
mingw32)
TERMINFO=no
LIBS_TERMCAP=
;;
netbsd)
if test "x$LIBS_TERMCAP" != "x-lterminfo"; then
TERMINFO=no
@ -3373,11 +3583,14 @@ dnl AC_DEFINE(HAVE_TCATTR, 1, [Define to 1 if you have tcgetattr and tcsetatt
dnl fi
dnl Turned on June 1996 supposing nobody will mind it.
AC_DEFINE(AMPERSAND_FULL_NAME, 1, [Define to use the convention that &
in the full name stands for the login id.])
dnl MinGW emulates passwd database, so this feature doesn't make sense there.
if test "${opsys}" != "mingw32"; then
AC_DEFINE(AMPERSAND_FULL_NAME, 1, [Define to use the convention that &
in the full name stands for the login id.])
fi
dnl Every platform that uses configure (ie every non-MS platform)
dnl supports this. There is a create-lockfiles option you can
dnl Every platform that uses configure supports this.
dnl There is a create-lockfiles option you can
dnl customize if you do not want the lock files to be written.
dnl So it is not clear that this #define still needs to exist.
AC_DEFINE(CLASH_DETECTION, 1, [Define if you want lock files to be written,
@ -3387,7 +3600,9 @@ AC_DEFINE(CLASH_DETECTION, 1, [Define if you want lock files to be written,
dnl Everybody supports this, except MS.
dnl Seems like the kind of thing we should be testing for, though.
## Note: PTYs are broken on darwin <6. Use at your own risk.
AC_DEFINE(HAVE_PTYS, 1, [Define if the system supports pty devices.])
if test "${opsys}" != "mingw32"; then
AC_DEFINE(HAVE_PTYS, 1, [Define if the system supports pty devices.])
fi
dnl Everybody supports this, except MS-DOS.
dnl Seems like the kind of thing we should be testing for, though.
@ -3397,10 +3612,20 @@ AC_DEFINE(HAVE_SOCKETS, 1, [Define if the system supports
AH_TEMPLATE(INTERNAL_TERMINAL, [This is substituted when $TERM is "internal".])
AC_DEFINE(NULL_DEVICE, ["/dev/null"], [Name of the file to open to get
AH_TEMPLATE(NULL_DEVICE, [Name of the file to open to get
a null file, or a data sink.])
if test "${opsys}" = "mingw32"; then
AC_DEFINE(NULL_DEVICE, ["NUL:"])
else
AC_DEFINE(NULL_DEVICE, ["/dev/null"])
fi
AC_DEFINE(SEPCHAR, [':'], [Character that separates PATH elements.])
AH_TEMPLATE(SEPCHAR, [Character that separates PATH elements.])
if test "${opsys}" = "mingw32"; then
AC_DEFINE(SEPCHAR, [';'])
else
AC_DEFINE(SEPCHAR, [':'])
fi
dnl Everybody supports this, except MS-DOS.
AC_DEFINE(subprocesses, 1, [Define to enable asynchronous subprocesses.])
@ -3411,19 +3636,28 @@ AC_DEFINE(USER_FULL_NAME, [pw->pw_gecos], [How to get a user's full name.])
AC_DEFINE(DIRECTORY_SEP, ['/'],
[Character that separates directories in a file name.])
dnl Only used on MS platforms.
AH_TEMPLATE(DEVICE_SEP, [Character that separates a device in a file name.])
if test "${opsys}" = "mingw32"; then
dnl Only used on MS platforms.
AC_DEFINE(DEVICE_SEP, ':')
AC_DEFINE(IS_DEVICE_SEP(_c_), [((_c_) == DEVICE_SEP)],
[Returns true if character is a device separator.])
AC_DEFINE(IS_DEVICE_SEP(_c_), 0,
[Returns true if character is a device separator.])
AC_DEFINE(IS_DIRECTORY_SEP(_c_), [((_c_) == '/' || (_c_) == '\\')],
[Returns true if character is a directory separator.])
AC_DEFINE(IS_DIRECTORY_SEP(_c_), [((_c_) == DIRECTORY_SEP)],
[Returns true if character is a directory separator.])
AC_DEFINE(IS_ANY_SEP(_c_), [(IS_DIRECTORY_SEP (_c_) || IS_DEVICE_SEP(_c_))],
[Returns true if character is any form of separator.])
else
AC_DEFINE(IS_DEVICE_SEP(_c_), 0,
[Returns true if character is a device separator.])
dnl On MS, this also accepts IS_DEVICE_SEP.
AC_DEFINE(IS_ANY_SEP(_c_), [(IS_DIRECTORY_SEP (_c_))],
[Returns true if character is any form of separator.])
AC_DEFINE(IS_DIRECTORY_SEP(_c_), [((_c_) == DIRECTORY_SEP)],
[Returns true if character is a directory separator.])
AC_DEFINE(IS_ANY_SEP(_c_), [(IS_DIRECTORY_SEP (_c_))],
[Returns true if character is any form of separator.])
fi
AH_TEMPLATE(NO_EDITRES, [Define if XEditRes should not be used.])
@ -3812,10 +4046,14 @@ else
esac
fi dnl GCC?
dnl In a weird quirk, MS runtime uses _setjmp and longjmp.
AC_CACHE_CHECK([for _setjmp], [emacs_cv_func__setjmp],
[AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[#include <setjmp.h>
#ifdef __MINGW32__
# define _longjmp longjmp
#endif
]],
[[jmp_buf j;
if (! _setjmp (j))
@ -3910,6 +4148,14 @@ case $opsys in
AC_DEFINE(IRIX6_5, [], [Define if the system is IRIX.])
;;
mingw32)
AC_DEFINE(DOS_NT, [])
AC_DEFINE(WINDOWSNT, 1, [Define if compiling for native MS Windows.])
if test "x$ac_enable_checking" != "x" ; then
AC_DEFINE(EMACSDEBUG, 1, [Define to 1 to enable w32 debug facilities.])
fi
;;
sol2*)
AC_DEFINE(USG, [])
AC_DEFINE(USG5, [])
@ -3931,6 +4177,10 @@ AC_CACHE_CHECK([for usable FIONREAD], [emacs_cv_usable_FIONREAD],
emacs_cv_usable_FIONREAD=no
;;
mingw32)
emacs_cv_usable_FIONREAD=yes
;;
*)
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[#include <sys/types.h>
@ -4071,6 +4321,12 @@ AC_DEFINE_UNQUOTED(EMACS_CONFIG_OPTIONS, "${emacs_config_options}",
AH_TEMPLATE(config_opsysfile, [Some platforms that do not use configure
define this to include extra configuration information.])
case $opsys in
mingw32)
AC_DEFINE(config_opsysfile, <ms-w32.h>, [])
;;
esac
XMENU_OBJ=
XOBJ=
FONT_OBJ=
@ -4131,12 +4387,14 @@ case "$USE_X_TOOLKIT" in
esac
AC_SUBST(TOOLKIT_LIBW)
if test "$USE_X_TOOLKIT" = "none"; then
LIBXT_OTHER="\$(LIBXSM)"
OLDXMENU_TARGET="really-oldXMenu"
else
LIBXT_OTHER="\$(LIBXMU) -lXt \$(LIBXTR6) -lXext"
OLDXMENU_TARGET="really-lwlib"
if test "${opsys}" != "mingw32"; then
if test "$USE_X_TOOLKIT" = "none"; then
LIBXT_OTHER="\$(LIBXSM)"
OLDXMENU_TARGET="really-oldXMenu"
else
LIBXT_OTHER="\$(LIBXMU) -lXt \$(LIBXTR6) -lXext"
OLDXMENU_TARGET="really-lwlib"
fi
fi
AC_SUBST(LIBXT_OTHER)
@ -4210,6 +4468,10 @@ if test "$opsys" = "cygwin"; then
## Cygwin differs because of its unexec().
PRE_ALLOC_OBJ=
POST_ALLOC_OBJ=lastfile.o
elif test "$opsys" = "mingw32"; then
CYGWIN_OBJ=
PRE_ALLOC_OBJ=
POST_ALLOC_OBJ=lastfile.o
else
CYGWIN_OBJ=
PRE_ALLOC_OBJ=lastfile.o
@ -4237,6 +4499,12 @@ gl_INIT
CFLAGS=$SAVE_CFLAGS
LIBS=$SAVE_LIBS
if test "${opsys}" = "mingw32"; then
CPPFLAGS="$CPPFLAGS -DUSE_CRT_DLL=1 -I $srcdir/nt/inc"
# Remove unneeded switches from the value of CC that goes to Makefiles
CC=`echo $CC | sed -e "s,$GCC_TEST_OPTIONS,,"`
fi
case "$opsys" in
aix4-2) LD_SWITCH_SYSTEM_TEMACS="-Wl,-bnodelcsect" ;;
@ -4273,6 +4541,16 @@ case "$opsys" in
## It seems clearer therefore to put this piece in LD_SWITCH_SYSTEM_TEMACS.
gnu*) LD_SWITCH_SYSTEM_TEMACS="\$(LD_SWITCH_X_SITE_RPATH)" ;;
mingw32)
## MinGW64 does not prepend an underscore to symbols, so we must
## pass a different -entry switch to linker. FIXME: It is better
## to make the entry points the same by changing unexw32.c.
case "$canonical" in
x86_64-*-*) LD_SWITCH_SYSTEM_TEMACS="-Wl,-stack,0x00800000 -Wl,-heap,0x00100000 -Wl,-image-base,0x01000000 -Wl,-entry,_start -Wl,-Map,./temacs.map" ;;
*) LD_SWITCH_SYSTEM_TEMACS="-Wl,-stack,0x00800000 -Wl,-heap,0x00100000 -Wl,-image-base,0x01000000 -Wl,-entry,__start -Wl,-Map,./temacs.map" ;;
esac
;;
openbsd) LD_SWITCH_SYSTEM_TEMACS='-nopie' ;;
*) LD_SWITCH_SYSTEM_TEMACS= ;;
@ -4287,6 +4565,24 @@ fi
AC_SUBST(LD_SWITCH_SYSTEM_TEMACS)
## MinGW-specific post-link processing of temacs.
TEMACS_POST_LINK=":"
ADDSECTION=
EMACS_HEAPSIZE=
if test "${opsys}" = "mingw32"; then
TEMACS_POST_LINK="\$(MINGW_TEMACS_POST_LINK)"
ADDSECTION="../nt/addsection\$(EXEEXT)"
## Preload heap size of temacs.exe in MB.
case "$canonical" in
x86_64-*-*) EMACS_HEAPSIZE=42 ;;
*) EMACS_HEAPSIZE=27 ;;
esac
fi
AC_SUBST(ADDSECTION)
AC_SUBST(TEMACS_POST_LINK)
AC_SUBST(EMACS_HEAPSIZE)
## Common for all window systems
if test "$window_system" != "none"; then
AC_DEFINE(HAVE_WINDOW_SYSTEM, 1, [Define if you have a window system.])
@ -4445,12 +4741,12 @@ dnl This will work, but you get a config.status that is not quite right
dnl (see http://lists.gnu.org/archive/html/bug-autoconf/2008-08/msg00028.html).
dnl That doesn't have any obvious consequences for Emacs, but on the whole
dnl it seems better to just live with the duplication.
SUBDIR_MAKEFILES="lib/Makefile lib-src/Makefile oldXMenu/Makefile doc/emacs/Makefile doc/misc/Makefile doc/lispintro/Makefile doc/lispref/Makefile src/Makefile lwlib/Makefile lisp/Makefile leim/Makefile nextstep/Makefile"
SUBDIR_MAKEFILES="lib/Makefile lib-src/Makefile oldXMenu/Makefile doc/emacs/Makefile doc/misc/Makefile doc/lispintro/Makefile doc/lispref/Makefile src/Makefile lwlib/Makefile lisp/Makefile leim/Makefile nextstep/Makefile nt/Makefile"
AC_CONFIG_FILES([Makefile lib/Makefile lib-src/Makefile oldXMenu/Makefile \
doc/emacs/Makefile doc/misc/Makefile doc/lispintro/Makefile \
doc/lispref/Makefile src/Makefile lwlib/Makefile lisp/Makefile \
leim/Makefile nextstep/Makefile])
leim/Makefile nextstep/Makefile nt/Makefile])
dnl test/ is not present in release tarfiles.
opt_makefile=test/automated/Makefile
@ -4493,8 +4789,12 @@ dnl by configure. This also explains the `move-if-change' test and
dnl the use of force in the `epaths-force' rule in Makefile.in.
AC_CONFIG_COMMANDS([epaths], [
echo creating src/epaths.h
${MAKE-make} MAKEFILE_NAME=do-not-make-Makefile epaths-force
], [GCC="$GCC" CPPFLAGS="$CPPFLAGS"])
if test "${opsys}" = "mingw32"; then
${MAKE-make} MAKEFILE_NAME=do-not-make-Makefile epaths-force-w32
else
${MAKE-make} MAKEFILE_NAME=do-not-make-Makefile epaths-force
fi
], [GCC="$GCC" CPPFLAGS="$CPPFLAGS" opsys="$opsys"])
AC_CONFIG_COMMANDS([gdbinit], [
if test ! -f src/.gdbinit && test -f "$srcdir/src/.gdbinit"; then

View file

@ -1,3 +1,7 @@
2013-05-16 Eli Zaretskii <eliz@gnu.org>
* NEWS: Advertise the MSYS build on MS-Windows.
2013-05-15 Stefan Monnier <monnier@iro.umontreal.ca>
* .gitignore: Don't ignore DOC-* any more.

View file

@ -29,7 +29,15 @@ build time, like libacl on GNU/Linux. To prevent this, use the
configure option `--disable-acl'.
** The configure option --with-crt-dir has been removed.
It is no longer needed, as the crt*.o files are no longer linked specially.
It is no longer needed, as the crt*.o files are no longer linked
specially.
** Emacs for MS-Windows can now be built by running the configure script
using the MSYS environment and MinGW development tools.
This is from now on the preferred method of building Emacs on
MS-Windows. The Windows-specific configure.bat and makefile.w32-in
files are deprecated. See the file nt/INSTALL.MSYS for detailed
instructions.
* Startup Changes in Emacs 24.4

View file

@ -1,3 +1,7 @@
2013-05-16 Eli Zaretskii <eliz@gnu.org>
* Makefile.in (leim-list.el, check-declare): Use reveal-filename.
2013-04-01 Paul Eggert <eggert@cs.ucla.edu>
Use UTF-8 for most files with non-ASCII characters (Bug#13936).

View file

@ -140,7 +140,7 @@ leim-list.el: ${TIT_MISC} ${srcdir}/leim-ext.el
--eval "(update-leim-list-file \".\")" ; \
else \
${RUN_EMACS} -l ${buildlisppath}/international/quail \
--eval "(update-leim-list-file \".\" \"${srcdir}\")" ; \
--eval "(update-leim-list-file \".\" (reveal-filename \"${srcdir}\"))" ; \
fi
sed -n '/^[^;]/ p' < ${srcdir}/leim-ext.el >> $@
@ -199,4 +199,4 @@ extraclean: maintainer-clean
check-declare:
$(RUN_EMACS) -l $(buildlisppath)/emacs-lisp/check-declare \
--eval '(check-declare-directory "$(srcdir)")'
--eval '(check-declare-directory (reveal-filename "$(srcdir)"))'

View file

@ -1,3 +1,27 @@
2013-05-16 Eli Zaretskii <eliz@gnu.org>
* update-game-score.c [WINDOWSNT]: Include "ntlib.h".
* ntlib.h (sleep): Update prototype.
(geteuid): Add prototype.
* ntlib.c (sleep): Now returns an unsigned value.
(getgid): New function.
* Makefile.in (CLIENTW, LIB_WSOCK32, LIBS_ECLIENT, NTLIB)
(CLIENTRES, WINDRES, NTINC, NTDEPS): New variables.
(INSTALLABLES): Add $(CLIENTW).
(LIBS_MOVE): Use $(LIB_WSOCK32).
($(DESTDIR)${archlibdir}): Use $(EXEEXT) on update-game-score.
(test-distrib${EXEEXT}): Use $(EXEEXT) on test-distrib.
(etags${EXEEXT}, ebrowse${EXEEXT}, ctags${EXEEXT})
(profile${EXEEXT}, make-docfile${EXEEXT}, movemail${EXEEXT})
(emacsclient${EXEEXT}, hexl${EXEEXT}, update-game-score${EXEEXT}):
Add $(NTLIB) to prerequisites. Use $(EXEEXT).
(pop.o): Add pop.h to prerequisites.
(emacsclientw${EXEEXT}, ntlib.o): New targets.
(emacsclient.res): New target.
2013-05-15 Stefan Monnier <monnier@iro.umontreal.ca>
* makefile.w32-in ($(DOC)): Use DOC rather than DOC-X.

View file

@ -113,8 +113,11 @@ MKDIR_P = @MKDIR_P@
# ========================== Lists of Files ===========================
# emacsclientw.exe for MinGW, empty otherwise
CLIENTW = @CLIENTW@
# Things that a user might actually run, which should be installed in bindir.
INSTALLABLES = etags${EXEEXT} ctags${EXEEXT} emacsclient${EXEEXT} \
INSTALLABLES = etags${EXEEXT} ctags${EXEEXT} emacsclient${EXEEXT} $(CLIENTW) \
ebrowse${EXEEXT}
INSTALLABLE_SCRIPTS = grep-changelog
@ -163,10 +166,21 @@ LIBS_MAIL=@LIBS_MAIL@
LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
## empty or -lrt or -lposix4 if HAVE_FDATASYNC
LIB_FDATASYNC = @LIB_FDATASYNC@
## empty or -lwsock2 for MinGW
LIB_WSOCK32=@LIB_WSOCK32@
## Extra libraries to use when linking movemail.
LIBS_MOVE = $(LIBS_MAIL) $(KRB4LIB) $(DESLIB) $(KRB5LIB) $(CRYPTOLIB) \
$(COM_ERRLIB) $(LIBHESIOD) $(LIBRESOLV)
$(COM_ERRLIB) $(LIBHESIOD) $(LIBRESOLV) $(LIB_WSOCK32)
## Extra libraries when linking emacsclient
## (empty or -lcomctl32 for MinGW)
LIBS_ECLIENT = @LIBS_ECLIENT@
## Extra object files for linking for MinGW
NTLIB = @NTLIB@
CLIENTRES = @CLIENTRES@
WINDRES = @WINDRES@
## Some systems define this to request special libraries.
LIBS_SYSTEM = @LIBS_SYSTEM@
@ -227,7 +241,7 @@ $(DESTDIR)${archlibdir}: all
umask 022; ${MKDIR_P} $(DESTDIR)${gamedir}; \
touch $(DESTDIR)${gamedir}/snake-scores; \
touch $(DESTDIR)${gamedir}/tetris-scores
-if chown ${gameuser} $(DESTDIR)${archlibdir}/update-game-score && chmod u+s $(DESTDIR)${archlibdir}/update-game-score; then \
-if chown ${gameuser} $(DESTDIR)${archlibdir}/update-game-score${EXEEXT} && chmod u+s $(DESTDIR)${archlibdir}/update-game-score${EXEEXT}; then \
chown ${gameuser} $(DESTDIR)${gamedir}; \
chmod u=rwx,g=rwx,o=rx $(DESTDIR)${gamedir}; \
fi
@ -292,7 +306,7 @@ TAGS: etags${EXEEXT}
## distribute Emacs. If they were clobbered, all the .elc files were
## clobbered too.
test-distrib${EXEEXT}: ${srcdir}/test-distrib.c
$(CC) ${ALL_CFLAGS} -o test-distrib ${srcdir}/test-distrib.c
$(CC) ${ALL_CFLAGS} -o test-distrib${EXEEXT} ${srcdir}/test-distrib.c
./test-distrib ${srcdir}/testfile
../lib/libgnu.a: $(config_h)
@ -302,47 +316,68 @@ regex.o: $(srcdir)/../src/regex.c $(srcdir)/../src/regex.h $(config_h)
${CC} -c ${CPP_CFLAGS} -DCONFIG_BROKETS -DINHIBIT_STRING_HEADER \
${srcdir}/../src/regex.c
etags${EXEEXT}: ${srcdir}/etags.c regex.o $(config_h)
etags${EXEEXT}: ${srcdir}/etags.c regex.o $(NTLIB) $(config_h)
$(CC) ${ALL_CFLAGS} -DEMACS_NAME="\"GNU Emacs\"" \
-DVERSION="\"${version}\"" ${srcdir}/etags.c \
regex.o $(LOADLIBES) -o etags
regex.o $(LOADLIBES) $(NTLIB) -o etags${EXEEXT}
ebrowse${EXEEXT}: ${srcdir}/ebrowse.c ${srcdir}/../lib/min-max.h $(config_h)
ebrowse${EXEEXT}: ${srcdir}/ebrowse.c ${srcdir}/../lib/min-max.h $(NTLIB) \
$(config_h)
$(CC) ${ALL_CFLAGS} -DVERSION="\"${version}\"" \
${srcdir}/ebrowse.c $(LOADLIBES) -o ebrowse
${srcdir}/ebrowse.c $(LOADLIBES) $(NTLIB) -o ebrowse${EXEEXT}
## We depend on etags to assure that parallel makes do not write two
## etags.o files on top of each other.
ctags${EXEEXT}: etags${EXEEXT}
$(CC) ${ALL_CFLAGS} -DCTAGS -DEMACS_NAME="\"GNU Emacs\"" \
-DVERSION="\"${version}\"" ${srcdir}/etags.c \
regex.o $(LOADLIBES) -o ctags
regex.o $(LOADLIBES) $(NTLIB) -o ctags${EXEEXT}
profile${EXEEXT}: ${srcdir}/profile.c $(config_h)
profile${EXEEXT}: ${srcdir}/profile.c $(NTLIB) $(config_h)
$(CC) ${ALL_CFLAGS} ${srcdir}/profile.c \
$(LOADLIBES) $(LIB_CLOCK_GETTIME) -o profile
$(LOADLIBES) $(NTLIB) $(LIB_CLOCK_GETTIME) -o profile${EXEEXT}
make-docfile${EXEEXT}: ${srcdir}/make-docfile.c $(config_h)
$(CC) ${ALL_CFLAGS} ${srcdir}/make-docfile.c $(LOADLIBES) \
-o make-docfile
make-docfile${EXEEXT}: ${srcdir}/make-docfile.c $(NTLIB) $(config_h)
$(CC) ${ALL_CFLAGS} ${srcdir}/make-docfile.c $(LOADLIBES) $(NTLIB) \
-o make-docfile${EXEEXT}
movemail${EXEEXT}: ${srcdir}/movemail.c pop.o $(config_h)
movemail${EXEEXT}: ${srcdir}/movemail.c pop.o $(NTLIB) $(config_h)
$(CC) ${ALL_CFLAGS} ${MOVE_FLAGS} ${srcdir}/movemail.c pop.o \
$(LOADLIBES) $(LIBS_MOVE) -o movemail
$(LOADLIBES) $(NTLIB) $(LIBS_MOVE) -o movemail${EXEEXT}
pop.o: ${srcdir}/pop.c ${srcdir}/../lib/min-max.h $(config_h)
pop.o: ${srcdir}/pop.c ${srcdir}/pop.h ${srcdir}/../lib/min-max.h $(config_h)
$(CC) -c ${CPP_CFLAGS} ${MOVE_FLAGS} ${srcdir}/pop.c
emacsclient${EXEEXT}: ${srcdir}/emacsclient.c $(config_h)
emacsclient${EXEEXT}: ${srcdir}/emacsclient.c $(NTLIB) $(config_h)
$(CC) ${ALL_CFLAGS} ${srcdir}/emacsclient.c \
-DVERSION="\"${version}\"" \
$(LOADLIBES) $(LIB_FDATASYNC) -o emacsclient
-DVERSION="\"${version}\"" $(NTLIB) $(LOADLIBES) $(LIB_FDATASYNC) \
$(LIB_WSOCK32) $(LIBS_ECLIENT) -o emacsclient${EXEEXT}
hexl${EXEEXT}: ${srcdir}/hexl.c $(config_h)
$(CC) ${ALL_CFLAGS} ${srcdir}/hexl.c $(LOADLIBES) -o hexl
emacsclientw${EXEEXT}: ${srcdir}/emacsclient.c $(NTLIB) $(CLIENTRES) $(config_h)
$(CC) ${ALL_CFLAGS} $(CLIENTRES) -mwindows ${srcdir}/emacsclient.c \
-DVERSION="\"${version}\"" $(LOADLIBES) $(LIB_FDATASYNC) \
$(LIB_WSOCK32) $(LIBS_ECLIENT) -o emacsclientw${EXEEXT}
update-game-score${EXEEXT}: ${srcdir}/update-game-score.c $(config_h)
NTINC = ${srcdir}/../nt/inc
NTDEPS = $(NTINC)/ms-w32.h $(NTINC)/sys/stat.h $(NTINC)/inttypes.h \
$(NTINC)/stdint.h $(NTINC)/pwd.h $(NTINC)/sys/time.h $(NTINC)/stdbool.h \
$(NTINC)/sys/wait.h $(NTINC)/unistd.h $(NTINC)/sys/file.h $(NTINC)/netdb.h
# The dependency on $(NTDEPS) is a trick intended to cause recompile of
# programs on MinGW whenever some private header in nt/inc is modified.
ntlib.o: ${srcdir}/ntlib.c ${srcdir}/ntlib.h $(NTDEPS)
$(CC) -c ${CPP_CFLAGS} ${srcdir}/ntlib.c
hexl${EXEEXT}: ${srcdir}/hexl.c $(NTLIB) $(config_h)
$(CC) ${ALL_CFLAGS} ${srcdir}/hexl.c $(LOADLIBES) -o hexl${EXEEXT}
update-game-score${EXEEXT}: ${srcdir}/update-game-score.c $(NTLIB) $(config_h)
$(CC) ${ALL_CFLAGS} -DHAVE_SHARED_GAME_DIR="\"$(gamedir)\"" \
${srcdir}/update-game-score.c $(LOADLIBES) -o update-game-score
${srcdir}/update-game-score.c $(LOADLIBES) $(NTLIB) \
-o update-game-score${EXEEXT}
emacsclient.res: $(NTINC)/../emacsclient.rc
$(WINDRES) -O coff --include-dir=$(NTINC)/.. -o emacsclient.res \
$(NTINC)/../emacsclient.rc
## Makefile ends here.

View file

@ -49,10 +49,11 @@ struct timezone
/* Emulate sleep...we could have done this with a define, but that
would necessitate including windows.h in the files that used it.
This is much easier. */
void
sleep (unsigned long seconds)
unsigned
sleep (unsigned seconds)
{
Sleep (seconds * 1000);
return 0;
}
/* Get the current working directory. */
@ -137,6 +138,12 @@ getuid (void)
return 0;
}
unsigned
geteuid (void)
{
return getuid ();
}
unsigned
getgid (void)
{
@ -415,4 +422,3 @@ lstat (const char * path, struct stat * buf)
{
return stat (path, buf);
}

View file

@ -16,7 +16,6 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#include <pwd.h>
#include <malloc.h>
@ -29,12 +28,13 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#ifdef sleep
#undef sleep
#endif
void sleep (unsigned long seconds);
unsigned sleep (unsigned seconds);
char *getwd (char *dir);
int getppid (void);
char * getlogin (void);
char * cuserid (char * s);
unsigned getuid (void);
unsigned geteuid (void);
unsigned getegid (void);
unsigned getgid (void);
int setuid (unsigned uid);

View file

@ -46,6 +46,10 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#include <sys/stat.h>
#include <getopt.h>
#ifdef WINDOWSNT
#include "ntlib.h"
#endif
#define MAX_ATTEMPTS 5
#define MAX_SCORES 200
#define MAX_DATA_LEN 1024

View file

@ -9,6 +9,10 @@ SUFFIXES =
AM_CFLAGS = $(PROFILING_CFLAGS) $(GNULIB_WARN_CFLAGS) $(WERROR_CFLAGS)
DEFAULT_INCLUDES = -I. -I$(top_srcdir)/lib -I../src -I$(top_srcdir)/src
if BUILDING_FOR_WINDOWSNT
include ../nt/gnulib.mk
else
include gnulib.mk
libgnu_a_SOURCES += openat-die.c save-cwd.c
endif

View file

@ -1,3 +1,18 @@
2013-05-16 Eli Zaretskii <eliz@gnu.org>
* subr.el (reveal-filename): New function.
* loadup.el: Compute Emacs executable versions on MS-Windows,
where executables have the .exe extension. Add a hard link
emacs-XX.YY.ZZ.exe on MS-Windows.
* Makefile.in (XARGS_LIMIT): New variable.
(custom-deps, finder-data, autoloads)
($(MH_E_DIR)/mh-loaddefs.el, $(TRAMP_DIR)/tramp-loaddefs.el)
($(CAL_DIR)/cal-loaddefs.el, $(CAL_DIR)/diary-loaddefs.el)
($(CAL_DIR)/hol-loaddefs.el): Use reveal-filename.
(compile-main): Limit xargs according to $(XARGS_LIMIT).
2013-05-16 Leo Liu <sdl.web@gmail.com>
* progmodes/octave.el (octave-indent-defun): Mark obsolete.

View file

@ -24,6 +24,10 @@ abs_top_builddir = @abs_top_builddir@
lisp = $(srcdir)
VPATH = $(srcdir)
# Empty for all systems except MinGW, where xargs needs an explicit
# limitation.
XARGS_LIMIT = @XARGS_LIMIT@
# You can specify a different executable on the make command line,
# e.g. "make EMACS=../src/emacs ...".
@ -160,21 +164,21 @@ $(lisp)/cus-load.el:
custom-deps: doit
cd $(lisp); $(setwins_almost); \
echo Directories: $$wins; \
$(emacs) -l cus-dep --eval '(setq generated-custom-dependencies-file "$(lisp)/cus-load.el")' -f custom-make-dependencies $$wins
$(emacs) -l cus-dep --eval '(setq generated-custom-dependencies-file (reveal-filename "$(lisp)/cus-load.el"))' -f custom-make-dependencies $$wins
$(lisp)/finder-inf.el:
$(MAKE) $(MFLAGS) finder-data
finder-data: doit
cd $(lisp); $(setwins_almost); \
echo Directories: $$wins; \
$(emacs) -l finder --eval '(setq generated-finder-keywords-file "$(lisp)/finder-inf.el")' -f finder-compile-keywords-make-dist $$wins
$(emacs) -l finder --eval '(setq generated-finder-keywords-file (reveal-filename "$(lisp)/finder-inf.el"))' -f finder-compile-keywords-make-dist $$wins
# The chmod +w is to handle env var CVSREAD=1.
autoloads: $(LOADDEFS) doit
cd $(lisp) && chmod +w $(AUTOGEN_VCS)
cd $(lisp); $(setwins_almost); \
echo Directories: $$wins; \
$(emacs) -l autoload --eval '(setq generated-autoload-file "$(lisp)/loaddefs.el")' -f batch-update-autoloads $$wins
$(emacs) -l autoload --eval '(setq generated-autoload-file (reveal-filename "$(lisp)/loaddefs.el"))' -f batch-update-autoloads $$wins
# This is required by the bootstrap-emacs target in ../src/Makefile, so
# we know that if we have an emacs executable, we also have a subdirs.el.
@ -274,7 +278,7 @@ compile-main: compile-clean
test -f $$el || continue; \
test ! -f $${el}c && GREP_OPTIONS= grep '^;.*no-byte-compile: t' $$el > /dev/null && continue; \
echo "$${el}c"; \
done | xargs echo) | \
done | xargs $(XARGS_LIMIT) echo) | \
while read chunk; do \
$(MAKE) $(MFLAGS) compile-targets EMACS="$(EMACS)" TARGETS="$$chunk"; \
done
@ -369,7 +373,7 @@ mh-autoloads: $(MH_E_DIR)/mh-loaddefs.el
$(MH_E_DIR)/mh-loaddefs.el: $(MH_E_SRC)
$(emacs) -l autoload \
--eval "(setq generate-autoload-cookie \";;;###mh-autoload\")" \
--eval "(setq generated-autoload-file \"$@\")" \
--eval "(setq generated-autoload-file (reveal-filename \"$@\"))" \
--eval "(setq make-backup-files nil)" \
-f batch-update-autoloads $(MH_E_DIR)
@ -387,7 +391,7 @@ TRAMP_SRC = $(TRAMP_DIR)/tramp.el $(TRAMP_DIR)/tramp-adb.el \
$(TRAMP_DIR)/tramp-loaddefs.el: $(TRAMP_SRC)
$(emacs) -l autoload \
--eval "(setq generate-autoload-cookie \";;;###tramp-autoload\")" \
--eval "(setq generated-autoload-file \"$@\")" \
--eval "(setq generated-autoload-file (reveal-filename \"$@\"))" \
--eval "(setq make-backup-files nil)" \
-f batch-update-autoloads $(TRAMP_DIR)
@ -409,21 +413,21 @@ CAL_SRC = $(CAL_DIR)/cal-bahai.el $(CAL_DIR)/cal-china.el \
$(CAL_DIR)/cal-loaddefs.el: $(CAL_SRC)
$(emacs) -l autoload \
--eval "(setq generate-autoload-cookie \";;;###cal-autoload\")" \
--eval "(setq generated-autoload-file \"$@\")" \
--eval "(setq generated-autoload-file (reveal-filename \"$@\"))" \
--eval "(setq make-backup-files nil)" \
-f batch-update-autoloads $(CAL_DIR)
$(CAL_DIR)/diary-loaddefs.el: $(CAL_SRC)
$(emacs) -l autoload \
--eval "(setq generate-autoload-cookie \";;;###diary-autoload\")" \
--eval "(setq generated-autoload-file \"$@\")" \
--eval "(setq generated-autoload-file (reveal-filename \"$@\"))" \
--eval "(setq make-backup-files nil)" \
-f batch-update-autoloads $(CAL_DIR)
$(CAL_DIR)/hol-loaddefs.el: $(CAL_SRC)
$(emacs) -l autoload \
--eval "(setq generate-autoload-cookie \";;;###holiday-autoload\")" \
--eval "(setq generated-autoload-file \"$@\")" \
--eval "(setq generated-autoload-file (reveal-filename \"$@\"))" \
--eval "(setq make-backup-files nil)" \
-f batch-update-autoloads $(CAL_DIR)

View file

@ -290,9 +290,12 @@
(equal (nth 4 command-line-args) "dump"))
(not (eq system-type 'ms-dos)))
(let* ((base (concat "emacs-" emacs-version "."))
(exelen (if (eq system-type 'windows-nt) -4))
(files (file-name-all-completions base default-directory))
(versions (mapcar (function (lambda (name)
(string-to-number (substring name (length base)))))
(versions (mapcar (function
(lambda (name)
(string-to-number
(substring name (length base) exelen))))
files)))
(setq emacs-bzr-version (condition-case nil (emacs-bzr-get-version)
(error nil)))
@ -376,18 +379,25 @@
(dump-emacs "emacs" "temacs")
(message "%d pure bytes used" pure-bytes-used)
;; Recompute NAME now, so that it isn't set when we dump.
(if (not (or (memq system-type '(ms-dos windows-nt))
(if (not (or (eq system-type 'ms-dos)
;; Don't bother adding another name if we're just
;; building bootstrap-emacs.
(equal (nth 3 command-line-args) "bootstrap")
(equal (nth 4 command-line-args) "bootstrap")))
(let ((name (concat "emacs-" emacs-version)))
(let ((name (concat "emacs-" emacs-version))
(exe (if (eq system-type 'windows-nt) ".exe" "")))
(while (string-match "[^-+_.a-zA-Z0-9]+" name)
(setq name (concat (downcase (substring name 0 (match-beginning 0)))
"-"
(substring name (match-end 0)))))
(setq name (concat name exe))
(message "Adding name %s" name)
(add-name-to-file "emacs" name t)))
;; When this runs on Windows, invocation-directory is not
;; necessarily the current directory.
(add-name-to-file (expand-file-name (concat "emacs" exe)
invocation-directory)
(expand-file-name name invocation-directory)
t)))
(kill-emacs)))
;; For machines with CANNOT_DUMP defined in config.h,

View file

@ -4678,4 +4678,20 @@ as alpha versions."
(prin1-to-string (make-hash-table)))))
(provide 'hashtable-print-readable))
;; This is used in lisp/Makefile.in and in leim/Makefile.in to
;; generate file names for autoloads, custom-deps, and finder-data.
(defun reveal-filename (file)
"Produce the real file name for FILE.
On systems other than MS-Windows, just returns FILE.
On MS-Windows, converts /d/foo/bar form of file names
passed by MSYS Make into d:/foo/bar that Emacs can grok.
This function is called from lisp/Makefile."
(when (and (eq system-type 'windows-nt)
(string-match "\\`/[a-zA-Z]/" file))
(setq file (concat (substring file 1 2) ":" (substring file 2))))
file)
;;; subr.el ends here

View file

@ -1,3 +1,48 @@
2013-05-16 Eli Zaretskii <eliz@gnu.org>
* msysconfig.sh: New file.
* mingw-cfg.site: New file.
* makefile.w32-in (LOCAL_FLAGS): Add -DOLD_PATHS=1.
* inc/unistd.h: Include pwd.h and sys/types.h.
* inc/sys/time.h (_TIMEVAL_DEFINED, timerisset, timercmp)
(timerclear): Define.
(gettimeofday): Adjust signature to be Posix compatible, by using
the 'restrict' keyword.
* inc/sys/stat.h (UTIME_NOW, UTIME_OMIT): Define.
(struct _stat, struct _stati64): Define.
* inc/sys/socket.h (timeval): Define only for MSVC.
(FD_SET, FD_CLR, FD_ISSET, fd_set): Redefine only if
EMACS_CONFIG_H is defined.
(timeval): Undefine only for MSVC.
* inc/ms-w32.h (HAVE___BUILTIN_UNWIND_INIT, restrict)
(HAVE_WINDOW_SYSTEM, HAVE_MENUS, EMACS_CONFIGURATION)
(EMACS_CONFIG_OPTIONS, HAVE_LONG_LONG_INT)
(HAVE_UNSIGNED_LONG_LONG_INT): Define only if not already defined.
(fileno): Move definition after including stdio.h.
(sigset_t): Guard typedef by _W64.
* gnulib.mk: New file.
* epaths.nt: New file.
* addpm.c [!OLD_PATHS]: Include src/epaths.h, instead of having a
copy of the file names there.
<env_vars> [!OLD_PATHS]: Use macros from epaths.h instead of
literal strings.
* Makefile.in: New file.
* INSTALL.MSYS: New file.
* INSTALL: Mention INSTALL.MSYS.
2013-05-15 Stefan Monnier <monnier@iro.umontreal.ca>
* makefile.w32-in (clean, top-distclean): DOC-X doesn't exist any more.

View file

@ -13,9 +13,13 @@
Do not use this recipe with Cygwin. For building on Cygwin,
use the normal installation instructions, ../INSTALL.
If you have a Cygwin or MSYS port of Bash on your Path, you will be
better off removing it from PATH. (For details, search for "MSYS
sh.exe" below.)
Do not use these instructions with MSYS environment. For building
the native Windows binary with MinGW and MSYS, follow the
instructions in the file INSTALL.MSYS in this directory.
For building without MSYS, if you have a Cygwin or MSYS port of Bash
on your Path, you will be better off removing it from PATH. (For
details, search for "MSYS sh.exe" below.)
1. Change to the `nt' directory (the directory of this file):

640
nt/INSTALL.MSYS Normal file
View file

@ -0,0 +1,640 @@
Building and Installing Emacs on MS-Windows
using the MSYS and MinGW tools
Copyright (C) 2013 Free Software Foundation, Inc.
See the end of the file for license conditions.
The MSYS/MinGW build described here is supported on versions of
Windows starting with Windows 2000 and newer. Windows 9X are not
supported (but the Emacs binary produced by this build will run on
Windows 9X as well).
* For the brave (a.k.a. "impatient"):
For those who have a working MSYS/MinGW development environment and
are comfortable with running Posix configure scripts, here are the
concise instructions for configuring and building the native Windows
binary of Emacs with these tools.
Do not use this recipe with Cygwin. For building on Cygwin, use the
normal installation instructions, ../INSTALL.
Do not use these instructions if you don't have MSYS installed; for
that, see the file INSTALL in this directory.
0. Start the MSYS Bash window. Everything else below is done from
that window's Bash prompt.
0a. If you are building from the development trunk (as opposed to a
release tarball), produce the configure script, by typing from
the top-level Emacs source directory:
./autogen.sh
1. If you want to build Emacs outside of the source tree
(recommended), create the build directory and chdir there.
2. Invoke the MSYS-specific configure script:
- If you are building outside the source tree:
/PATH/TO/EMACS/SOURCE/TREE/nt/msysconfig.sh --prefix=PREFIX ...
- If you are building in-place, i.e. inside the source tree:
./nt/msysconfig.sh --prefix=PREFIX ...
It is always preferable to use --prefix to configure Emacs for
some specific location of its installed tree; the default
/usr/local is not suitable for Windows.
You can pass other options to the configure script. Here's a
typical example (for an in-place debug build):
CPPFLAGS='-DGLYPH_DEBUG=1' CFLAGS='-O0 -g3' ./nt/msysconfig.sh --prefix=d:/usr/emacs --enable-checking
3. After the configure script finishes, it should display the
resulting configuration. After that, type
make
Use "make -j N" if your MSYS Make supports parallel execution;
the build will take significantly less time in that case. Here N
is the number of simultaneous parallel jobs; use the number of
the cores on your system.
4. Install the produced binaries:
make install
If you want the installation tree to go to a place that is
different from the one specified by --prefix, say
make install prefix=/where/ever/you/want
That's it!
If these short instructions somehow fail, read the rest of this
file.
* Installing MinGW and MSYS
Make sure you carefully read the following two sections in their
entirety and install/configure the various packages as instructed.
A correct installation makes all the rest almost trivial; a botched
installation will likely make you miserable for quite some time.
There are two alternative to installing MinGW + MSYS: using the GUI
installer, called mingw-get, provided by the MinGW project, or
manual installation. The next two sections describe each one of
these.
** Installing MinGW and MSYS using mingw-get
A nice GUI installer, called mingw-get, is available for those who
don't like to mess with manual installations. You can download it
from here:
https://sourceforge.net/projects/mingw/files/Installer/mingw-get/
(This installer only supports packages downloaded from the MinGW
site; for the rest you will still need the manual method.)
After installing mingw-get, invoke it to install the packages that
are already selected by default on the "Select Components" screen of
its wizard.
After that, use "ming-get install PACKAGE" to install the following
additional packages:
. msys-base
. mingw-developer-toolkit
. msys-automake
(We recommend that you refrain from installing the MSYS Texinfo
package, which is part of msys-base, because it might produce mixed
EOL format when installing Info files. Instead, install the MinGW
port of Texinfo, see the ezwinports URL below.)
At this point, you should be ready to configure and build Emacs in
its basic configuration. Skip to the "Generating the configure
script" section for the build instructions. If you want to build it
with image support and other optional libraries, read about the
optional libraries near the end of this document, before you start
the build. Also, consider installing additional MinGW packages that
are required/recommended, especially if you are building from the
Bazaar repository, as described in the next section.
** Installing MinGW and MSYS manually
*** MinGW
You will need to install the MinGW port of GCC and Binutils, and the
MinGW runtime and Windows API distributions, to compile Emacs. You
can find these on the MinGW download/Base page:
https://sourceforge.net/projects/mingw/files/MinGW/Base/
In general, install the latest stable versions of the following
MinGW packages from that page: gcc, binutils, mingw-rt, w32api. You
only need the 'bin' and the 'dll' tarballs of each of the above.
MinGW packages are distributed as .tar.lzma compressed archives. To
install the packages manually, we recommend to use the Windows port
of the 'bsdtar' program to unpack the tarballs. 'bsdtar' is
available as part of the 'libarchive' package from here:
http://sourceforge.net/projects/ezwinports/files/
The recommended place to install these packages is a single tree
starting from some directory on a drive other than the system drive
C:. A typical example would be D:\usr, with D:\usr\bin holding the
binaries and DLLs (should be added to your Path environment
variable), D:\usr\include holding the include files, D:\usr\lib
holding the static and import libraries, D:\usr\share holding docs,
message catalogs, and package-specific subdirectories, etc.
Having all the headers and libraries in a single place will greatly
reduce the number of -I and -L flags you will have to pass to the
configure script (see below), as these files will be right where the
compiler expects them.
We specifically do NOT recommend installing packages below
"C:\Program Files" or "C:\Program Files (x86)". These directories
are protected on versions of Windows from Vista and on, and you will
have difficulties updating and maintaining your installation later,
due to UAC elevation prompts, file virtualization, etc. You *have*
been warned!
Additional MinGW packages are required/recommended, especially if
you are building from the Bazaar repository:
. Texinfo (needed to produce the Info manuals when building from
bzr, and for "make install")
Available from http://sourceforge.net/projects/ezwinports/files/.
. gzip (needed to compress files during "make install")
Available from http://gnuwin32.sourceforge.net/packages/gzip.htm.
. pkg-config (needed for building with some optional libraries,
such as GnuTLS and libxml2)
Available from http://www.gtk.org/download/win32.php
Each package might list other packages as prerequisites on its
download page (under "Runtime requirements"); download those as
well. (Using the GUI installer mingw-get will fetch those
prerequisites automatically for you.) A missing prerequisite will
manifest itself by the program failing to run and presenting a
pop-up dialog that states the missing or incompatible DLL; be sure
to find and install these missing DLLs.
Once you think you have MinGW installed, test the installation by
building a trivial "hello, world!" program, and make sure that it
builds without any error messages and the binary works when run.
*** MSYS
You will need a reasonably full MSYS installation. MSYS is an
environment needed to run the Posix configure scripts and the
resulting Makefile's, in order to produce native Windows binaries
using the MinGW compiler and runtime libraries. Here's the list of
MSYS packages that are required:
. All the packages from the MSYS Base distribution, listed here:
https://sourceforge.net/projects/mingw/files/MSYS/Base/
. Additional packages listed below, from the MSYS Extension
distribution here:
https://sourceforge.net/projects/mingw/files/MSYS/Extension/
- flex
- bison
- m4
- perl
- mktemp
These should only be needed if you intend to build development
versions of Emacs from the Bazaar repository.
. Additional packages (needed only if building from the Bazaar
repository): Automake and Autoconf. They are available from
here:
http://sourceforge.net/projects/ezwinports/files/automake-1.11.6-msys-bin.zip/download
http://sourceforge.net/projects/ezwinports/files/autoconf-2.65-msys-bin.zip/download
MSYS packages are distributed as .tar.lzma compressed archives. To
install the packages manually, we recommend to use the Windows port
of the 'bsdtar' program, already mentioned above.
If/when you are confident in your MinGW/MSYS installation, and want
to speed up the builds, we recommend installing a pre-release
version of Make from here:
https://sourceforge.net/projects/mingwbuilds/files/external-binary-packages/
These are snapshot builds of many packages, but you only need
make.exe from there. The advantage of this make.exe is that it
supports parallel builds, so you can use "make -j N" to considerably
speed up your builds
For each of these packages, install the 'bin' and 'dll' tarballs of
their latest stable releases. If there's an 'ext' tarball (e.g.,
msysCORE and Coreutils have it), download and install those as well.
Each package might list other packages as prerequisites on its
download page (under "Runtime requirements"); download those as
well. (Using the GUI installer mingw-get will fetch those
prerequisites automatically for you.) A missing prerequisite will
manifest itself by the program failing to run and presenting a
pop-up dialog that states the missing or incompatible DLL; be sure
to find and install these missing DLLs.
MSYS packages should be installed in a separate tree from MinGW.
For example, use D:\MSYS or D:\usr\MSYS as the top-level directory
from which you unpack all of the MSYS packages.
Do NOT add the MSYS bin directory to your Windows Path! Only the
MinGW bin directory should be on Path. When you install MSYS, it
creates a shortcut on your desktop that invokes the MSYS Bash shell
in a Command Prompt window; that shell is already set up so that the
MSYS bin directory is on PATH ahead of any other directory. Thus,
Bash will find MSYS executables first, which is exactly what you
need.
At this point, you are ready to build Emacs in its basic
configuration. If you want to build it with image support and other
optional libraries, read about that near the end of this document.
* Generating the configure script
If you are building a release or pretest tarball, skip this section,
because the configure script is already present in the tarball.
To build a development snapshot from the Emacs Bazaar repository,
you will first need to generate the configure script and a few other
auto-generated files. (If this step, described below, somehow
fails, you can use the files in the autogen/ directory instead, but
they might be outdated, and, most importantly, you are well advised
not to disregard any failures in your local build procedures, as
these are likely to be symptoms of incorrect installation that will
bite you down the road.)
To generate the configure script, type this at the MSYS Bash prompt
from the top-level directory of the Emacs tree:
./autogen.sh
If successful, this command should produce the following output:
$ ./autogen.sh
Checking whether you have the necessary tools...
(Read INSTALL.BZR for more details on building Emacs)
Checking for autoconf (need at least version 2.65)...
ok
Checking for automake (need at least version 1.11)...
ok
Your system has the required tools, running autoreconf...
You can now run `./configure'.
* Configuring Emacs for MinGW:
Now it's time to run the configure script. You can do that either
from a separate build directory that is outside of the Emacs source
tree (recommended), or from inside the source tree. The former is
recommended because it allows you to have several different builds,
e.g., an optimized build and an unoptimized one, of the same
revision of the source tree; the source tree will be left in its
pristine state, without any build products.
You invoke the configure script like this:
/PATH/TO/EMACS/SOURCE/TREE/nt/msysconfig.sh --prefix=PREFIX ...
or, if you are building in-place, i.e. inside the source tree:
./nt/msysconfig.sh --prefix=PREFIX ...
Here PREFIX is the place where you eventually want to install Emacs
once built, e.g. d:/usr.
You can pass additional options to the configure script, for the
full list type
./nt/msysconfig.sh --help
As explained in the help text, you may need to tell the script what
are the optional flags to invoke the compiler. This is needed if
some of your headers and libraries, e.g., those belonging to
optional image libraries, are installed in places where the compiler
normally doesn't look for them. (Remember that advice above to
avoid such situations? here's is where you will start paying for
disregarding that recommendation.) For example, if you have libpng
headers in C:\emacs\libs\libpng-1.2.37-lib\include and jpeg library
headers in C:\emacs\libs\jpeg-6b-4-lib\include, you will need to say
something like this:
CPPFLAGS='-Ic:/emacs/libs/libpng-1.2.37-lib/include -Ic:/emacs/libs/jpeg-6b-4-lib/include' ./nt/msysconfig.sh --prefix=PREFIX
which is quite a mouth-full, especially if you have more directories
to specify... Perhaps you may wish to revisit your installation
decisions now.
A few frequently used options are needed when you want to produce an
unoptimized binary with runtime checks enabled:
CPPFLAGS='-DGLYPH_DEBUG=1' CFLAGS='-O0 -g3' ./nt/msysconfig.sh --prefix=PREFIX --enable-checking
Once invoked, the configure script will run for some time, and, if
successful, will eventually produce a summary of the configuration
like this:
Configured for `i686-pc-mingw32'.
Where should the build process find the source code? /path/to/emacs/sources
What compiler should emacs be built with? gcc -std=gnu99 -O0 -g3
Should Emacs use the GNU version of malloc? yes
Should Emacs use a relocating allocator for buffers? yes
Should Emacs use mmap(2) for buffer allocation? no
What window system should Emacs use? w32
What toolkit should Emacs use? none
Where do we find X Windows header files? NONE
Where do we find X Windows libraries? NONE
Does Emacs use -lXaw3d? no
Does Emacs use -lXpm? yes
Does Emacs use -ljpeg? yes
Does Emacs use -ltiff? yes
Does Emacs use a gif library? yes
Does Emacs use -lpng? yes
Does Emacs use -lrsvg-2? no
Does Emacs use imagemagick? no
Does Emacs use -lgpm? no
Does Emacs use -ldbus? no
Does Emacs use -lgconf? no
Does Emacs use GSettings? no
Does Emacs use -lselinux? no
Does Emacs use -lgnutls? yes
Does Emacs use -lxml2? yes
Does Emacs use -lfreetype? no
Does Emacs use -lm17n-flt? no
Does Emacs use -lotf? no
Does Emacs use -lxft? no
Does Emacs use toolkit scroll bars? yes
You are almost there, hang on.
If the output is significantly different, or if configure finishes
prematurely and displays some error message, you should examine the
configuration log in config.log and find the reason for the failure.
Once you succeeded in configuring Emacs, and just want to rebuild it
after updating your local repository from the main repository, you
don't need to re-run the configure script manually, unless you want
to change the configure-time options. Just typing "make" will
re-run configure if necessary with the exact same options you
specified originally, and then go on to invoking Make, described
below.
* Running Make.
This is simple: just type "make" and sit back, watching the fun.
If you installed a snapshot build of Make, the build will be much
faster if you type "make -j N" instead, where N is the number of
independent processing units on your machine. E.g., on a core i7
system try using N of 6 or even 8.
When Make finishes, you can install the produced binaries:
make install
or, if you want the installed tree to go in a place different from
the configured one, type
make install prefix=WHEREVER
Congrats! You have built and installed your own Emacs!
* Make targets
The following make targets may be used by users building the source
distribution, or users who have checked out of Bazaar after
an initial bootstrapping.
make
Builds Emacs from the available sources and pre-compiled lisp files.
make install
Installs the built programs and the auxiliary files.
make clean
Removes object and executable files produced by the build process in
the current configuration. After "make clean", you can rebuild with
the same configuration using make. useful when you want to be sure
that all of the products are built from coherent sources.
make distclean
In addition to the files removed by make clean, this also removes
Makefiles and other generated files to get back to the state of a
freshly unpacked source distribution. After make distclean, it is
necessary to run the configure script followed by "make", in order
to rebuild.
The following targets are intended only for use with the Bazaar sources.
make bootstrap
Removes all the auto-generated files and all the *.elc byte-compiled
files, and builds Emacs from scratch. Useful when some change in
basic Emacs functionality makes byte compilation of updated files
fail.
make maintainer-clean
Removes everything that can be recreated, including compiled Lisp
files, to get back to the state of a fresh Bazaar tree. After make
maintainer-clean, it is necessary to run configure and "make" or
"make bootstrap" to rebuild. Occasionally it may be necessary to
run this target after an update.
* Optional image library support
In addition to its "native" image formats (pbm and xbm), Emacs can
handle other image types: xpm, tiff, gif, png, jpeg and experimental
support for svg.
To build Emacs with support for them, the corresponding headers must
be in the include path and libraries should be where the linker
looks for them, when the configure script is run. If needed, this
can be set up using the CPPFLAGS and CFLAGS variable specified on
the configure command line. The configure script will report
whether it was able to detect the headers and libraries. If the
results of this testing appear to be incorrect, please look for
details in the file config.log: it will show the failed test
programs and compiler error messages that should explain what is
wrong. (Usually, any such failures happen because some headers are
missing due to bad packaging of the image support libraries.)
Note that any file path passed to the compiler or linker must use
forward slashes, or double each backslash, as that is how Bash
works.
If the configure script finds the necessary headers and libraries,
but they are for some reason incompatible, or if you want to omit
support for some image library that is installed on your system for
some other reason, use the --without-PACKAGE option to configure,
such as --without-gif to omit GIF, --without-tiff to omit TIFF, etc.
Passing the --help option to the configure script displays all of
the supported --without-PACKAGE options.
To use the external image support, the DLLs implementing the
functionality must be found when Emacs first needs them, either on the
PATH, or in the same directory as emacs.exe. Failure to find a
library is not an error; the associated image format will simply be
unavailable. Note that once Emacs has determined that a library can
not be found, there's no way to force it to try again, other than
restarting. See the variable `dynamic-library-alist' to configure the
expected names of the libraries.
Some image libraries have dependencies on one another, or on zlib.
For example, tiff support depends on the jpeg library. If you did not
compile the libraries yourself, you must make sure that any dependency
is in the PATH or otherwise accessible and that the binaries are
compatible (for example, that they were built with the same compiler).
Binaries for the image libraries (among many others) can be found at
the GnuWin32 project. PNG, JPEG and TIFF libraries are also
included with GTK, which is installed along with other Free Software
that requires it. Note specifically that, due to some packaging
snafus in the GnuWin32-supplied image libraries, you will need to
download _source_ packages for some of the libraries in order to get
the header files necessary for building Emacs with image support.
For PNG images, we recommend to use versions 1.4.x and later of
libpng, because previous versions had security issues. You can find
precompiled libraries and headers on the GTK download page for
Windows (http://www.gtk.org/download/win32.php).
Versions 1.4.0 and later of libpng are binary incompatible with
earlier versions, so Emacs will only look for libpng libraries which
are compatible with the version it was compiled against. That
version is given by the value of the Lisp variable `libpng-version';
e.g., 10403 means version 1.4.3. The variable `dynamic-library-alist'
is automatically set to name only those DLL names that are known to
be compatible with the version given by `libpng-version'. If PNG
support does not work for you even though you have the support DLL
installed, check the name of the installed DLL against
`dynamic-library-alist' and the value of `libpng-version', and
download compatible DLLs if needed.
* Optional GnuTLS support
To compile with GnuTLS, you will need pkg-config to be installed, as
the configure script invokes pkg-config to find out which compiler
switches to use for GnuTLS. See above for the URL where you can
find pkg-config for Windows.
You will also need to install the p11-kit package, which is a
dependency of GnuTLS, and its header files are needed for
compilation of programs that use GnuTLS. You can find p11-kit on
the same site as GnuTLS, see the URL below.
If the configure script finds the GnuTLS header files and libraries
on your system, Emacs is built with GnuTLS support by default; to
avoid that you can pass the argument --without-gnutls.
In order to support GnuTLS at runtime, a GnuTLS-enabled Emacs must
be able to find the relevant DLLs during startup; failure to do so
is not an error, but GnuTLS won't be available to the running
session.
You can get pre-built binaries (including any required DLL and the
header files) at http://sourceforge.net/projects/ezwinports/files/.
* Optional libxml2 support
To compile with libxml2, you will need pkg-config to be installed,
as the configure script invokes pkg-config to find out which
compiler switches to use for libxml2. See above for the URL where
you can find pkg-config for Windows.
If the configure script finds the libxml2 header files and libraries
on your system, Emacs is built with libxml2 support by default; to
avoid that you can pass the argument --without-libxml2.
In order to support libxml2 at runtime, a libxml2-enabled Emacs must
be able to find the relevant DLLs during startup; failure to do so
is not an error, but libxml2 features won't be available to the
running session.
One place where you can get pre-built Windows binaries of libxml2
(including any required DLL and the header files) is here:
http://sourceforge.net/projects/ezwinports/files/
For runtime support of libxml2, you will also need to install the
libiconv "development" tarball, because the libiconv headers need to
be available to the compiler when you compile with libxml2 support.
A MinGW port of libiconv can be found on the MinGW site:
http://sourceforge.net/projects/mingw/files/MinGW/Base/libiconv/
You need the libiconv-X.Y.Z-N-mingw32-dev.tar.lzma tarball from that
site.
* Experimental SVG support
To compile with SVG, you will need pkg-config to be installed, as
the configure script invokes pkg-config to find out which compiler
switches to use for SVG. See above for the URL where you can find
pkg-config for Windows.
SVG support is currently experimental, and not built by default.
Specify --with-rsvg and ensure you have all the dependencies in your
include path. Unless you have built a minimalist librsvg yourself
(untested), librsvg depends on a significant chunk of GTK+ to build,
plus a few Gnome libraries, libxml2, libbz2 and zlib at runtime. The
easiest way to obtain the dependencies required for building is to
download a pre-bundled GTK+ development environment for Windows.
To use librsvg at runtime, ensure that librsvg and its dependencies
are on your PATH. If you didn't build librsvg yourself, you will
need to check with where you downloaded it from for the
dependencies, as there are different build options. If it is a
short list, then it most likely only lists the immediate
dependencies of librsvg, but the dependencies themselves have
dependencies - so don't download individual libraries from GTK+,
download and install the whole thing. If you think you've got all
the dependencies and SVG support is still not working, check your
PATH for other libraries that shadow the ones you downloaded.
Libraries of the same name from different sources may not be
compatible, this problem was encountered with libbzip2 from GnuWin32
with libcroco from gnome.org.
If you can see etc/images/splash.svg, then you have managed to get
SVG support working. Congratulations for making it through DLL hell
to this point. You'll probably find that some SVG images crash
Emacs. Problems have been observed in some images that contain
text, they seem to be a problem in the Windows port of Pango, or
maybe a problem with the way Cairo or librsvg is using it that
doesn't show up on other platforms.
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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>.

212
nt/Makefile.in Normal file
View file

@ -0,0 +1,212 @@
# nt/Makefile for GNU Emacs.
# Copyright (C) 2013 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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>.
# Avoid trouble on systems where the `SHELL' variable might be
# inherited from the environment.
SHELL = /bin/sh
# ==================== Things `configure' will edit ====================
CC=@CC@
CFLAGS=@CFLAGS@
version=@version@
## Used in $archlibdir.
configuration=@configuration@
EXEEXT=@EXEEXT@
C_SWITCH_SYSTEM=@C_SWITCH_SYSTEM@
C_SWITCH_MACHINE=@C_SWITCH_MACHINE@
PROFILING_CFLAGS = @PROFILING_CFLAGS@
WARN_CFLAGS = @WARN_CFLAGS@
WERROR_CFLAGS = @WERROR_CFLAGS@
# Program name transformation.
TRANSFORM = @program_transform_name@
# ==================== Where To Install Things ====================
# The default location for installation. Everything is placed in
# subdirectories of this directory. The default values for many of
# the variables below are expressed in terms of this one, so you may
# not need to change them. This is set with the --prefix option to
# `../configure'.
prefix=@prefix@
# Like `prefix', but used for architecture-specific files. This is
# set with the --exec-prefix option to `../configure'.
exec_prefix=@exec_prefix@
# Where to install Emacs and other binaries that people will want to
# run directly (like etags). This is set with the --bindir option
# to `../configure'.
bindir=@bindir@
# Where to install and expect executable files to be run by Emacs
# rather than directly by users, and other architecture-dependent
# data. ${archlibdir} is usually below this. This is set with the
# --libexecdir option to `../configure'.
libexecdir=@libexecdir@
# Directory for local state files for all programs.
localstatedir=@localstatedir@
# Where to find the source code. This is set by the configure
# script's `--srcdir' option. However, the value of ${srcdir} in
# this makefile is not identical to what was specified with --srcdir,
# since the variable here has `/lib-src' added at the end.
# We use $(srcdir) explicitly in dependencies so as not to depend on VPATH.
srcdir=@srcdir@
VPATH=@srcdir@
# The top-level source directory, also set by configure.
top_srcdir=@top_srcdir@
# ==================== Emacs-specific directories ====================
# These variables hold the values Emacs will actually use. They are
# based on the values of the standard Make variables above.
# Where to put executables to be run by Emacs rather than the user.
# This path usually includes the Emacs version and configuration name,
# so that multiple configurations for multiple versions of Emacs may
# be installed at once. This can be set with the --archlibdir option
# to `../configure'.
archlibdir=@archlibdir@
# ==================== Utility Programs for the Build =================
# ../configure figures out the correct values for these.
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
# By default, we uphold the dignity of our programs.
INSTALL_STRIP =
MKDIR_P = @MKDIR_P@
# ========================== Lists of Files ===========================
# Things that a user might actually run, which should be installed in bindir.
INSTALLABLES = runemacs${EXEEXT} addpm${EXEEXT}
# Things that Emacs runs internally, which should not be installed in bindir.
UTILITIES = cmdproxy${EXEEXT} ddeclient${EXEEXT}
# Things that Emacs runs during the build process.
DONT_INSTALL = addsection${EXEEXT}
# All files that are created by the linker, i.e., whose names end in ${EXEEXT}.
EXE_FILES = ${INSTALLABLES} ${UTILITIES} ${DONT_INSTALL}
# =========================== Configuration ===========================
# MS-Windows resource files and resource compiler
EMACSRES = @EMACSRES@
EMACS_MANIFEST = @EMACS_MANIFEST@
WINDRES = @WINDRES@
## Extra libraries to use when linking addpm.
LIBS_ADDPM = -lole32 -luuid
## Compilation and linking flags
BASE_CFLAGS = $(C_SWITCH_SYSTEM) $(C_SWITCH_MACHINE) \
$(WARN_CFLAGS) $(WERROR_CFLAGS) \
-I. -I${srcdir}
ALL_CFLAGS = ${BASE_CFLAGS} ${PROFILING_CFLAGS} ${LDFLAGS} ${CPPFLAGS} ${CFLAGS}
LINK_CFLAGS = ${BASE_CFLAGS} ${LDFLAGS} ${CFLAGS}
CPP_CFLAGS = ${BASE_CFLAGS} ${PROFILING_CFLAGS} ${CPPFLAGS} ${CFLAGS}
all: ${EXE_FILES}
.PHONY: all
## Install the internal utilities. Until they are installed, we can
## just run them directly from nt/.
$(DESTDIR)${archlibdir}: all
@echo
@echo "Installing utilities run internally by Emacs."
umask 022; ${MKDIR_P} $(DESTDIR)${archlibdir}
if [ `cd $(DESTDIR)${archlibdir} && /bin/pwd` != `/bin/pwd` ]; then \
for file in ${UTILITIES}; do \
$(INSTALL_PROGRAM) $(INSTALL_STRIP) $$file $(DESTDIR)${archlibdir}/$$file ; \
done ; \
fi
.PHONY: install uninstall mostlyclean clean distclean maintainer-clean
.PHONY: extraclean check tags
install: $(DESTDIR)${archlibdir}
@echo
@echo "Installing utilities for users to run."
umask 022; ${MKDIR_P} $(DESTDIR)${bindir}
for file in ${INSTALLABLES} ; do \
$(INSTALL_PROGRAM) $(INSTALL_STRIP) $${file} $(DESTDIR)${bindir}/`echo $${file} | sed -e 's/${EXEEXT}$$//' -e '$(TRANSFORM)'`${EXEEXT} ; \
done
uninstall:
for file in ${INSTALLABLES}; do \
rm -f $(DESTDIR)${bindir}/`echo $${file} | sed -e 's/${EXEEXT}$$//' -e '$(TRANSFORM)'`${EXEEXT} ; \
done
if [ -d $(DESTDIR)${archlibdir} ]; then \
(cd $(DESTDIR)${archlibdir} && rm -f ${UTILITIES}) \
fi
mostlyclean:
-rm -f core *.o
clean: mostlyclean
-rm -f ${EXE_FILES}
distclean: clean
-rm -f TAGS
-rm -f Makefile
maintainer-clean: distclean
true
extraclean: maintainer-clean
-rm -f *~ \#*
## Test the contents of the directory.
check:
@echo "We don't have any tests for the nt/ directory yet."
tags: TAGS
TAGS: ${EXE_FILES:${EXEEXT}=.c}
../lib-src/etags *.[ch]
## Build the programs
addsection${EXEEXT}: ${srcdir}/addsection.c
$(CC) ${ALL_CFLAGS} ${srcdir}/addsection.c -o addsection${EXEEXT}
addpm${EXEEXT}: ${srcdir}/addpm.c ../src/epaths.h
$(CC) ${ALL_CFLAGS} ${srcdir}/addpm.c $(LIBS_ADDPM) -o addpm${EXEEXT}
ddeclient${EXEEXT}: ${srcdir}/ddeclient.c
$(CC) ${ALL_CFLAGS} ${srcdir}/ddeclient.c -o ddeclient${EXEEXT}
cmdproxy${EXEEXT}: ${srcdir}/cmdproxy.c
$(CC) ${ALL_CFLAGS} ${srcdir}/cmdproxy.c -o cmdproxy${EXEEXT}
runemacs${EXEEXT}: ${srcdir}/runemacs.c $(EMACSRES)
$(CC) ${ALL_CFLAGS} ${srcdir}/runemacs.c $(EMACSRES) -mwindows \
-o runemacs${EXEEXT}
emacs.res: ${srcdir}/emacs.rc ${srcdir}/icons/emacs.ico ${srcdir}/$(EMACS_MANIFEST)
${WINDRES} -O coff -o emacs.res ${srcdir}/emacs.rc

View file

@ -50,6 +50,10 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#include <shlobj.h>
#include <ddeml.h>
#ifndef OLD_PATHS
#include "../src/epaths.h"
#endif
HDDEDATA CALLBACK
DdeCallback (UINT uType, UINT uFmt, HCONV hconv,
HSZ hsz1, HSZ hsz2, HDDEDATA hdata,
@ -76,6 +80,7 @@ static struct entry
}
env_vars[] =
{
#ifdef OLD_PATHS
{"emacs_dir", NULL},
{"EMACSLOADPATH", "%emacs_dir%/site-lisp;%emacs_dir%/../site-lisp;%emacs_dir%/lisp;%emacs_dir%/leim"},
{"SHELL", "%emacs_dir%/bin/cmdproxy.exe"},
@ -86,6 +91,18 @@ env_vars[] =
/* {"INFOPATH", "%emacs_dir%/info"}, */
{"EMACSDOC", "%emacs_dir%/etc"},
{"TERM", "cmd"}
#else /* !OLD_PATHS */
{"emacs_dir", NULL},
{"EMACSLOADPATH", PATH_SITELOADSEARCH ";" PATH_LOADSEARCH},
{"SHELL", PATH_EXEC "/cmdproxy.exe"},
{"EMACSDATA", PATH_DATA},
{"EMACSPATH", PATH_EXEC},
/* We no longer set INFOPATH because Info-default-directory-list
is then ignored. */
/* {"INFOPATH", "%emacs_dir%/info"}, */
{"EMACSDOC", PATH_DOC},
{"TERM", "cmd"}
#endif
};
BOOL

89
nt/epaths.nt Normal file
View file

@ -0,0 +1,89 @@
/* Hey Emacs, this is -*- C -*- code! */
/* epaths.in file for MS-Windows build that uses the configure script.
Since Emacs on Windows must be relocatable to any directory, it
cannot have here hard-coded directories determined at configure
time. Therefore, each directory must begin with %emacs_dir%, which
is resolved at startup to the root of the Emacs installation tree
(see w32.c:init_environment).
This file is edited at configure time to replace @VER@ by the Emacs
version being built (e.g., 25.9.77), @CFG@ by the canonical name of
the host system (e.g., i686-pc-mingw32), and @SRC@ by the root of
the Emacs source tree used to build Emacs. */
/*
Copyright (C) 1993, 1995, 1997, 1999, 2001-2013 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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>. */
/* Together with PATH_SITELOADSEARCH, this gives the default value of
load-path, which is the search path for the Lisp function "load".
Configure (using "make epaths-force") sets this to
${standardlisppath}, which typically has a value like:
<datadir>/emacs/VERSION/lisp:<datadir>/emacs/VERSION/leim
where datadir is eg /usr/local/share.
*/
#define PATH_LOADSEARCH "%emacs_dir%/share/emacs/@VER@/lisp;%emacs_dir%/share/emacs/@VER@/leim"
/* Like PATH_LOADSEARCH, but contains the non-standard pieces.
These are the site-lisp directories, typically something like
<datadir>/emacs/VERSION/site-lisp:<datadir>/emacs/site-lisp
Configure prepends any $locallisppath, as set by the
--enable-locallisppath argument.
This is combined with PATH_LOADSEARCH to make the default load-path.
If the --no-site-lisp option is used, this piece is excluded.
*/
#define PATH_SITELOADSEARCH "%emacs_dir%/share/emacs/@VER@/site-lisp;%emacs_dir%/share/emacs/site-lisp"
/* Like PATH_LOADSEARCH, but used only during the build process
when Emacs is dumping. Configure (using "make epaths-force") sets
this to $buildlisppath, which normally has the value: <srcdir>/lisp.
*/
#define PATH_DUMPLOADSEARCH "@SRC@/lisp"
/* The extra search path for programs to invoke. This is appended to
whatever the PATH environment variable says to set the Lisp
variable exec-path and the first file name in it sets the Lisp
variable exec-directory. exec-directory is used for finding
executables and other architecture-dependent files. */
#define PATH_EXEC "%emacs_dir%/libexec/emacs/@VER@/@CFG@"
/* Where Emacs should look for its architecture-independent data
files, like the NEWS file. The lisp variable data-directory
is set to this value. */
#define PATH_DATA "%emacs_dir%/share/emacs/@VER@/etc"
/* Where Emacs should look for X bitmap files.
The lisp variable x-bitmap-file-path is set based on this value. */
#define PATH_BITMAPS ""
/* Where Emacs should look for its docstring file. The lisp variable
doc-directory is set to this value. */
#define PATH_DOC "%emacs_dir%/share/emacs/@VER@/etc"
/* Where the configuration process believes the info tree lives. The
lisp variable configure-info-directory gets its value from this
macro, and is then used to set the Info-default-directory-list. */
#define PATH_INFO "%emacs_dir%/share/info"
/* Where Emacs should store game score files. */
#define PATH_GAME "%emacs_dir%/var/games/emacs"
/* Where Emacs should look for the application default file. */
#define PATH_X_DEFAULTS ""

902
nt/gnulib.mk Normal file
View file

@ -0,0 +1,902 @@
## This file is an edited copy if ../lib/gnulib.mk.
##
## The purpose of the edits is to avoid generating any headers
## which would conflict with either the headers we have in nt/inc,
## or with MinGW system headers and subsequent redirection of some
## functions in nt/inc/ms-w32.h.
##
## In general, do NOT remove anything from ../lib/gnulib.mk that
## doesn't need to be removed, to minimize the differences from
## upstream gnulib.mk and thus make the maintenance easier. Every
## header file whose generation is controlled by configure-time tests
## does NOT need to be removed; instead, force the configure script to
## accept whatever MinGW has to offer, by defining the appropriate
## Autoconf variable in the nt/mingw-cfg.site file. Headers that are
## generated conditionally have the tell-tale "if GL_GENERATE_foo_H"
## condition before their Makefile snippet in this file. Likewise, do
## NOT remove gnulib modules which introduce header files that don't
## exist in MinGW and in nt/inc/, since they cannot possibly clash
## with anything. Gnulib modules that introduce source *.c files also
## need not be removed; if they define functions that could clash with
## the w32 substitutes in Emacs, disable their compilation by defining
## suitable variables in nt/mingw-cfg.site.
##
## Process this file with automake to produce Makefile.in.
# Copyright (C) 2002-2013 Free Software Foundation, Inc.
#
# This file 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 3 of the License, or
# (at your option) any later version.
#
# This file 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 this file. If not, see <http://www.gnu.org/licenses/>.
#
# As a special exception to the GNU General Public License,
# this file may be distributed as part of a program that
# contains a configuration script generated by Autoconf, under
# the same distribution terms as the rest of that program.
#
# Generated by gnulib-tool.
# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=dup --avoid=fchdir --avoid=fcntl --avoid=fstat --avoid=malloc-posix --avoid=msvc-inval --avoid=msvc-nothrow --avoid=open --avoid=openat-die --avoid=opendir --avoid=raise --avoid=save-cwd --avoid=select --avoid=sigprocmask --avoid=sys_types --avoid=threadlib --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt c-ctype c-strcase careadlinkat close-stream crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dtotimespec dup2 environ execinfo faccessat fcntl-h fdatasync fdopendir filemode fstatat fsync getloadavg getopt-gnu gettime gettimeofday ignore-value intprops largefile lstat manywarnings memrchr mktime pselect pthread_sigmask putenv qacl readlink readlinkat sig2str socklen stat-time stdalign stdarg stdbool stdio strftime strtoimax strtoumax symlink sys_stat sys_time time timer-time timespec-add timespec-sub unsetenv utimens warnings
MOSTLYCLEANFILES += core *.stackdump
noinst_LIBRARIES += libgnu.a
libgnu_a_SOURCES =
libgnu_a_LIBADD = $(gl_LIBOBJS)
libgnu_a_DEPENDENCIES = $(gl_LIBOBJS)
EXTRA_libgnu_a_SOURCES =
## begin gnulib module alloca-opt
BUILT_SOURCES += $(ALLOCA_H)
# We need the following in order to create <alloca.h> when the system
# doesn't have one that works with the given compiler.
if GL_GENERATE_ALLOCA_H
alloca.h: alloca.in.h $(top_builddir)/config.status
$(AM_V_GEN)rm -f $@-t $@ && \
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
cat $(srcdir)/alloca.in.h; \
} > $@-t && \
mv -f $@-t $@
else
alloca.h: $(top_builddir)/config.status
rm -f $@
endif
MOSTLYCLEANFILES += alloca.h alloca.h-t
EXTRA_DIST += alloca.in.h
## end gnulib module alloca-opt
## begin gnulib module c-ctype
libgnu_a_SOURCES += c-ctype.h c-ctype.c
## end gnulib module c-ctype
## begin gnulib module c-strcase
libgnu_a_SOURCES += c-strcase.h c-strcasecmp.c c-strncasecmp.c
## end gnulib module c-strcase
## begin gnulib module close-stream
libgnu_a_SOURCES += close-stream.c
EXTRA_DIST += close-stream.h
## end gnulib module close-stream
## begin gnulib module crypto/md5
libgnu_a_SOURCES += md5.c
EXTRA_DIST += md5.h
## end gnulib module crypto/md5
## begin gnulib module crypto/sha1
libgnu_a_SOURCES += sha1.c
EXTRA_DIST += sha1.h
## end gnulib module crypto/sha1
## begin gnulib module crypto/sha256
libgnu_a_SOURCES += sha256.c
EXTRA_DIST += sha256.h
## end gnulib module crypto/sha256
## begin gnulib module crypto/sha512
libgnu_a_SOURCES += sha512.c
EXTRA_DIST += sha512.h
## end gnulib module crypto/sha512
## begin gnulib module dosname
if gl_GNULIB_ENABLED_dosname
endif
EXTRA_DIST += dosname.h
## end gnulib module dosname
## begin gnulib module dtoastr
libgnu_a_SOURCES += dtoastr.c
EXTRA_DIST += ftoastr.c ftoastr.h
EXTRA_libgnu_a_SOURCES += ftoastr.c
## end gnulib module dtoastr
## begin gnulib module dtotimespec
libgnu_a_SOURCES += dtotimespec.c
## end gnulib module dtotimespec
## begin gnulib module dup2
EXTRA_DIST += dup2.c
EXTRA_libgnu_a_SOURCES += dup2.c
## end gnulib module dup2
## begin gnulib module errno
BUILT_SOURCES += $(ERRNO_H)
# We need the following in order to create <errno.h> when the system
# doesn't have one that is POSIX compliant.
if GL_GENERATE_ERRNO_H
errno.h: errno.in.h $(top_builddir)/config.status
$(AM_V_GEN)rm -f $@-t $@ && \
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
sed -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \
-e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \
-e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \
-e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \
-e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \
-e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \
-e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \
< $(srcdir)/errno.in.h; \
} > $@-t && \
mv $@-t $@
else
errno.h: $(top_builddir)/config.status
rm -f $@
endif
MOSTLYCLEANFILES += errno.h errno.h-t
EXTRA_DIST += errno.in.h
## end gnulib module errno
## begin gnulib module euidaccess
if gl_GNULIB_ENABLED_euidaccess
endif
EXTRA_DIST += euidaccess.c
EXTRA_libgnu_a_SOURCES += euidaccess.c
## end gnulib module euidaccess
## begin gnulib module execinfo
BUILT_SOURCES += $(EXECINFO_H)
# We need the following in order to create <execinfo.h> when the system
# doesn't have one that works.
if GL_GENERATE_EXECINFO_H
execinfo.h: execinfo.in.h $(top_builddir)/config.status
$(AM_V_GEN)rm -f $@-t $@ && \
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
cat $(srcdir)/execinfo.in.h; \
} > $@-t && \
mv $@-t $@
else
execinfo.h: $(top_builddir)/config.status
rm -f $@
endif
MOSTLYCLEANFILES += execinfo.h execinfo.h-t
EXTRA_DIST += execinfo.c execinfo.in.h
EXTRA_libgnu_a_SOURCES += execinfo.c
## end gnulib module execinfo
## begin gnulib module faccessat
EXTRA_DIST += at-func.c faccessat.c
EXTRA_libgnu_a_SOURCES += at-func.c faccessat.c
## end gnulib module faccessat
## begin gnulib module fdatasync
EXTRA_DIST += fdatasync.c
EXTRA_libgnu_a_SOURCES += fdatasync.c
## end gnulib module fdatasync
## begin gnulib module fdopendir
EXTRA_DIST += fdopendir.c
EXTRA_libgnu_a_SOURCES += fdopendir.c
## end gnulib module fdopendir
## begin gnulib module filemode
libgnu_a_SOURCES += filemode.c
EXTRA_DIST += filemode.h
## end gnulib module filemode
## begin gnulib module fpending
EXTRA_DIST += fpending.c fpending.h
EXTRA_libgnu_a_SOURCES += fpending.c
## end gnulib module fpending
## begin gnulib module fstatat
EXTRA_DIST += at-func.c fstatat.c
EXTRA_libgnu_a_SOURCES += at-func.c fstatat.c
## end gnulib module fstatat
## begin gnulib module fsync
EXTRA_DIST += fsync.c
EXTRA_libgnu_a_SOURCES += fsync.c
## end gnulib module fsync
## begin gnulib module getgroups
if gl_GNULIB_ENABLED_getgroups
endif
EXTRA_DIST += getgroups.c
EXTRA_libgnu_a_SOURCES += getgroups.c
## end gnulib module getgroups
## begin gnulib module getloadavg
EXTRA_DIST += getloadavg.c
EXTRA_libgnu_a_SOURCES += getloadavg.c
## end gnulib module getloadavg
## begin gnulib module getopt-posix
BUILT_SOURCES += $(GETOPT_H)
# We need the following in order to create <getopt.h> when the system
# doesn't have one that works with the given compiler.
getopt.h: getopt.in.h $(top_builddir)/config.status $(ARG_NONNULL_H)
$(AM_V_GEN)rm -f $@-t $@ && \
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
sed -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
< $(srcdir)/getopt.in.h; \
} > $@-t && \
mv -f $@-t $@
MOSTLYCLEANFILES += getopt.h getopt.h-t
EXTRA_DIST += getopt.c getopt.in.h getopt1.c getopt_int.h
EXTRA_libgnu_a_SOURCES += getopt.c getopt1.c
## end gnulib module getopt-posix
## begin gnulib module gettext-h
if gl_GNULIB_ENABLED_be453cec5eecf5731a274f2de7f2db36
libgnu_a_SOURCES += gettext.h
endif
## end gnulib module gettext-h
## begin gnulib module gettime
libgnu_a_SOURCES += gettime.c
## end gnulib module gettime
## begin gnulib module gettimeofday
EXTRA_DIST += gettimeofday.c
EXTRA_libgnu_a_SOURCES += gettimeofday.c
## end gnulib module gettimeofday
## begin gnulib module group-member
if gl_GNULIB_ENABLED_a9786850e999ae65a836a6041e8e5ed1
endif
EXTRA_DIST += group-member.c
EXTRA_libgnu_a_SOURCES += group-member.c
## end gnulib module group-member
## begin gnulib module ignore-value
EXTRA_DIST += ignore-value.h
## end gnulib module ignore-value
## begin gnulib module intprops
EXTRA_DIST += intprops.h
## end gnulib module intprops
## begin gnulib module lstat
EXTRA_DIST += lstat.c
EXTRA_libgnu_a_SOURCES += lstat.c
## end gnulib module lstat
## begin gnulib module memrchr
EXTRA_DIST += memrchr.c
EXTRA_libgnu_a_SOURCES += memrchr.c
## end gnulib module memrchr
## begin gnulib module mktime
EXTRA_DIST += mktime-internal.h mktime.c
EXTRA_libgnu_a_SOURCES += mktime.c
## end gnulib module mktime
## begin gnulib module openat-h
if gl_GNULIB_ENABLED_03e0aaad4cb89ca757653bd367a6ccb7
endif
EXTRA_DIST += openat.h
## end gnulib module openat-h
## begin gnulib module pathmax
if gl_GNULIB_ENABLED_pathmax
endif
EXTRA_DIST += pathmax.h
## end gnulib module pathmax
## begin gnulib module pselect
EXTRA_DIST += pselect.c
EXTRA_libgnu_a_SOURCES += pselect.c
## end gnulib module pselect
## begin gnulib module pthread_sigmask
EXTRA_DIST += pthread_sigmask.c
EXTRA_libgnu_a_SOURCES += pthread_sigmask.c
## end gnulib module pthread_sigmask
## begin gnulib module putenv
EXTRA_DIST += putenv.c
EXTRA_libgnu_a_SOURCES += putenv.c
## end gnulib module putenv
## begin gnulib module qacl
libgnu_a_SOURCES += acl-errno-valid.c file-has-acl.c qcopy-acl.c
EXTRA_DIST += acl-internal.h acl.h acl_entries.c
EXTRA_libgnu_a_SOURCES += acl_entries.c
## end gnulib module qacl
## begin gnulib module readlink
EXTRA_DIST += readlink.c
EXTRA_libgnu_a_SOURCES += readlink.c
## end gnulib module readlink
## begin gnulib module readlinkat
EXTRA_DIST += at-func.c readlinkat.c
EXTRA_libgnu_a_SOURCES += at-func.c readlinkat.c
## end gnulib module readlinkat
## begin gnulib module root-uid
if gl_GNULIB_ENABLED_6099e9737f757db36c47fa9d9f02e88c
endif
EXTRA_DIST += root-uid.h
## end gnulib module root-uid
## begin gnulib module sig2str
EXTRA_DIST += sig2str.c sig2str.h
EXTRA_libgnu_a_SOURCES += sig2str.c
## end gnulib module sig2str
## begin gnulib module snippet/_Noreturn
# Because this Makefile snippet defines a variable used by other
# gnulib Makefile snippets, it must be present in all Makefile.am that
# need it. This is ensured by the applicability 'all' defined above.
_NORETURN_H=$(top_srcdir)/build-aux/snippet/_Noreturn.h
EXTRA_DIST += $(top_srcdir)/build-aux/snippet/_Noreturn.h
## end gnulib module snippet/_Noreturn
## begin gnulib module snippet/arg-nonnull
# The BUILT_SOURCES created by this Makefile snippet are not used via #include
# statements but through direct file reference. Therefore this snippet must be
# present in all Makefile.am that need it. This is ensured by the applicability
# 'all' defined above.
BUILT_SOURCES += arg-nonnull.h
# The arg-nonnull.h that gets inserted into generated .h files is the same as
# build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut
# off.
arg-nonnull.h: $(top_srcdir)/build-aux/snippet/arg-nonnull.h
$(AM_V_GEN)rm -f $@-t $@ && \
sed -n -e '/GL_ARG_NONNULL/,$$p' \
< $(top_srcdir)/build-aux/snippet/arg-nonnull.h \
> $@-t && \
mv $@-t $@
MOSTLYCLEANFILES += arg-nonnull.h arg-nonnull.h-t
ARG_NONNULL_H=arg-nonnull.h
EXTRA_DIST += $(top_srcdir)/build-aux/snippet/arg-nonnull.h
## end gnulib module snippet/arg-nonnull
## begin gnulib module snippet/c++defs
# The BUILT_SOURCES created by this Makefile snippet are not used via #include
# statements but through direct file reference. Therefore this snippet must be
# present in all Makefile.am that need it. This is ensured by the applicability
# 'all' defined above.
BUILT_SOURCES += c++defs.h
# The c++defs.h that gets inserted into generated .h files is the same as
# build-aux/snippet/c++defs.h, except that it has the copyright header cut off.
c++defs.h: $(top_srcdir)/build-aux/snippet/c++defs.h
$(AM_V_GEN)rm -f $@-t $@ && \
sed -n -e '/_GL_CXXDEFS/,$$p' \
< $(top_srcdir)/build-aux/snippet/c++defs.h \
> $@-t && \
mv $@-t $@
MOSTLYCLEANFILES += c++defs.h c++defs.h-t
CXXDEFS_H=c++defs.h
EXTRA_DIST += $(top_srcdir)/build-aux/snippet/c++defs.h
## end gnulib module snippet/c++defs
## begin gnulib module snippet/warn-on-use
BUILT_SOURCES += warn-on-use.h
# The warn-on-use.h that gets inserted into generated .h files is the same as
# build-aux/snippet/warn-on-use.h, except that it has the copyright header cut
# off.
warn-on-use.h: $(top_srcdir)/build-aux/snippet/warn-on-use.h
$(AM_V_GEN)rm -f $@-t $@ && \
sed -n -e '/^.ifndef/,$$p' \
< $(top_srcdir)/build-aux/snippet/warn-on-use.h \
> $@-t && \
mv $@-t $@
MOSTLYCLEANFILES += warn-on-use.h warn-on-use.h-t
WARN_ON_USE_H=warn-on-use.h
EXTRA_DIST += $(top_srcdir)/build-aux/snippet/warn-on-use.h
## end gnulib module snippet/warn-on-use
## begin gnulib module stat
if gl_GNULIB_ENABLED_stat
endif
EXTRA_DIST += stat.c
EXTRA_libgnu_a_SOURCES += stat.c
## end gnulib module stat
## begin gnulib module stat-time
libgnu_a_SOURCES += stat-time.c
EXTRA_DIST += stat-time.h
## end gnulib module stat-time
## begin gnulib module stdalign
BUILT_SOURCES += $(STDALIGN_H)
# We need the following in order to create <stdalign.h> when the system
# doesn't have one that works.
if GL_GENERATE_STDALIGN_H
stdalign.h: stdalign.in.h $(top_builddir)/config.status
$(AM_V_GEN)rm -f $@-t $@ && \
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
cat $(srcdir)/stdalign.in.h; \
} > $@-t && \
mv $@-t $@
else
stdalign.h: $(top_builddir)/config.status
rm -f $@
endif
MOSTLYCLEANFILES += stdalign.h stdalign.h-t
EXTRA_DIST += stdalign.in.h
## end gnulib module stdalign
## begin gnulib module stdarg
BUILT_SOURCES += $(STDARG_H)
# We need the following in order to create <stdarg.h> when the system
# doesn't have one that works with the given compiler.
if GL_GENERATE_STDARG_H
stdarg.h: stdarg.in.h $(top_builddir)/config.status
$(AM_V_GEN)rm -f $@-t $@ && \
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
sed -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \
< $(srcdir)/stdarg.in.h; \
} > $@-t && \
mv $@-t $@
else
stdarg.h: $(top_builddir)/config.status
rm -f $@
endif
MOSTLYCLEANFILES += stdarg.h stdarg.h-t
EXTRA_DIST += stdarg.in.h
## end gnulib module stdarg
## begin gnulib module stdbool
BUILT_SOURCES += $(STDBOOL_H)
# We need the following in order to create <stdbool.h> when the system
# doesn't have one that works.
if GL_GENERATE_STDBOOL_H
stdbool.h: stdbool.in.h $(top_builddir)/config.status
$(AM_V_GEN)rm -f $@-t $@ && \
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \
} > $@-t && \
mv $@-t $@
else
stdbool.h: $(top_builddir)/config.status
rm -f $@
endif
MOSTLYCLEANFILES += stdbool.h stdbool.h-t
EXTRA_DIST += stdbool.in.h
## end gnulib module stdbool
## begin gnulib module stddef
BUILT_SOURCES += $(STDDEF_H)
# We need the following in order to create <stddef.h> when the system
# doesn't have one that works with the given compiler.
if GL_GENERATE_STDDEF_H
stddef.h: stddef.in.h $(top_builddir)/config.status
$(AM_V_GEN)rm -f $@-t $@ && \
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
sed -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
-e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
-e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
< $(srcdir)/stddef.in.h; \
} > $@-t && \
mv $@-t $@
else
stddef.h: $(top_builddir)/config.status
rm -f $@
endif
MOSTLYCLEANFILES += stddef.h stddef.h-t
EXTRA_DIST += stddef.in.h
## end gnulib module stddef
## begin gnulib module stdint
BUILT_SOURCES += $(STDINT_H)
# We need the following in order to create <stdint.h> when the system
# doesn't have one that works with the given compiler.
if GL_GENERATE_STDINT_H
stdint.h: stdint.in.h $(top_builddir)/config.status
$(AM_V_GEN)rm -f $@-t $@ && \
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
sed -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
-e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
-e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
-e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
-e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
-e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \
-e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
-e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
-e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
-e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
-e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
-e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
-e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
-e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
-e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
-e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
-e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
-e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
-e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
-e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
-e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
-e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
< $(srcdir)/stdint.in.h; \
} > $@-t && \
mv $@-t $@
else
stdint.h: $(top_builddir)/config.status
rm -f $@
endif
MOSTLYCLEANFILES += stdint.h stdint.h-t
EXTRA_DIST += stdint.in.h
## end gnulib module stdint
## begin gnulib module strftime
libgnu_a_SOURCES += strftime.c
EXTRA_DIST += strftime.h
## end gnulib module strftime
## begin gnulib module strtoimax
EXTRA_DIST += strtoimax.c
EXTRA_libgnu_a_SOURCES += strtoimax.c
## end gnulib module strtoimax
## begin gnulib module strtoll
if gl_GNULIB_ENABLED_strtoll
endif
EXTRA_DIST += strtol.c strtoll.c
EXTRA_libgnu_a_SOURCES += strtol.c strtoll.c
## end gnulib module strtoll
## begin gnulib module strtoull
if gl_GNULIB_ENABLED_strtoull
endif
EXTRA_DIST += strtol.c strtoul.c strtoull.c
EXTRA_libgnu_a_SOURCES += strtol.c strtoul.c strtoull.c
## end gnulib module strtoull
## begin gnulib module strtoumax
EXTRA_DIST += strtoimax.c strtoumax.c
EXTRA_libgnu_a_SOURCES += strtoimax.c strtoumax.c
## end gnulib module strtoumax
## begin gnulib module symlink
EXTRA_DIST += symlink.c
EXTRA_libgnu_a_SOURCES += symlink.c
## end gnulib module symlink
## begin gnulib module time_r
EXTRA_DIST += time_r.c
EXTRA_libgnu_a_SOURCES += time_r.c
## end gnulib module time_r
## begin gnulib module timespec
libgnu_a_SOURCES += timespec.c
EXTRA_DIST += timespec.h
## end gnulib module timespec
## begin gnulib module timespec-add
libgnu_a_SOURCES += timespec-add.c
## end gnulib module timespec-add
## begin gnulib module timespec-sub
libgnu_a_SOURCES += timespec-sub.c
## end gnulib module timespec-sub
## begin gnulib module u64
libgnu_a_SOURCES += u64.c
EXTRA_DIST += u64.h
## end gnulib module u64
## begin gnulib module unsetenv
EXTRA_DIST += unsetenv.c
EXTRA_libgnu_a_SOURCES += unsetenv.c
## end gnulib module unsetenv
## begin gnulib module utimens
libgnu_a_SOURCES += utimens.c
EXTRA_DIST += utimens.h
## end gnulib module utimens
## begin gnulib module verify
if gl_GNULIB_ENABLED_verify
endif
EXTRA_DIST += verify.h
## end gnulib module verify
## begin gnulib module xalloc-oversized
if gl_GNULIB_ENABLED_682e609604ccaac6be382e4ee3a4eaec
endif
EXTRA_DIST += xalloc-oversized.h
## end gnulib module xalloc-oversized
mostlyclean-local: mostlyclean-generic
@for dir in '' $(MOSTLYCLEANDIRS); do \
if test -n "$$dir" && test -d $$dir; then \
echo "rmdir $$dir"; rmdir $$dir; \
fi; \
done; \
:

View file

@ -67,7 +67,9 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#endif
#if (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8))
#define HAVE___BUILTIN_UNWIND_INIT 1
# ifndef HAVE___BUILTIN_UNWIND_INIT
# define HAVE___BUILTIN_UNWIND_INIT 1
# endif
#endif
/* This isn't perfect, as some systems might have the page file in
@ -99,8 +101,12 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#endif
#ifdef __GNUC__
# define restrict __restrict__
/* config.h may have defined already. */
# ifndef restrict
# define restrict __restrict__
# endif
#else
/* FIXME: should we define to __restrict, which MSVC supports? */
# define restrict
#endif
@ -138,9 +144,6 @@ extern char *getenv ();
/* Make a leaner executable. */
#define WIN32_LEAN_AND_MEAN 1
#ifdef HAVE_STRINGS_H
#include "strings.h"
#endif
#include <sys/types.h>
#ifndef MAXPATHLEN
@ -148,8 +151,12 @@ extern char *getenv ();
#endif
#ifdef HAVE_NTGUI
#define HAVE_WINDOW_SYSTEM 1
#define HAVE_MENUS 1
# ifndef HAVE_WINDOW_SYSTEM
# define HAVE_WINDOW_SYSTEM 1
# endif
# ifndef HAVE_MENUS
# define HAVE_MENUS 1
# endif
#endif
/* Get some redefinitions in place. */
@ -248,9 +255,6 @@ extern int sys_unlink (const char *);
#define execvp _execvp
#define fdatasync _commit
#define fdopen _fdopen
#ifndef fileno
#define fileno _fileno
#endif
#define fsync _commit
#define ftruncate _chsize
#define getpid _getpid
@ -266,9 +270,6 @@ typedef int pid_t;
#define popen _popen
#define pclose _pclose
#define umask _umask
#ifndef _MSC_VER
#define utimbuf _utimbuf
#endif
#define strdup _strdup
#define strupr _strupr
#define strnicmp _strnicmp
@ -285,10 +286,6 @@ int _getpid (void);
array, and triggers an error message. */
#include <time.h>
#define tzname _tzname
#if !defined (_MSC_VER) || (_MSC_VER < 1400)
#undef utime
#define utime _utime
#endif
/* 'struct timespec' is used by time-related functions in lib/ and
elsewhere, but we don't use lib/time.h where the structure is
@ -327,6 +324,9 @@ extern struct tm *localtime_r (time_t const * restrict, struct tm * restrict);
#include <io.h>
#include <stdio.h>
#endif /* !_MSC_VER */
#ifndef fileno
#define fileno _fileno
#endif
/* Defines that we need that aren't in the standard signal.h. */
#define SIGHUP 1 /* Hang up */
@ -346,20 +346,21 @@ extern struct tm *localtime_r (time_t const * restrict, struct tm * restrict);
#define ENOTSUP ENOSYS
#endif
/* WINDOWSNT <errno.h> doesn't define EOPNOTSUPP, and we don't have
'configure' working yet so we can't rely on the Gnulib replacement
errno.h defining EOPNOTSUPP. Work around the problem by defining
it here. */
/* In case lib/errno.h is not used. */
#ifndef EOPNOTSUPP
#define EOPNOTSUPP 130
#endif
#ifdef _MSC_VER
typedef int sigset_t;
typedef int ssize_t;
#endif
#ifndef _POSIX /* MinGW64 */
#ifdef _W64 /* MinGW64 */
#ifndef _POSIX
typedef _sigset_t sigset_t;
#endif
#endif
typedef void (_CALLBACK_ *signal_handler) (int);
extern signal_handler sys_signal (int, signal_handler);
@ -395,10 +396,12 @@ extern int sys_kill (int, int);
#define getdefdir(_drv, _buf) _getdcwd (_drv, _buf, MAXPATHLEN)
#endif
#ifndef EMACS_CONFIGURATION
extern char *get_emacs_configuration (void);
extern char *get_emacs_configuration_options (void);
#define EMACS_CONFIGURATION get_emacs_configuration ()
#define EMACS_CONFIG_OPTIONS get_emacs_configuration_options ()
#endif
/* Define this so that winsock.h definitions don't get included with
windows.h. For this to have proper effect, config.h must always be
@ -452,10 +455,14 @@ extern void * memrchr (void const *, int, size_t);
#if defined (__MINGW32__)
/* Define to 1 if the system has the type `long long int'. */
# define HAVE_LONG_LONG_INT 1
# ifndef HAVE_LONG_LONG_INT
# define HAVE_LONG_LONG_INT 1
# endif
/* Define to 1 if the system has the type `unsigned long long int'. */
# define HAVE_UNSIGNED_LONG_LONG_INT 1
# ifndef HAVE_UNSIGNED_LONG_LONG_INT
# define HAVE_UNSIGNED_LONG_LONG_INT 1
# endif
#endif

View file

@ -43,8 +43,9 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#undef FD_ZERO
#endif
/* avoid duplicate definition of timeval */
#ifdef HAVE_TIMEVAL
/* Avoid duplicate definition of timeval. MinGW uses _TIMEVAL_DEFINED
in sys/time.h to avoid that. */
#if defined (HAVE_TIMEVAL) && defined (_MSC_VER)
#define timeval ws_timeval
#endif
@ -62,7 +63,9 @@ typedef unsigned short uint16_t;
#undef MUST_REDEF_SELECT
#endif
/* revert to our version of FD_SET */
/* Revert to our version of FD_SET, but not when included from test
programs run by configure. */
#ifdef EMACS_CONFIG_H
#undef FD_SET
#undef FD_CLR
#undef FD_ISSET
@ -71,8 +74,9 @@ typedef unsigned short uint16_t;
/* allow us to provide our own version of fd_set */
#define fd_set ws_fd_set
#include "w32.h"
#endif /* EMACS_CONFIG_H */
#ifdef HAVE_TIMEVAL
#if defined (HAVE_TIMEVAL) && defined (_MSC_VER)
#undef timeval
#endif

View file

@ -83,6 +83,9 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#define S_TYPEISSHM(p) 0
#define S_TYPEISTMO(p) 0
#define UTIME_NOW (-1)
#define UTIME_OMIT (-2)
struct stat {
unsigned __int64 st_ino; /* ino_t in sys/types.h is too narrow */
dev_t st_dev;
@ -99,6 +102,39 @@ struct stat {
char st_gname[260];
};
/* These are here to avoid compiler warnings when using wchar.h. */
struct _stat
{
_dev_t st_dev; /* Equivalent to drive number 0=A 1=B ... */
_ino_t st_ino; /* Always zero ? */
_mode_t st_mode; /* See above constants */
short st_nlink; /* Number of links. */
short st_uid; /* User: Maybe significant on NT ? */
short st_gid; /* Group: Ditto */
_dev_t st_rdev; /* Seems useless (not even filled in) */
_off_t st_size; /* File size in bytes */
time_t st_atime; /* Accessed date (always 00:00 hrs local
* on FAT) */
time_t st_mtime; /* Modified time */
time_t st_ctime; /* Creation time */
};
#if defined (__MSVCRT__)
struct _stati64 {
_dev_t st_dev;
_ino_t st_ino;
_mode_t st_mode;
short st_nlink;
short st_uid;
short st_gid;
_dev_t st_rdev;
__int64 st_size;
time_t st_atime;
time_t st_mtime;
time_t st_ctime;
};
#endif
/* Internal variable for asking 'stat'/'lstat' to produce accurate
info about owner and group of files. */
extern int w32_stat_get_owner_group;

View file

@ -9,12 +9,23 @@
/* The guards are for MinGW64, which defines these structs on its
system headers which are included by ms-w32.h. */
#ifndef _W64
/* Allow inclusion of sys/time.h and winsock2.h in any order. Needed
for running the configure test, which is only relevant to MinGW. */
#ifndef _TIMEVAL_DEFINED
#define _TIMEVAL_DEFINED
struct timeval
{
long tv_sec; /* seconds */
long tv_usec; /* microseconds */
};
#endif
#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
#define timercmp(tvp, uvp, cmp) \
(((tvp)->tv_sec != (uvp)->tv_sec) ? \
((tvp)->tv_sec cmp (uvp)->tv_sec) : \
((tvp)->tv_usec cmp (uvp)->tv_usec))
#define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0
#endif /* _TIMEVAL_DEFINED */
#endif /* _W64 */
#ifndef _TIMEZONE_DEFINED
struct timezone
@ -24,7 +35,10 @@ struct timezone
};
#endif
void gettimeofday (struct timeval *, struct timezone *);
/* This needs to be compatible with Posix signature, in order to pass
the configure test for the type of the second argument. See
m4/gettimeofday.m4. */
int gettimeofday (struct timeval *restrict, struct timezone *restrict);
#define ITIMER_REAL 0
#define ITIMER_PROF 1

View file

@ -3,6 +3,9 @@
#ifndef _UNISTD_H
#define _UNISTD_H
#include <sys/types.h>
#include <pwd.h>
/* On Microsoft platforms, <stdlib.h> declares 'environ'; on POSIX
platforms, <unistd.h> does. Every file in Emacs that includes
<unistd.h> also includes <stdlib.h>, so there's no need to declare

View file

@ -29,6 +29,8 @@ TMP_DIST_DIR = emacs-$(VERSION)
TRES = $(BLD)/emacs.res
CLIENTRES = $(BLD)/emacsclient.res
LOCAL_FLAGS = -DOLD_PATHS=1
XMFLAGS =
ALL = $(BLD)/addpm.exe $(BLD)/ddeclient.exe $(BLD)/runemacs.exe \

106
nt/mingw-cfg.site Normal file
View file

@ -0,0 +1,106 @@
#! /bin/sh
# Site defaults for the MinGW configuration of GNU Emacs.
#
# This file's purpose is to short-circuit configure-time tests for
# which we want to provide the results instead of letting the
# 'configure' script do that. This is mainly for features that
# 'configure' tests that are implemented as part of Emacs sources, not
# as part of system libraries. The idea is to set shell variables
# that appear to the script as cached values.
#
# For each header file foo.h you want to supply test results, set the
# value of a shell variable ac_cv_header_foo_h. The value should be
# yes if the header is deemed to exist, no otherwise. Or it could be
# something else, if the value computed by 'configure' requires that.
# In general, since nt/msysconfig.sh instructs GCC to use header files
# in nt/inc, you should not need to futz with header file tests. But
# there are exceptions, like with getopt.h below (which is a MinGW
# system header, but we do not want to use it).
#
# For each library function foo you want to supply test results, set
# the value of a shell variable ac_cv_func_foo. Again, the value is
# determined by what 'configure' expects; sometimes it could be "not
# needed" or whatever, see the examples below. In addition, you may
# need to set the various gl_cv_* variables for those tests that come
# from gnulib.
#
# In short, examine the test in 'configure' and push the knobs that
# are necessary to steer the test in the direction you need, by
# judicioulsy setting variables that control the test results.
# We want to use getopt.h from gnulib
ac_cv_header_getopt_h=no
# ACL functions are implemented in w32.c
ac_cv_search_acl_get_file="none required"
ac_cv_func_acl_get_file=yes
ac_cv_func_acl_set_file=yes
ac_cv_func_acl_free=yes
ac_cv_func_acl_from_text=yes
gl_cv_func_working_acl_get_file=yes
# Autoconf's test program is not smart enough, and fails to detect gethostname
ac_cv_func_gethostname=yes
# Implemented as sys_select in w32proc.c
ac_cv_func_select=yes
ac_cv_func_pselect=yes
gl_cv_sig_pselect=yes
gl_cv_func_pselect_detects_ebadf=yes
# Implemented as sys_shutdown in w32.c
ac_cv_func_shutdown=yes
# Implemented in w32proc.c
ac_cv_func_setitimer=yes
# Implemented as sys_sendto in w32.c
ac_cv_func_sendto=yes
# Implemented as sys_recvfrom in w32.c
ac_cv_func_recvfrom=yes
# Implemented as sys_getsockname in w32.c
ac_cv_func_getsockname=yes
# Implemented as sys_getpeername in w32.c
ac_cv_func_getpeername=yes
# Implemented as sys_socket in w32.c
ac_cv_func_socket=yes
# Implemented in w32.c
ac_cv_func_readlink=yes
ac_cv_func_symlink=yes
# Avoid run-time tests of readlink and symlink, which will fail
gl_cv_func_readlink_works=yes
gl_cv_func_symlink_works=yes
ac_cv_func_readlinkat=yes
ac_cv_func_faccessat=yes
# We don't need fdopendir
ac_cv_func_fdopendir="not-needed"
gl_cv_func_fdopendir_works="no-but-not-needed-so-yes"
# Implemented in w32.c
ac_cv_func_lstat=yes
gl_cv_func_lstat_dereferences_slashed_symlink=yes
ac_cv_func_fstatat=yes
gl_cv_func_fstatat_zero_flag=yes
# Aliased to _commit in ms-w32.h
ac_cv_func_fsync=yes
ac_cv_func_fdatasync=yes
# Implemented in w32proc.c
ac_cv_func_pthread_sigmask=yes
# Avoid gnulib replacement
gl_threads_api=posix
gl_cv_func_pthread_sigmask_return_works=yes
gl_cv_func_pthread_sigmask_unblock_works="not relevant"
# Implemented in w32proc.c
emacs_cv_langinfo_codeset=yes
# Declared in ms-w32.h
ac_cv_have_decl_alarm=yes
# Avoid including the gnulib dup2 module
gl_cv_func_dup2_works=yes
# Defined in w32.c
ac_cv_func_getloadavg=yes
# Avoid compiling gnulib mktime
gl_cv_func_working_mktime=yes
# Implemented in w32.c
ac_cv_have_decl_unsetenv=yes
ac_cv_func_unsetenv=yes
gt_cv_func_unsetenv_ret='int'
gl_cv_func_unsetenv_works=yes
gl_cv_func_stat_dir_slash=yes
gl_cv_func_stat_file_slash=yes
ac_cv_func_random=yes
# Implemented in w32.c as sys_putenv
gl_cv_func_svid_putenv=yes

39
nt/msysconfig.sh Normal file
View file

@ -0,0 +1,39 @@
#! /bin/sh
### msysconfig.sh - Run the top-level 'configure' script as approriate
### for the MinGW/MSYS build of a native MS-Windows port of Emacs.
## Copyright (C) 2013 Free Software Foundation, Inc.
## Author: Eli Zaretskii <eliz@gnu.org>
## 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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>.
### Commentary:
## The Posix 'configure' script needs a few tweaks to produce desired
## results when running under MSYS with the purpose of configuring
## Emacs for the MinGW MS-Windows build. Rather than asking users to
## type these tweaks every time they configure the package, we provide
## this helper script which takes care of the mundane things.
### Code:
srcdir=`dirname "$0"`
parent=`dirname "$srcdir"`
## The nt/mingw-cfg.site file provides various autoconf variables that
## are needed for a successful MinGW build.
CONFIG_SITE="$srcdir/mingw-cfg.site" $parent/configure "$@"

View file

@ -1,3 +1,27 @@
2013-05-16 Eli Zaretskii <eliz@gnu.org>
* w32.c: Include epaths.h.
(init_environment): Use cmdproxy.exe without leading directories.
Support emacs.exe in src; point SHELL to cmdproxy in ../nt in that
case.
(gettimeofday): Adjust signature and return value to Posix
expectations.
* unexw32.c (open_output_file): Delete the existing emacs.exe
before creating it, to break the hard link to the versioned
executable.
* Makefile.in (EMACS_MANIFEST, CM_OBJ, TEMACS_POST_LINK)
(ADDSECTION, EMACS_HEAPSIZE, MINGW_TEMACS_POST_LINK)
(FIRSTFILE_OBJ): New variables.
(W32_RES): Rename to EMACSRES. All users changed.
(base_obj): Use $(CM_OBJ).
(ALLOBJS): Use $(FIRSTFILE_OBJ).
(emacs$(EXEEXT)): Depend on $(ADDSECTION).
(temacs$(EXEEXT)): Use $(TEMACS_POST_LINK), and move
$(W32_RES_LINK) before $(LIBES).
(emacs.res): Depend on $(EMACS_MANIFEST). Put emacs.rc in nt.
2013-05-15 Stefan Monnier <monnier@iro.umontreal.ca>
* makefile.w32-in (DOC): Use just "DOC".

View file

@ -267,10 +267,13 @@ W32_OBJ=@W32_OBJ@
W32_LIBS=@W32_LIBS@
## emacs.res if HAVE_W32
W32_RES=@W32_RES@
EMACSRES = @EMACSRES@
## emacs-*.manifest if HAVE_W32
EMACS_MANIFEST = @EMACS_MANIFEST@
## If HAVE_W32, compiler arguments for including
## the resource file in the binary.
## XXX -Wl,-b -Wl,pe-i386 -Wl,emacs.res
## Cygwin: -Wl,emacs.res
## MinGW: emacs.res
W32_RES_LINK=@W32_RES_LINK@
## Empty if !HAVE_X_WINDOWS
@ -279,6 +282,9 @@ W32_RES_LINK=@W32_RES_LINK@
## else xfont.o
FONT_OBJ=@FONT_OBJ@
## Empty for MinGW, cm.o for the rest.
CM_OBJ=@CM_OBJ@
LIBGPM = @LIBGPM@
## -lresolv, or empty.
@ -297,6 +303,14 @@ GETLOADAVG_LIBS = @GETLOADAVG_LIBS@
RUN_TEMACS = `/bin/pwd`/temacs
## Invoke ../nt/addsection for MinGW, ":" elsewhere.
TEMACS_POST_LINK = @TEMACS_POST_LINK@
ADDSECTION = @ADDSECTION@
EMACS_HEAPSIZE = @EMACS_HEAPSIZE@
MINGW_TEMACS_POST_LINK = \
mv temacs$(EXEEXT) temacs.tmp; \
../nt/addsection temacs.tmp temacs$(EXEEXT) EMHEAP $(EMACS_HEAPSIZE)
UNEXEC_OBJ = @UNEXEC_OBJ@
CANNOT_DUMP=@CANNOT_DUMP@
@ -339,7 +353,7 @@ ALL_OBJC_CFLAGS=$(ALL_CFLAGS) $(GNU_OBJC_CFLAGS)
## be dumped as pure by dump-emacs.
base_obj = dispnew.o frame.o scroll.o xdisp.o menu.o $(XMENU_OBJ) window.o \
charset.o coding.o category.o ccl.o character.o chartab.o bidi.o \
cm.o term.o terminal.o xfaces.o $(XOBJ) $(GTK_OBJ) $(DBUS_OBJ) \
$(CM_OBJ) term.o terminal.o xfaces.o $(XOBJ) $(GTK_OBJ) $(DBUS_OBJ) \
emacs.o keyboard.o macros.o keymap.o sysdep.o \
buffer.o filelock.o insdel.o marker.o \
minibuf.o fileio.o dired.o \
@ -377,9 +391,9 @@ VMLIMIT_OBJ=@VMLIMIT_OBJ@
## ralloc.o if !SYSTEM_MALLOC && REL_ALLOC, else empty.
RALLOC_OBJ=@RALLOC_OBJ@
## Empty on Cygwin, lastfile.o elsewhere.
## Empty on Cygwin and MinGW, lastfile.o elsewhere.
PRE_ALLOC_OBJ=@PRE_ALLOC_OBJ@
## lastfile.o on Cygwin, empty elsewhere.
## lastfile.o on Cygwin and MinGW, empty elsewhere.
POST_ALLOC_OBJ=@POST_ALLOC_OBJ@
## List of object files that make-docfile should not be told about.
@ -387,7 +401,9 @@ otherobj= $(TERMCAP_OBJ) $(PRE_ALLOC_OBJ) $(GMALLOC_OBJ) $(RALLOC_OBJ) \
$(POST_ALLOC_OBJ) $(WIDGET_OBJ) $(LIBOBJS)
## All object files linked into temacs. $(VMLIMIT_OBJ) should be first.
ALLOBJS = $(VMLIMIT_OBJ) $(obj) $(otherobj)
## (On MinGW, firstfile.o should be before vm-limit.o.)
FIRSTFILE_OBJ=@FIRSTFILE_OBJ@
ALLOBJS = $(FIRSTFILE_OBJ) $(VMLIMIT_OBJ) $(obj) $(otherobj)
## Configure inserts the file lisp.mk at this point, defining $lisp.
@lisp_frag@
@ -416,7 +432,8 @@ $(leimdir)/leim-list.el: bootstrap-emacs$(EXEEXT)
## Strictly speaking, emacs does not depend directly on all of $lisp,
## since not all pieces are used on all platforms. But DOC depends
## on all of $lisp, and emacs depends on DOC, so it is ok to use $lisp here.
emacs$(EXEEXT): temacs$(EXEEXT) $(etc)/DOC $(lisp) $(leimdir)/leim-list.el
emacs$(EXEEXT): temacs$(EXEEXT) $(ADDSECTION) \
$(etc)/DOC $(lisp) $(leimdir)/leim-list.el
if test "$(CANNOT_DUMP)" = "yes"; then \
rm -f emacs$(EXEEXT); \
ln temacs$(EXEEXT) emacs$(EXEEXT); \
@ -468,10 +485,10 @@ $(lib)/libgnu.a: $(config_h)
cd $(lib) && $(MAKE) libgnu.a
temacs$(EXEEXT): stamp-oldxmenu $(ALLOBJS) \
$(lib)/libgnu.a $(W32_RES)
$(lib)/libgnu.a $(EMACSRES)
$(CC) $(ALL_CFLAGS) $(TEMACS_LDFLAGS) $(LDFLAGS) \
-o temacs $(ALLOBJS) $(lib)/libgnu.a $(LIBES) \
$(W32_RES_LINK)
-o temacs $(ALLOBJS) $(lib)/libgnu.a $(W32_RES_LINK) $(LIBES)
$(TEMACS_POST_LINK)
test "$(CANNOT_DUMP)" = "yes" || \
test "X$(PAXCTL)" = X || $(PAXCTL) -r temacs$(EXEEXT)
@ -514,8 +531,9 @@ doc.o: buildobj.h
emacs.res: $(ntsource)/emacs.rc \
$(ntsource)/icons/emacs.ico \
$(ntsource)/emacs-x86.manifest
$(WINDRES) -O COFF -o $@ $(ntsource)/emacs.rc
$(ntsource)/$(EMACS_MANIFEST)
$(WINDRES) -O COFF --include-dir=$(srcdir)/../nt \
-o $@ $(ntsource)/emacs.rc
ns-app: emacs$(EXEEXT)
cd ../nextstep && $(MAKE) $(MFLAGS) all

View file

@ -159,6 +159,14 @@ open_output_file (file_data *p_file, char *filename, unsigned long size)
HANDLE file_mapping;
void *file_base;
/* We delete any existing FILENAME because loadup.el will create a
hard link to it under the name emacs-XX.YY.ZZ.nn.exe. Evidently,
overwriting a file on Unix breaks any hard links to it, but that
doesn't happen on Windows. If we don't delete the file before
creating it, all the emacs-XX.YY.ZZ.nn.exe end up being hard
links to the same file, which defeats the purpose of these hard
links: being able to run previous builds. */
DeleteFile (filename);
file = CreateFile (filename, GENERIC_READ | GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if (file == INVALID_HANDLE_VALUE)

View file

@ -65,6 +65,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#undef localtime
#include "lisp.h"
#include "epaths.h" /* for SHELL */
#include <pwd.h>
#include <grp.h>
@ -2018,7 +2019,7 @@ init_environment (char ** argv)
{"PRELOAD_WINSOCK", NULL},
{"emacs_dir", "C:/emacs"},
{"EMACSLOADPATH", NULL},
{"SHELL", "%emacs_dir%/bin/cmdproxy.exe"},
{"SHELL", "cmdproxy.exe"}, /* perhaps it is somewhere on PATH */
{"EMACSDATA", NULL},
{"EMACSPATH", NULL},
{"INFOPATH", NULL},
@ -2094,9 +2095,12 @@ init_environment (char ** argv)
emacs_abort ();
*p = 0;
if ((p = _mbsrchr (modname, '\\')) && xstrcasecmp (p, "\\bin") == 0)
if ((p = _mbsrchr (modname, '\\'))
/* From bin means installed Emacs, from src means uninstalled. */
&& (xstrcasecmp (p, "\\bin") == 0 || xstrcasecmp (p, "\\src") == 0))
{
char buf[SET_ENV_BUF_SIZE];
int within_build_tree = xstrcasecmp (p, "\\src") == 0;
*p = 0;
for (p = modname; *p; p = CharNext (p))
@ -2104,6 +2108,15 @@ init_environment (char ** argv)
_snprintf (buf, sizeof (buf)-1, "emacs_dir=%s", modname);
_putenv (strdup (buf));
/* If we are running from the Posix-like build tree, define
SHELL to point to our own cmdproxy. The loop below will
then disregard PATH_EXEC and the default value. */
if (within_build_tree)
{
_snprintf (buf, sizeof (buf) - 1,
"SHELL=%s/nt/cmdproxy.exe", modname);
_putenv (strdup (buf));
}
}
/* Handle running emacs from the build directory: src/oo-spd/i386/ */
@ -2139,16 +2152,60 @@ init_environment (char ** argv)
if (!getenv (env_vars[i].name))
{
int dont_free = 0;
char bufc[SET_ENV_BUF_SIZE];
if ((lpval = w32_get_resource (env_vars[i].name, &dwType)) == NULL
/* Also ignore empty environment variables. */
|| *lpval == 0)
{
xfree (lpval);
lpval = env_vars[i].def_value;
dwType = REG_EXPAND_SZ;
dont_free = 1;
if (!strcmp (env_vars[i].name, "HOME") && !appdata)
if (strcmp (env_vars[i].name, "SHELL") == 0)
{
/* Look for cmdproxy.exe in every directory in
PATH_EXEC. FIXME: This does not find cmdproxy
in nt/ when we run uninstalled. */
char fname[MAX_PATH];
const char *pstart = PATH_EXEC, *pend;
do {
pend = _mbschr (pstart, ';');
if (!pend)
pend = pstart + strlen (pstart);
/* Be defensive against series of ;;; characters. */
if (pend > pstart)
{
strncpy (fname, pstart, pend - pstart);
fname[pend - pstart] = '/';
strcpy (&fname[pend - pstart + 1], "cmdproxy.exe");
ExpandEnvironmentStrings ((LPSTR) fname, bufc,
sizeof (bufc));
if (check_existing (bufc))
{
lpval = bufc;
dwType = REG_SZ;
break;
}
}
if (*pend)
pstart = pend + 1;
else
pstart = pend;
if (!*pstart)
{
/* If not found in any directory, use the
default as the last resort. */
lpval = env_vars[i].def_value;
dwType = REG_EXPAND_SZ;
}
} while (*pstart);
}
else
{
lpval = env_vars[i].def_value;
dwType = REG_EXPAND_SZ;
}
if (strcmp (env_vars[i].name, "HOME") == 0 && !appdata)
Vdelayed_warnings_list
= Fcons (listn (CONSTYPE_HEAP, 2,
intern ("initialization"),
@ -2394,8 +2451,8 @@ get_emacs_configuration_options (void)
#include <sys/timeb.h>
/* Emulate gettimeofday (Ulrich Leodolter, 1/11/95). */
void
gettimeofday (struct timeval *tv, struct timezone *tz)
int
gettimeofday (struct timeval *restrict tv, struct timezone *restrict tz)
{
struct _timeb tb;
_ftime (&tb);
@ -2413,6 +2470,7 @@ gettimeofday (struct timeval *tv, struct timezone *tz)
tz->tz_minuteswest = tb.timezone; /* minutes west of Greenwich */
tz->tz_dsttime = tb.dstflag; /* type of dst correction */
}
return 0;
}
/* Emulate fdutimens. */