diff options
| author | Joakim Verona | 2013-08-12 12:29:06 +0200 |
|---|---|---|
| committer | Joakim Verona | 2013-08-12 12:29:06 +0200 |
| commit | 5ff84f8a17c73bf63cc7532e14149380d9f83b3f (patch) | |
| tree | 501ac3b99a49aaa25adedc516bb4ea7a34c22a5c | |
| parent | c39e73975f7371a6458cd63967d39ba77a1e871a (diff) | |
| parent | 7a67e06b99a85ae700a7ccc75468397d53af59ed (diff) | |
| download | emacs-5ff84f8a17c73bf63cc7532e14149380d9f83b3f.tar.gz emacs-5ff84f8a17c73bf63cc7532e14149380d9f83b3f.zip | |
merge from trunk
42 files changed, 2050 insertions, 937 deletions
| @@ -1,3 +1,31 @@ | |||
| 1 | 2013-08-12 Paul Eggert <eggert@cs.ucla.edu> | ||
| 2 | |||
| 3 | Merge from gnulib, incorporating: | ||
| 4 | 2013-08-11 fpending: port to recent Cygwin change to stdio_ext.h | ||
| 5 | 2013-08-10 sys_time: port to OpenBSD | ||
| 6 | |||
| 7 | 2013-08-12 Glenn Morris <rgm@gnu.org> | ||
| 8 | |||
| 9 | * configure.ac (etcdocdir): Rename from docdir, to avoid confusion | ||
| 10 | with configure's standard --docdir argument. All uses updated. | ||
| 11 | * Makefile.in (etcdocdir): Rename from docdir. All uses updated. | ||
| 12 | (install-etcdoc): Rename from install-doc. All uses updated. | ||
| 13 | (uninstall): Run uninstall-doc. | ||
| 14 | (PSS): Add misc-ps. | ||
| 15 | (INSTALL_DVI, INSTALL_HTML, INSTALL_PDF, INSTALL_PS) | ||
| 16 | (INSTALL_DOC, UNINSTALL_DVI, UNINSTALL_HTML, UNINSTALL_PDF) | ||
| 17 | (UNINSTALL_PS, UNINSTALL_DOC): New variables. | ||
| 18 | ($(INSTALL_DOC), install-doc, install-dvi, install-html, install-pdf) | ||
| 19 | (install-ps, $(UNINSTALL_DOC), uninstall-doc, uninstall-dvi) | ||
| 20 | (uninstall-html, uninstall-pdf, uninstall-ps): New .PHONY rules. | ||
| 21 | |||
| 22 | 2013-08-11 Paul Eggert <eggert@cs.ucla.edu> | ||
| 23 | |||
| 24 | Add --with-zlib to 'configure'. | ||
| 25 | * configure.ac: Add --with-zlib option to 'configure', so that Emacs | ||
| 26 | can be built without zlib. Don't assume that -lz is needed on | ||
| 27 | non-PNG hosts. Mention zlib configuration status in 'configure' output. | ||
| 28 | |||
| 1 | 2013-08-11 Lars Magne Ingebrigtsen <larsi@gnus.org> | 29 | 2013-08-11 Lars Magne Ingebrigtsen <larsi@gnus.org> |
| 2 | 30 | ||
| 3 | * configure.ac: Test for zlib. | 31 | * configure.ac: Test for zlib. |
diff --git a/Makefile.in b/Makefile.in index dad0a571075..db028132e5c 100644 --- a/Makefile.in +++ b/Makefile.in | |||
| @@ -233,8 +233,8 @@ etcdir=@etcdir@ | |||
| 233 | # once. | 233 | # once. |
| 234 | archlibdir=@archlibdir@ | 234 | archlibdir=@archlibdir@ |
| 235 | 235 | ||
| 236 | # Where to put the docstring file. | 236 | # Where to put the etc/DOC file. |
| 237 | docdir=@docdir@ | 237 | etcdocdir=@etcdocdir@ |
| 238 | 238 | ||
| 239 | # Where to install Emacs game score files. | 239 | # Where to install Emacs game score files. |
| 240 | gamedir=@gamedir@ | 240 | gamedir=@gamedir@ |
| @@ -313,7 +313,7 @@ epaths-force: FRC | |||
| 313 | -e 's;\(#.*PATH_BITMAPS\).*$$;\1 "${bitmapdir}";' \ | 313 | -e 's;\(#.*PATH_BITMAPS\).*$$;\1 "${bitmapdir}";' \ |
| 314 | -e 's;\(#.*PATH_X_DEFAULTS\).*$$;\1 "${x_default_search_path}";' \ | 314 | -e 's;\(#.*PATH_X_DEFAULTS\).*$$;\1 "${x_default_search_path}";' \ |
| 315 | -e 's;\(#.*PATH_GAME\).*$$;\1 "${gamedir}";' \ | 315 | -e 's;\(#.*PATH_GAME\).*$$;\1 "${gamedir}";' \ |
| 316 | -e 's;\(#.*PATH_DOC\).*$$;\1 "${docdir}";') && \ | 316 | -e 's;\(#.*PATH_DOC\).*$$;\1 "${etcdocdir}";') && \ |
| 317 | ${srcdir}/build-aux/move-if-change epaths.h.$$$$ src/epaths.h | 317 | ${srcdir}/build-aux/move-if-change epaths.h.$$$$ src/epaths.h |
| 318 | 318 | ||
| 319 | # Convert MSYS-style /x/foo or Windows-style x:\foo file names | 319 | # Convert MSYS-style /x/foo or Windows-style x:\foo file names |
| @@ -453,7 +453,7 @@ $(srcdir)/src/stamp-h.in: $(AUTOCONF_INPUTS) | |||
| 453 | 453 | ||
| 454 | # ==================== Installation ==================== | 454 | # ==================== Installation ==================== |
| 455 | 455 | ||
| 456 | .PHONY: install install-arch-dep install-arch-indep install-doc install-info | 456 | .PHONY: install install-arch-dep install-arch-indep install-etcdoc install-info |
| 457 | .PHONY: install-man install-etc install-strip install-$(NTDIR) | 457 | .PHONY: install-man install-etc install-strip install-$(NTDIR) |
| 458 | .PHONY: uninstall uninstall-$(NTDIR) | 458 | .PHONY: uninstall uninstall-$(NTDIR) |
| 459 | 459 | ||
| @@ -461,7 +461,7 @@ $(srcdir)/src/stamp-h.in: $(AUTOCONF_INPUTS) | |||
| 461 | ## don't have to duplicate the list of utilities to install in | 461 | ## don't have to duplicate the list of utilities to install in |
| 462 | ## this Makefile as well. | 462 | ## this Makefile as well. |
| 463 | 463 | ||
| 464 | install: all install-arch-indep install-doc install-arch-dep install-$(NTDIR) blessmail | 464 | install: all install-arch-indep install-etcdoc install-arch-dep install-$(NTDIR) blessmail |
| 465 | @true | 465 | @true |
| 466 | 466 | ||
| 467 | ## Ensure that $subdir contains a subdirs.el file. | 467 | ## Ensure that $subdir contains a subdirs.el file. |
| @@ -482,7 +482,7 @@ write_subdir=if [ -f $${subdir}/subdirs.el ]; \ | |||
| 482 | ### Install the executables that were compiled specifically for this machine. | 482 | ### Install the executables that were compiled specifically for this machine. |
| 483 | ### We do install-arch-indep first because the executable needs the | 483 | ### We do install-arch-indep first because the executable needs the |
| 484 | ### Lisp files and DOC file to work properly. | 484 | ### Lisp files and DOC file to work properly. |
| 485 | install-arch-dep: src install-arch-indep install-doc install-$(NTDIR) | 485 | install-arch-dep: src install-arch-indep install-etcdoc install-$(NTDIR) |
| 486 | umask 022; ${MKDIR_P} $(DESTDIR)${bindir} | 486 | umask 022; ${MKDIR_P} $(DESTDIR)${bindir} |
| 487 | cd lib-src && \ | 487 | cd lib-src && \ |
| 488 | $(MAKE) install $(MFLAGS) prefix=${prefix} \ | 488 | $(MAKE) install $(MFLAGS) prefix=${prefix} \ |
| @@ -541,7 +541,7 @@ set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \ | |||
| 541 | ## We delete etc/DOC* because there may be irrelevant DOC files from | 541 | ## We delete etc/DOC* because there may be irrelevant DOC files from |
| 542 | ## other builds in the source directory. This is ok because we just | 542 | ## other builds in the source directory. This is ok because we just |
| 543 | ## deleted the entire installed etc/ directory and recreated it. | 543 | ## deleted the entire installed etc/ directory and recreated it. |
| 544 | ## install-doc installs the relevant DOC. | 544 | ## install-etcdoc installs the relevant DOC. |
| 545 | 545 | ||
| 546 | ## Note that the Makefiles in the etc directory are potentially useful | 546 | ## Note that the Makefiles in the etc directory are potentially useful |
| 547 | ## in an installed Emacs, so should not be excluded. | 547 | ## in an installed Emacs, so should not be excluded. |
| @@ -621,16 +621,16 @@ install-arch-indep: lisp leim install-info install-man ${INSTALL_ARCH_INDEP_EXTR | |||
| 621 | 621 | ||
| 622 | ## Note that install-arch-indep deletes and recreates the entire | 622 | ## Note that install-arch-indep deletes and recreates the entire |
| 623 | ## installed etc/ directory, so we need it to run before this does. | 623 | ## installed etc/ directory, so we need it to run before this does. |
| 624 | install-doc: src install-arch-indep | 624 | install-etcdoc: src install-arch-indep |
| 625 | -unset CDPATH; \ | 625 | -unset CDPATH; \ |
| 626 | umask 022; ${MKDIR_P} $(DESTDIR)${docdir} ; \ | 626 | umask 022; ${MKDIR_P} $(DESTDIR)${etcdocdir} ; \ |
| 627 | if [ `cd ./etc; /bin/pwd` != `cd $(DESTDIR)${docdir}; /bin/pwd` ]; \ | 627 | if [ `cd ./etc; /bin/pwd` != `cd $(DESTDIR)${etcdocdir}; /bin/pwd` ]; \ |
| 628 | then \ | 628 | then \ |
| 629 | docfile="DOC"; \ | 629 | docfile="DOC"; \ |
| 630 | echo "Copying etc/$${docfile} to $(DESTDIR)${docdir} ..." ; \ | 630 | echo "Copying etc/$${docfile} to $(DESTDIR)${etcdocdir} ..." ; \ |
| 631 | ${INSTALL_DATA} etc/$${docfile} $(DESTDIR)${docdir}/$${docfile}; \ | 631 | ${INSTALL_DATA} etc/$${docfile} $(DESTDIR)${etcdocdir}/$${docfile}; \ |
| 632 | $(set_installuser); \ | 632 | $(set_installuser); \ |
| 633 | chown $${installuser} $(DESTDIR)${docdir}/$${docfile} || true ; \ | 633 | chown $${installuser} $(DESTDIR)${etcdocdir}/$${docfile} || true ; \ |
| 634 | else true; fi | 634 | else true; fi |
| 635 | 635 | ||
| 636 | install-info: info | 636 | install-info: info |
| @@ -716,7 +716,7 @@ install-strip: | |||
| 716 | ### create (but not the noninstalled files such as `make all' would create). | 716 | ### create (but not the noninstalled files such as `make all' would create). |
| 717 | ### | 717 | ### |
| 718 | ### Don't delete the lisp and etc directories if they're in the source tree. | 718 | ### Don't delete the lisp and etc directories if they're in the source tree. |
| 719 | uninstall: uninstall-$(NTDIR) | 719 | uninstall: uninstall-$(NTDIR) uninstall-doc |
| 720 | cd lib-src && \ | 720 | cd lib-src && \ |
| 721 | $(MAKE) $(MFLAGS) uninstall \ | 721 | $(MAKE) $(MFLAGS) uninstall \ |
| 722 | prefix=${prefix} exec_prefix=${exec_prefix} \ | 722 | prefix=${prefix} exec_prefix=${exec_prefix} \ |
| @@ -921,7 +921,7 @@ DVIS = lispref-dvi lispintro-dvi emacs-dvi misc-dvi | |||
| 921 | HTMLS = lispref-html lispintro-html emacs-html misc-html | 921 | HTMLS = lispref-html lispintro-html emacs-html misc-html |
| 922 | INFOS = lispref-info lispintro-info emacs-info misc-info | 922 | INFOS = lispref-info lispintro-info emacs-info misc-info |
| 923 | PDFS = lispref-pdf lispintro-pdf emacs-pdf misc-pdf | 923 | PDFS = lispref-pdf lispintro-pdf emacs-pdf misc-pdf |
| 924 | PSS = lispref-ps lispintro-ps emacs-ps # no misc-ps | 924 | PSS = lispref-ps lispintro-ps emacs-ps misc-ps |
| 925 | 925 | ||
| 926 | DOCS = $(DVIS) $(HTMLS) $(INFOS) $(PDFS) $(PSS) | 926 | DOCS = $(DVIS) $(HTMLS) $(INFOS) $(PDFS) $(PSS) |
| 927 | $(DOCS): | 927 | $(DOCS): |
| @@ -930,6 +930,7 @@ $(DOCS): | |||
| 930 | .PHONY: $(DOCS) docs pdf ps | 930 | .PHONY: $(DOCS) docs pdf ps |
| 931 | .PHONY: info dvi dist check html info-real force-info check-info-dir | 931 | .PHONY: info dvi dist check html info-real force-info check-info-dir |
| 932 | 932 | ||
| 933 | ## TODO add etc/refcards. | ||
| 933 | docs: $(DOCS) | 934 | docs: $(DOCS) |
| 934 | dvi: $(DVIS) | 935 | dvi: $(DVIS) |
| 935 | html: $(HTMLS) | 936 | html: $(HTMLS) |
| @@ -937,6 +938,55 @@ info-real: $(INFOS) | |||
| 937 | pdf: $(PDFS) | 938 | pdf: $(PDFS) |
| 938 | ps: $(PSS) | 939 | ps: $(PSS) |
| 939 | 940 | ||
| 941 | |||
| 942 | INSTALL_DVI = install-emacs-dvi install-lispref-dvi \ | ||
| 943 | install-lispintro-dvi install-misc-dvi | ||
| 944 | INSTALL_HTML = install-emacs-html install-lispref-html \ | ||
| 945 | install-lispintro-html install-misc-html | ||
| 946 | INSTALL_PDF = install-emacs-pdf install-lispref-pdf \ | ||
| 947 | install-lispintro-pdf install-misc-pdf | ||
| 948 | INSTALL_PS = install-emacs-ps install-lispref-ps \ | ||
| 949 | install-lispintro-ps install-misc-ps | ||
| 950 | INSTALL_DOC = $(INSTALL_DVI) $(INSTALL_HTML) $(INSTALL_PDF) $(INSTALL_PS) | ||
| 951 | |||
| 952 | ## Install non .info forms of the documentation. | ||
| 953 | ## TODO add etc/refcards. | ||
| 954 | $(INSTALL_DOC): | ||
| 955 | t=$@; IFS=-; set $$t; IFS=; cd doc/$$2 && $(MAKE) $(MFLAGS) $$1-$$3 | ||
| 956 | |||
| 957 | .PHONY: $(INSTALL_DOC) install-doc | ||
| 958 | .PHONY: install-dvi install-html install-pdf install-ps | ||
| 959 | |||
| 960 | install-doc: $(INSTALL_DOC) | ||
| 961 | install-dvi: $(INSTALL_DVI) | ||
| 962 | install-html: $(INSTALL_HTML) | ||
| 963 | install-pdf: $(INSTALL_PDF) | ||
| 964 | install-ps: $(INSTALL_PS) | ||
| 965 | |||
| 966 | |||
| 967 | UNINSTALL_DVI = uninstall-emacs-dvi uninstall-lispref-dvi \ | ||
| 968 | uninstall-lispintro-dvi uninstall-misc-dvi | ||
| 969 | UNINSTALL_HTML = uninstall-emacs-html uninstall-lispref-html \ | ||
| 970 | uninstall-lispintro-html uninstall-misc-html | ||
| 971 | UNINSTALL_PDF = uninstall-emacs-pdf uninstall-lispref-pdf \ | ||
| 972 | uninstall-lispintro-pdf uninstall-misc-pdf | ||
| 973 | UNINSTALL_PS = uninstall-emacs-ps uninstall-lispref-ps \ | ||
| 974 | uninstall-lispintro-ps uninstall-misc-ps | ||
| 975 | UNINSTALL_DOC = $(UNINSTALL_DVI) $(UNINSTALL_HTML) $(UNINSTALL_PDF) $(UNINSTALL_PS) | ||
| 976 | |||
| 977 | $(UNINSTALL_DOC): | ||
| 978 | t=$@; IFS=-; set $$t; IFS=; cd doc/$$2 && $(MAKE) $(MFLAGS) $$1-$$3 | ||
| 979 | |||
| 980 | .PHONY: $(UNINSTALL_DOC) uninstall-doc | ||
| 981 | .PHONY: uninstall-dvi uninstall-html uninstall-pdf uninstall-ps | ||
| 982 | |||
| 983 | uninstall-doc: $(UNINSTALL_DOC) | ||
| 984 | uninstall-dvi: $(UNINSTALL_DVI) | ||
| 985 | uninstall-html: $(UNINSTALL_HTML) | ||
| 986 | uninstall-pdf: $(UNINSTALL_PDF) | ||
| 987 | uninstall-ps: $(UNINSTALL_PS) | ||
| 988 | |||
| 989 | |||
| 940 | force-info: | 990 | force-info: |
| 941 | # Note that man/Makefile knows how to put the info files in $(srcdir), | 991 | # Note that man/Makefile knows how to put the info files in $(srcdir), |
| 942 | # so we can do ok running make in the build dir. | 992 | # so we can do ok running make in the build dir. |
diff --git a/autogen/Makefile.in b/autogen/Makefile.in index af3dbeaf264..2122ca2d169 100644 --- a/autogen/Makefile.in +++ b/autogen/Makefile.in | |||
| @@ -903,6 +903,7 @@ LIBXSM = @LIBXSM@ | |||
| 903 | LIBXTR6 = @LIBXTR6@ | 903 | LIBXTR6 = @LIBXTR6@ |
| 904 | LIBXT_OTHER = @LIBXT_OTHER@ | 904 | LIBXT_OTHER = @LIBXT_OTHER@ |
| 905 | LIBX_OTHER = @LIBX_OTHER@ | 905 | LIBX_OTHER = @LIBX_OTHER@ |
| 906 | LIBZ = @LIBZ@ | ||
| 906 | LIB_ACL = @LIB_ACL@ | 907 | LIB_ACL = @LIB_ACL@ |
| 907 | LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ | 908 | LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ |
| 908 | LIB_EACCESS = @LIB_EACCESS@ | 909 | LIB_EACCESS = @LIB_EACCESS@ |
| @@ -1185,6 +1186,7 @@ datarootdir = @datarootdir@ | |||
| 1185 | docdir = @docdir@ | 1186 | docdir = @docdir@ |
| 1186 | dvidir = @dvidir@ | 1187 | dvidir = @dvidir@ |
| 1187 | etcdir = @etcdir@ | 1188 | etcdir = @etcdir@ |
| 1189 | etcdocdir = @etcdocdir@ | ||
| 1188 | exec_prefix = @exec_prefix@ | 1190 | exec_prefix = @exec_prefix@ |
| 1189 | gamedir = @gamedir@ | 1191 | gamedir = @gamedir@ |
| 1190 | gameuser = @gameuser@ | 1192 | gameuser = @gameuser@ |
diff --git a/autogen/config.in b/autogen/config.in index b996a5f071e..00b7c5ba05e 100644 --- a/autogen/config.in +++ b/autogen/config.in | |||
| @@ -408,10 +408,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ | |||
| 408 | don't. */ | 408 | don't. */ |
| 409 | #undef HAVE_DECL__PUTENV | 409 | #undef HAVE_DECL__PUTENV |
| 410 | 410 | ||
| 411 | /* Define to 1 if you have the declaration of `__fpending', and to 0 if you | ||
| 412 | don't. */ | ||
| 413 | #undef HAVE_DECL___FPENDING | ||
| 414 | |||
| 415 | /* Define to 1 if you have the declaration of `__sys_siglist', and to 0 if you | 411 | /* Define to 1 if you have the declaration of `__sys_siglist', and to 0 if you |
| 416 | don't. */ | 412 | don't. */ |
| 417 | #undef HAVE_DECL___SYS_SIGLIST | 413 | #undef HAVE_DECL___SYS_SIGLIST |
| @@ -1190,6 +1186,9 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ | |||
| 1190 | /* Define to 1 if you want to use the X window system. */ | 1186 | /* Define to 1 if you want to use the X window system. */ |
| 1191 | #undef HAVE_X_WINDOWS | 1187 | #undef HAVE_X_WINDOWS |
| 1192 | 1188 | ||
| 1189 | /* Define to 1 if you have the zlib library (-lz). */ | ||
| 1190 | #undef HAVE_ZLIB | ||
| 1191 | |||
| 1193 | /* Define to 1 if the system has the type `_Bool'. */ | 1192 | /* Define to 1 if the system has the type `_Bool'. */ |
| 1194 | #undef HAVE__BOOL | 1193 | #undef HAVE__BOOL |
| 1195 | 1194 | ||
| @@ -1205,9 +1204,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ | |||
| 1205 | /* Define to 1 if you have the `__executable_start' function. */ | 1204 | /* Define to 1 if you have the `__executable_start' function. */ |
| 1206 | #undef HAVE___EXECUTABLE_START | 1205 | #undef HAVE___EXECUTABLE_START |
| 1207 | 1206 | ||
| 1208 | /* Define to 1 if you have the `__fpending' function. */ | ||
| 1209 | #undef HAVE___FPENDING | ||
| 1210 | |||
| 1211 | /* Define to 1 if you have the `__secure_getenv' function. */ | 1207 | /* Define to 1 if you have the `__secure_getenv' function. */ |
| 1212 | #undef HAVE___SECURE_GETENV | 1208 | #undef HAVE___SECURE_GETENV |
| 1213 | 1209 | ||
diff --git a/autogen/configure b/autogen/configure index c319167fc51..54e8f290293 100755 --- a/autogen/configure +++ b/autogen/configure | |||
| @@ -1279,6 +1279,7 @@ LD_SWITCH_X_SITE | |||
| 1279 | gameuser | 1279 | gameuser |
| 1280 | gamedir | 1280 | gamedir |
| 1281 | bitmapdir | 1281 | bitmapdir |
| 1282 | etcdocdir | ||
| 1282 | archlibdir | 1283 | archlibdir |
| 1283 | etcdir | 1284 | etcdir |
| 1284 | x_default_search_path | 1285 | x_default_search_path |
| @@ -1315,6 +1316,7 @@ LIBXSM | |||
| 1315 | LIBGPM | 1316 | LIBGPM |
| 1316 | LIBGIF | 1317 | LIBGIF |
| 1317 | LIBTIFF | 1318 | LIBTIFF |
| 1319 | LIBZ | ||
| 1318 | LIBPNG | 1320 | LIBPNG |
| 1319 | LIBJPEG | 1321 | LIBJPEG |
| 1320 | LIBXPM | 1322 | LIBXPM |
| @@ -1538,6 +1540,7 @@ with_gconf | |||
| 1538 | with_gsettings | 1540 | with_gsettings |
| 1539 | with_selinux | 1541 | with_selinux |
| 1540 | with_gnutls | 1542 | with_gnutls |
| 1543 | with_zlib | ||
| 1541 | with_file_notification | 1544 | with_file_notification |
| 1542 | with_makeinfo | 1545 | with_makeinfo |
| 1543 | with_compress_info | 1546 | with_compress_info |
| @@ -2268,6 +2271,7 @@ Optional Packages: | |||
| 2268 | --without-gsettings don't compile with GSettings support | 2271 | --without-gsettings don't compile with GSettings support |
| 2269 | --without-selinux don't compile with SELinux support | 2272 | --without-selinux don't compile with SELinux support |
| 2270 | --without-gnutls don't use -lgnutls for SSL/TLS support | 2273 | --without-gnutls don't use -lgnutls for SSL/TLS support |
| 2274 | --without-zlib don't compile with zlib decompression support | ||
| 2271 | --with-file-notification=LIB | 2275 | --with-file-notification=LIB |
| 2272 | use a file notification library (LIB one of: yes, | 2276 | use a file notification library (LIB one of: yes, |
| 2273 | gfile, inotify, w32, no) | 2277 | gfile, inotify, w32, no) |
| @@ -3383,7 +3387,6 @@ as_fn_append ac_func_list " faccessat" | |||
| 3383 | as_fn_append ac_func_list " fcntl" | 3387 | as_fn_append ac_func_list " fcntl" |
| 3384 | as_fn_append ac_func_list " fdopendir" | 3388 | as_fn_append ac_func_list " fdopendir" |
| 3385 | as_fn_append ac_header_list " stdio_ext.h" | 3389 | as_fn_append ac_header_list " stdio_ext.h" |
| 3386 | as_fn_append ac_func_list " __fpending" | ||
| 3387 | as_fn_append ac_func_list " fstatat" | 3390 | as_fn_append ac_func_list " fstatat" |
| 3388 | as_fn_append ac_func_list " fsync" | 3391 | as_fn_append ac_func_list " fsync" |
| 3389 | gl_getopt_required=GNU | 3392 | gl_getopt_required=GNU |
| @@ -4010,7 +4013,7 @@ locallisppath='${datadir}/emacs/${version}/site-lisp:'\ | |||
| 4010 | lisppath='${locallisppath}:${standardlisppath}' | 4013 | lisppath='${locallisppath}:${standardlisppath}' |
| 4011 | etcdir='${datadir}/emacs/${version}/etc' | 4014 | etcdir='${datadir}/emacs/${version}/etc' |
| 4012 | archlibdir='${libexecdir}/emacs/${version}/${configuration}' | 4015 | archlibdir='${libexecdir}/emacs/${version}/${configuration}' |
| 4013 | docdir='${datadir}/emacs/${version}/etc' | 4016 | etcdocdir='${datadir}/emacs/${version}/etc' |
| 4014 | gamedir='${localstatedir}/games/emacs' | 4017 | gamedir='${localstatedir}/games/emacs' |
| 4015 | 4018 | ||
| 4016 | 4019 | ||
| @@ -4356,6 +4359,14 @@ else | |||
| 4356 | fi | 4359 | fi |
| 4357 | 4360 | ||
| 4358 | 4361 | ||
| 4362 | # Check whether --with-zlib was given. | ||
| 4363 | if test "${with_zlib+set}" = set; then : | ||
| 4364 | withval=$with_zlib; | ||
| 4365 | else | ||
| 4366 | with_zlib=$with_features | ||
| 4367 | fi | ||
| 4368 | |||
| 4369 | |||
| 4359 | 4370 | ||
| 4360 | # Check whether --with-file-notification was given. | 4371 | # Check whether --with-file-notification was given. |
| 4361 | if test "${with_file_notification+set}" = set; then : | 4372 | if test "${with_file_notification+set}" = set; then : |
| @@ -10056,7 +10067,7 @@ if test "${HAVE_NS}" = yes; then | |||
| 10056 | exec_prefix=${ns_appbindir} | 10067 | exec_prefix=${ns_appbindir} |
| 10057 | libexecdir="\${ns_appbindir}/libexec" | 10068 | libexecdir="\${ns_appbindir}/libexec" |
| 10058 | archlibdir="\${ns_appbindir}/libexec" | 10069 | archlibdir="\${ns_appbindir}/libexec" |
| 10059 | docdir="\${ns_appresdir}/etc" | 10070 | etcdocdir="\${ns_appresdir}/etc" |
| 10060 | etcdir="\${ns_appresdir}/etc" | 10071 | etcdir="\${ns_appresdir}/etc" |
| 10061 | infodir="\${ns_appresdir}/info" | 10072 | infodir="\${ns_appresdir}/info" |
| 10062 | mandir="\${ns_appresdir}/man" | 10073 | mandir="\${ns_appresdir}/man" |
| @@ -13626,6 +13637,85 @@ fi | |||
| 13626 | fi | 13637 | fi |
| 13627 | 13638 | ||
| 13628 | 13639 | ||
| 13640 | HAVE_ZLIB=no | ||
| 13641 | LIBZ= | ||
| 13642 | if test "${with_zlib}" != "no"; then | ||
| 13643 | if test "${HAVE_PNG}" = "yes"; then | ||
| 13644 | ### PNG depends on zlib, so if we have PNG, we have zlib. | ||
| 13645 | HAVE_ZLIB=yes | ||
| 13646 | else | ||
| 13647 | ### No PNG, so check zlib ourselves. | ||
| 13648 | OLIBS=$LIBS | ||
| 13649 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing inflateEnd" >&5 | ||
| 13650 | $as_echo_n "checking for library containing inflateEnd... " >&6; } | ||
| 13651 | if test "${ac_cv_search_inflateEnd+set}" = set; then : | ||
| 13652 | $as_echo_n "(cached) " >&6 | ||
| 13653 | else | ||
| 13654 | ac_func_search_save_LIBS=$LIBS | ||
| 13655 | cat confdefs.h - <<_ACEOF >conftest.$ac_ext | ||
| 13656 | /* end confdefs.h. */ | ||
| 13657 | |||
| 13658 | /* Override any GCC internal prototype to avoid an error. | ||
| 13659 | Use char because int might match the return type of a GCC | ||
| 13660 | builtin and then its argument prototype would still apply. */ | ||
| 13661 | #ifdef __cplusplus | ||
| 13662 | extern "C" | ||
| 13663 | #endif | ||
| 13664 | char inflateEnd (); | ||
| 13665 | int | ||
| 13666 | main () | ||
| 13667 | { | ||
| 13668 | return inflateEnd (); | ||
| 13669 | ; | ||
| 13670 | return 0; | ||
| 13671 | } | ||
| 13672 | _ACEOF | ||
| 13673 | for ac_lib in '' z; do | ||
| 13674 | if test -z "$ac_lib"; then | ||
| 13675 | ac_res="none required" | ||
| 13676 | else | ||
| 13677 | ac_res=-l$ac_lib | ||
| 13678 | LIBS="-l$ac_lib $ac_func_search_save_LIBS" | ||
| 13679 | fi | ||
| 13680 | if ac_fn_c_try_link "$LINENO"; then : | ||
| 13681 | ac_cv_search_inflateEnd=$ac_res | ||
| 13682 | fi | ||
| 13683 | rm -f core conftest.err conftest.$ac_objext \ | ||
| 13684 | conftest$ac_exeext | ||
| 13685 | if test "${ac_cv_search_inflateEnd+set}" = set; then : | ||
| 13686 | break | ||
| 13687 | fi | ||
| 13688 | done | ||
| 13689 | if test "${ac_cv_search_inflateEnd+set}" = set; then : | ||
| 13690 | |||
| 13691 | else | ||
| 13692 | ac_cv_search_inflateEnd=no | ||
| 13693 | fi | ||
| 13694 | rm conftest.$ac_ext | ||
| 13695 | LIBS=$ac_func_search_save_LIBS | ||
| 13696 | fi | ||
| 13697 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_inflateEnd" >&5 | ||
| 13698 | $as_echo "$ac_cv_search_inflateEnd" >&6; } | ||
| 13699 | ac_res=$ac_cv_search_inflateEnd | ||
| 13700 | if test "$ac_res" != no; then : | ||
| 13701 | test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" | ||
| 13702 | HAVE_ZLIB=yes | ||
| 13703 | fi | ||
| 13704 | |||
| 13705 | LIBS=$OLIBS | ||
| 13706 | case $ac_cv_search_inflateEnd in | ||
| 13707 | -*) LIBZ=$ac_cv_search_inflateEnd ;; | ||
| 13708 | esac | ||
| 13709 | fi | ||
| 13710 | fi | ||
| 13711 | if test "${HAVE_ZLIB}" = "yes"; then | ||
| 13712 | |||
| 13713 | $as_echo "#define HAVE_ZLIB 1" >>confdefs.h | ||
| 13714 | |||
| 13715 | fi | ||
| 13716 | |||
| 13717 | |||
| 13718 | |||
| 13629 | ### Use -ltiff if available, unless `--with-tiff=no'. | 13719 | ### Use -ltiff if available, unless `--with-tiff=no'. |
| 13630 | ### mingw32 doesn't use -ltiff, since it loads the library dynamically. | 13720 | ### mingw32 doesn't use -ltiff, since it loads the library dynamically. |
| 13631 | HAVE_TIFF=no | 13721 | HAVE_TIFF=no |
| @@ -18525,8 +18615,6 @@ _ACEOF | |||
| 18525 | 18615 | ||
| 18526 | 18616 | ||
| 18527 | 18617 | ||
| 18528 | |||
| 18529 | |||
| 18530 | GNULIB_FCHMODAT=0; | 18618 | GNULIB_FCHMODAT=0; |
| 18531 | GNULIB_FSTAT=0; | 18619 | GNULIB_FSTAT=0; |
| 18532 | GNULIB_FSTATAT=0; | 18620 | GNULIB_FSTATAT=0; |
| @@ -22967,27 +23055,40 @@ _ACEOF | |||
| 22967 | 23055 | ||
| 22968 | 23056 | ||
| 22969 | 23057 | ||
| 22970 | 23058 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __fpending" >&5 | |
| 22971 | fp_headers=' | 23059 | $as_echo_n "checking for __fpending... " >&6; } |
| 22972 | # include <stdio.h> | 23060 | if test "${gl_cv_func___fpending+set}" = set; then : |
| 22973 | # if HAVE_STDIO_EXT_H | 23061 | $as_echo_n "(cached) " >&6 |
| 22974 | # include <stdio_ext.h> | ||
| 22975 | # endif | ||
| 22976 | ' | ||
| 22977 | ac_fn_c_check_decl "$LINENO" "__fpending" "ac_cv_have_decl___fpending" "$fp_headers | ||
| 22978 | " | ||
| 22979 | if test "x$ac_cv_have_decl___fpending" = x""yes; then : | ||
| 22980 | ac_have_decl=1 | ||
| 22981 | else | 23062 | else |
| 22982 | ac_have_decl=0 | ||
| 22983 | fi | ||
| 22984 | 23063 | ||
| 22985 | cat >>confdefs.h <<_ACEOF | 23064 | cat confdefs.h - <<_ACEOF >conftest.$ac_ext |
| 22986 | #define HAVE_DECL___FPENDING $ac_have_decl | 23065 | /* end confdefs.h. */ |
| 23066 | #include <stdio.h> | ||
| 23067 | #if HAVE_STDIO_EXT_H | ||
| 23068 | # include <stdio_ext.h> | ||
| 23069 | #endif | ||
| 23070 | |||
| 23071 | int | ||
| 23072 | main () | ||
| 23073 | { | ||
| 23074 | return ! __fpending (stdin); | ||
| 23075 | ; | ||
| 23076 | return 0; | ||
| 23077 | } | ||
| 22987 | _ACEOF | 23078 | _ACEOF |
| 23079 | if ac_fn_c_try_link "$LINENO"; then : | ||
| 23080 | gl_cv_func___fpending=yes | ||
| 23081 | else | ||
| 23082 | gl_cv_func___fpending=no | ||
| 23083 | fi | ||
| 23084 | rm -f core conftest.err conftest.$ac_objext \ | ||
| 23085 | conftest$ac_exeext conftest.$ac_ext | ||
| 22988 | 23086 | ||
| 23087 | fi | ||
| 23088 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func___fpending" >&5 | ||
| 23089 | $as_echo "$gl_cv_func___fpending" >&6; } | ||
| 22989 | 23090 | ||
| 22990 | if test $ac_cv_func___fpending = no; then | 23091 | if test $gl_cv_func___fpending = no; then |
| 22991 | 23092 | ||
| 22992 | 23093 | ||
| 22993 | 23094 | ||
| @@ -28869,6 +28970,7 @@ echo " Does Emacs use -lfreetype? ${HAVE_FREETYPE} | |||
| 28869 | echo " Does Emacs use -lm17n-flt? ${HAVE_M17N_FLT}" | 28970 | echo " Does Emacs use -lm17n-flt? ${HAVE_M17N_FLT}" |
| 28870 | echo " Does Emacs use -lotf? ${HAVE_LIBOTF}" | 28971 | echo " Does Emacs use -lotf? ${HAVE_LIBOTF}" |
| 28871 | echo " Does Emacs use -lxft? ${HAVE_XFT}" | 28972 | echo " Does Emacs use -lxft? ${HAVE_XFT}" |
| 28973 | echo " Does Emacs directly use zlib? ${HAVE_ZLIB}" | ||
| 28872 | 28974 | ||
| 28873 | echo " Does Emacs use toolkit scroll bars? ${USE_TOOLKIT_SCROLL_BARS}" | 28975 | echo " Does Emacs use toolkit scroll bars? ${USE_TOOLKIT_SCROLL_BARS}" |
| 28874 | echo | 28976 | echo |
diff --git a/configure.ac b/configure.ac index 49660f62519..7d433e95201 100644 --- a/configure.ac +++ b/configure.ac | |||
| @@ -60,7 +60,7 @@ locallisppath='${datadir}/emacs/${version}/site-lisp:'\ | |||
| 60 | lisppath='${locallisppath}:${standardlisppath}' | 60 | lisppath='${locallisppath}:${standardlisppath}' |
| 61 | etcdir='${datadir}/emacs/${version}/etc' | 61 | etcdir='${datadir}/emacs/${version}/etc' |
| 62 | archlibdir='${libexecdir}/emacs/${version}/${configuration}' | 62 | archlibdir='${libexecdir}/emacs/${version}/${configuration}' |
| 63 | docdir='${datadir}/emacs/${version}/etc' | 63 | etcdocdir='${datadir}/emacs/${version}/etc' |
| 64 | gamedir='${localstatedir}/games/emacs' | 64 | gamedir='${localstatedir}/games/emacs' |
| 65 | 65 | ||
| 66 | dnl Special option to disable the most of other options. | 66 | dnl Special option to disable the most of other options. |
| @@ -211,6 +211,7 @@ OPTION_DEFAULT_ON([gconf],[don't compile with GConf support]) | |||
| 211 | OPTION_DEFAULT_ON([gsettings],[don't compile with GSettings support]) | 211 | OPTION_DEFAULT_ON([gsettings],[don't compile with GSettings support]) |
| 212 | OPTION_DEFAULT_ON([selinux],[don't compile with SELinux support]) | 212 | OPTION_DEFAULT_ON([selinux],[don't compile with SELinux support]) |
| 213 | OPTION_DEFAULT_ON([gnutls],[don't use -lgnutls for SSL/TLS support]) | 213 | OPTION_DEFAULT_ON([gnutls],[don't use -lgnutls for SSL/TLS support]) |
| 214 | OPTION_DEFAULT_ON([zlib],[don't compile with zlib decompression support]) | ||
| 214 | 215 | ||
| 215 | AC_ARG_WITH([file-notification],[AS_HELP_STRING([--with-file-notification=LIB], | 216 | AC_ARG_WITH([file-notification],[AS_HELP_STRING([--with-file-notification=LIB], |
| 216 | [use a file notification library (LIB one of: yes, gfile, inotify, w32, no)])], | 217 | [use a file notification library (LIB one of: yes, gfile, inotify, w32, no)])], |
| @@ -1616,7 +1617,7 @@ if test "${HAVE_NS}" = yes; then | |||
| 1616 | dnl This one isn't really used, only archlibdir is. | 1617 | dnl This one isn't really used, only archlibdir is. |
| 1617 | libexecdir="\${ns_appbindir}/libexec" | 1618 | libexecdir="\${ns_appbindir}/libexec" |
| 1618 | archlibdir="\${ns_appbindir}/libexec" | 1619 | archlibdir="\${ns_appbindir}/libexec" |
| 1619 | docdir="\${ns_appresdir}/etc" | 1620 | etcdocdir="\${ns_appresdir}/etc" |
| 1620 | etcdir="\${ns_appresdir}/etc" | 1621 | etcdir="\${ns_appresdir}/etc" |
| 1621 | dnl FIXME maybe set datarootdir instead. | 1622 | dnl FIXME maybe set datarootdir instead. |
| 1622 | dnl That would also get applications, icons, man. | 1623 | dnl That would also get applications, icons, man. |
| @@ -2983,19 +2984,23 @@ AC_SUBST(LIBPNG) | |||
| 2983 | 2984 | ||
| 2984 | HAVE_ZLIB=no | 2985 | HAVE_ZLIB=no |
| 2985 | LIBZ= | 2986 | LIBZ= |
| 2986 | if test "${HAVE_PNG}" = "yes"; then | 2987 | if test "${with_zlib}" != "no"; then |
| 2987 | ### PNG depends on zlib, so if we have PNG, we have zlib. | 2988 | if test "${HAVE_PNG}" = "yes"; then |
| 2988 | HAVE_ZLIB=yes | 2989 | ### PNG depends on zlib, so if we have PNG, we have zlib. |
| 2989 | AC_DEFINE(HAVE_ZLIB, 1, [Define to 1 if you have the zlib library (-lz).]) | 2990 | HAVE_ZLIB=yes |
| 2990 | else | 2991 | else |
| 2991 | ### No PNG, so check zlib ourselves. | 2992 | ### No PNG, so check zlib ourselves. |
| 2992 | LIBS="-lz $LIBS" | 2993 | OLIBS=$LIBS |
| 2993 | AC_CHECK_LIB(z, inflateEnd, HAVE_ZLIB=yes, HAVE_ZLIB=no) | 2994 | AC_SEARCH_LIBS([inflateEnd], [z], [HAVE_ZLIB=yes]) |
| 2994 | if test "${HAVE_ZLIB}" = "yes"; then | 2995 | LIBS=$OLIBS |
| 2995 | AC_DEFINE(HAVE_ZLIB, 1, [Define to 1 if you have the zlib library (-lz).]) | 2996 | case $ac_cv_search_inflateEnd in |
| 2996 | LIBZ=-lz | 2997 | -*) LIBZ=$ac_cv_search_inflateEnd ;; |
| 2998 | esac | ||
| 2997 | fi | 2999 | fi |
| 2998 | fi | 3000 | fi |
| 3001 | if test "${HAVE_ZLIB}" = "yes"; then | ||
| 3002 | AC_DEFINE([HAVE_ZLIB], 1, [Define to 1 if you have the zlib library (-lz).]) | ||
| 3003 | fi | ||
| 2999 | AC_SUBST(LIBZ) | 3004 | AC_SUBST(LIBZ) |
| 3000 | 3005 | ||
| 3001 | 3006 | ||
| @@ -4447,7 +4452,7 @@ AC_SUBST(lisppath) | |||
| 4447 | AC_SUBST(x_default_search_path) | 4452 | AC_SUBST(x_default_search_path) |
| 4448 | AC_SUBST(etcdir) | 4453 | AC_SUBST(etcdir) |
| 4449 | AC_SUBST(archlibdir) | 4454 | AC_SUBST(archlibdir) |
| 4450 | AC_SUBST(docdir) | 4455 | AC_SUBST(etcdocdir) |
| 4451 | AC_SUBST(bitmapdir) | 4456 | AC_SUBST(bitmapdir) |
| 4452 | AC_SUBST(gamedir) | 4457 | AC_SUBST(gamedir) |
| 4453 | AC_SUBST(gameuser) | 4458 | AC_SUBST(gameuser) |
| @@ -4851,6 +4856,7 @@ echo " Does Emacs use -lfreetype? ${HAVE_FREETYPE} | |||
| 4851 | echo " Does Emacs use -lm17n-flt? ${HAVE_M17N_FLT}" | 4856 | echo " Does Emacs use -lm17n-flt? ${HAVE_M17N_FLT}" |
| 4852 | echo " Does Emacs use -lotf? ${HAVE_LIBOTF}" | 4857 | echo " Does Emacs use -lotf? ${HAVE_LIBOTF}" |
| 4853 | echo " Does Emacs use -lxft? ${HAVE_XFT}" | 4858 | echo " Does Emacs use -lxft? ${HAVE_XFT}" |
| 4859 | echo " Does Emacs directly use zlib? ${HAVE_ZLIB}" | ||
| 4854 | 4860 | ||
| 4855 | echo " Does Emacs use toolkit scroll bars? ${USE_TOOLKIT_SCROLL_BARS}" | 4861 | echo " Does Emacs use toolkit scroll bars? ${USE_TOOLKIT_SCROLL_BARS}" |
| 4856 | 4862 | ||
diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index ad411e44ba6..2b75a242656 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog | |||
| @@ -1,3 +1,27 @@ | |||
| 1 | 2013-08-12 Glenn Morris <rgm@gnu.org> | ||
| 2 | |||
| 3 | * macos.texi (GNUstep Support): | ||
| 4 | * trouble.texi (Checklist, Contributing, Service): | ||
| 5 | Avoid mailto: in html output. | ||
| 6 | |||
| 7 | * Makefile.in (prefix, datarootdir, datadir, PACKAGE_TARNAME) | ||
| 8 | (docdir, dvidir, htmldir, pdfdir, psdir, GZIP_PROG, INSTALL) | ||
| 9 | (INSTALL_DATA): New, set by configure. | ||
| 10 | (HTML_OPTS, DVI_TARGETS, HTML_TARGETS, PDF_TARGETS, PS_TARGETS): | ||
| 11 | New variables. | ||
| 12 | (.SUFFIXES): Add .ps and .dvi. | ||
| 13 | (.dvi.ps): New suffix rule. | ||
| 14 | (dvi, html, pdf, ps): Use *_TARGETS variables. | ||
| 15 | (emacs.ps, emacs-xtra.ps): Remove explicit rules. | ||
| 16 | (emacs.html): Use HTML_OPTS. | ||
| 17 | (clean): Use DVI_TARGETS, HTML_TARGETS, PDF_TARGETS, PS_TARGETS. | ||
| 18 | (.PHONY): install-dvi, install-html, install-pdf, install-ps | ||
| 19 | ,install-doc, uninstall-dvi, uninstall-html, uninstall-pdf, | ||
| 20 | uninstall-ps, and uninstall-doc. | ||
| 21 | (install-dvi, install-html, install-pdf, install-ps, install-doc) | ||
| 22 | (uninstall-dvi, uninstall-html, uninstall-ps, uninstall-pdf) | ||
| 23 | (uninstall-doc): New rules. | ||
| 24 | |||
| 1 | 2013-07-31 Eli Zaretskii <eliz@gnu.org> | 25 | 2013-07-31 Eli Zaretskii <eliz@gnu.org> |
| 2 | 26 | ||
| 3 | * emacs.texi (Top): Remove menu item for the removed "Disabling | 27 | * emacs.texi (Top): Remove menu item for the removed "Disabling |
diff --git a/doc/emacs/Makefile.in b/doc/emacs/Makefile.in index 32bb39b127a..7aeead4e2f6 100644 --- a/doc/emacs/Makefile.in +++ b/doc/emacs/Makefile.in | |||
| @@ -38,8 +38,22 @@ buildinfodir = $(srcdir)/../../info | |||
| 38 | # Directory with the (customized) texinfo.tex file. | 38 | # Directory with the (customized) texinfo.tex file. |
| 39 | texinfodir = $(srcdir)/../misc | 39 | texinfodir = $(srcdir)/../misc |
| 40 | 40 | ||
| 41 | prefix = @prefix@ | ||
| 42 | datarootdir = @datarootdir@ | ||
| 43 | datadir = @datadir@ | ||
| 44 | PACKAGE_TARNAME = @PACKAGE_TARNAME@ | ||
| 45 | docdir = @docdir@ | ||
| 46 | dvidir = @dvidir@ | ||
| 47 | htmldir = @htmldir@ | ||
| 48 | pdfdir = @pdfdir@ | ||
| 49 | psdir = @psdir@ | ||
| 50 | |||
| 41 | MKDIR_P = @MKDIR_P@ | 51 | MKDIR_P = @MKDIR_P@ |
| 42 | 52 | ||
| 53 | GZIP_PROG = @GZIP_PROG@ | ||
| 54 | |||
| 55 | HTML_OPTS = --no-split --html | ||
| 56 | |||
| 43 | INFO_EXT=@INFO_EXT@ | 57 | INFO_EXT=@INFO_EXT@ |
| 44 | # Options used only when making info output. | 58 | # Options used only when making info output. |
| 45 | # --no-split is only needed because of MS-DOS. | 59 | # --no-split is only needed because of MS-DOS. |
| @@ -47,6 +61,9 @@ INFO_EXT=@INFO_EXT@ | |||
| 47 | # http://lists.gnu.org/archive/html/emacs-devel/2011-01/msg01182.html | 61 | # http://lists.gnu.org/archive/html/emacs-devel/2011-01/msg01182.html |
| 48 | INFO_OPTS=@INFO_OPTS@ | 62 | INFO_OPTS=@INFO_OPTS@ |
| 49 | 63 | ||
| 64 | INSTALL = @INSTALL@ | ||
| 65 | INSTALL_DATA = @INSTALL_DATA@ | ||
| 66 | |||
| 50 | # The makeinfo program is part of the Texinfo distribution. | 67 | # The makeinfo program is part of the Texinfo distribution. |
| 51 | # Use --force so that it generates output even if there are errors. | 68 | # Use --force so that it generates output even if there are errors. |
| 52 | MAKEINFO = @MAKEINFO@ | 69 | MAKEINFO = @MAKEINFO@ |
| @@ -60,6 +77,10 @@ DVIPS = dvips | |||
| 60 | ENVADD = TEXINPUTS="$(srcdir):$(texinfodir):$(TEXINPUTS)" \ | 77 | ENVADD = TEXINPUTS="$(srcdir):$(texinfodir):$(TEXINPUTS)" \ |
| 61 | MAKEINFO="$(MAKEINFO) $(MAKEINFO_OPTS)" | 78 | MAKEINFO="$(MAKEINFO) $(MAKEINFO_OPTS)" |
| 62 | 79 | ||
| 80 | DVI_TARGETS = emacs.dvi emacs-xtra.dvi | ||
| 81 | HTML_TARGETS = emacs.html | ||
| 82 | PDF_TARGETS = emacs.pdf emacs-xtra.pdf | ||
| 83 | PS_TARGETS = emacs.ps emacs-xtra.ps | ||
| 63 | 84 | ||
| 64 | EMACS_XTRA= \ | 85 | EMACS_XTRA= \ |
| 65 | ${srcdir}/emacs-xtra.texi \ | 86 | ${srcdir}/emacs-xtra.texi \ |
| @@ -128,11 +149,16 @@ mkinfodir = @${MKDIR_P} ${buildinfodir} | |||
| 128 | 149 | ||
| 129 | .PHONY: info dvi html pdf ps | 150 | .PHONY: info dvi html pdf ps |
| 130 | 151 | ||
| 152 | .SUFFIXES: .ps .dvi | ||
| 153 | |||
| 154 | .dvi.ps: | ||
| 155 | $(DVIPS) -o $@ $< | ||
| 156 | |||
| 131 | info: $(buildinfodir)/emacs$(INFO_EXT) | 157 | info: $(buildinfodir)/emacs$(INFO_EXT) |
| 132 | dvi: emacs.dvi | 158 | dvi: $(DVI_TARGETS) |
| 133 | html: emacs.html | 159 | html: $(HTML_TARGETS) |
| 134 | pdf: emacs.pdf | 160 | pdf: $(PDF_TARGETS) |
| 135 | ps: emacs.ps | 161 | ps: $(PS_TARGETS) |
| 136 | 162 | ||
| 137 | # Note that all the Info targets build the Info files in srcdir. | 163 | # Note that all the Info targets build the Info files in srcdir. |
| 138 | # There is no provision for Info files to exist in the build directory. | 164 | # There is no provision for Info files to exist in the build directory. |
| @@ -145,21 +171,15 @@ $(buildinfodir)/emacs$(INFO_EXT): ${EMACSSOURCES} | |||
| 145 | emacs.dvi: ${EMACSSOURCES} | 171 | emacs.dvi: ${EMACSSOURCES} |
| 146 | $(ENVADD) $(TEXI2DVI) ${srcdir}/emacs.texi | 172 | $(ENVADD) $(TEXI2DVI) ${srcdir}/emacs.texi |
| 147 | 173 | ||
| 148 | emacs.ps: emacs.dvi | ||
| 149 | $(DVIPS) -o $@ emacs.dvi | ||
| 150 | |||
| 151 | emacs.pdf: ${EMACSSOURCES} | 174 | emacs.pdf: ${EMACSSOURCES} |
| 152 | $(ENVADD) $(TEXI2PDF) ${srcdir}/emacs.texi | 175 | $(ENVADD) $(TEXI2PDF) ${srcdir}/emacs.texi |
| 153 | 176 | ||
| 154 | emacs.html: ${EMACSSOURCES} | 177 | emacs.html: ${EMACSSOURCES} |
| 155 | $(MAKEINFO) $(MAKEINFO_OPTS) --html -o $@ ${srcdir}/emacs.texi | 178 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/emacs.texi |
| 156 | 179 | ||
| 157 | emacs-xtra.dvi: $(EMACS_XTRA) | 180 | emacs-xtra.dvi: $(EMACS_XTRA) |
| 158 | $(ENVADD) $(TEXI2DVI) ${srcdir}/emacs-xtra.texi | 181 | $(ENVADD) $(TEXI2DVI) ${srcdir}/emacs-xtra.texi |
| 159 | 182 | ||
| 160 | emacs-xtra.ps: emacs-xtra.dvi | ||
| 161 | $(DVIPS) -o $@ emacs-xtra.dvi | ||
| 162 | |||
| 163 | emacs-xtra.pdf: $(EMACS_XTRA) | 183 | emacs-xtra.pdf: $(EMACS_XTRA) |
| 164 | $(ENVADD) $(TEXI2PDF) ${srcdir}/emacs-xtra.texi | 184 | $(ENVADD) $(TEXI2PDF) ${srcdir}/emacs-xtra.texi |
| 165 | 185 | ||
| @@ -172,9 +192,7 @@ mostlyclean: | |||
| 172 | 192 | ||
| 173 | ## Products not in the release tarfiles. | 193 | ## Products not in the release tarfiles. |
| 174 | clean: mostlyclean | 194 | clean: mostlyclean |
| 175 | rm -f emacs.dvi emacs-xtra.dvi emacs.pdf emacs-xtra.pdf \ | 195 | rm -f $(DVI_TARGETS) $(HTML_TARGETS) $(PDF_TARGETS) $(PS_TARGETS) |
| 176 | emacs.ps emacs-xtra.ps | ||
| 177 | rm -rf emacs.html/ | ||
| 178 | rm -f emacs-manual-${version}.tar* | 196 | rm -f emacs-manual-${version}.tar* |
| 179 | 197 | ||
| 180 | distclean: clean | 198 | distclean: clean |
| @@ -207,4 +225,52 @@ dist: | |||
| 207 | tar -cf emacs-manual-${version}.tar emacs-manual-${version} | 225 | tar -cf emacs-manual-${version}.tar emacs-manual-${version} |
| 208 | rm -rf emacs-manual-${version} | 226 | rm -rf emacs-manual-${version} |
| 209 | 227 | ||
| 228 | |||
| 229 | .PHONY: install-dvi install-html install-pdf install-ps install-doc | ||
| 230 | |||
| 231 | install-dvi: dvi | ||
| 232 | umask 022; $(MKDIR_P) $(DESTDIR)$(dvidir) | ||
| 233 | $(INSTALL_DATA) $(DVI_TARGETS) $(DESTDIR)$(dvidir) | ||
| 234 | install-html: html | ||
| 235 | umask 022; $(MKDIR_P) $(DESTDIR)$(htmldir) | ||
| 236 | $(INSTALL_DATA) $(HTML_TARGETS) $(DESTDIR)$(htmldir) | ||
| 237 | install-pdf: pdf | ||
| 238 | umask 022;$(MKDIR_P) $(DESTDIR)$(pdfdir) | ||
| 239 | $(INSTALL_DATA) $(PDF_TARGETS) $(DESTDIR)$(pdfdir) | ||
| 240 | install-ps: ps | ||
| 241 | umask 022; $(MKDIR_P) $(DESTDIR)$(psdir) | ||
| 242 | for file in $(PS_TARGETS); do \ | ||
| 243 | $(INSTALL_DATA) $${file} $(DESTDIR)$(psdir); \ | ||
| 244 | [ -n "${GZIP_PROG}" ] || continue; \ | ||
| 245 | rm -f $(DESTDIR)$(psdir)/$${file}.gz; \ | ||
| 246 | ${GZIP_PROG} -9n $(DESTDIR)$(psdir)/$${file}; \ | ||
| 247 | done | ||
| 248 | |||
| 249 | ## Top-level Makefile installs the info pages. | ||
| 250 | install-doc: install-dvi install-html install-pdf install-ps | ||
| 251 | |||
| 252 | |||
| 253 | .PHONY: uninstall-dvi uninstall-html uninstall-pdf uninstall-ps uninstall-doc | ||
| 254 | |||
| 255 | uninstall-dvi: | ||
| 256 | for file in $(DVI_TARGETS); do \ | ||
| 257 | rm -f $(DESTDIR)$(dvidir)/$${file}; \ | ||
| 258 | done | ||
| 259 | uninstall-html: | ||
| 260 | for file in $(HTML_TARGETS); do \ | ||
| 261 | rm -f $(DESTDIR)$(htmldir)/$${file}; \ | ||
| 262 | done | ||
| 263 | uninstall-ps: | ||
| 264 | ext= ; [ -n "${GZIP_PROG}" ] && ext=.gz; \ | ||
| 265 | for file in $(PS_TARGETS); do \ | ||
| 266 | rm -f $(DESTDIR)$(psdir)/$${file}$${ext}; \ | ||
| 267 | done | ||
| 268 | uninstall-pdf: | ||
| 269 | for file in $(PDF_TARGETS); do \ | ||
| 270 | rm -f $(DESTDIR)$(pdfdir)/$${file}; \ | ||
| 271 | done | ||
| 272 | |||
| 273 | uninstall-doc: uninstall-dvi uninstall-html uninstall-pdf uninstall-ps | ||
| 274 | |||
| 275 | |||
| 210 | ### Makefile ends here | 276 | ### Makefile ends here |
diff --git a/doc/emacs/macos.texi b/doc/emacs/macos.texi index 61c056ceb4b..50a7ea2c335 100644 --- a/doc/emacs/macos.texi +++ b/doc/emacs/macos.texi | |||
| @@ -210,4 +210,10 @@ restart Emacs to access newly-available services. | |||
| 210 | 210 | ||
| 211 | Emacs can be built and run under GNUstep, but there are still | 211 | Emacs can be built and run under GNUstep, but there are still |
| 212 | issues to be addressed. Interested developers should contact | 212 | issues to be addressed. Interested developers should contact |
| 213 | @ifnothtml | ||
| 213 | @email{emacs-devel@@gnu.org}. | 214 | @email{emacs-devel@@gnu.org}. |
| 215 | @end ifnothtml | ||
| 216 | @ifhtml | ||
| 217 | @url{http://lists.gnu.org/mailman/listinfo/emacs-devel, the | ||
| 218 | emacs-devel mailing list}. | ||
| 219 | @end ifhtml | ||
diff --git a/doc/emacs/trouble.texi b/doc/emacs/trouble.texi index d0b6b5191c1..0d5ce6820c7 100644 --- a/doc/emacs/trouble.texi +++ b/doc/emacs/trouble.texi | |||
| @@ -658,7 +658,13 @@ absolutely sure it is best to leave it, so that the developers can | |||
| 658 | decide for themselves. | 658 | decide for themselves. |
| 659 | 659 | ||
| 660 | When you have finished writing your report, type @kbd{C-c C-c} and it | 660 | When you have finished writing your report, type @kbd{C-c C-c} and it |
| 661 | will be sent to the Emacs maintainers at @email{bug-gnu-emacs@@gnu.org}. | 661 | will be sent to the Emacs maintainers at |
| 662 | @ifnothtml | ||
| 663 | @email{bug-gnu-emacs@@gnu.org}. | ||
| 664 | @end ifnothtml | ||
| 665 | @ifhtml | ||
| 666 | @url{http://lists.gnu.org/mailman/listinfo/bug-gnu-emacs, bug-gnu-emacs}. | ||
| 667 | @end ifhtml | ||
| 662 | (If you want to suggest an improvement or new feature, use the same | 668 | (If you want to suggest an improvement or new feature, use the same |
| 663 | address.) If you cannot send mail from inside Emacs, you can copy the | 669 | address.) If you cannot send mail from inside Emacs, you can copy the |
| 664 | text of your report to your normal mail client (if your system | 670 | text of your report to your normal mail client (if your system |
| @@ -1138,15 +1144,26 @@ form that is clearly safe to install. | |||
| 1138 | @section Contributing to Emacs Development | 1144 | @section Contributing to Emacs Development |
| 1139 | @cindex contributing to Emacs | 1145 | @cindex contributing to Emacs |
| 1140 | 1146 | ||
| 1141 | If you would like to work on improving Emacs, please contact | 1147 | If you would like to work on improving Emacs, please contact the maintainers at |
| 1142 | the maintainers at @email{emacs-devel@@gnu.org}. You can ask for | 1148 | @ifnothtml |
| 1143 | suggested projects or suggest your own ideas. | 1149 | @email{emacs-devel@@gnu.org}. |
| 1150 | @end ifnothtml | ||
| 1151 | @ifhtml | ||
| 1152 | @url{http://lists.gnu.org/mailman/listinfo/emacs-devel, the | ||
| 1153 | emacs-devel mailing list}. | ||
| 1154 | @end ifhtml | ||
| 1155 | You can ask for suggested projects or suggest your own ideas. | ||
| 1144 | 1156 | ||
| 1145 | If you have already written an improvement, please tell us about it. If | 1157 | If you have already written an improvement, please tell us about it. If |
| 1146 | you have not yet started work, it is useful to contact | 1158 | you have not yet started work, it is useful to contact |
| 1147 | @email{emacs-devel@@gnu.org} before you start; it might be | 1159 | @ifnothtml |
| 1148 | possible to suggest ways to make your extension fit in better with the | 1160 | @email{emacs-devel@@gnu.org} |
| 1149 | rest of Emacs. | 1161 | @end ifnothtml |
| 1162 | @ifhtml | ||
| 1163 | @url{http://lists.gnu.org/mailman/listinfo/emacs-devel, emacs-devel} | ||
| 1164 | @end ifhtml | ||
| 1165 | before you start; it might be possible to suggest ways to make your | ||
| 1166 | extension fit in better with the rest of Emacs. | ||
| 1150 | 1167 | ||
| 1151 | The development version of Emacs can be downloaded from the | 1168 | The development version of Emacs can be downloaded from the |
| 1152 | repository where it is actively maintained by a group of developers. | 1169 | repository where it is actively maintained by a group of developers. |
| @@ -1164,10 +1181,17 @@ ways to find it: | |||
| 1164 | 1181 | ||
| 1165 | @itemize @bullet | 1182 | @itemize @bullet |
| 1166 | @item | 1183 | @item |
| 1167 | Send a message to the mailing list | 1184 | Send a message to |
| 1168 | @email{help-gnu-emacs@@gnu.org}, or post your request on | 1185 | @ifnothtml |
| 1169 | newsgroup @code{gnu.emacs.help}. (This mailing list and newsgroup | 1186 | the mailing list @email{help-gnu-emacs@@gnu.org}, |
| 1170 | interconnect, so it does not matter which one you use.) | 1187 | @end ifnothtml |
| 1188 | @ifhtml | ||
| 1189 | @url{http://lists.gnu.org/mailman/listinfo/help-gnu-emacs, the | ||
| 1190 | help-gnu-emacs mailing list}, | ||
| 1191 | @end ifhtml | ||
| 1192 | or post your request on newsgroup @code{gnu.emacs.help}. (This | ||
| 1193 | mailing list and newsgroup interconnect, so it does not matter which | ||
| 1194 | one you use.) | ||
| 1171 | 1195 | ||
| 1172 | @item | 1196 | @item |
| 1173 | Look in the service directory for someone who might help you for a fee. | 1197 | Look in the service directory for someone who might help you for a fee. |
diff --git a/doc/lispintro/ChangeLog b/doc/lispintro/ChangeLog index 7f1f9ab18c0..db02a257a3a 100644 --- a/doc/lispintro/ChangeLog +++ b/doc/lispintro/ChangeLog | |||
| @@ -1,3 +1,27 @@ | |||
| 1 | 2013-08-12 Glenn Morris <rgm@gnu.org> | ||
| 2 | |||
| 3 | * emacs-lisp-intro.texi (Complete copy-region-as-kill): Fix typo. | ||
| 4 | |||
| 5 | * emacs-lisp-intro.texi (Thank You): Avoid mailto: in html output. | ||
| 6 | |||
| 7 | * Makefile.in (prefix, datarootdir, datadir, PACKAGE_TARNAME) | ||
| 8 | (docdir, dvidir, htmldir, pdfdir, psdir, GZIP_PROG, INSTALL) | ||
| 9 | (INSTALL_DATA): New, set by configure. | ||
| 10 | (HTML_OPTS, DVI_TARGETS, HTML_TARGETS, PDF_TARGETS, PS_TARGETS): | ||
| 11 | New variables. | ||
| 12 | (.SUFFIXES): Add .ps and .dvi. | ||
| 13 | (.dvi.ps): New suffix rule. | ||
| 14 | (dvi, html, pdf, ps): Use *_TARGETS variables. | ||
| 15 | (emacs-lisp-intro.ps): Remove explicit rule. | ||
| 16 | (emacs-lisp-intro.html): Use HTML_OPTS. | ||
| 17 | (clean): Use DVI_TARGETS, HTML_TARGETS, PDF_TARGETS, PS_TARGETS. | ||
| 18 | (.PHONY): install-dvi, install-html, install-pdf, install-ps | ||
| 19 | ,install-doc, uninstall-dvi, uninstall-html, uninstall-pdf, | ||
| 20 | uninstall-ps, and uninstall-doc. | ||
| 21 | (install-dvi, install-html, install-pdf, install-ps, install-doc) | ||
| 22 | (uninstall-dvi, uninstall-html, uninstall-ps, uninstall-pdf) | ||
| 23 | (uninstall-doc): New rules. | ||
| 24 | |||
| 1 | 2013-08-07 Eli Zaretskii <eliz@gnu.org> | 25 | 2013-08-07 Eli Zaretskii <eliz@gnu.org> |
| 2 | 26 | ||
| 3 | * emacs-lisp-intro.texi (Beginning init File): Rename from | 27 | * emacs-lisp-intro.texi (Beginning init File): Rename from |
diff --git a/doc/lispintro/Makefile.in b/doc/lispintro/Makefile.in index d5462f9e70f..ad1b978f255 100644 --- a/doc/lispintro/Makefile.in +++ b/doc/lispintro/Makefile.in | |||
| @@ -30,12 +30,29 @@ texinfodir = $(srcdir)/../misc | |||
| 30 | # Directory with emacsver.texi. | 30 | # Directory with emacsver.texi. |
| 31 | emacsdir = $(srcdir)/../emacs | 31 | emacsdir = $(srcdir)/../emacs |
| 32 | 32 | ||
| 33 | prefix = @prefix@ | ||
| 34 | datarootdir = @datarootdir@ | ||
| 35 | datadir = @datadir@ | ||
| 36 | PACKAGE_TARNAME = @PACKAGE_TARNAME@ | ||
| 37 | docdir = @docdir@ | ||
| 38 | dvidir = @dvidir@ | ||
| 39 | htmldir = @htmldir@ | ||
| 40 | pdfdir = @pdfdir@ | ||
| 41 | psdir = @psdir@ | ||
| 42 | |||
| 33 | MKDIR_P = @MKDIR_P@ | 43 | MKDIR_P = @MKDIR_P@ |
| 34 | 44 | ||
| 45 | GZIP_PROG = @GZIP_PROG@ | ||
| 46 | |||
| 47 | HTML_OPTS = --no-split --html | ||
| 48 | |||
| 35 | INFO_EXT=@INFO_EXT@ | 49 | INFO_EXT=@INFO_EXT@ |
| 36 | # Options used only when making info output. | 50 | # Options used only when making info output. |
| 37 | INFO_OPTS=@INFO_OPTS@ | 51 | INFO_OPTS=@INFO_OPTS@ |
| 38 | 52 | ||
| 53 | INSTALL = @INSTALL@ | ||
| 54 | INSTALL_DATA = @INSTALL_DATA@ | ||
| 55 | |||
| 39 | MAKEINFO = @MAKEINFO@ | 56 | MAKEINFO = @MAKEINFO@ |
| 40 | MAKEINFO_OPTS = --force -I $(emacsdir) -I $(srcdir) | 57 | MAKEINFO_OPTS = --force -I $(emacsdir) -I $(srcdir) |
| 41 | TEXI2DVI = texi2dvi | 58 | TEXI2DVI = texi2dvi |
| @@ -45,6 +62,11 @@ DVIPS = dvips | |||
| 45 | ENVADD = TEXINPUTS="$(srcdir):$(texinfodir):$(emacsdir):$(TEXINPUTS)" \ | 62 | ENVADD = TEXINPUTS="$(srcdir):$(texinfodir):$(emacsdir):$(TEXINPUTS)" \ |
| 46 | MAKEINFO="$(MAKEINFO) $(MAKEINFO_OPTS)" | 63 | MAKEINFO="$(MAKEINFO) $(MAKEINFO_OPTS)" |
| 47 | 64 | ||
| 65 | DVI_TARGETS = emacs-lisp-intro.dvi | ||
| 66 | HTML_TARGETS = emacs-lisp-intro.html | ||
| 67 | PDF_TARGETS = emacs-lisp-intro.pdf | ||
| 68 | PS_TARGETS = emacs-lisp-intro.ps | ||
| 69 | |||
| 48 | mkinfodir = @${MKDIR_P} ${buildinfodir} | 70 | mkinfodir = @${MKDIR_P} ${buildinfodir} |
| 49 | 71 | ||
| 50 | srcs = ${srcdir}/emacs-lisp-intro.texi ${srcdir}/doclicense.texi \ | 72 | srcs = ${srcdir}/emacs-lisp-intro.texi ${srcdir}/doclicense.texi \ |
| @@ -52,12 +74,17 @@ srcs = ${srcdir}/emacs-lisp-intro.texi ${srcdir}/doclicense.texi \ | |||
| 52 | 74 | ||
| 53 | .PHONY: info dvi html pdf ps | 75 | .PHONY: info dvi html pdf ps |
| 54 | 76 | ||
| 77 | .SUFFIXES: .ps .dvi | ||
| 78 | |||
| 79 | .dvi.ps: | ||
| 80 | $(DVIPS) -o $@ $< | ||
| 81 | |||
| 55 | info: ${buildinfodir}/eintr$(INFO_EXT) | 82 | info: ${buildinfodir}/eintr$(INFO_EXT) |
| 56 | 83 | ||
| 57 | dvi: emacs-lisp-intro.dvi | 84 | dvi: $(DVI_TARGETS) |
| 58 | html: emacs-lisp-intro.html | 85 | html: $(HTML_TARGETS) |
| 59 | pdf: emacs-lisp-intro.pdf | 86 | pdf: $(PDF_TARGETS) |
| 60 | ps: emacs-lisp-intro.ps | 87 | ps: $(PS_TARGETS) |
| 61 | 88 | ||
| 62 | # The file name eintr must fit within 5 characters, to allow for | 89 | # The file name eintr must fit within 5 characters, to allow for |
| 63 | # -NN extensions to fit into DOS 8+3 limits without clashing. | 90 | # -NN extensions to fit into DOS 8+3 limits without clashing. |
| @@ -69,14 +96,11 @@ ${buildinfodir}/eintr$(INFO_EXT): ${srcs} | |||
| 69 | emacs-lisp-intro.dvi: ${srcs} | 96 | emacs-lisp-intro.dvi: ${srcs} |
| 70 | $(ENVADD) $(TEXI2DVI) ${srcdir}/emacs-lisp-intro.texi | 97 | $(ENVADD) $(TEXI2DVI) ${srcdir}/emacs-lisp-intro.texi |
| 71 | 98 | ||
| 72 | emacs-lisp-intro.ps: emacs-lisp-intro.dvi | ||
| 73 | $(DVIPS) -o $@ emacs-lisp-intro.dvi | ||
| 74 | |||
| 75 | emacs-lisp-intro.pdf: ${srcs} | 99 | emacs-lisp-intro.pdf: ${srcs} |
| 76 | $(ENVADD) $(TEXI2PDF) ${srcdir}/emacs-lisp-intro.texi | 100 | $(ENVADD) $(TEXI2PDF) ${srcdir}/emacs-lisp-intro.texi |
| 77 | 101 | ||
| 78 | emacs-lisp-intro.html: ${srcs} | 102 | emacs-lisp-intro.html: ${srcs} |
| 79 | $(MAKEINFO) $(MAKEINFO_OPTS) --html -o $@ ${srcdir}/emacs-lisp-intro.texi | 103 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/emacs-lisp-intro.texi |
| 80 | 104 | ||
| 81 | .PHONY: mostlyclean clean distclean maintainer-clean infoclean | 105 | .PHONY: mostlyclean clean distclean maintainer-clean infoclean |
| 82 | 106 | ||
| @@ -85,8 +109,7 @@ mostlyclean: | |||
| 85 | *.op *.ops *.pg *.pgs *.tp *.tps *.vr *.vrs | 109 | *.op *.ops *.pg *.pgs *.tp *.tps *.vr *.vrs |
| 86 | 110 | ||
| 87 | clean: mostlyclean | 111 | clean: mostlyclean |
| 88 | rm -f emacs-lisp-intro.dvi emacs-lisp-intro.pdf emacs-lisp-intro.ps | 112 | rm -f $(DVI_TARGETS) $(HTML_TARGETS) $(PDF_TARGETS) $(PS_TARGETS) |
| 89 | rm -rf emacs-lisp-intro.html/ | ||
| 90 | rm -f emacs-lispintro-${version}.tar* | 113 | rm -f emacs-lispintro-${version}.tar* |
| 91 | 114 | ||
| 92 | distclean: clean | 115 | distclean: clean |
| @@ -118,4 +141,52 @@ dist: | |||
| 118 | tar -cf emacs-lispintro-${version}.tar emacs-lispintro-${version} | 141 | tar -cf emacs-lispintro-${version}.tar emacs-lispintro-${version} |
| 119 | rm -rf emacs-lispintro-${version} | 142 | rm -rf emacs-lispintro-${version} |
| 120 | 143 | ||
| 144 | |||
| 145 | .PHONY: install-dvi install-html install-pdf install-ps install-doc | ||
| 146 | |||
| 147 | install-dvi: dvi | ||
| 148 | umask 022; $(MKDIR_P) $(DESTDIR)$(dvidir) | ||
| 149 | $(INSTALL_DATA) $(DVI_TARGETS) $(DESTDIR)$(dvidir) | ||
| 150 | install-html: html | ||
| 151 | umask 022; $(MKDIR_P) $(DESTDIR)$(htmldir) | ||
| 152 | $(INSTALL_DATA) $(HTML_TARGETS) $(DESTDIR)$(htmldir) | ||
| 153 | install-pdf: pdf | ||
| 154 | umask 022;$(MKDIR_P) $(DESTDIR)$(pdfdir) | ||
| 155 | $(INSTALL_DATA) $(PDF_TARGETS) $(DESTDIR)$(pdfdir) | ||
| 156 | install-ps: ps | ||
| 157 | umask 022; $(MKDIR_P) $(DESTDIR)$(psdir) | ||
| 158 | for file in $(PS_TARGETS); do \ | ||
| 159 | $(INSTALL_DATA) $${file} $(DESTDIR)$(psdir); \ | ||
| 160 | [ -n "${GZIP_PROG}" ] || continue; \ | ||
| 161 | rm -f $(DESTDIR)$(psdir)/$${file}.gz; \ | ||
| 162 | ${GZIP_PROG} -9n $(DESTDIR)$(psdir)/$${file}; \ | ||
| 163 | done | ||
| 164 | |||
| 165 | ## Top-level Makefile installs the info pages. | ||
| 166 | install-doc: install-dvi install-html install-pdf install-ps | ||
| 167 | |||
| 168 | |||
| 169 | .PHONY: uninstall-dvi uninstall-html uninstall-pdf uninstall-ps uninstall-doc | ||
| 170 | |||
| 171 | uninstall-dvi: | ||
| 172 | for file in $(DVI_TARGETS); do \ | ||
| 173 | rm -f $(DESTDIR)$(dvidir)/$${file}; \ | ||
| 174 | done | ||
| 175 | uninstall-html: | ||
| 176 | for file in $(HTML_TARGETS); do \ | ||
| 177 | rm -f $(DESTDIR)$(htmldir)/$${file}; \ | ||
| 178 | done | ||
| 179 | uninstall-ps: | ||
| 180 | ext= ; [ -n "${GZIP_PROG}" ] && ext=.gz; \ | ||
| 181 | for file in $(PS_TARGETS); do \ | ||
| 182 | rm -f $(DESTDIR)$(psdir)/$${file}$${ext}; \ | ||
| 183 | done | ||
| 184 | uninstall-pdf: | ||
| 185 | for file in $(PDF_TARGETS); do \ | ||
| 186 | rm -f $(DESTDIR)$(pdfdir)/$${file}; \ | ||
| 187 | done | ||
| 188 | |||
| 189 | uninstall-doc: uninstall-dvi uninstall-html uninstall-pdf uninstall-ps | ||
| 190 | |||
| 191 | |||
| 121 | ### Makefile ends here | 192 | ### Makefile ends here |
diff --git a/doc/lispintro/emacs-lisp-intro.texi b/doc/lispintro/emacs-lisp-intro.texi index 2160d7ba5a9..18ea8e87e19 100644 --- a/doc/lispintro/emacs-lisp-intro.texi +++ b/doc/lispintro/emacs-lisp-intro.texi | |||
| @@ -954,7 +954,12 @@ encouragement. My mistakes are my own. | |||
| 954 | 954 | ||
| 955 | @flushright | 955 | @flushright |
| 956 | Robert J. Chassell | 956 | Robert J. Chassell |
| 957 | @ifnothtml | ||
| 957 | @email{bob@@gnu.org} | 958 | @email{bob@@gnu.org} |
| 959 | @end ifnothtml | ||
| 960 | @ifhtml | ||
| 961 | bob@@gnu.org | ||
| 962 | @end ifhtml | ||
| 958 | @end flushright | 963 | @end flushright |
| 959 | 964 | ||
| 960 | @c ================ Beginning of main text ================ | 965 | @c ================ Beginning of main text ================ |
| @@ -8312,7 +8317,7 @@ As usual, this function can be divided into its component parts: | |||
| 8312 | 8317 | ||
| 8313 | The arguments are @code{beg} and @code{end} and the function is | 8318 | The arguments are @code{beg} and @code{end} and the function is |
| 8314 | interactive with @code{"r"}, so the two arguments must refer to the | 8319 | interactive with @code{"r"}, so the two arguments must refer to the |
| 8315 | beginning and end of the region. If you have been reading though this | 8320 | beginning and end of the region. If you have been reading through this |
| 8316 | document from the beginning, understanding these parts of a function is | 8321 | document from the beginning, understanding these parts of a function is |
| 8317 | almost becoming routine. | 8322 | almost becoming routine. |
| 8318 | 8323 | ||
diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 9d90a98a1ae..1c8f239eb9d 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog | |||
| @@ -1,3 +1,23 @@ | |||
| 1 | 2013-08-12 Glenn Morris <rgm@gnu.org> | ||
| 2 | |||
| 3 | * Makefile.in (prefix, datarootdir, datadir, PACKAGE_TARNAME) | ||
| 4 | (docdir, dvidir, htmldir, pdfdir, psdir, GZIP_PROG, INSTALL) | ||
| 5 | (INSTALL_DATA): New, set by configure. | ||
| 6 | (HTML_OPTS, DVI_TARGETS, HTML_TARGETS, PDF_TARGETS, PS_TARGETS): | ||
| 7 | New variables. | ||
| 8 | (.SUFFIXES): Add .ps and .dvi. | ||
| 9 | (.dvi.ps): New suffix rule. | ||
| 10 | (dvi, html, pdf, ps): Use *_TARGETS variables. | ||
| 11 | (elisp.html): Use HTML_OPTS. | ||
| 12 | (elisp.ps): Remove explicit rule. | ||
| 13 | (.PHONY): install-dvi, install-html, install-pdf, install-ps | ||
| 14 | ,install-doc, uninstall-dvi, uninstall-html, uninstall-pdf, | ||
| 15 | uninstall-ps, and uninstall-doc. | ||
| 16 | (install-dvi, install-html, install-pdf, install-ps, install-doc) | ||
| 17 | (uninstall-dvi, uninstall-html, uninstall-ps, uninstall-pdf) | ||
| 18 | (uninstall-doc): New rules. | ||
| 19 | (clean): Use DVI_TARGETS, HTML_TARGETS, PDF_TARGETS, PS_TARGETS. | ||
| 20 | |||
| 1 | 2013-08-10 Xue Fuqiao <xfq.free@gmail.com> | 21 | 2013-08-10 Xue Fuqiao <xfq.free@gmail.com> |
| 2 | 22 | ||
| 3 | * edebug.texi (Instrumenting Macro Calls): Use @defmac for macros. | 23 | * edebug.texi (Instrumenting Macro Calls): Use @defmac for macros. |
diff --git a/doc/lispref/Makefile.in b/doc/lispref/Makefile.in index 8e6d034804e..c7aa5ac1a28 100644 --- a/doc/lispref/Makefile.in +++ b/doc/lispref/Makefile.in | |||
| @@ -33,12 +33,29 @@ texinfodir = $(srcdir)/../misc | |||
| 33 | # Directory with emacsver.texi. | 33 | # Directory with emacsver.texi. |
| 34 | emacsdir = $(srcdir)/../emacs | 34 | emacsdir = $(srcdir)/../emacs |
| 35 | 35 | ||
| 36 | prefix = @prefix@ | ||
| 37 | datarootdir = @datarootdir@ | ||
| 38 | datadir = @datadir@ | ||
| 39 | PACKAGE_TARNAME = @PACKAGE_TARNAME@ | ||
| 40 | docdir = @docdir@ | ||
| 41 | dvidir = @dvidir@ | ||
| 42 | htmldir = @htmldir@ | ||
| 43 | pdfdir = @pdfdir@ | ||
| 44 | psdir = @psdir@ | ||
| 45 | |||
| 36 | MKDIR_P = @MKDIR_P@ | 46 | MKDIR_P = @MKDIR_P@ |
| 37 | 47 | ||
| 48 | GZIP_PROG = @GZIP_PROG@ | ||
| 49 | |||
| 50 | HTML_OPTS = --no-split --html | ||
| 51 | |||
| 38 | INFO_EXT=@INFO_EXT@ | 52 | INFO_EXT=@INFO_EXT@ |
| 39 | # Options used only when making info output. | 53 | # Options used only when making info output. |
| 40 | INFO_OPTS=@INFO_OPTS@ | 54 | INFO_OPTS=@INFO_OPTS@ |
| 41 | 55 | ||
| 56 | INSTALL = @INSTALL@ | ||
| 57 | INSTALL_DATA = @INSTALL_DATA@ | ||
| 58 | |||
| 42 | MAKEINFO = @MAKEINFO@ | 59 | MAKEINFO = @MAKEINFO@ |
| 43 | MAKEINFO_OPTS = --force --enable-encoding -I $(emacsdir) -I $(srcdir) | 60 | MAKEINFO_OPTS = --force --enable-encoding -I $(emacsdir) -I $(srcdir) |
| 44 | TEXI2DVI = texi2dvi | 61 | TEXI2DVI = texi2dvi |
| @@ -48,6 +65,11 @@ DVIPS = dvips | |||
| 48 | ENVADD = TEXINPUTS="$(srcdir):$(texinfodir):$(emacsdir):$(TEXINPUTS)" \ | 65 | ENVADD = TEXINPUTS="$(srcdir):$(texinfodir):$(emacsdir):$(TEXINPUTS)" \ |
| 49 | MAKEINFO="$(MAKEINFO) $(MAKEINFO_OPTS)" | 66 | MAKEINFO="$(MAKEINFO) $(MAKEINFO_OPTS)" |
| 50 | 67 | ||
| 68 | DVI_TARGETS = elisp.dvi | ||
| 69 | HTML_TARGETS = elisp.html | ||
| 70 | PDF_TARGETS = elisp.pdf | ||
| 71 | PS_TARGETS = elisp.ps | ||
| 72 | |||
| 51 | # List of all the texinfo files in the manual: | 73 | # List of all the texinfo files in the manual: |
| 52 | 74 | ||
| 53 | srcs = \ | 75 | srcs = \ |
| @@ -108,11 +130,16 @@ mkinfodir = @${MKDIR_P} ${buildinfodir} | |||
| 108 | 130 | ||
| 109 | .PHONY: info dvi pdf ps | 131 | .PHONY: info dvi pdf ps |
| 110 | 132 | ||
| 133 | .SUFFIXES: .ps .dvi | ||
| 134 | |||
| 135 | .dvi.ps: | ||
| 136 | $(DVIPS) -o $@ $< | ||
| 137 | |||
| 111 | info: $(buildinfodir)/elisp$(INFO_EXT) | 138 | info: $(buildinfodir)/elisp$(INFO_EXT) |
| 112 | dvi: elisp.dvi | 139 | dvi: $(DVI_TARGETS) |
| 113 | html: elisp.html | 140 | html: $(HTML_TARGETS) |
| 114 | pdf: elisp.pdf | 141 | pdf: $(PDF_TARGETS) |
| 115 | ps: elisp.ps | 142 | ps: $(PS_TARGETS) |
| 116 | 143 | ||
| 117 | ## Note: "<" is not portable in ordinary make rules. | 144 | ## Note: "<" is not portable in ordinary make rules. |
| 118 | $(buildinfodir)/elisp$(INFO_EXT): $(srcs) | 145 | $(buildinfodir)/elisp$(INFO_EXT): $(srcs) |
| @@ -123,10 +150,7 @@ elisp.dvi: $(srcs) | |||
| 123 | $(ENVADD) $(TEXI2DVI) $(srcdir)/elisp.texi | 150 | $(ENVADD) $(TEXI2DVI) $(srcdir)/elisp.texi |
| 124 | 151 | ||
| 125 | elisp.html: $(srcs) | 152 | elisp.html: $(srcs) |
| 126 | $(MAKEINFO) $(MAKEINFO_OPTS) --html -o $@ $(srcdir)/elisp.texi | 153 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ $(srcdir)/elisp.texi |
| 127 | |||
| 128 | elisp.ps: elisp.dvi | ||
| 129 | $(DVIPS) -o $@ elisp.dvi | ||
| 130 | 154 | ||
| 131 | elisp.pdf: $(srcs) | 155 | elisp.pdf: $(srcs) |
| 132 | $(ENVADD) $(TEXI2PDF) $(srcdir)/elisp.texi | 156 | $(ENVADD) $(TEXI2PDF) $(srcdir)/elisp.texi |
| @@ -140,9 +164,8 @@ mostlyclean: | |||
| 140 | rm -f elisp[12]* vol[12].tmp | 164 | rm -f elisp[12]* vol[12].tmp |
| 141 | 165 | ||
| 142 | clean: mostlyclean | 166 | clean: mostlyclean |
| 143 | rm -f elisp.dvi elisp.pdf elisp.ps | 167 | rm -f $(DVI_TARGETS) $(HTML_TARGETS) $(PDF_TARGETS) $(PS_TARGETS) |
| 144 | rm -f vol[12].dvi vol[12].pdf vol[12].ps | 168 | rm -f vol[12].dvi vol[12].pdf vol[12].ps |
| 145 | rm -rf elisp.html | ||
| 146 | rm -f emacs-lispref-${version}.tar* | 169 | rm -f emacs-lispref-${version}.tar* |
| 147 | 170 | ||
| 148 | distclean: clean | 171 | distclean: clean |
| @@ -175,4 +198,51 @@ dist: | |||
| 175 | tar -cf emacs-lispref-${version}.tar emacs-lispref-${version} | 198 | tar -cf emacs-lispref-${version}.tar emacs-lispref-${version} |
| 176 | rm -rf emacs-lispref-${version} | 199 | rm -rf emacs-lispref-${version} |
| 177 | 200 | ||
| 201 | .PHONY: install-dvi install-html install-pdf install-ps install-doc | ||
| 202 | |||
| 203 | install-dvi: dvi | ||
| 204 | umask 022; $(MKDIR_P) $(DESTDIR)$(dvidir) | ||
| 205 | $(INSTALL_DATA) $(DVI_TARGETS) $(DESTDIR)$(dvidir) | ||
| 206 | install-html: html | ||
| 207 | umask 022; $(MKDIR_P) $(DESTDIR)$(htmldir) | ||
| 208 | $(INSTALL_DATA) $(HTML_TARGETS) $(DESTDIR)$(htmldir) | ||
| 209 | install-pdf: pdf | ||
| 210 | umask 022;$(MKDIR_P) $(DESTDIR)$(pdfdir) | ||
| 211 | $(INSTALL_DATA) $(PDF_TARGETS) $(DESTDIR)$(pdfdir) | ||
| 212 | install-ps: ps | ||
| 213 | umask 022; $(MKDIR_P) $(DESTDIR)$(psdir) | ||
| 214 | for file in $(PS_TARGETS); do \ | ||
| 215 | $(INSTALL_DATA) $${file} $(DESTDIR)$(psdir); \ | ||
| 216 | [ -n "${GZIP_PROG}" ] || continue; \ | ||
| 217 | rm -f $(DESTDIR)$(psdir)/$${file}.gz; \ | ||
| 218 | ${GZIP_PROG} -9n $(DESTDIR)$(psdir)/$${file}; \ | ||
| 219 | done | ||
| 220 | |||
| 221 | ## Top-level Makefile installs the info pages. | ||
| 222 | install-doc: install-dvi install-html install-pdf install-ps | ||
| 223 | |||
| 224 | |||
| 225 | .PHONY: uninstall-dvi uninstall-html uninstall-pdf uninstall-ps uninstall-doc | ||
| 226 | |||
| 227 | uninstall-dvi: | ||
| 228 | for file in $(DVI_TARGETS); do \ | ||
| 229 | rm -f $(DESTDIR)$(dvidir)/$${file}; \ | ||
| 230 | done | ||
| 231 | uninstall-html: | ||
| 232 | for file in $(HTML_TARGETS); do \ | ||
| 233 | rm -f $(DESTDIR)$(htmldir)/$${file}; \ | ||
| 234 | done | ||
| 235 | uninstall-ps: | ||
| 236 | ext= ; [ -n "${GZIP_PROG}" ] && ext=.gz; \ | ||
| 237 | for file in $(PS_TARGETS); do \ | ||
| 238 | rm -f $(DESTDIR)$(psdir)/$${file}$${ext}; \ | ||
| 239 | done | ||
| 240 | uninstall-pdf: | ||
| 241 | for file in $(PDF_TARGETS); do \ | ||
| 242 | rm -f $(DESTDIR)$(pdfdir)/$${file}; \ | ||
| 243 | done | ||
| 244 | |||
| 245 | uninstall-doc: uninstall-dvi uninstall-html uninstall-pdf uninstall-ps | ||
| 246 | |||
| 247 | |||
| 178 | ### Makefile ends here | 248 | ### Makefile ends here |
diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index c24ef309bf7..02f52869f84 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog | |||
| @@ -1,3 +1,51 @@ | |||
| 1 | 2013-08-12 Katsumi Yamaoka <yamaoka@jpl.org> | ||
| 2 | |||
| 3 | * gnus.texi (Mail Source Specifiers): Fix description for pop3's :leave. | ||
| 4 | |||
| 5 | 2013-08-12 Glenn Morris <rgm@gnu.org> | ||
| 6 | |||
| 7 | * Makefile.in (ada_mode_deps, auth_deps, autotype_deps) | ||
| 8 | (bovine_deps, calc_deps, ccmode_deps, cl_deps, dbus_deps) | ||
| 9 | (dired_x_deps, ebrowse_deps, ede_deps, ediff_deps, edt_deps) | ||
| 10 | (eieio_deps, emacs_gnutls_deps, emacs_mime_deps, epa_deps) | ||
| 11 | (erc_deps, ert_deps, eshell_deps, eudc_deps, faq_deps) | ||
| 12 | (flymake_deps, forms_deps, gnus_deps, htmlfontify_deps) | ||
| 13 | (idlwave_deps, ido_deps, info_deps, mairix_el_deps, message_deps) | ||
| 14 | (mh_e_deps, newsticker_deps, nxml_mode_deps, org_deps) | ||
| 15 | (pcl_cvs_deps, pgg_deps, rcirc_deps, reftex_deps, remember_deps) | ||
| 16 | (sasl_deps, sc_deps, semantic_deps, ses_deps, sieve_deps) | ||
| 17 | (smtpmail_deps, speedbar_deps, srecode_deps, todo_mode_deps) | ||
| 18 | (tramp_deps, url_deps, vip_deps, viper_deps, widget_deps) | ||
| 19 | (wisent_deps, woman_deps): New variables. Use to reduce duplication. | ||
| 20 | |||
| 21 | * woman.texi (Top): Avoid mailto: in html output. | ||
| 22 | |||
| 23 | * Makefile.in (prefix, datarootdir, datadir, PACKAGE_TARNAME) | ||
| 24 | (docdir, dvidir, htmldir, pdfdir, psdir, GZIP_PROG, INSTALL) | ||
| 25 | (INSTALL_DATA): New, set by configure. | ||
| 26 | (HTML_OPTS, HTML_TARGETS, PS_TARGETS, DVIPS): New variables. | ||
| 27 | (.PHONY): Add html, ps, install-dvi, install-html, install-pdf, | ||
| 28 | install-ps ,install-doc, uninstall-dvi, uninstall-html, uninstall-pdf, | ||
| 29 | uninstall-ps, and uninstall-doc. | ||
| 30 | (.SUFFIXES): Add .ps and .dvi. | ||
| 31 | (.dvi.ps): New suffix rule. | ||
| 32 | (html, ps, ada-mode.html, auth.html, autotype.html, bovine.html) | ||
| 33 | (calc.html, cc-mode.html, cl.html, dbus.html, dired-x.html) | ||
| 34 | (ebrowse.html, ede.html, ediff.html, edt.html, eieio.html) | ||
| 35 | (emacs-gnutls.html, emacs-mime.html, epa.html, erc.html) | ||
| 36 | (ert.html, eshell.html, eudc.html, faq.html, flymake.html) | ||
| 37 | (forms.html, gnus.html, htmlfontify.html, idlwave.html) | ||
| 38 | (ido.html, mairix-el.html, message.html, mh-e.html) | ||
| 39 | (newsticker.html, nxml-mode.html, org.html, pgg.html) | ||
| 40 | (rcirc.html, reftex.html, remember.html, sasl.html, sc.html) | ||
| 41 | (semantic.html, sieve.html, smtpmail.html, speedbar.html) | ||
| 42 | (srecode.html, todo-mode.html, tramp.html, url.html, vip.html) | ||
| 43 | (viper.html, widget.html, wisent.html, woman.html, install-dvi) | ||
| 44 | (install-html, install-pdf, install-ps, install-doc, uninstall-dvi) | ||
| 45 | (uninstall-html, uninstall-ps, uninstall-pdf, uninstall-doc): | ||
| 46 | New rules. | ||
| 47 | (clean): Remove HTML_TARGETS and PS_TARGETS. | ||
| 48 | |||
| 1 | 2013-08-10 Xue Fuqiao <xfq.free@gmail.com> | 49 | 2013-08-10 Xue Fuqiao <xfq.free@gmail.com> |
| 2 | 50 | ||
| 3 | * ido.texi (Working Directories): | 51 | * ido.texi (Working Directories): |
diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in index 7e08c5a2088..6618e125d7c 100644 --- a/doc/misc/Makefile.in +++ b/doc/misc/Makefile.in | |||
| @@ -31,12 +31,29 @@ buildinfodir = $(srcdir)/../../info | |||
| 31 | ## Directory with emacsver.texi. | 31 | ## Directory with emacsver.texi. |
| 32 | emacsdir = $(srcdir)/../emacs | 32 | emacsdir = $(srcdir)/../emacs |
| 33 | 33 | ||
| 34 | prefix = @prefix@ | ||
| 35 | datarootdir = @datarootdir@ | ||
| 36 | datadir = @datadir@ | ||
| 37 | PACKAGE_TARNAME = @PACKAGE_TARNAME@ | ||
| 38 | docdir = @docdir@ | ||
| 39 | dvidir = @dvidir@ | ||
| 40 | htmldir = @htmldir@ | ||
| 41 | pdfdir = @pdfdir@ | ||
| 42 | psdir = @psdir@ | ||
| 43 | |||
| 34 | MKDIR_P = @MKDIR_P@ | 44 | MKDIR_P = @MKDIR_P@ |
| 35 | 45 | ||
| 46 | GZIP_PROG = @GZIP_PROG@ | ||
| 47 | |||
| 48 | HTML_OPTS = --no-split --html | ||
| 49 | |||
| 36 | INFO_EXT=@INFO_EXT@ | 50 | INFO_EXT=@INFO_EXT@ |
| 37 | # Options used only when making info output. | 51 | # Options used only when making info output. |
| 38 | INFO_OPTS=@INFO_OPTS@ | 52 | INFO_OPTS=@INFO_OPTS@ |
| 39 | 53 | ||
| 54 | INSTALL = @INSTALL@ | ||
| 55 | INSTALL_DATA = @INSTALL_DATA@ | ||
| 56 | |||
| 40 | # The makeinfo program is part of the Texinfo distribution. | 57 | # The makeinfo program is part of the Texinfo distribution. |
| 41 | # Use --force so that it generates output even if there are errors. | 58 | # Use --force so that it generates output even if there are errors. |
| 42 | MAKEINFO = @MAKEINFO@ | 59 | MAKEINFO = @MAKEINFO@ |
| @@ -109,6 +126,64 @@ DVI_TARGETS = \ | |||
| 109 | wisent.dvi \ | 126 | wisent.dvi \ |
| 110 | woman.dvi | 127 | woman.dvi |
| 111 | 128 | ||
| 129 | HTML_TARGETS = \ | ||
| 130 | ada-mode.html \ | ||
| 131 | auth.html \ | ||
| 132 | autotype.html \ | ||
| 133 | bovine.html \ | ||
| 134 | calc.html \ | ||
| 135 | cc-mode.html \ | ||
| 136 | cl.html \ | ||
| 137 | dbus.html \ | ||
| 138 | dired-x.html \ | ||
| 139 | ebrowse.html \ | ||
| 140 | ede.html \ | ||
| 141 | ediff.html \ | ||
| 142 | edt.html \ | ||
| 143 | eieio.html \ | ||
| 144 | emacs-mime.html \ | ||
| 145 | epa.html \ | ||
| 146 | erc.html \ | ||
| 147 | ert.html \ | ||
| 148 | eshell.html \ | ||
| 149 | eudc.html \ | ||
| 150 | faq.html \ | ||
| 151 | flymake.html \ | ||
| 152 | forms.html \ | ||
| 153 | gnus.html \ | ||
| 154 | emacs-gnutls.html \ | ||
| 155 | htmlfontify.html \ | ||
| 156 | idlwave.html \ | ||
| 157 | ido.html \ | ||
| 158 | info.html \ | ||
| 159 | mairix-el.html \ | ||
| 160 | message.html \ | ||
| 161 | mh-e.html \ | ||
| 162 | newsticker.html \ | ||
| 163 | nxml-mode.html \ | ||
| 164 | org.html \ | ||
| 165 | pcl-cvs.html \ | ||
| 166 | pgg.html \ | ||
| 167 | rcirc.html \ | ||
| 168 | reftex.html \ | ||
| 169 | remember.html \ | ||
| 170 | sasl.html \ | ||
| 171 | sc.html \ | ||
| 172 | semantic.html \ | ||
| 173 | ses.html \ | ||
| 174 | sieve.html \ | ||
| 175 | smtpmail.html \ | ||
| 176 | speedbar.html \ | ||
| 177 | srecode.html \ | ||
| 178 | todo-mode.html \ | ||
| 179 | tramp.html \ | ||
| 180 | url.html \ | ||
| 181 | vip.html \ | ||
| 182 | viper.html \ | ||
| 183 | widget.html \ | ||
| 184 | wisent.html \ | ||
| 185 | woman.html | ||
| 186 | |||
| 112 | PDF_TARGETS = \ | 187 | PDF_TARGETS = \ |
| 113 | ada-mode.pdf \ | 188 | ada-mode.pdf \ |
| 114 | auth.pdf \ | 189 | auth.pdf \ |
| @@ -167,8 +242,67 @@ PDF_TARGETS = \ | |||
| 167 | wisent.pdf \ | 242 | wisent.pdf \ |
| 168 | woman.pdf | 243 | woman.pdf |
| 169 | 244 | ||
| 245 | PS_TARGETS = \ | ||
| 246 | ada-mode.ps \ | ||
| 247 | auth.ps \ | ||
| 248 | autotype.ps \ | ||
| 249 | bovine.ps \ | ||
| 250 | calc.ps \ | ||
| 251 | cc-mode.ps \ | ||
| 252 | cl.ps \ | ||
| 253 | dbus.ps \ | ||
| 254 | dired-x.ps \ | ||
| 255 | ebrowse.ps \ | ||
| 256 | ede.ps \ | ||
| 257 | ediff.ps \ | ||
| 258 | edt.ps \ | ||
| 259 | eieio.ps \ | ||
| 260 | emacs-mime.ps \ | ||
| 261 | epa.ps \ | ||
| 262 | erc.ps \ | ||
| 263 | ert.ps \ | ||
| 264 | eshell.ps \ | ||
| 265 | eudc.ps \ | ||
| 266 | faq.ps \ | ||
| 267 | flymake.ps \ | ||
| 268 | forms.ps \ | ||
| 269 | gnus.ps \ | ||
| 270 | htmlfontify.ps \ | ||
| 271 | emacs-gnutls.ps \ | ||
| 272 | idlwave.ps \ | ||
| 273 | ido.ps \ | ||
| 274 | info.ps \ | ||
| 275 | mairix-el.ps \ | ||
| 276 | message.ps \ | ||
| 277 | mh-e.ps \ | ||
| 278 | newsticker.ps \ | ||
| 279 | nxml-mode.ps \ | ||
| 280 | org.ps \ | ||
| 281 | pcl-cvs.ps \ | ||
| 282 | pgg.ps \ | ||
| 283 | rcirc.ps \ | ||
| 284 | reftex.ps \ | ||
| 285 | remember.ps \ | ||
| 286 | sasl.ps \ | ||
| 287 | sc.ps \ | ||
| 288 | semantic.ps \ | ||
| 289 | ses.ps \ | ||
| 290 | sieve.ps \ | ||
| 291 | smtpmail.ps \ | ||
| 292 | speedbar.ps \ | ||
| 293 | srecode.ps \ | ||
| 294 | todo-mode.ps \ | ||
| 295 | tramp.ps \ | ||
| 296 | url.ps \ | ||
| 297 | vip.ps \ | ||
| 298 | viper.ps \ | ||
| 299 | widget.ps \ | ||
| 300 | wisent.ps \ | ||
| 301 | woman.ps | ||
| 302 | |||
| 170 | TEXI2DVI = texi2dvi | 303 | TEXI2DVI = texi2dvi |
| 171 | TEXI2PDF = texi2pdf | 304 | TEXI2PDF = texi2pdf |
| 305 | DVIPS = dvips | ||
| 172 | 306 | ||
| 173 | ENVADD = TEXINPUTS="$(srcdir):$(emacsdir):$(TEXINPUTS)" \ | 307 | ENVADD = TEXINPUTS="$(srcdir):$(emacsdir):$(TEXINPUTS)" \ |
| 174 | MAKEINFO="$(MAKEINFO) $(MAKEINFO_OPTS)" | 308 | MAKEINFO="$(MAKEINFO) $(MAKEINFO_OPTS)" |
| @@ -177,10 +311,15 @@ mkinfodir = @${MKDIR_P} ${buildinfodir} | |||
| 177 | 311 | ||
| 178 | gfdl = ${srcdir}/doclicense.texi | 312 | gfdl = ${srcdir}/doclicense.texi |
| 179 | 313 | ||
| 180 | .PHONY: info dvi pdf echo-info | 314 | .PHONY: info dvi html pdf ps echo-info |
| 181 | ## Prevent implicit rule triggering for foo.info. | 315 | ## Prevent implicit rule triggering for foo.info. |
| 182 | .SUFFIXES: | 316 | .SUFFIXES: |
| 183 | 317 | ||
| 318 | .SUFFIXES: .ps .dvi | ||
| 319 | |||
| 320 | .dvi.ps: | ||
| 321 | $(DVIPS) -o $@ $< | ||
| 322 | |||
| 184 | # Default. | 323 | # Default. |
| 185 | info: $(INFO_TARGETS) | 324 | info: $(INFO_TARGETS) |
| 186 | 325 | ||
| @@ -196,529 +335,700 @@ webhack: clean | |||
| 196 | 335 | ||
| 197 | dvi: $(DVI_TARGETS) | 336 | dvi: $(DVI_TARGETS) |
| 198 | 337 | ||
| 338 | html: $(HTML_TARGETS) | ||
| 339 | |||
| 199 | pdf: $(PDF_TARGETS) | 340 | pdf: $(PDF_TARGETS) |
| 200 | 341 | ||
| 342 | ps: $(PS_TARGETS) | ||
| 343 | |||
| 201 | # Note that all the Info targets build the Info files in srcdir. | 344 | # Note that all the Info targets build the Info files in srcdir. |
| 202 | # There is no provision for Info files to exist in the build directory. | 345 | # There is no provision for Info files to exist in the build directory. |
| 203 | # In a distribution of Emacs, the Info files should be up to date. | 346 | # In a distribution of Emacs, the Info files should be up to date. |
| 204 | 347 | ||
| 205 | # Note: "<" is not portable in ordinary make rules. | 348 | # Note: "<" is not portable in ordinary make rules. |
| 206 | 349 | ||
| 350 | ada_mode_deps = ${srcdir}/ada-mode.texi ${gfdl} | ||
| 207 | ada-mode : $(buildinfodir)/ada-mode$(INFO_EXT) | 351 | ada-mode : $(buildinfodir)/ada-mode$(INFO_EXT) |
| 208 | $(buildinfodir)/ada-mode$(INFO_EXT): ${srcdir}/ada-mode.texi ${gfdl} | 352 | $(buildinfodir)/ada-mode$(INFO_EXT): $(ada_mode_deps) |
| 209 | $(mkinfodir) | 353 | $(mkinfodir) |
| 210 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/ada-mode.texi | 354 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/ada-mode.texi |
| 211 | ada-mode.dvi: ${srcdir}/ada-mode.texi ${gfdl} | 355 | ada-mode.dvi: $(ada_mode_deps) |
| 212 | $(ENVADD) $(TEXI2DVI) ${srcdir}/ada-mode.texi | 356 | $(ENVADD) $(TEXI2DVI) ${srcdir}/ada-mode.texi |
| 213 | ada-mode.pdf: ${srcdir}/ada-mode.texi ${gfdl} | 357 | ada-mode.pdf: $(ada_mode_deps) |
| 214 | $(ENVADD) $(TEXI2PDF) ${srcdir}/ada-mode.texi | 358 | $(ENVADD) $(TEXI2PDF) ${srcdir}/ada-mode.texi |
| 359 | ada-mode.html: $(ada_mode_deps) | ||
| 360 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/ada-mode.texi | ||
| 215 | 361 | ||
| 362 | auth_deps = ${srcdir}/auth.texi ${gfdl} | ||
| 216 | auth : $(buildinfodir)/auth$(INFO_EXT) | 363 | auth : $(buildinfodir)/auth$(INFO_EXT) |
| 217 | $(buildinfodir)/auth$(INFO_EXT): ${srcdir}/auth.texi ${gfdl} | 364 | $(buildinfodir)/auth$(INFO_EXT): $(auth_deps) |
| 218 | $(mkinfodir) | 365 | $(mkinfodir) |
| 219 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/auth.texi | 366 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/auth.texi |
| 220 | auth.dvi: ${srcdir}/auth.texi ${gfdl} | 367 | auth.dvi: $(auth_deps) |
| 221 | $(ENVADD) $(TEXI2DVI) ${srcdir}/auth.texi | 368 | $(ENVADD) $(TEXI2DVI) ${srcdir}/auth.texi |
| 222 | auth.pdf: ${srcdir}/auth.texi ${gfdl} | 369 | auth.pdf: $(auth_deps) |
| 223 | $(ENVADD) $(TEXI2PDF) ${srcdir}/auth.texi | 370 | $(ENVADD) $(TEXI2PDF) ${srcdir}/auth.texi |
| 371 | auth.html: $(auth_deps) | ||
| 372 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/auth.texi | ||
| 224 | 373 | ||
| 374 | autotype_deps = ${srcdir}/autotype.texi ${gfdl} | ||
| 225 | autotype : $(buildinfodir)/autotype$(INFO_EXT) | 375 | autotype : $(buildinfodir)/autotype$(INFO_EXT) |
| 226 | $(buildinfodir)/autotype$(INFO_EXT): ${srcdir}/autotype.texi ${gfdl} | 376 | $(buildinfodir)/autotype$(INFO_EXT): $(autotype_deps) |
| 227 | $(mkinfodir) | 377 | $(mkinfodir) |
| 228 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/autotype.texi | 378 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/autotype.texi |
| 229 | autotype.dvi: ${srcdir}/autotype.texi ${gfdl} | 379 | autotype.dvi: $(autotype_deps) |
| 230 | $(ENVADD) $(TEXI2DVI) ${srcdir}/autotype.texi | 380 | $(ENVADD) $(TEXI2DVI) ${srcdir}/autotype.texi |
| 231 | autotype.pdf: ${srcdir}/autotype.texi ${gfdl} | 381 | autotype.pdf: $(autotype_deps) |
| 232 | $(ENVADD) $(TEXI2PDF) ${srcdir}/autotype.texi | 382 | $(ENVADD) $(TEXI2PDF) ${srcdir}/autotype.texi |
| 383 | autotype.html: $(autotype_deps) | ||
| 384 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/autotype.texi | ||
| 233 | 385 | ||
| 386 | bovine_deps = ${srcdir}/bovine.texi ${gfdl} | ||
| 234 | bovine : $(buildinfodir)/bovine$(INFO_EXT) | 387 | bovine : $(buildinfodir)/bovine$(INFO_EXT) |
| 235 | $(buildinfodir)/bovine$(INFO_EXT): ${srcdir}/bovine.texi ${gfdl} | 388 | $(buildinfodir)/bovine$(INFO_EXT): $(bovine_deps) |
| 236 | $(mkinfodir) | 389 | $(mkinfodir) |
| 237 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/bovine.texi | 390 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/bovine.texi |
| 238 | bovine.dvi: ${srcdir}/bovine.texi ${gfdl} | 391 | bovine.dvi: $(bovine_deps) |
| 239 | $(ENVADD) $(TEXI2DVI) ${srcdir}/bovine.texi | 392 | $(ENVADD) $(TEXI2DVI) ${srcdir}/bovine.texi |
| 240 | bovine.pdf: ${srcdir}/bovine.texi ${gfdl} | 393 | bovine.pdf: $(bovine_deps) |
| 241 | $(ENVADD) $(TEXI2PDF) ${srcdir}/bovine.texi | 394 | $(ENVADD) $(TEXI2PDF) ${srcdir}/bovine.texi |
| 395 | bovine.html: $(bovine_deps) | ||
| 396 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/bovine.texi | ||
| 242 | 397 | ||
| 398 | calc_deps = ${srcdir}/calc.texi $(emacsdir)/emacsver.texi ${gfdl} | ||
| 243 | calc : $(buildinfodir)/calc$(INFO_EXT) | 399 | calc : $(buildinfodir)/calc$(INFO_EXT) |
| 244 | $(buildinfodir)/calc$(INFO_EXT): ${srcdir}/calc.texi $(emacsdir)/emacsver.texi ${gfdl} | 400 | $(buildinfodir)/calc$(INFO_EXT): $(calc_deps) |
| 245 | $(mkinfodir) | 401 | $(mkinfodir) |
| 246 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/calc.texi | 402 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/calc.texi |
| 247 | calc.dvi: ${srcdir}/calc.texi $(emacsdir)/emacsver.texi ${gfdl} | 403 | calc.dvi: $(calc_deps) |
| 248 | $(ENVADD) $(TEXI2DVI) ${srcdir}/calc.texi | 404 | $(ENVADD) $(TEXI2DVI) ${srcdir}/calc.texi |
| 249 | calc.pdf: ${srcdir}/calc.texi $(emacsdir)/emacsver.texi ${gfdl} | 405 | calc.pdf: $(calc_deps) |
| 250 | $(ENVADD) $(TEXI2PDF) ${srcdir}/calc.texi | 406 | $(ENVADD) $(TEXI2PDF) ${srcdir}/calc.texi |
| 407 | calc.html: $(calc_deps) | ||
| 408 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/calc.texi | ||
| 251 | 409 | ||
| 410 | ccmode_deps = ${srcdir}/cc-mode.texi ${gfdl} | ||
| 252 | ccmode : $(buildinfodir)/ccmode$(INFO_EXT) | 411 | ccmode : $(buildinfodir)/ccmode$(INFO_EXT) |
| 253 | $(buildinfodir)/ccmode$(INFO_EXT): ${srcdir}/cc-mode.texi ${gfdl} | 412 | $(buildinfodir)/ccmode$(INFO_EXT): $(cc_mode_deps) |
| 254 | $(mkinfodir) | 413 | $(mkinfodir) |
| 255 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/cc-mode.texi | 414 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/cc-mode.texi |
| 256 | cc-mode.dvi: ${srcdir}/cc-mode.texi ${gfdl} | 415 | cc-mode.dvi: $(cc_mode_deps) |
| 257 | $(ENVADD) $(TEXI2DVI) ${srcdir}/cc-mode.texi | 416 | $(ENVADD) $(TEXI2DVI) ${srcdir}/cc-mode.texi |
| 258 | cc-mode.pdf: ${srcdir}/cc-mode.texi ${gfdl} | 417 | cc-mode.pdf: $(cc_mode_deps) |
| 259 | $(ENVADD) $(TEXI2PDF) ${srcdir}/cc-mode.texi | 418 | $(ENVADD) $(TEXI2PDF) ${srcdir}/cc-mode.texi |
| 419 | cc-mode.html: $(cc_mode_deps) | ||
| 420 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/cc-mode.texi | ||
| 260 | 421 | ||
| 422 | cl_deps = ${srcdir}/cl.texi $(emacsdir)/emacsver.texi ${gfdl} | ||
| 261 | cl : $(buildinfodir)/cl$(INFO_EXT) | 423 | cl : $(buildinfodir)/cl$(INFO_EXT) |
| 262 | $(buildinfodir)/cl$(INFO_EXT): ${srcdir}/cl.texi $(emacsdir)/emacsver.texi ${gfdl} | 424 | $(buildinfodir)/cl$(INFO_EXT): $(cl_deps) |
| 263 | $(mkinfodir) | 425 | $(mkinfodir) |
| 264 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/cl.texi | 426 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/cl.texi |
| 265 | cl.dvi: ${srcdir}/cl.texi $(emacsdir)/emacsver.texi ${gfdl} | 427 | cl.dvi: $(cl_deps) |
| 266 | $(ENVADD) $(TEXI2DVI) ${srcdir}/cl.texi | 428 | $(ENVADD) $(TEXI2DVI) ${srcdir}/cl.texi |
| 267 | cl.pdf: ${srcdir}/cl.texi $(emacsdir)/emacsver.texi ${gfdl} | 429 | cl.pdf: $(cl_deps) |
| 268 | $(ENVADD) $(TEXI2PDF) ${srcdir}/cl.texi | 430 | $(ENVADD) $(TEXI2PDF) ${srcdir}/cl.texi |
| 431 | cl.html: $(cl_deps) | ||
| 432 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/cl.texi | ||
| 269 | 433 | ||
| 434 | dbus_deps = ${srcdir}/dbus.texi ${gfdl} | ||
| 270 | dbus : $(buildinfodir)/dbus$(INFO_EXT) | 435 | dbus : $(buildinfodir)/dbus$(INFO_EXT) |
| 271 | $(buildinfodir)/dbus$(INFO_EXT): ${srcdir}/dbus.texi ${gfdl} | 436 | $(buildinfodir)/dbus$(INFO_EXT): $(dbus_deps) |
| 272 | $(mkinfodir) | 437 | $(mkinfodir) |
| 273 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/dbus.texi | 438 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/dbus.texi |
| 274 | dbus.dvi: ${srcdir}/dbus.texi ${gfdl} | 439 | dbus.dvi: $(dbus_deps) |
| 275 | $(ENVADD) $(TEXI2DVI) ${srcdir}/dbus.texi | 440 | $(ENVADD) $(TEXI2DVI) ${srcdir}/dbus.texi |
| 276 | dbus.pdf: ${srcdir}/dbus.texi ${gfdl} | 441 | dbus.pdf: $(dbus_deps) |
| 277 | $(ENVADD) $(TEXI2PDF) ${srcdir}/dbus.texi | 442 | $(ENVADD) $(TEXI2PDF) ${srcdir}/dbus.texi |
| 443 | dbus.html: $(dbus_deps) | ||
| 444 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/dbus.texi | ||
| 278 | 445 | ||
| 446 | dired_x_deps = ${srcdir}/dired-x.texi $(emacsdir)/emacsver.texi ${gfdl} | ||
| 279 | dired-x : $(buildinfodir)/dired-x$(INFO_EXT) | 447 | dired-x : $(buildinfodir)/dired-x$(INFO_EXT) |
| 280 | $(buildinfodir)/dired-x$(INFO_EXT): ${srcdir}/dired-x.texi $(emacsdir)/emacsver.texi ${gfdl} | 448 | $(buildinfodir)/dired-x$(INFO_EXT): $(dired_x_deps) |
| 281 | $(mkinfodir) | 449 | $(mkinfodir) |
| 282 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/dired-x.texi | 450 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/dired-x.texi |
| 283 | dired-x.dvi: ${srcdir}/dired-x.texi $(emacsdir)/emacsver.texi ${gfdl} | 451 | dired-x.dvi: $(dired_x_deps) |
| 284 | $(ENVADD) $(TEXI2DVI) ${srcdir}/dired-x.texi | 452 | $(ENVADD) $(TEXI2DVI) ${srcdir}/dired-x.texi |
| 285 | dired-x.pdf: ${srcdir}/dired-x.texi $(emacsdir)/emacsver.texi ${gfdl} | 453 | dired-x.pdf: $(dired_x_deps) |
| 286 | $(ENVADD) $(TEXI2PDF) ${srcdir}/dired-x.texi | 454 | $(ENVADD) $(TEXI2PDF) ${srcdir}/dired-x.texi |
| 455 | dired-x.html: $(dired_x_deps) | ||
| 456 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/dired-x.texi | ||
| 287 | 457 | ||
| 458 | ebrowse_deps = ${srcdir}/ebrowse.texi ${gfdl} | ||
| 288 | ebrowse : $(buildinfodir)/ebrowse$(INFO_EXT) | 459 | ebrowse : $(buildinfodir)/ebrowse$(INFO_EXT) |
| 289 | $(buildinfodir)/ebrowse$(INFO_EXT): ${srcdir}/ebrowse.texi ${gfdl} | 460 | $(buildinfodir)/ebrowse$(INFO_EXT): $(ebrowse_deps) |
| 290 | $(mkinfodir) | 461 | $(mkinfodir) |
| 291 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/ebrowse.texi | 462 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/ebrowse.texi |
| 292 | ebrowse.dvi: ${srcdir}/ebrowse.texi ${gfdl} | 463 | ebrowse.dvi: $(ebrowse_deps) |
| 293 | $(ENVADD) $(TEXI2DVI) ${srcdir}/ebrowse.texi | 464 | $(ENVADD) $(TEXI2DVI) ${srcdir}/ebrowse.texi |
| 294 | ebrowse.pdf: ${srcdir}/ebrowse.texi ${gfdl} | 465 | ebrowse.pdf: $(ebrowse_deps) |
| 295 | $(ENVADD) $(TEXI2PDF) ${srcdir}/ebrowse.texi | 466 | $(ENVADD) $(TEXI2PDF) ${srcdir}/ebrowse.texi |
| 467 | ebrowse.html: $(ebrowse_deps) | ||
| 468 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/ebrowse.texi | ||
| 296 | 469 | ||
| 470 | ede_deps = ${srcdir}/ede.texi ${gfdl} | ||
| 297 | ede : $(buildinfodir)/ede$(INFO_EXT) | 471 | ede : $(buildinfodir)/ede$(INFO_EXT) |
| 298 | $(buildinfodir)/ede$(INFO_EXT): ${srcdir}/ede.texi ${gfdl} | 472 | $(buildinfodir)/ede$(INFO_EXT): $(ede_deps) |
| 299 | $(mkinfodir) | 473 | $(mkinfodir) |
| 300 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/ede.texi | 474 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/ede.texi |
| 301 | ede.dvi: ${srcdir}/ede.texi ${gfdl} | 475 | ede.dvi: $(ede_deps) |
| 302 | $(ENVADD) $(TEXI2DVI) ${srcdir}/ede.texi | 476 | $(ENVADD) $(TEXI2DVI) ${srcdir}/ede.texi |
| 303 | ede.pdf: ${srcdir}/ede.texi ${gfdl} | 477 | ede.pdf: $(ede_deps) |
| 304 | $(ENVADD) $(TEXI2PDF) ${srcdir}/ede.texi | 478 | $(ENVADD) $(TEXI2PDF) ${srcdir}/ede.texi |
| 479 | ede.html: $(ede_deps) | ||
| 480 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/ede.texi | ||
| 305 | 481 | ||
| 482 | ediff_deps = ${srcdir}/ediff.texi ${gfdl} | ||
| 306 | ediff : $(buildinfodir)/ediff$(INFO_EXT) | 483 | ediff : $(buildinfodir)/ediff$(INFO_EXT) |
| 307 | $(buildinfodir)/ediff$(INFO_EXT): ${srcdir}/ediff.texi ${gfdl} | 484 | $(buildinfodir)/ediff$(INFO_EXT): $(ediff_deps) |
| 308 | $(mkinfodir) | 485 | $(mkinfodir) |
| 309 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/ediff.texi | 486 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/ediff.texi |
| 310 | ediff.dvi: ${srcdir}/ediff.texi ${gfdl} | 487 | ediff.dvi: $(ediff_deps) |
| 311 | $(ENVADD) $(TEXI2DVI) ${srcdir}/ediff.texi | 488 | $(ENVADD) $(TEXI2DVI) ${srcdir}/ediff.texi |
| 312 | ediff.pdf: ${srcdir}/ediff.texi ${gfdl} | 489 | ediff.pdf: $(ediff_deps) |
| 313 | $(ENVADD) $(TEXI2PDF) ${srcdir}/ediff.texi | 490 | $(ENVADD) $(TEXI2PDF) ${srcdir}/ediff.texi |
| 491 | ediff.html: $(ediff_deps) | ||
| 492 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/ediff.texi | ||
| 314 | 493 | ||
| 494 | edt_deps = ${srcdir}/edt.texi ${gfdl} | ||
| 315 | edt : $(buildinfodir)/edt$(INFO_EXT) | 495 | edt : $(buildinfodir)/edt$(INFO_EXT) |
| 316 | $(buildinfodir)/edt$(INFO_EXT): ${srcdir}/edt.texi ${gfdl} | 496 | $(buildinfodir)/edt$(INFO_EXT): $(edt_deps) |
| 317 | $(mkinfodir) | 497 | $(mkinfodir) |
| 318 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/edt.texi | 498 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/edt.texi |
| 319 | edt.dvi: ${srcdir}/edt.texi ${gfdl} | 499 | edt.dvi: $(edt_deps) |
| 320 | $(ENVADD) $(TEXI2DVI) ${srcdir}/edt.texi | 500 | $(ENVADD) $(TEXI2DVI) ${srcdir}/edt.texi |
| 321 | edt.pdf: ${srcdir}/edt.texi ${gfdl} | 501 | edt.pdf: $(edt_deps) |
| 322 | $(ENVADD) $(TEXI2PDF) ${srcdir}/edt.texi | 502 | $(ENVADD) $(TEXI2PDF) ${srcdir}/edt.texi |
| 503 | edt.html: $(edt_deps) | ||
| 504 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/edt.texi | ||
| 323 | 505 | ||
| 506 | eieio_deps = ${srcdir}/eieio.texi ${gfdl} | ||
| 324 | eieio : $(buildinfodir)/eieio$(INFO_EXT) | 507 | eieio : $(buildinfodir)/eieio$(INFO_EXT) |
| 325 | $(buildinfodir)/eieio$(INFO_EXT): ${srcdir}/eieio.texi ${gfdl} | 508 | $(buildinfodir)/eieio$(INFO_EXT): $(eieio_deps) |
| 326 | $(mkinfodir) | 509 | $(mkinfodir) |
| 327 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/eieio.texi | 510 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/eieio.texi |
| 328 | eieio.dvi: ${srcdir}/eieio.texi ${gfdl} | 511 | eieio.dvi: $(eieio_deps) |
| 329 | $(ENVADD) $(TEXI2DVI) ${srcdir}/eieio.texi | 512 | $(ENVADD) $(TEXI2DVI) ${srcdir}/eieio.texi |
| 330 | eieio.pdf: ${srcdir}/eieio.texi ${gfdl} | 513 | eieio.pdf: $(eieio_deps) |
| 331 | $(ENVADD) $(TEXI2PDF) ${srcdir}/eieio.texi | 514 | $(ENVADD) $(TEXI2PDF) ${srcdir}/eieio.texi |
| 515 | eieio.html: $(eieio_deps) | ||
| 516 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/eieio.texi | ||
| 332 | 517 | ||
| 518 | emacs_gnutls_deps = ${srcdir}/emacs-gnutls.texi ${gfdl} | ||
| 333 | emacs-gnutls : $(buildinfodir)/emacs-gnutls$(INFO_EXT) | 519 | emacs-gnutls : $(buildinfodir)/emacs-gnutls$(INFO_EXT) |
| 334 | $(buildinfodir)/emacs-gnutls$(INFO_EXT): ${srcdir}/emacs-gnutls.texi ${gfdl} | 520 | $(buildinfodir)/emacs-gnutls$(INFO_EXT): $(emacs_gnutls_deps) |
| 335 | $(mkinfodir) | 521 | $(mkinfodir) |
| 336 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/emacs-gnutls.texi | 522 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/emacs-gnutls.texi |
| 337 | emacs-gnutls.dvi: ${srcdir}/emacs-gnutls.texi ${gfdl} | 523 | emacs-gnutls.dvi: $(emacs_gnutls_deps) |
| 338 | $(ENVADD) $(TEXI2DVI) ${srcdir}/emacs-gnutls.texi | 524 | $(ENVADD) $(TEXI2DVI) ${srcdir}/emacs-gnutls.texi |
| 339 | emacs-gnutls.pdf: ${srcdir}/emacs-gnutls.texi ${gfdl} | 525 | emacs-gnutls.pdf: $(emacs_gnutls_deps) |
| 340 | $(ENVADD) $(TEXI2PDF) ${srcdir}/emacs-gnutls.texi | 526 | $(ENVADD) $(TEXI2PDF) ${srcdir}/emacs-gnutls.texi |
| 527 | emacs-gnutls.html: $(emacs_gnutls_deps) | ||
| 528 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/emacs-gnutls.texi | ||
| 341 | 529 | ||
| 530 | emacs_mime_deps = ${srcdir}/emacs-mime.texi ${gfdl} | ||
| 342 | emacs-mime : $(buildinfodir)/emacs-mime$(INFO_EXT) | 531 | emacs-mime : $(buildinfodir)/emacs-mime$(INFO_EXT) |
| 343 | $(buildinfodir)/emacs-mime$(INFO_EXT): ${srcdir}/emacs-mime.texi ${gfdl} | 532 | $(buildinfodir)/emacs-mime$(INFO_EXT): $(emacs_mime_deps) |
| 344 | $(mkinfodir) | 533 | $(mkinfodir) |
| 345 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) --enable-encoding -o $@ ${srcdir}/emacs-mime.texi | 534 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) --enable-encoding -o $@ ${srcdir}/emacs-mime.texi |
| 346 | emacs-mime.dvi: ${srcdir}/emacs-mime.texi ${gfdl} | 535 | emacs-mime.dvi: $(emacs_mime_deps) |
| 347 | $(ENVADD) $(TEXI2DVI) ${srcdir}/emacs-mime.texi | 536 | $(ENVADD) $(TEXI2DVI) ${srcdir}/emacs-mime.texi |
| 348 | emacs-mime.pdf: ${srcdir}/emacs-mime.texi ${gfdl} | 537 | emacs-mime.pdf: $(emacs_mime_deps) |
| 349 | $(ENVADD) $(TEXI2PDF) ${srcdir}/emacs-mime.texi | 538 | $(ENVADD) $(TEXI2PDF) ${srcdir}/emacs-mime.texi |
| 539 | emacs-mime.html: $(emacs_mime_deps) | ||
| 540 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) --enable-encoding -o $@ ${srcdir}/emacs-mime.texi | ||
| 350 | 541 | ||
| 542 | epa_deps = ${srcdir}/epa.texi ${gfdl} | ||
| 351 | epa : $(buildinfodir)/epa$(INFO_EXT) | 543 | epa : $(buildinfodir)/epa$(INFO_EXT) |
| 352 | $(buildinfodir)/epa$(INFO_EXT): ${srcdir}/epa.texi ${gfdl} | 544 | $(buildinfodir)/epa$(INFO_EXT): $(epa_deps) |
| 353 | $(mkinfodir) | 545 | $(mkinfodir) |
| 354 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/epa.texi | 546 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/epa.texi |
| 355 | epa.dvi: ${srcdir}/epa.texi ${gfdl} | 547 | epa.dvi: $(epa_deps) |
| 356 | $(ENVADD) $(TEXI2DVI) ${srcdir}/epa.texi | 548 | $(ENVADD) $(TEXI2DVI) ${srcdir}/epa.texi |
| 357 | epa.pdf: ${srcdir}/epa.texi ${gfdl} | 549 | epa.pdf: $(epa_deps) |
| 358 | $(ENVADD) $(TEXI2PDF) ${srcdir}/epa.texi | 550 | $(ENVADD) $(TEXI2PDF) ${srcdir}/epa.texi |
| 551 | epa.html: $(epa_deps) | ||
| 552 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/epa.texi | ||
| 359 | 553 | ||
| 554 | erc_deps = ${srcdir}/erc.texi $(emacsdir)/emacsver.texi ${gfdl} | ||
| 360 | erc : $(buildinfodir)/erc$(INFO_EXT) | 555 | erc : $(buildinfodir)/erc$(INFO_EXT) |
| 361 | $(buildinfodir)/erc$(INFO_EXT): ${srcdir}/erc.texi $(emacsdir)/emacsver.texi ${gfdl} | 556 | $(buildinfodir)/erc$(INFO_EXT): $(erc_deps) |
| 362 | $(mkinfodir) | 557 | $(mkinfodir) |
| 363 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/erc.texi | 558 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/erc.texi |
| 364 | erc.dvi: ${srcdir}/erc.texi $(emacsdir)/emacsver.texi ${gfdl} | 559 | erc.dvi: $(erc_deps) |
| 365 | $(ENVADD) $(TEXI2DVI) ${srcdir}/erc.texi | 560 | $(ENVADD) $(TEXI2DVI) ${srcdir}/erc.texi |
| 366 | erc.pdf: ${srcdir}/erc.texi $(emacsdir)/emacsver.texi ${gfdl} | 561 | erc.pdf: $(erc_deps) |
| 367 | $(ENVADD) $(TEXI2PDF) ${srcdir}/erc.texi | 562 | $(ENVADD) $(TEXI2PDF) ${srcdir}/erc.texi |
| 563 | erc.html: $(erc_deps) | ||
| 564 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/erc.texi | ||
| 368 | 565 | ||
| 566 | ert_deps = ${srcdir}/ert.texi ${gfdl} | ||
| 369 | ert : $(buildinfodir)/ert$(INFO_EXT) | 567 | ert : $(buildinfodir)/ert$(INFO_EXT) |
| 370 | $(buildinfodir)/ert$(INFO_EXT): ${srcdir}/ert.texi ${gfdl} | 568 | $(buildinfodir)/ert$(INFO_EXT): $(ert_deps) |
| 371 | $(mkinfodir) | 569 | $(mkinfodir) |
| 372 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/ert.texi | 570 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/ert.texi |
| 373 | ert.dvi: ${srcdir}/ert.texi ${gfdl} | 571 | ert.dvi: $(ert_deps) |
| 374 | $(ENVADD) $(TEXI2DVI) ${srcdir}/ert.texi | 572 | $(ENVADD) $(TEXI2DVI) ${srcdir}/ert.texi |
| 375 | ert.pdf: ${srcdir}/ert.texi ${gfdl} | 573 | ert.pdf: $(ert_deps) |
| 376 | $(ENVADD) $(TEXI2PDF) ${srcdir}/ert.texi | 574 | $(ENVADD) $(TEXI2PDF) ${srcdir}/ert.texi |
| 575 | ert.html: $(ert_deps) | ||
| 576 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/ert.texi | ||
| 377 | 577 | ||
| 578 | eshell_deps = ${srcdir}/eshell.texi ${gfdl} | ||
| 378 | eshell : $(buildinfodir)/eshell$(INFO_EXT) | 579 | eshell : $(buildinfodir)/eshell$(INFO_EXT) |
| 379 | $(buildinfodir)/eshell$(INFO_EXT): ${srcdir}/eshell.texi ${gfdl} | 580 | $(buildinfodir)/eshell$(INFO_EXT): $(eshell_deps) |
| 380 | $(mkinfodir) | 581 | $(mkinfodir) |
| 381 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/eshell.texi | 582 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/eshell.texi |
| 382 | eshell.dvi: ${srcdir}/eshell.texi ${gfdl} | 583 | eshell.dvi: $(eshell_deps) |
| 383 | $(ENVADD) $(TEXI2DVI) ${srcdir}/eshell.texi | 584 | $(ENVADD) $(TEXI2DVI) ${srcdir}/eshell.texi |
| 384 | eshell.pdf: ${srcdir}/eshell.texi ${gfdl} | 585 | eshell.pdf: $(eshell_deps) |
| 385 | $(ENVADD) $(TEXI2PDF) ${srcdir}/eshell.texi | 586 | $(ENVADD) $(TEXI2PDF) ${srcdir}/eshell.texi |
| 587 | eshell.html: $(eshell_deps) | ||
| 588 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/eshell.texi | ||
| 386 | 589 | ||
| 590 | eudc_deps = ${srcdir}/eudc.texi ${gfdl} | ||
| 387 | eudc : $(buildinfodir)/eudc$(INFO_EXT) | 591 | eudc : $(buildinfodir)/eudc$(INFO_EXT) |
| 388 | $(buildinfodir)/eudc$(INFO_EXT): ${srcdir}/eudc.texi ${gfdl} | 592 | $(buildinfodir)/eudc$(INFO_EXT): $(eudc_deps) |
| 389 | $(mkinfodir) | 593 | $(mkinfodir) |
| 390 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/eudc.texi | 594 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/eudc.texi |
| 391 | eudc.dvi: ${srcdir}/eudc.texi ${gfdl} | 595 | eudc.dvi: $(eudc_deps) |
| 392 | $(ENVADD) $(TEXI2DVI) ${srcdir}/eudc.texi | 596 | $(ENVADD) $(TEXI2DVI) ${srcdir}/eudc.texi |
| 393 | eudc.pdf: ${srcdir}/eudc.texi ${gfdl} | 597 | eudc.pdf: $(eudc_deps) |
| 394 | $(ENVADD) $(TEXI2PDF) ${srcdir}/eudc.texi | 598 | $(ENVADD) $(TEXI2PDF) ${srcdir}/eudc.texi |
| 599 | eudc.html: $(eudc_deps) | ||
| 600 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/eudc.texi | ||
| 395 | 601 | ||
| 396 | ## No gfdl dependency. | 602 | ## No gfdl dependency. |
| 603 | faq_deps = ${srcdir}/faq.texi $(emacsdir)/emacsver.texi | ||
| 397 | efaq : $(buildinfodir)/efaq$(INFO_EXT) | 604 | efaq : $(buildinfodir)/efaq$(INFO_EXT) |
| 398 | $(buildinfodir)/efaq$(INFO_EXT): ${srcdir}/faq.texi $(emacsdir)/emacsver.texi | 605 | $(buildinfodir)/efaq$(INFO_EXT): $(faq_deps) |
| 399 | $(mkinfodir) | 606 | $(mkinfodir) |
| 400 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/faq.texi | 607 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/faq.texi |
| 401 | faq.dvi: ${srcdir}/faq.texi $(emacsdir)/emacsver.texi | 608 | faq.dvi: $(faq_deps) |
| 402 | $(ENVADD) $(TEXI2DVI) ${srcdir}/faq.texi | 609 | $(ENVADD) $(TEXI2DVI) ${srcdir}/faq.texi |
| 403 | faq.pdf: ${srcdir}/faq.texi $(emacsdir)/emacsver.texi | 610 | faq.pdf: $(faq_deps) |
| 404 | $(ENVADD) $(TEXI2PDF) ${srcdir}/faq.texi | 611 | $(ENVADD) $(TEXI2PDF) ${srcdir}/faq.texi |
| 612 | faq.html: $(faq_deps) | ||
| 613 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/faq.texi | ||
| 405 | 614 | ||
| 615 | flymake_deps = ${srcdir}/flymake.texi ${gfdl} | ||
| 406 | flymake : $(buildinfodir)/flymake$(INFO_EXT) | 616 | flymake : $(buildinfodir)/flymake$(INFO_EXT) |
| 407 | $(buildinfodir)/flymake$(INFO_EXT): ${srcdir}/flymake.texi ${gfdl} | 617 | $(buildinfodir)/flymake$(INFO_EXT): $(flymake_deps) |
| 408 | $(mkinfodir) | 618 | $(mkinfodir) |
| 409 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/flymake.texi | 619 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/flymake.texi |
| 410 | flymake.dvi: ${srcdir}/flymake.texi ${gfdl} | 620 | flymake.dvi: $(flymake_deps) |
| 411 | $(ENVADD) $(TEXI2DVI) ${srcdir}/flymake.texi | 621 | $(ENVADD) $(TEXI2DVI) ${srcdir}/flymake.texi |
| 412 | flymake.pdf: ${srcdir}/flymake.texi ${gfdl} | 622 | flymake.pdf: $(flymake_deps) |
| 413 | $(ENVADD) $(TEXI2PDF) ${srcdir}/flymake.texi | 623 | $(ENVADD) $(TEXI2PDF) ${srcdir}/flymake.texi |
| 624 | flymake.html: $(flymake_deps) | ||
| 625 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/flymake.texi | ||
| 414 | 626 | ||
| 627 | forms_deps = ${srcdir}/forms.texi ${gfdl} | ||
| 415 | forms : $(buildinfodir)/forms$(INFO_EXT) | 628 | forms : $(buildinfodir)/forms$(INFO_EXT) |
| 416 | $(buildinfodir)/forms$(INFO_EXT): ${srcdir}/forms.texi ${gfdl} | 629 | $(buildinfodir)/forms$(INFO_EXT): $(forms_deps) |
| 417 | $(mkinfodir) | 630 | $(mkinfodir) |
| 418 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/forms.texi | 631 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/forms.texi |
| 419 | forms.dvi: ${srcdir}/forms.texi ${gfdl} | 632 | forms.dvi: $(forms_deps) |
| 420 | $(ENVADD) $(TEXI2DVI) ${srcdir}/forms.texi | 633 | $(ENVADD) $(TEXI2DVI) ${srcdir}/forms.texi |
| 421 | forms.pdf: ${srcdir}/forms.texi ${gfdl} | 634 | forms.pdf: $(forms_deps) |
| 422 | $(ENVADD) $(TEXI2PDF) ${srcdir}/forms.texi | 635 | $(ENVADD) $(TEXI2PDF) ${srcdir}/forms.texi |
| 636 | forms.html: $(forms_deps) | ||
| 637 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/forms.texi | ||
| 423 | 638 | ||
| 424 | # gnus/message/emacs-mime/sieve/pgg are part of Gnus: | 639 | ## gnus/message/emacs-mime/sieve/pgg are part of Gnus. |
| 640 | gnus_deps = ${srcdir}/gnus.texi ${srcdir}/gnus-faq.texi ${gfdl} | ||
| 425 | gnus : $(buildinfodir)/gnus$(INFO_EXT) | 641 | gnus : $(buildinfodir)/gnus$(INFO_EXT) |
| 426 | $(buildinfodir)/gnus$(INFO_EXT): ${srcdir}/gnus.texi ${srcdir}/gnus-faq.texi ${gfdl} | 642 | $(buildinfodir)/gnus$(INFO_EXT): $(gnus_deps) |
| 427 | $(mkinfodir) | 643 | $(mkinfodir) |
| 428 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/gnus.texi | 644 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/gnus.texi |
| 429 | gnus.dvi: ${srcdir}/gnus.texi ${srcdir}/gnus-faq.texi ${gfdl} | 645 | gnus.dvi: $(gnus_deps) |
| 430 | sed -e '/@iflatex/,/@end iflatex/d' ${srcdir}/gnus.texi > gnustmp.texi | 646 | sed -e '/@iflatex/,/@end iflatex/d' ${srcdir}/gnus.texi > gnustmp.texi |
| 431 | $(ENVADD) $(TEXI2DVI) gnustmp.texi | 647 | $(ENVADD) $(TEXI2DVI) gnustmp.texi |
| 432 | cp gnustmp.dvi $@ | 648 | cp gnustmp.dvi $@ |
| 433 | rm gnustmp.* | 649 | rm gnustmp.* |
| 434 | gnus.pdf: ${srcdir}/gnus.texi ${srcdir}/gnus-faq.texi ${gfdl} | 650 | gnus.pdf: $(gnus_deps) |
| 435 | sed -e '/@iflatex/,/@end iflatex/d' ${srcdir}/gnus.texi > gnustmp.texi | 651 | sed -e '/@iflatex/,/@end iflatex/d' ${srcdir}/gnus.texi > gnustmp.texi |
| 436 | $(ENVADD) $(TEXI2PDF) gnustmp.texi | 652 | $(ENVADD) $(TEXI2PDF) gnustmp.texi |
| 437 | cp gnustmp.pdf $@ | 653 | cp gnustmp.pdf $@ |
| 438 | rm gnustmp.* | 654 | rm gnustmp.* |
| 655 | gnus.html: $(gnus_deps) | ||
| 656 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/gnus.texi | ||
| 439 | 657 | ||
| 658 | htmlfontify_deps = ${srcdir}/htmlfontify.texi ${gfdl} | ||
| 440 | htmlfontify : $(buildinfodir)/htmlfontify$(INFO_EXT) | 659 | htmlfontify : $(buildinfodir)/htmlfontify$(INFO_EXT) |
| 441 | $(buildinfodir)/htmlfontify$(INFO_EXT): ${srcdir}/htmlfontify.texi ${gfdl} | 660 | $(buildinfodir)/htmlfontify$(INFO_EXT): $(htmlfontify_deps) |
| 442 | $(mkinfodir) | 661 | $(mkinfodir) |
| 443 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/htmlfontify.texi | 662 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/htmlfontify.texi |
| 444 | htmlfontify.dvi: ${srcdir}/htmlfontify.texi ${gfdl} | 663 | htmlfontify.dvi: $(htmlfontify_deps) |
| 445 | $(ENVADD) $(TEXI2DVI) ${srcdir}/htmlfontify.texi | 664 | $(ENVADD) $(TEXI2DVI) ${srcdir}/htmlfontify.texi |
| 446 | htmlfontify.pdf: ${srcdir}/htmlfontify.texi ${gfdl} | 665 | htmlfontify.pdf: $(htmlfontify_deps) |
| 447 | $(ENVADD) $(TEXI2PDF) ${srcdir}/htmlfontify.texi | 666 | $(ENVADD) $(TEXI2PDF) ${srcdir}/htmlfontify.texi |
| 667 | htmlfontify.html: $(htmlfontify_deps) | ||
| 668 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/htmlfontify.texi | ||
| 448 | 669 | ||
| 449 | # NB this one needs --no-split even without a .info extension. | 670 | idlwave_deps = ${srcdir}/idlwave.texi ${gfdl} |
| 450 | idlwave : $(buildinfodir)/idlwave$(INFO_EXT) | 671 | idlwave : $(buildinfodir)/idlwave$(INFO_EXT) |
| 451 | $(buildinfodir)/idlwave$(INFO_EXT): ${srcdir}/idlwave.texi ${gfdl} | 672 | # NB this one needs --no-split even without a .info extension. |
| 673 | $(buildinfodir)/idlwave$(INFO_EXT): $(idlwave_deps) | ||
| 452 | $(mkinfodir) | 674 | $(mkinfodir) |
| 453 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/idlwave.texi | 675 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/idlwave.texi |
| 454 | idlwave.dvi: ${srcdir}/idlwave.texi ${gfdl} | 676 | idlwave.dvi: $(idlwave_deps) |
| 455 | $(ENVADD) $(TEXI2DVI) ${srcdir}/idlwave.texi | 677 | $(ENVADD) $(TEXI2DVI) ${srcdir}/idlwave.texi |
| 456 | idlwave.pdf: ${srcdir}/idlwave.texi ${gfdl} | 678 | idlwave.pdf: $(idlwave_deps) |
| 457 | $(ENVADD) $(TEXI2PDF) ${srcdir}/idlwave.texi | 679 | $(ENVADD) $(TEXI2PDF) ${srcdir}/idlwave.texi |
| 680 | idlwave.html: $(idlwave_deps) | ||
| 681 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/idlwave.texi | ||
| 458 | 682 | ||
| 683 | ido_deps = ${srcdir}/ido.texi $(emacsdir)/emacsver.texi ${gfdl} | ||
| 459 | ido : $(buildinfodir)/ido$(INFO_EXT) | 684 | ido : $(buildinfodir)/ido$(INFO_EXT) |
| 460 | $(buildinfodir)/ido$(INFO_EXT): ${srcdir}/ido.texi $(emacsdir)/emacsver.texi ${gfdl} | 685 | $(buildinfodir)/ido$(INFO_EXT): $(ido_deps) |
| 461 | $(mkinfodir) | 686 | $(mkinfodir) |
| 462 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/ido.texi | 687 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/ido.texi |
| 463 | ido.dvi: ${srcdir}/ido.texi $(emacsdir)/emacsver.texi ${gfdl} | 688 | ido.dvi: $(ido_deps) |
| 464 | $(ENVADD) $(TEXI2DVI) ${srcdir}/ido.texi | 689 | $(ENVADD) $(TEXI2DVI) ${srcdir}/ido.texi |
| 465 | ido.pdf: ${srcdir}/ido.texi $(emacsdir)/emacsver.texi ${gfdl} | 690 | ido.pdf: $(ido_deps) |
| 466 | $(ENVADD) $(TEXI2PDF) ${srcdir}/ido.texi | 691 | $(ENVADD) $(TEXI2PDF) ${srcdir}/ido.texi |
| 692 | ido.html: $(ido_deps) | ||
| 693 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/ido.texi | ||
| 467 | 694 | ||
| 468 | # NB this one needs --no-split even without a .info extension. | 695 | info_deps = ${srcdir}/info.texi ${gfdl} |
| 469 | # Avoid name clash with overall "info" target. | 696 | # Avoid name clash with overall "info" target. |
| 470 | info.info : $(buildinfodir)/info$(INFO_EXT) | 697 | info.info : $(buildinfodir)/info$(INFO_EXT) |
| 471 | $(buildinfodir)/info$(INFO_EXT): ${srcdir}/info.texi ${gfdl} | 698 | # NB this one needs --no-split even without a .info extension. |
| 699 | $(buildinfodir)/info$(INFO_EXT): $(info_deps) | ||
| 472 | $(mkinfodir) | 700 | $(mkinfodir) |
| 473 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/info.texi | 701 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/info.texi |
| 474 | info.dvi: ${srcdir}/info.texi ${gfdl} | 702 | info.dvi: $(info_deps) |
| 475 | $(ENVADD) $(TEXI2DVI) ${srcdir}/info.texi | 703 | $(ENVADD) $(TEXI2DVI) ${srcdir}/info.texi |
| 476 | info.pdf: ${srcdir}/info.texi ${gfdl} | 704 | info.pdf: $(info_deps) |
| 477 | $(ENVADD) $(TEXI2PDF) ${srcdir}/info.texi | 705 | $(ENVADD) $(TEXI2PDF) ${srcdir}/info.texi |
| 706 | info.html: $(info_deps) | ||
| 707 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/info.texi | ||
| 478 | 708 | ||
| 709 | mairix_el_deps = ${srcdir}/mairix-el.texi ${gfdl} | ||
| 479 | mairix-el : $(buildinfodir)/mairix-el$(INFO_EXT) | 710 | mairix-el : $(buildinfodir)/mairix-el$(INFO_EXT) |
| 480 | $(buildinfodir)/mairix-el$(INFO_EXT): ${srcdir}/mairix-el.texi ${gfdl} | 711 | $(buildinfodir)/mairix-el$(INFO_EXT): $(mairix_el_deps) |
| 481 | $(mkinfodir) | 712 | $(mkinfodir) |
| 482 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/mairix-el.texi | 713 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/mairix-el.texi |
| 483 | mairix-el.dvi: ${srcdir}/mairix-el.texi ${gfdl} | 714 | mairix-el.dvi: $(mairix_el_deps) |
| 484 | $(ENVADD) $(TEXI2DVI) ${srcdir}/mairix-el.texi | 715 | $(ENVADD) $(TEXI2DVI) ${srcdir}/mairix-el.texi |
| 485 | mairix-el.pdf: ${srcdir}/mairix-el.texi ${gfdl} | 716 | mairix-el.pdf: $(mairix_el_deps) |
| 486 | $(ENVADD) $(TEXI2PDF) ${srcdir}/mairix-el.texi | 717 | $(ENVADD) $(TEXI2PDF) ${srcdir}/mairix-el.texi |
| 718 | mairix-el.html: $(mairix_el_deps) | ||
| 719 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/mairix-el.texi | ||
| 487 | 720 | ||
| 721 | message_deps = ${srcdir}/message.texi ${gfdl} | ||
| 488 | message : $(buildinfodir)/message$(INFO_EXT) | 722 | message : $(buildinfodir)/message$(INFO_EXT) |
| 489 | $(buildinfodir)/message$(INFO_EXT): ${srcdir}/message.texi ${gfdl} | 723 | $(buildinfodir)/message$(INFO_EXT): $(message_deps) |
| 490 | $(mkinfodir) | 724 | $(mkinfodir) |
| 491 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/message.texi | 725 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/message.texi |
| 492 | message.dvi: ${srcdir}/message.texi ${gfdl} | 726 | message.dvi: $(message_deps) |
| 493 | $(ENVADD) $(TEXI2DVI) ${srcdir}/message.texi | 727 | $(ENVADD) $(TEXI2DVI) ${srcdir}/message.texi |
| 494 | message.pdf: ${srcdir}/message.texi ${gfdl} | 728 | message.pdf: $(message_deps) |
| 495 | $(ENVADD) $(TEXI2PDF) ${srcdir}/message.texi | 729 | $(ENVADD) $(TEXI2PDF) ${srcdir}/message.texi |
| 730 | message.html: $(message_deps) | ||
| 731 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/message.texi | ||
| 496 | 732 | ||
| 733 | mh_e_deps = ${srcdir}/mh-e.texi ${gfdl} | ||
| 497 | mh-e : $(buildinfodir)/mh-e$(INFO_EXT) | 734 | mh-e : $(buildinfodir)/mh-e$(INFO_EXT) |
| 498 | $(buildinfodir)/mh-e$(INFO_EXT): ${srcdir}/mh-e.texi ${gfdl} | 735 | $(buildinfodir)/mh-e$(INFO_EXT): $(mh_e_deps) |
| 499 | $(mkinfodir) | 736 | $(mkinfodir) |
| 500 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/mh-e.texi | 737 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/mh-e.texi |
| 501 | mh-e.dvi: ${srcdir}/mh-e.texi ${gfdl} | 738 | mh-e.dvi: $(mh_e_deps) |
| 502 | $(ENVADD) $(TEXI2DVI) ${srcdir}/mh-e.texi | 739 | $(ENVADD) $(TEXI2DVI) ${srcdir}/mh-e.texi |
| 503 | mh-e.pdf: ${srcdir}/mh-e.texi ${gfdl} | 740 | mh-e.pdf: $(mh_e_deps) |
| 504 | $(ENVADD) $(TEXI2PDF) ${srcdir}/mh-e.texi | 741 | $(ENVADD) $(TEXI2PDF) ${srcdir}/mh-e.texi |
| 742 | mh-e.html: $(mh_e_deps) | ||
| 743 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/mh-e.texi | ||
| 505 | 744 | ||
| 745 | newsticker_deps = ${srcdir}/newsticker.texi ${gfdl} | ||
| 506 | newsticker : $(buildinfodir)/newsticker$(INFO_EXT) | 746 | newsticker : $(buildinfodir)/newsticker$(INFO_EXT) |
| 507 | $(buildinfodir)/newsticker$(INFO_EXT): ${srcdir}/newsticker.texi ${gfdl} | 747 | $(buildinfodir)/newsticker$(INFO_EXT): $(newsticker_deps) |
| 508 | $(mkinfodir) | 748 | $(mkinfodir) |
| 509 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/newsticker.texi | 749 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/newsticker.texi |
| 510 | newsticker.dvi: ${srcdir}/newsticker.texi ${gfdl} | 750 | newsticker.dvi: $(newsticker_deps) |
| 511 | $(ENVADD) $(TEXI2DVI) ${srcdir}/newsticker.texi | 751 | $(ENVADD) $(TEXI2DVI) ${srcdir}/newsticker.texi |
| 512 | newsticker.pdf: ${srcdir}/newsticker.texi ${gfdl} | 752 | newsticker.pdf: $(newsticker_deps) |
| 513 | $(ENVADD) $(TEXI2PDF) ${srcdir}/newsticker.texi | 753 | $(ENVADD) $(TEXI2PDF) ${srcdir}/newsticker.texi |
| 754 | newsticker.html: $(newsticker_deps) | ||
| 755 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/newsticker.texi | ||
| 514 | 756 | ||
| 757 | nxml_mode_deps = ${srcdir}/nxml-mode.texi ${gfdl} | ||
| 515 | nxml-mode : $(buildinfodir)/nxml-mode$(INFO_EXT) | 758 | nxml-mode : $(buildinfodir)/nxml-mode$(INFO_EXT) |
| 516 | $(buildinfodir)/nxml-mode$(INFO_EXT): ${srcdir}/nxml-mode.texi ${gfdl} | 759 | $(buildinfodir)/nxml-mode$(INFO_EXT): $(nxml_mode_deps) |
| 517 | $(mkinfodir) | 760 | $(mkinfodir) |
| 518 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/nxml-mode.texi | 761 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/nxml-mode.texi |
| 519 | nxml-mode.dvi: ${srcdir}/nxml-mode.texi ${gfdl} | 762 | nxml-mode.dvi: $(nxml_mode_deps) |
| 520 | $(ENVADD) $(TEXI2DVI) ${srcdir}/nxml-mode.texi | 763 | $(ENVADD) $(TEXI2DVI) ${srcdir}/nxml-mode.texi |
| 521 | nxml-mode.pdf: ${srcdir}/nxml-mode.texi ${gfdl} | 764 | nxml-mode.pdf: $(nxml_mode_deps) |
| 522 | $(ENVADD) $(TEXI2PDF) ${srcdir}/nxml-mode.texi | 765 | $(ENVADD) $(TEXI2PDF) ${srcdir}/nxml-mode.texi |
| 766 | nxml-mode.html: $(nxml_mode_deps) | ||
| 767 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/nxml-mode.texi | ||
| 523 | 768 | ||
| 769 | org_deps = ${srcdir}/org.texi ${gfdl} | ||
| 524 | org : $(buildinfodir)/org$(INFO_EXT) | 770 | org : $(buildinfodir)/org$(INFO_EXT) |
| 525 | $(buildinfodir)/org$(INFO_EXT): ${srcdir}/org.texi ${gfdl} | 771 | $(buildinfodir)/org$(INFO_EXT): $(org_deps) |
| 526 | $(mkinfodir) | 772 | $(mkinfodir) |
| 527 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/org.texi | 773 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/org.texi |
| 528 | org.dvi: ${srcdir}/org.texi ${gfdl} | 774 | org.dvi: $(org_deps) |
| 529 | $(ENVADD) $(TEXI2DVI) ${srcdir}/org.texi | 775 | $(ENVADD) $(TEXI2DVI) ${srcdir}/org.texi |
| 530 | org.pdf: ${srcdir}/org.texi ${gfdl} | 776 | org.pdf: $(org_deps) |
| 531 | $(ENVADD) $(TEXI2PDF) ${srcdir}/org.texi | 777 | $(ENVADD) $(TEXI2PDF) ${srcdir}/org.texi |
| 778 | org.html: $(org_deps) | ||
| 779 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/org.texi | ||
| 532 | 780 | ||
| 781 | pcl_cvs_deps = ${srcdir}/pcl-cvs.texi ${gfdl} | ||
| 533 | pcl-cvs : $(buildinfodir)/pcl-cvs$(INFO_EXT) | 782 | pcl-cvs : $(buildinfodir)/pcl-cvs$(INFO_EXT) |
| 534 | $(buildinfodir)/pcl-cvs$(INFO_EXT): ${srcdir}/pcl-cvs.texi ${gfdl} | 783 | $(buildinfodir)/pcl-cvs$(INFO_EXT): $(pcl_cvs_deps) |
| 535 | $(mkinfodir) | 784 | $(mkinfodir) |
| 536 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/pcl-cvs.texi | 785 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/pcl-cvs.texi |
| 537 | pcl-cvs.dvi: ${srcdir}/pcl-cvs.texi ${gfdl} | 786 | pcl-cvs.dvi: $(pcl_cvs_deps) |
| 538 | $(ENVADD) $(TEXI2DVI) ${srcdir}/pcl-cvs.texi | 787 | $(ENVADD) $(TEXI2DVI) ${srcdir}/pcl-cvs.texi |
| 539 | pcl-cvs.pdf: ${srcdir}/pcl-cvs.texi ${gfdl} | 788 | pcl-cvs.pdf: $(pcl_cvs_deps) |
| 540 | $(ENVADD) $(TEXI2PDF) ${srcdir}/pcl-cvs.texi | 789 | $(ENVADD) $(TEXI2PDF) ${srcdir}/pcl-cvs.texi |
| 790 | pcl-cvs.html: $(pcl_cvs_deps) | ||
| 791 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/pcl-cvs.texi | ||
| 541 | 792 | ||
| 793 | pgg_deps = ${srcdir}/pgg.texi ${gfdl} | ||
| 542 | pgg : $(buildinfodir)/pgg$(INFO_EXT) | 794 | pgg : $(buildinfodir)/pgg$(INFO_EXT) |
| 543 | $(buildinfodir)/pgg$(INFO_EXT): ${srcdir}/pgg.texi ${gfdl} | 795 | $(buildinfodir)/pgg$(INFO_EXT): $(pgg_deps) |
| 544 | $(mkinfodir) | 796 | $(mkinfodir) |
| 545 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/pgg.texi | 797 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/pgg.texi |
| 546 | pgg.dvi: ${srcdir}/pgg.texi ${gfdl} | 798 | pgg.dvi: $(pgg_deps) |
| 547 | $(ENVADD) $(TEXI2DVI) ${srcdir}/pgg.texi | 799 | $(ENVADD) $(TEXI2DVI) ${srcdir}/pgg.texi |
| 548 | pgg.pdf: ${srcdir}/pgg.texi ${gfdl} | 800 | pgg.pdf: $(pgg_deps) |
| 549 | $(ENVADD) $(TEXI2PDF) ${srcdir}/pgg.texi | 801 | $(ENVADD) $(TEXI2PDF) ${srcdir}/pgg.texi |
| 802 | pgg.html: $(pgg_deps) | ||
| 803 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/pgg.texi | ||
| 550 | 804 | ||
| 805 | rcirc_deps = ${srcdir}/rcirc.texi ${gfdl} | ||
| 551 | rcirc : $(buildinfodir)/rcirc$(INFO_EXT) | 806 | rcirc : $(buildinfodir)/rcirc$(INFO_EXT) |
| 552 | $(buildinfodir)/rcirc$(INFO_EXT): ${srcdir}/rcirc.texi ${gfdl} | 807 | $(buildinfodir)/rcirc$(INFO_EXT): $(rcirc_deps) |
| 553 | $(mkinfodir) | 808 | $(mkinfodir) |
| 554 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/rcirc.texi | 809 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/rcirc.texi |
| 555 | rcirc.dvi: ${srcdir}/rcirc.texi ${gfdl} | 810 | rcirc.dvi: $(rcirc_deps) |
| 556 | $(ENVADD) $(TEXI2DVI) ${srcdir}/rcirc.texi | 811 | $(ENVADD) $(TEXI2DVI) ${srcdir}/rcirc.texi |
| 557 | rcirc.pdf: ${srcdir}/rcirc.texi ${gfdl} | 812 | rcirc.pdf: $(rcirc_deps) |
| 558 | $(ENVADD) $(TEXI2PDF) ${srcdir}/rcirc.texi | 813 | $(ENVADD) $(TEXI2PDF) ${srcdir}/rcirc.texi |
| 814 | rcirc.html: $(rcirc_deps) | ||
| 815 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/rcirc.texi | ||
| 559 | 816 | ||
| 817 | reftex_deps = ${srcdir}/reftex.texi $(emacsdir)/emacsver.texi ${gfdl} | ||
| 560 | reftex : $(buildinfodir)/reftex$(INFO_EXT) | 818 | reftex : $(buildinfodir)/reftex$(INFO_EXT) |
| 561 | $(buildinfodir)/reftex$(INFO_EXT): ${srcdir}/reftex.texi $(emacsdir)/emacsver.texi ${gfdl} | 819 | $(buildinfodir)/reftex$(INFO_EXT): $(reftex_deps) |
| 562 | $(mkinfodir) | 820 | $(mkinfodir) |
| 563 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/reftex.texi | 821 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/reftex.texi |
| 564 | reftex.dvi: ${srcdir}/reftex.texi $(emacsdir)/emacsver.texi ${gfdl} | 822 | reftex.dvi: $(reftex_deps) |
| 565 | $(ENVADD) $(TEXI2DVI) ${srcdir}/reftex.texi | 823 | $(ENVADD) $(TEXI2DVI) ${srcdir}/reftex.texi |
| 566 | reftex.pdf: ${srcdir}/reftex.texi $(emacsdir)/emacsver.texi ${gfdl} | 824 | reftex.pdf: $(reftex_deps) |
| 567 | $(ENVADD) $(TEXI2PDF) ${srcdir}/reftex.texi | 825 | $(ENVADD) $(TEXI2PDF) ${srcdir}/reftex.texi |
| 826 | reftex.html: $(reftex_deps) | ||
| 827 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/reftex.texi | ||
| 568 | 828 | ||
| 829 | remember_deps = ${srcdir}/remember.texi ${gfdl} | ||
| 569 | remember : $(buildinfodir)/remember$(INFO_EXT) | 830 | remember : $(buildinfodir)/remember$(INFO_EXT) |
| 570 | $(buildinfodir)/remember$(INFO_EXT): ${srcdir}/remember.texi ${gfdl} | 831 | $(buildinfodir)/remember$(INFO_EXT): $(remember_deps) |
| 571 | $(mkinfodir) | 832 | $(mkinfodir) |
| 572 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/remember.texi | 833 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/remember.texi |
| 573 | remember.dvi: ${srcdir}/remember.texi ${gfdl} | 834 | remember.dvi: $(remember_deps) |
| 574 | $(ENVADD) $(TEXI2DVI) ${srcdir}/remember.texi | 835 | $(ENVADD) $(TEXI2DVI) ${srcdir}/remember.texi |
| 575 | remember.pdf: ${srcdir}/remember.texi ${gfdl} | 836 | remember.pdf: $(remember_deps) |
| 576 | $(ENVADD) $(TEXI2PDF) ${srcdir}/remember.texi | 837 | $(ENVADD) $(TEXI2PDF) ${srcdir}/remember.texi |
| 838 | remember.html: $(remember_deps) | ||
| 839 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/remember.texi | ||
| 577 | 840 | ||
| 841 | sasl_deps = ${srcdir}/sasl.texi ${gfdl} | ||
| 578 | sasl : $(buildinfodir)/sasl$(INFO_EXT) | 842 | sasl : $(buildinfodir)/sasl$(INFO_EXT) |
| 579 | $(buildinfodir)/sasl$(INFO_EXT): ${srcdir}/sasl.texi ${gfdl} | 843 | $(buildinfodir)/sasl$(INFO_EXT): $(sasl_deps) |
| 580 | $(mkinfodir) | 844 | $(mkinfodir) |
| 581 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/sasl.texi | 845 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/sasl.texi |
| 582 | sasl.dvi: ${srcdir}/sasl.texi ${gfdl} | 846 | sasl.dvi: $(sasl_deps) |
| 583 | $(ENVADD) $(TEXI2DVI) ${srcdir}/sasl.texi | 847 | $(ENVADD) $(TEXI2DVI) ${srcdir}/sasl.texi |
| 584 | sasl.pdf: ${srcdir}/sasl.texi ${gfdl} | 848 | sasl.pdf: $(sasl_deps) |
| 585 | $(ENVADD) $(TEXI2PDF) ${srcdir}/sasl.texi | 849 | $(ENVADD) $(TEXI2PDF) ${srcdir}/sasl.texi |
| 850 | sasl.html: $(sasl_deps) | ||
| 851 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/sasl.texi | ||
| 586 | 852 | ||
| 853 | sc_deps = ${srcdir}/sc.texi ${gfdl} | ||
| 587 | sc : $(buildinfodir)/sc$(INFO_EXT) | 854 | sc : $(buildinfodir)/sc$(INFO_EXT) |
| 588 | $(buildinfodir)/sc$(INFO_EXT): ${srcdir}/sc.texi ${gfdl} | 855 | $(buildinfodir)/sc$(INFO_EXT): $(sc_deps) |
| 589 | $(mkinfodir) | 856 | $(mkinfodir) |
| 590 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/sc.texi | 857 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/sc.texi |
| 591 | sc.dvi: ${srcdir}/sc.texi ${gfdl} | 858 | sc.dvi: $(sc_deps) |
| 592 | $(ENVADD) $(TEXI2DVI) ${srcdir}/sc.texi | 859 | $(ENVADD) $(TEXI2DVI) ${srcdir}/sc.texi |
| 593 | sc.pdf: ${srcdir}/sc.texi ${gfdl} | 860 | sc.pdf: $(sc_deps) |
| 594 | $(ENVADD) $(TEXI2PDF) ${srcdir}/sc.texi | 861 | $(ENVADD) $(TEXI2PDF) ${srcdir}/sc.texi |
| 862 | sc.html: $(sc_deps) | ||
| 863 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/sc.texi | ||
| 595 | 864 | ||
| 865 | semantic_deps = ${srcdir}/semantic.texi ${srcdir}/sem-user.texi ${gfdl} | ||
| 596 | semantic : $(buildinfodir)/semantic$(INFO_EXT) | 866 | semantic : $(buildinfodir)/semantic$(INFO_EXT) |
| 597 | $(buildinfodir)/semantic$(INFO_EXT): ${srcdir}/semantic.texi ${srcdir}/sem-user.texi ${gfdl} | 867 | $(buildinfodir)/semantic$(INFO_EXT): $(semantic_deps) |
| 598 | $(mkinfodir) | 868 | $(mkinfodir) |
| 599 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/semantic.texi | 869 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/semantic.texi |
| 600 | semantic.dvi: ${srcdir}/semantic.texi ${srcdir}/sem-user.texi ${gfdl} | 870 | semantic.dvi: $(semantic_deps) |
| 601 | $(ENVADD) $(TEXI2DVI) ${srcdir}/semantic.texi | 871 | $(ENVADD) $(TEXI2DVI) ${srcdir}/semantic.texi |
| 602 | semantic.pdf: ${srcdir}/semantic.texi ${srcdir}/sem-user.texi ${gfdl} | 872 | semantic.pdf: $(semantic_deps) |
| 603 | $(ENVADD) $(TEXI2PDF) ${srcdir}/semantic.texi | 873 | $(ENVADD) $(TEXI2PDF) ${srcdir}/semantic.texi |
| 874 | semantic.html: $(semantic_deps) | ||
| 875 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/semantic.texi | ||
| 604 | 876 | ||
| 877 | ses_deps = ${srcdir}/ses.texi ${gfdl} | ||
| 605 | ses : $(buildinfodir)/ses$(INFO_EXT) | 878 | ses : $(buildinfodir)/ses$(INFO_EXT) |
| 606 | $(buildinfodir)/ses$(INFO_EXT): ${srcdir}/ses.texi ${gfdl} | 879 | $(buildinfodir)/ses$(INFO_EXT): $(ses_deps) |
| 607 | $(mkinfodir) | 880 | $(mkinfodir) |
| 608 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/ses.texi | 881 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/ses.texi |
| 609 | ses.dvi: ${srcdir}/ses.texi ${gfdl} | 882 | ses.dvi: $(ses_deps) |
| 610 | $(ENVADD) $(TEXI2DVI) ${srcdir}/ses.texi | 883 | $(ENVADD) $(TEXI2DVI) ${srcdir}/ses.texi |
| 611 | ses.pdf: ${srcdir}/ses.texi ${gfdl} | 884 | ses.pdf: $(ses_deps) |
| 612 | $(ENVADD) $(TEXI2PDF) ${srcdir}/ses.texi | 885 | $(ENVADD) $(TEXI2PDF) ${srcdir}/ses.texi |
| 886 | ses.html: $(ses_deps) | ||
| 887 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/ses.texi | ||
| 613 | 888 | ||
| 889 | sieve_deps = ${srcdir}/sieve.texi ${gfdl} | ||
| 614 | sieve : $(buildinfodir)/sieve$(INFO_EXT) | 890 | sieve : $(buildinfodir)/sieve$(INFO_EXT) |
| 615 | $(buildinfodir)/sieve$(INFO_EXT): ${srcdir}/sieve.texi ${gfdl} | 891 | $(buildinfodir)/sieve$(INFO_EXT): $(sieve_deps) |
| 616 | $(mkinfodir) | 892 | $(mkinfodir) |
| 617 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/sieve.texi | 893 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/sieve.texi |
| 618 | sieve.dvi: ${srcdir}/sieve.texi ${gfdl} | 894 | sieve.dvi: $(sieve_deps) |
| 619 | $(ENVADD) $(TEXI2DVI) ${srcdir}/sieve.texi | 895 | $(ENVADD) $(TEXI2DVI) ${srcdir}/sieve.texi |
| 620 | sieve.pdf: ${srcdir}/sieve.texi ${gfdl} | 896 | sieve.pdf: $(sieve_deps) |
| 621 | $(ENVADD) $(TEXI2PDF) ${srcdir}/sieve.texi | 897 | $(ENVADD) $(TEXI2PDF) ${srcdir}/sieve.texi |
| 898 | sieve.html: $(sieve_deps) | ||
| 899 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/sieve.texi | ||
| 622 | 900 | ||
| 901 | smtpmail_deps = ${srcdir}/smtpmail.texi ${gfdl} | ||
| 623 | smtpmail : $(buildinfodir)/smtpmail$(INFO_EXT) | 902 | smtpmail : $(buildinfodir)/smtpmail$(INFO_EXT) |
| 624 | $(buildinfodir)/smtpmail$(INFO_EXT): ${srcdir}/smtpmail.texi ${gfdl} | 903 | $(buildinfodir)/smtpmail$(INFO_EXT): $(smtpmail_deps) |
| 625 | $(mkinfodir) | 904 | $(mkinfodir) |
| 626 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/smtpmail.texi | 905 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/smtpmail.texi |
| 627 | smtpmail.dvi: ${srcdir}/smtpmail.texi ${gfdl} | 906 | smtpmail.dvi: $(smtpmail_deps) |
| 628 | $(ENVADD) $(TEXI2DVI) ${srcdir}/smtpmail.texi | 907 | $(ENVADD) $(TEXI2DVI) ${srcdir}/smtpmail.texi |
| 629 | smtpmail.pdf: ${srcdir}/smtpmail.texi ${gfdl} | 908 | smtpmail.pdf: $(smtpmail_deps) |
| 630 | $(ENVADD) $(TEXI2PDF) ${srcdir}/smtpmail.texi | 909 | $(ENVADD) $(TEXI2PDF) ${srcdir}/smtpmail.texi |
| 910 | smtpmail.html: $(smtpmail_deps) | ||
| 911 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/smtpmail.texi | ||
| 631 | 912 | ||
| 913 | speedbar_deps = ${srcdir}/speedbar.texi ${gfdl} | ||
| 632 | speedbar : $(buildinfodir)/speedbar$(INFO_EXT) | 914 | speedbar : $(buildinfodir)/speedbar$(INFO_EXT) |
| 633 | $(buildinfodir)/speedbar$(INFO_EXT): ${srcdir}/speedbar.texi ${gfdl} | 915 | $(buildinfodir)/speedbar$(INFO_EXT): $(speedbar_deps) |
| 634 | $(mkinfodir) | 916 | $(mkinfodir) |
| 635 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/speedbar.texi | 917 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/speedbar.texi |
| 636 | speedbar.dvi: ${srcdir}/speedbar.texi ${gfdl} | 918 | speedbar.dvi: $(speedbar_deps) |
| 637 | $(ENVADD) $(TEXI2DVI) ${srcdir}/speedbar.texi | 919 | $(ENVADD) $(TEXI2DVI) ${srcdir}/speedbar.texi |
| 638 | speedbar.pdf: ${srcdir}/speedbar.texi ${gfdl} | 920 | speedbar.pdf: $(speedbar_deps) |
| 639 | $(ENVADD) $(TEXI2PDF) ${srcdir}/speedbar.texi | 921 | $(ENVADD) $(TEXI2PDF) ${srcdir}/speedbar.texi |
| 922 | speedbar.html: $(speedbar_deps) | ||
| 923 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/speedbar.texi | ||
| 640 | 924 | ||
| 925 | srecode_deps = ${srcdir}/srecode.texi ${gfdl} | ||
| 641 | srecode : $(buildinfodir)/srecode$(INFO_EXT) | 926 | srecode : $(buildinfodir)/srecode$(INFO_EXT) |
| 642 | $(buildinfodir)/srecode$(INFO_EXT): ${srcdir}/srecode.texi ${gfdl} | 927 | $(buildinfodir)/srecode$(INFO_EXT): $(srecode_deps) |
| 643 | $(mkinfodir) | 928 | $(mkinfodir) |
| 644 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/srecode.texi | 929 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/srecode.texi |
| 645 | srecode.dvi: ${srcdir}/srecode.texi ${gfdl} | 930 | srecode.dvi: $(srecode_deps) |
| 646 | $(ENVADD) $(TEXI2DVI) ${srcdir}/srecode.texi | 931 | $(ENVADD) $(TEXI2DVI) ${srcdir}/srecode.texi |
| 647 | srecode.pdf: ${srcdir}/srecode.texi ${gfdl} | 932 | srecode.pdf: $(srecode_deps) |
| 648 | $(ENVADD) $(TEXI2PDF) ${srcdir}/srecode.texi | 933 | $(ENVADD) $(TEXI2PDF) ${srcdir}/srecode.texi |
| 934 | srecode.html: $(srecode_deps) | ||
| 935 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/srecode.texi | ||
| 649 | 936 | ||
| 937 | todo_mode_deps = ${srcdir}/todo-mode.texi ${gfdl} | ||
| 650 | todo-mode : $(buildinfodir)/todo-mode$(INFO_EXT) | 938 | todo-mode : $(buildinfodir)/todo-mode$(INFO_EXT) |
| 651 | $(buildinfodir)/todo-mode$(INFO_EXT): ${srcdir}/todo-mode.texi ${gfdl} | 939 | $(buildinfodir)/todo-mode$(INFO_EXT): $(todo_mode_deps) |
| 652 | $(mkinfodir) | 940 | $(mkinfodir) |
| 653 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/todo-mode.texi | 941 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/todo-mode.texi |
| 654 | todo-mode.dvi: ${srcdir}/todo-mode.texi ${gfdl} | 942 | todo-mode.dvi: $(todo_mode_deps) |
| 655 | $(ENVADD) $(TEXI2DVI) ${srcdir}/todo-mode.texi | 943 | $(ENVADD) $(TEXI2DVI) ${srcdir}/todo-mode.texi |
| 656 | todo-mode.pdf: ${srcdir}/todo-mode.texi ${gfdl} | 944 | todo-mode.pdf: $(todo_mode_deps) |
| 657 | $(ENVADD) $(TEXI2PDF) ${srcdir}/todo-mode.texi | 945 | $(ENVADD) $(TEXI2PDF) ${srcdir}/todo-mode.texi |
| 946 | todo-mode.html: $(todo_mode_deps) | ||
| 947 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/todo-mode.texi | ||
| 658 | 948 | ||
| 949 | tramp_deps = ${srcdir}/tramp.texi ${srcdir}/trampver.texi ${gfdl} | ||
| 659 | tramp : $(buildinfodir)/tramp$(INFO_EXT) | 950 | tramp : $(buildinfodir)/tramp$(INFO_EXT) |
| 660 | $(buildinfodir)/tramp$(INFO_EXT): ${srcdir}/tramp.texi ${srcdir}/trampver.texi ${gfdl} | 951 | $(buildinfodir)/tramp$(INFO_EXT): $(tramp_deps) |
| 661 | $(mkinfodir) | 952 | $(mkinfodir) |
| 662 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ -D emacs ${srcdir}/tramp.texi | 953 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ -D emacs ${srcdir}/tramp.texi |
| 663 | tramp.dvi: ${srcdir}/tramp.texi ${srcdir}/trampver.texi ${gfdl} | 954 | tramp.dvi: $(tramp_deps) |
| 664 | $(ENVADD) $(TEXI2DVI) ${srcdir}/tramp.texi | 955 | $(ENVADD) $(TEXI2DVI) ${srcdir}/tramp.texi |
| 665 | tramp.pdf: ${srcdir}/tramp.texi ${srcdir}/trampver.texi ${gfdl} | 956 | tramp.pdf: $(tramp_deps) |
| 666 | $(ENVADD) $(TEXI2PDF) ${srcdir}/tramp.texi | 957 | $(ENVADD) $(TEXI2PDF) ${srcdir}/tramp.texi |
| 958 | tramp.html: $(tramp_deps) | ||
| 959 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ -D emacs ${srcdir}/tramp.texi | ||
| 667 | 960 | ||
| 961 | url_deps = ${srcdir}/url.texi ${gfdl} | ||
| 668 | url : $(buildinfodir)/url$(INFO_EXT) | 962 | url : $(buildinfodir)/url$(INFO_EXT) |
| 669 | $(buildinfodir)/url$(INFO_EXT): ${srcdir}/url.texi ${gfdl} | 963 | $(buildinfodir)/url$(INFO_EXT): $(url_deps) |
| 670 | $(mkinfodir) | 964 | $(mkinfodir) |
| 671 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/url.texi | 965 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/url.texi |
| 672 | url.dvi: ${srcdir}/url.texi ${gfdl} | 966 | url.dvi: $(url_deps) |
| 673 | $(ENVADD) $(TEXI2DVI) ${srcdir}/url.texi | 967 | $(ENVADD) $(TEXI2DVI) ${srcdir}/url.texi |
| 674 | url.pdf: ${srcdir}/url.texi ${gfdl} | 968 | url.pdf: $(url_deps) |
| 675 | $(ENVADD) $(TEXI2PDF) ${srcdir}/url.texi | 969 | $(ENVADD) $(TEXI2PDF) ${srcdir}/url.texi |
| 970 | url.html: $(url_deps) | ||
| 971 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/url.texi | ||
| 676 | 972 | ||
| 973 | vip_deps = ${srcdir}/vip.texi ${gfdl} | ||
| 677 | vip : $(buildinfodir)/vip$(INFO_EXT) | 974 | vip : $(buildinfodir)/vip$(INFO_EXT) |
| 678 | $(buildinfodir)/vip$(INFO_EXT): ${srcdir}/vip.texi ${gfdl} | 975 | $(buildinfodir)/vip$(INFO_EXT): $(vip_deps) |
| 679 | $(mkinfodir) | 976 | $(mkinfodir) |
| 680 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/vip.texi | 977 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/vip.texi |
| 681 | vip.dvi: ${srcdir}/vip.texi ${gfdl} | 978 | vip.dvi: $(vip_deps) |
| 682 | $(ENVADD) $(TEXI2DVI) ${srcdir}/vip.texi | 979 | $(ENVADD) $(TEXI2DVI) ${srcdir}/vip.texi |
| 683 | vip.pdf: ${srcdir}/vip.texi ${gfdl} | 980 | vip.pdf: $(vip_deps) |
| 684 | $(ENVADD) $(TEXI2PDF) ${srcdir}/vip.texi | 981 | $(ENVADD) $(TEXI2PDF) ${srcdir}/vip.texi |
| 982 | vip.html: $(vip_deps) | ||
| 983 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/vip.texi | ||
| 685 | 984 | ||
| 985 | viper_deps = ${srcdir}/viper.texi ${gfdl} | ||
| 686 | viper : $(buildinfodir)/viper$(INFO_EXT) | 986 | viper : $(buildinfodir)/viper$(INFO_EXT) |
| 687 | $(buildinfodir)/viper$(INFO_EXT): ${srcdir}/viper.texi ${gfdl} | 987 | $(buildinfodir)/viper$(INFO_EXT): $(viper_deps) |
| 688 | $(mkinfodir) | 988 | $(mkinfodir) |
| 689 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/viper.texi | 989 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/viper.texi |
| 690 | viper.dvi: ${srcdir}/viper.texi ${gfdl} | 990 | viper.dvi: $(viper_deps) |
| 691 | $(ENVADD) $(TEXI2DVI) ${srcdir}/viper.texi | 991 | $(ENVADD) $(TEXI2DVI) ${srcdir}/viper.texi |
| 692 | viper.pdf: ${srcdir}/viper.texi ${gfdl} | 992 | viper.pdf: $(viper_deps) |
| 693 | $(ENVADD) $(TEXI2PDF) ${srcdir}/viper.texi | 993 | $(ENVADD) $(TEXI2PDF) ${srcdir}/viper.texi |
| 994 | viper.html: $(viper_deps) | ||
| 995 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/viper.texi | ||
| 694 | 996 | ||
| 997 | widget_deps = ${srcdir}/wisent.texi ${gfdl} | ||
| 695 | widget : $(buildinfodir)/widget$(INFO_EXT) | 998 | widget : $(buildinfodir)/widget$(INFO_EXT) |
| 696 | $(buildinfodir)/widget$(INFO_EXT): ${srcdir}/widget.texi ${gfdl} | 999 | $(buildinfodir)/widget$(INFO_EXT): $(widget_deps) |
| 697 | $(mkinfodir) | 1000 | $(mkinfodir) |
| 698 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/widget.texi | 1001 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/widget.texi |
| 699 | widget.dvi: ${srcdir}/widget.texi ${gfdl} | 1002 | widget.dvi: $(widget_deps) |
| 700 | $(ENVADD) $(TEXI2DVI) ${srcdir}/widget.texi | 1003 | $(ENVADD) $(TEXI2DVI) ${srcdir}/widget.texi |
| 701 | widget.pdf: ${srcdir}/widget.texi ${gfdl} | 1004 | widget.pdf: $(widget_deps) |
| 702 | $(ENVADD) $(TEXI2PDF) ${srcdir}/widget.texi | 1005 | $(ENVADD) $(TEXI2PDF) ${srcdir}/widget.texi |
| 1006 | widget.html: $(widget_deps) | ||
| 1007 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/widget.texi | ||
| 703 | 1008 | ||
| 1009 | wisent_deps = ${srcdir}/wisent.texi ${gfdl} | ||
| 704 | wisent : $(buildinfodir)/wisent$(INFO_EXT) | 1010 | wisent : $(buildinfodir)/wisent$(INFO_EXT) |
| 705 | $(buildinfodir)/wisent$(INFO_EXT): ${srcdir}/wisent.texi ${gfdl} | 1011 | $(buildinfodir)/wisent$(INFO_EXT): $(wisent_deps) |
| 706 | $(mkinfodir) | 1012 | $(mkinfodir) |
| 707 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/wisent.texi | 1013 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/wisent.texi |
| 708 | wisent.dvi: ${srcdir}/wisent.texi ${gfdl} | 1014 | wisent.dvi: $(wisent_deps) |
| 709 | $(ENVADD) $(TEXI2DVI) ${srcdir}/wisent.texi | 1015 | $(ENVADD) $(TEXI2DVI) ${srcdir}/wisent.texi |
| 710 | wisent.pdf: ${srcdir}/wisent.texi ${gfdl} | 1016 | wisent.pdf: $(wisent_deps) |
| 711 | $(ENVADD) $(TEXI2PDF) ${srcdir}/wisent.texi | 1017 | $(ENVADD) $(TEXI2PDF) ${srcdir}/wisent.texi |
| 1018 | wisent.html: $(wisent_deps) | ||
| 1019 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/wisent.texi | ||
| 712 | 1020 | ||
| 1021 | woman_deps = ${srcdir}/woman.texi $(emacsdir)/emacsver.texi ${gfdl} | ||
| 713 | woman : $(buildinfodir)/woman$(INFO_EXT) | 1022 | woman : $(buildinfodir)/woman$(INFO_EXT) |
| 714 | $(buildinfodir)/woman$(INFO_EXT): ${srcdir}/woman.texi $(emacsdir)/emacsver.texi ${gfdl} | 1023 | $(buildinfodir)/woman$(INFO_EXT): $(woman_deps) |
| 715 | $(mkinfodir) | 1024 | $(mkinfodir) |
| 716 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/woman.texi | 1025 | $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/woman.texi |
| 717 | woman.dvi: ${srcdir}/woman.texi $(emacsdir)/emacsver.texi ${gfdl} | 1026 | woman.dvi: $(woman_deps) |
| 718 | $(ENVADD) $(TEXI2DVI) ${srcdir}/woman.texi | 1027 | $(ENVADD) $(TEXI2DVI) ${srcdir}/woman.texi |
| 719 | woman.pdf: ${srcdir}/woman.texi $(emacsdir)/emacsver.texi ${gfdl} | 1028 | woman.pdf: $(woman_deps) |
| 720 | $(ENVADD) $(TEXI2PDF) ${srcdir}/woman.texi | 1029 | $(ENVADD) $(TEXI2PDF) ${srcdir}/woman.texi |
| 721 | 1030 | woman.html: $(woman_deps) | |
| 1031 | $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/woman.texi | ||
| 722 | 1032 | ||
| 723 | .PHONY: mostlyclean clean distclean maintainer-clean | 1033 | .PHONY: mostlyclean clean distclean maintainer-clean |
| 724 | 1034 | ||
| @@ -729,7 +1039,7 @@ mostlyclean: | |||
| 729 | rm -f gnustmp.* | 1039 | rm -f gnustmp.* |
| 730 | 1040 | ||
| 731 | clean: mostlyclean | 1041 | clean: mostlyclean |
| 732 | rm -f $(DVI_TARGETS) $(PDF_TARGETS) | 1042 | rm -f $(DVI_TARGETS) $(HTML_TARGETS) $(PDF_TARGETS) $(PS_TARGETS) |
| 733 | rm -f emacs-misc-${version}.tar* | 1043 | rm -f emacs-misc-${version}.tar* |
| 734 | 1044 | ||
| 735 | distclean: clean | 1045 | distclean: clean |
| @@ -764,4 +1074,53 @@ dist: | |||
| 764 | tar -cf emacs-misc-${version}.tar emacs-misc-${version} | 1074 | tar -cf emacs-misc-${version}.tar emacs-misc-${version} |
| 765 | rm -rf emacs-misc-${version} | 1075 | rm -rf emacs-misc-${version} |
| 766 | 1076 | ||
| 1077 | |||
| 1078 | .PHONY: install-dvi install-html install-pdf install-ps install-doc | ||
| 1079 | |||
| 1080 | install-dvi: dvi | ||
| 1081 | umask 022; $(MKDIR_P) $(DESTDIR)$(dvidir) | ||
| 1082 | $(INSTALL_DATA) $(DVI_TARGETS) $(DESTDIR)$(dvidir) | ||
| 1083 | install-html: html | ||
| 1084 | umask 022; $(MKDIR_P) $(DESTDIR)$(htmldir) | ||
| 1085 | $(INSTALL_DATA) $(HTML_TARGETS) $(DESTDIR)$(htmldir) | ||
| 1086 | install-pdf: pdf | ||
| 1087 | umask 022;$(MKDIR_P) $(DESTDIR)$(pdfdir) | ||
| 1088 | $(INSTALL_DATA) $(PDF_TARGETS) $(DESTDIR)$(pdfdir) | ||
| 1089 | install-ps: ps | ||
| 1090 | umask 022; $(MKDIR_P) $(DESTDIR)$(psdir) | ||
| 1091 | for file in $(PS_TARGETS); do \ | ||
| 1092 | $(INSTALL_DATA) $${file} $(DESTDIR)$(psdir); \ | ||
| 1093 | [ -n "${GZIP_PROG}" ] || continue; \ | ||
| 1094 | rm -f $(DESTDIR)$(psdir)/$${file}.gz; \ | ||
| 1095 | ${GZIP_PROG} -9n $(DESTDIR)$(psdir)/$${file}; \ | ||
| 1096 | done | ||
| 1097 | |||
| 1098 | ## Top-level Makefile installs the info pages. | ||
| 1099 | install-doc: install-dvi install-html install-pdf install-ps | ||
| 1100 | |||
| 1101 | |||
| 1102 | |||
| 1103 | .PHONY: uninstall-dvi uninstall-html uninstall-pdf uninstall-ps uninstall-doc | ||
| 1104 | |||
| 1105 | uninstall-dvi: | ||
| 1106 | for file in $(DVI_TARGETS); do \ | ||
| 1107 | rm -f $(DESTDIR)$(dvidir)/$${file}; \ | ||
| 1108 | done | ||
| 1109 | uninstall-html: | ||
| 1110 | for file in $(HTML_TARGETS); do \ | ||
| 1111 | rm -f $(DESTDIR)$(htmldir)/$${file}; \ | ||
| 1112 | done | ||
| 1113 | uninstall-ps: | ||
| 1114 | ext= ; [ -n "${GZIP_PROG}" ] && ext=.gz; \ | ||
| 1115 | for file in $(PS_TARGETS); do \ | ||
| 1116 | rm -f $(DESTDIR)$(psdir)/$${file}$${ext}; \ | ||
| 1117 | done | ||
| 1118 | uninstall-pdf: | ||
| 1119 | for file in $(PDF_TARGETS); do \ | ||
| 1120 | rm -f $(DESTDIR)$(pdfdir)/$${file}; \ | ||
| 1121 | done | ||
| 1122 | |||
| 1123 | uninstall-doc: uninstall-dvi uninstall-html uninstall-pdf uninstall-ps | ||
| 1124 | |||
| 1125 | |||
| 767 | ### Makefile ends here | 1126 | ### Makefile ends here |
diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi index 4edc1d62f1a..f7f373664c6 100644 --- a/doc/misc/gnus.texi +++ b/doc/misc/gnus.texi | |||
| @@ -14796,14 +14796,16 @@ and says what authentication scheme to use. The default is | |||
| 14796 | 14796 | ||
| 14797 | @item :leave | 14797 | @item :leave |
| 14798 | Non-@code{nil} if the mail is to be left on the @acronym{POP} server | 14798 | Non-@code{nil} if the mail is to be left on the @acronym{POP} server |
| 14799 | after fetching. Mails once fetched will never be fetched again by the | 14799 | after fetching. Only the built-in @code{pop3-movemail} program (the |
| 14800 | @acronym{UIDL} control. Only the built-in @code{pop3-movemail} program | 14800 | default) supports this keyword. |
| 14801 | (the default) supports this keyword. | 14801 | |
| 14802 | 14802 | If this is a number, leave mails on the server for this many days since | |
| 14803 | If this is neither @code{nil} nor a number, all mails will be left on | 14803 | you first checked new mails. In that case, mails once fetched will |
| 14804 | the server. If this is a number, leave mails on the server for this | 14804 | never be fetched again by the @acronym{UIDL} control. If this is |
| 14805 | many days since you first checked new mails. If this is @code{nil} | 14805 | @code{nil} (the default), mails will be deleted on the server right |
| 14806 | (the default), mails will be deleted on the server right after fetching. | 14806 | after fetching. If this is neither @code{nil} nor a number, all mails |
| 14807 | will be left on the server, and you will end up getting the same mails | ||
| 14808 | again and again. | ||
| 14807 | 14809 | ||
| 14808 | @vindex pop3-uidl-file | 14810 | @vindex pop3-uidl-file |
| 14809 | The @code{pop3-uidl-file} variable specifies the file to which the | 14811 | The @code{pop3-uidl-file} variable specifies the file to which the |
diff --git a/doc/misc/texinfo.tex b/doc/misc/texinfo.tex index 3427d2ad0e3..e8fed290734 100644 --- a/doc/misc/texinfo.tex +++ b/doc/misc/texinfo.tex | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | % Load plain if necessary, i.e., if running under initex. | 3 | % Load plain if necessary, i.e., if running under initex. |
| 4 | \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi | 4 | \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi |
| 5 | % | 5 | % |
| 6 | \def\texinfoversion{2013-06-23.10} | 6 | \def\texinfoversion{2013-08-09.09} |
| 7 | % | 7 | % |
| 8 | % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, | 8 | % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, |
| 9 | % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, | 9 | % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, |
| @@ -2377,8 +2377,10 @@ end | |||
| 2377 | \ifx\next,% | 2377 | \ifx\next,% |
| 2378 | \else\ifx\next-% | 2378 | \else\ifx\next-% |
| 2379 | \else\ifx\next.% | 2379 | \else\ifx\next.% |
| 2380 | \else\ifx\next\.% | ||
| 2381 | \else\ifx\next\comma% | ||
| 2380 | \else\ptexslash | 2382 | \else\ptexslash |
| 2381 | \fi\fi\fi | 2383 | \fi\fi\fi\fi\fi |
| 2382 | \aftersmartic | 2384 | \aftersmartic |
| 2383 | } | 2385 | } |
| 2384 | 2386 | ||
| @@ -2519,7 +2521,9 @@ end | |||
| 2519 | \ifx\codedashprev\codedash | 2521 | \ifx\codedashprev\codedash |
| 2520 | \else \discretionary{}{}{}\fi | 2522 | \else \discretionary{}{}{}\fi |
| 2521 | \fi | 2523 | \fi |
| 2522 | \global\let\codedashprev=\next | 2524 | % we need the space after the = for the case when \next itself is a |
| 2525 | % space token; it would get swallowed otherwise. As in @code{- a}. | ||
| 2526 | \global\let\codedashprev= \next | ||
| 2523 | } | 2527 | } |
| 2524 | } | 2528 | } |
| 2525 | \def\normaldash{-} | 2529 | \def\normaldash{-} |
diff --git a/doc/misc/woman.texi b/doc/misc/woman.texi index 44a8b5573fa..8005d58ce8a 100644 --- a/doc/misc/woman.texi +++ b/doc/misc/woman.texi | |||
| @@ -67,7 +67,12 @@ modify this GNU manual.'' | |||
| 67 | @display | 67 | @display |
| 68 | As distributed with Emacs @value{EMACSVER}. | 68 | As distributed with Emacs @value{EMACSVER}. |
| 69 | 69 | ||
| 70 | @ifnothtml | ||
| 70 | @email{F.J.Wright@@qmw.ac.uk, Francis J. Wright} | 71 | @email{F.J.Wright@@qmw.ac.uk, Francis J. Wright} |
| 72 | @end ifnothtml | ||
| 73 | @ifhtml | ||
| 74 | Francis J. Wright | ||
| 75 | @end ifhtml | ||
| 71 | @uref{http://centaur.maths.qmw.ac.uk/, School of Mathematical Sciences} | 76 | @uref{http://centaur.maths.qmw.ac.uk/, School of Mathematical Sciences} |
| 72 | Queen Mary and Westfield College (University of London) | 77 | Queen Mary and Westfield College (University of London) |
| 73 | Mile End Road, London E1 4NS, UK | 78 | Mile End Road, London E1 4NS, UK |
diff --git a/lib/fpending.h b/lib/fpending.h index bf40d3732e7..4eca3f18e17 100644 --- a/lib/fpending.h +++ b/lib/fpending.h | |||
| @@ -20,11 +20,10 @@ | |||
| 20 | 20 | ||
| 21 | #include <stddef.h> | 21 | #include <stddef.h> |
| 22 | #include <stdio.h> | 22 | #include <stdio.h> |
| 23 | #if HAVE_STDIO_EXT_H | ||
| 24 | # include <stdio_ext.h> | ||
| 25 | #endif | ||
| 23 | 26 | ||
| 24 | #if HAVE_DECL___FPENDING | 27 | #ifndef __fpending |
| 25 | # if HAVE_STDIO_EXT_H | ||
| 26 | # include <stdio_ext.h> | ||
| 27 | # endif | ||
| 28 | #else | ||
| 29 | size_t __fpending (FILE *); | 28 | size_t __fpending (FILE *); |
| 30 | #endif | 29 | #endif |
diff --git a/lib/sys_time.in.h b/lib/sys_time.in.h index 3dbf6320667..f721580a765 100644 --- a/lib/sys_time.in.h +++ b/lib/sys_time.in.h | |||
| @@ -24,11 +24,12 @@ | |||
| 24 | #endif | 24 | #endif |
| 25 | @PRAGMA_COLUMNS@ | 25 | @PRAGMA_COLUMNS@ |
| 26 | 26 | ||
| 27 | /* On Cygwin, <sys/time.h> includes itself recursively via <sys/select.h>. | 27 | /* On Cygwin and on many BSDish systems, <sys/time.h> includes itself |
| 28 | recursively via <sys/select.h>. | ||
| 28 | Simply delegate to the system's header in this case; it is a no-op. | 29 | Simply delegate to the system's header in this case; it is a no-op. |
| 29 | Without this extra ifdef, the C++ gettimeofday declaration below | 30 | Without this extra ifdef, the C++ gettimeofday declaration below |
| 30 | would be a forward declaration in gnulib's nested <sys/time.h>. */ | 31 | would be a forward declaration in gnulib's nested <sys/time.h>. */ |
| 31 | #ifdef _CYGWIN_SYS_TIME_H | 32 | #if defined _CYGWIN_SYS_TIME_H || defined _SYS_TIME_H || defined _SYS_TIME_H_ |
| 32 | # @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@ | 33 | # @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@ |
| 33 | #else | 34 | #else |
| 34 | 35 | ||
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ac360a3e422..1b7aceb5979 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,13 @@ | |||
| 1 | 2013-08-12 Glenn Morris <rgm@gnu.org> | ||
| 2 | |||
| 3 | * format.el (format-annotate-function): | ||
| 4 | Handle read-only text properties in the source. (Bug#14887) | ||
| 5 | |||
| 6 | 2013-08-11 Lars Magne Ingebrigtsen <larsi@gnus.org> | ||
| 7 | |||
| 8 | * net/eww.el (eww-display-html): Ignore coding system errors. One | ||
| 9 | web site uses "utf-8lias" as the coding system. | ||
| 10 | |||
| 1 | 2013-08-11 Juanma Barranquero <lekktu@gmail.com> | 11 | 2013-08-11 Juanma Barranquero <lekktu@gmail.com> |
| 2 | 12 | ||
| 3 | * frameset.el (frameset-valid-p): Fix check; STATES can indeed be nil. | 13 | * frameset.el (frameset-valid-p): Fix check; STATES can indeed be nil. |
diff --git a/lisp/format.el b/lisp/format.el index 221eaadcdd8..fc8dcb97b01 100644 --- a/lisp/format.el +++ b/lisp/format.el | |||
| @@ -225,10 +225,12 @@ For most purposes, consider using `format-encode-region' instead." | |||
| 225 | (setq selective-display sel-disp) | 225 | (setq selective-display sel-disp) |
| 226 | (set-buffer-multibyte multibyte) | 226 | (set-buffer-multibyte multibyte) |
| 227 | (setq buffer-file-coding-system coding-system)) | 227 | (setq buffer-file-coding-system coding-system)) |
| 228 | (copy-to-buffer copy-buf from to) | 228 | (let ((inhibit-read-only t)) ; bug#14887 |
| 229 | (set-buffer copy-buf) | 229 | (copy-to-buffer copy-buf from to) |
| 230 | (format-insert-annotations write-region-annotations-so-far from) | 230 | (set-buffer copy-buf) |
| 231 | (format-encode-run-method to-fn (point-min) (point-max) orig-buf) | 231 | (format-insert-annotations write-region-annotations-so-far from) |
| 232 | (format-encode-run-method to-fn (point-min) (point-max) | ||
| 233 | orig-buf)) | ||
| 232 | (when (buffer-live-p copy-buf) | 234 | (when (buffer-live-p copy-buf) |
| 233 | (with-current-buffer copy-buf | 235 | (with-current-buffer copy-buf |
| 234 | ;; Set write-region-post-annotation-function to | 236 | ;; Set write-region-post-annotation-function to |
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index ab776bfbb54..4fcf078e9d6 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog | |||
| @@ -1,3 +1,12 @@ | |||
| 1 | 2013-08-12 Katsumi Yamaoka <yamaoka@jpl.org> | ||
| 2 | |||
| 3 | * mm-decode.el (mm-display-external): Run a timer for the temp files | ||
| 4 | deletion after a viewer exits; add a deletion timer for the needsterm | ||
| 5 | case, too. | ||
| 6 | |||
| 7 | * mm-decode.el (mm-display-external): Try to delete temporary files by | ||
| 8 | using a 1-min. timer. | ||
| 9 | |||
| 1 | 2013-08-09 Katsumi Yamaoka <yamaoka@jpl.org> | 10 | 2013-08-09 Katsumi Yamaoka <yamaoka@jpl.org> |
| 2 | 11 | ||
| 3 | * mm-decode.el (mm-temp-files-to-be-deleted, mm-temp-files-cache-file): | 12 | * mm-decode.el (mm-temp-files-to-be-deleted, mm-temp-files-cache-file): |
diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el index f1e11a01194..dbbf0befe60 100644 --- a/lisp/gnus/mm-decode.el +++ b/lisp/gnus/mm-decode.el | |||
| @@ -954,10 +954,20 @@ external if displayed external." | |||
| 954 | method file (mm-handle-type handle)))) | 954 | method file (mm-handle-type handle)))) |
| 955 | (unwind-protect | 955 | (unwind-protect |
| 956 | (if window-system | 956 | (if window-system |
| 957 | (start-process "*display*" nil | 957 | (set-process-sentinel |
| 958 | mm-external-terminal-program | 958 | (start-process "*display*" nil |
| 959 | "-e" shell-file-name | 959 | mm-external-terminal-program |
| 960 | shell-command-switch command) | 960 | "-e" shell-file-name |
| 961 | shell-command-switch command) | ||
| 962 | `(lambda (process state) | ||
| 963 | (if (eq 'exit (process-status process)) | ||
| 964 | (run-at-time | ||
| 965 | 60.0 nil | ||
| 966 | (lambda () | ||
| 967 | (ignore-errors (delete-file ,file)) | ||
| 968 | (ignore-errors (delete-directory | ||
| 969 | ,(file-name-directory | ||
| 970 | file)))))))) | ||
| 961 | (require 'term) | 971 | (require 'term) |
| 962 | (require 'gnus-win) | 972 | (require 'gnus-win) |
| 963 | (set-buffer | 973 | (set-buffer |
| @@ -971,11 +981,15 @@ external if displayed external." | |||
| 971 | (set-process-sentinel | 981 | (set-process-sentinel |
| 972 | (get-buffer-process buffer) | 982 | (get-buffer-process buffer) |
| 973 | `(lambda (process state) | 983 | `(lambda (process state) |
| 974 | (if (eq 'exit (process-status process)) | 984 | (when (eq 'exit (process-status process)) |
| 975 | (gnus-configure-windows | 985 | (ignore-errors (delete-file ,file)) |
| 976 | ',gnus-current-window-configuration)))) | 986 | (ignore-errors |
| 987 | (delete-directory ,(file-name-directory file))) | ||
| 988 | (gnus-configure-windows | ||
| 989 | ',gnus-current-window-configuration)))) | ||
| 977 | (gnus-configure-windows 'display-term)) | 990 | (gnus-configure-windows 'display-term)) |
| 978 | (mm-handle-set-external-undisplayer handle (cons file buffer))) | 991 | (mm-handle-set-external-undisplayer handle (cons file buffer)) |
| 992 | (add-to-list 'mm-temp-files-to-be-deleted file t)) | ||
| 979 | (message "Displaying %s..." command)) | 993 | (message "Displaying %s..." command)) |
| 980 | 'external) | 994 | 'external) |
| 981 | (copiousoutput | 995 | (copiousoutput |
| @@ -1023,6 +1037,12 @@ external if displayed external." | |||
| 1023 | (handle handle)) | 1037 | (handle handle)) |
| 1024 | (lambda (process state) | 1038 | (lambda (process state) |
| 1025 | (when (eq (process-status process) 'exit) | 1039 | (when (eq (process-status process) 'exit) |
| 1040 | (run-at-time | ||
| 1041 | 60.0 nil | ||
| 1042 | (lambda () | ||
| 1043 | (ignore-errors (delete-file file)) | ||
| 1044 | (ignore-errors (delete-directory | ||
| 1045 | (file-name-directory file))))) | ||
| 1026 | (when (buffer-live-p outbuf) | 1046 | (when (buffer-live-p outbuf) |
| 1027 | (with-current-buffer outbuf | 1047 | (with-current-buffer outbuf |
| 1028 | (let ((buffer-read-only nil) | 1048 | (let ((buffer-read-only nil) |
diff --git a/lisp/net/eww.el b/lisp/net/eww.el index 70c11c3201f..a689ff2ae9f 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el | |||
| @@ -199,7 +199,9 @@ word(s) will be searched for via `eww-search-prefix'." | |||
| 199 | 199 | ||
| 200 | (defun eww-display-html (charset url) | 200 | (defun eww-display-html (charset url) |
| 201 | (unless (eq charset 'utf8) | 201 | (unless (eq charset 'utf8) |
| 202 | (decode-coding-region (point) (point-max) charset)) | 202 | (condition-case nil |
| 203 | (decode-coding-region (point) (point-max) charset) | ||
| 204 | (coding-system-error nil))) | ||
| 203 | (let ((document | 205 | (let ((document |
| 204 | (list | 206 | (list |
| 205 | 'base (list (cons 'href url)) | 207 | 'base (list (cons 'href url)) |
diff --git a/m4/fpending.m4 b/m4/fpending.m4 index 8f585624317..c8d9e8b7ba8 100644 --- a/m4/fpending.m4 +++ b/m4/fpending.m4 | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | # serial 19 | 1 | # serial 20 |
| 2 | 2 | ||
| 3 | # Copyright (C) 2000-2001, 2004-2013 Free Software Foundation, Inc. | 3 | # Copyright (C) 2000-2001, 2004-2013 Free Software Foundation, Inc. |
| 4 | # This file is free software; the Free Software Foundation | 4 | # This file is free software; the Free Software Foundation |
| @@ -16,14 +16,19 @@ dnl we have to grub around in the FILE struct. | |||
| 16 | AC_DEFUN([gl_FUNC_FPENDING], | 16 | AC_DEFUN([gl_FUNC_FPENDING], |
| 17 | [ | 17 | [ |
| 18 | AC_CHECK_HEADERS_ONCE([stdio_ext.h]) | 18 | AC_CHECK_HEADERS_ONCE([stdio_ext.h]) |
| 19 | AC_CHECK_FUNCS_ONCE([__fpending]) | 19 | AC_CACHE_CHECK([for __fpending], [gl_cv_func___fpending], |
| 20 | fp_headers=' | 20 | [ |
| 21 | # include <stdio.h> | 21 | AC_LINK_IFELSE( |
| 22 | # if HAVE_STDIO_EXT_H | 22 | [AC_LANG_PROGRAM( |
| 23 | # include <stdio_ext.h> | 23 | [[#include <stdio.h> |
| 24 | # endif | 24 | #if HAVE_STDIO_EXT_H |
| 25 | ' | 25 | # include <stdio_ext.h> |
| 26 | AC_CHECK_DECLS([__fpending], , , $fp_headers) | 26 | #endif |
| 27 | ]], | ||
| 28 | [[return ! __fpending (stdin);]])], | ||
| 29 | [gl_cv_func___fpending=yes], | ||
| 30 | [gl_cv_func___fpending=no]) | ||
| 31 | ]) | ||
| 27 | ]) | 32 | ]) |
| 28 | 33 | ||
| 29 | AC_DEFUN([gl_PREREQ_FPENDING], | 34 | AC_DEFUN([gl_PREREQ_FPENDING], |
diff --git a/m4/gnulib-comp.m4 b/m4/gnulib-comp.m4 index af9a9ca3ae0..7c5f22861b5 100644 --- a/m4/gnulib-comp.m4 +++ b/m4/gnulib-comp.m4 | |||
| @@ -216,7 +216,7 @@ AC_DEFUN([gl_INIT], | |||
| 216 | gl_MODULE_INDICATOR([fdopendir]) | 216 | gl_MODULE_INDICATOR([fdopendir]) |
| 217 | gl_FILEMODE | 217 | gl_FILEMODE |
| 218 | gl_FUNC_FPENDING | 218 | gl_FUNC_FPENDING |
| 219 | if test $ac_cv_func___fpending = no; then | 219 | if test $gl_cv_func___fpending = no; then |
| 220 | AC_LIBOBJ([fpending]) | 220 | AC_LIBOBJ([fpending]) |
| 221 | gl_PREREQ_FPENDING | 221 | gl_PREREQ_FPENDING |
| 222 | fi | 222 | fi |
diff --git a/src/ChangeLog b/src/ChangeLog index 1780bf4e797..679b82ba63c 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,107 @@ | |||
| 1 | 2013-08-12 Dmitry Antipov <dmantipov@yandex.ru> | ||
| 2 | |||
| 3 | Avoid looping over all frame windows to freeze and unfreeze. | ||
| 4 | * window.h (struct window): Drop frozen_window_start_p. | ||
| 5 | (freeze_window_starts): Drop prototype. | ||
| 6 | * frame.h (struct frame): New frozen_window_starts flag. | ||
| 7 | (FRAME_WINDOWS_FROZEN): New macro. | ||
| 8 | * window.c (freeze_window_start, freeze_window_starts): | ||
| 9 | Remove. | ||
| 10 | (select_window, replace_window): Adjust users. | ||
| 11 | * xdisp.c (resize_mini_window): Use FRAME_WINDOWS_FROZEN. | ||
| 12 | (window_frozen_p): New function. | ||
| 13 | (redisplay_window): Use it. | ||
| 14 | |||
| 15 | 2013-08-12 Paul Eggert <eggert@cs.ucla.edu> | ||
| 16 | |||
| 17 | Fix some fd issues when running subprocesses (Bug#15035). | ||
| 18 | Fix bugs that can leak files or file descriptors on errors. | ||
| 19 | Don't unlink open temp files, as that's hard for users to diagnose | ||
| 20 | when things go awry (e.g., temp disk exhausted). | ||
| 21 | Don't bother to lock temp files. Check for invalid recursion. | ||
| 22 | * callproc.c (synch_process_fd): Remove. All uses removed. | ||
| 23 | (synch_process_tempfile): New var or macro. | ||
| 24 | (CALLPROC_STDOUT, CALLPROC_STDERR, CALLPROC_PIPEREAD, CALLPROC_FDS): | ||
| 25 | New constants. | ||
| 26 | (record_kill_process): New arg, the temp name. All callers changed. | ||
| 27 | (delete_temp_file): Now just a simple wrapper around unlink. | ||
| 28 | (call_process_kill): New arg, the call_process_fd array. | ||
| 29 | Close them all. Clear synch_process_pid. Remove the temp file, | ||
| 30 | or arrange for it to be removed. | ||
| 31 | (call_process_cleanup) [MSDOS]: Arg no longer contains file name; | ||
| 32 | that's been moved to synch_process_tempfile. Caller changed. | ||
| 33 | Do not remove the tempfile; that's now call_process_kill's | ||
| 34 | responsibility. | ||
| 35 | (call_process_cleanup) [!MSDOS]: Do not record unwind-protect for | ||
| 36 | call_process_kill; the caller now does that. | ||
| 37 | (call_process_cleanup): Do not close the process fd; that's now | ||
| 38 | call_process_kill's responsibility. | ||
| 39 | (Fcall_process): Implement via new function call_process, which | ||
| 40 | has most of the old body of Fcall_process, but with a different API. | ||
| 41 | (call_process): New function that does not open or close filefd if | ||
| 42 | it is nonnegative. Record which fds need to be closed, and let | ||
| 43 | call_process_kill close (and remove the tempfile, on MSDOS) on error. | ||
| 44 | Signal an error if invoked recursively (could be done via a hook). | ||
| 45 | Simplify creation of the tempfile in the MSDOS case. | ||
| 46 | Don't create the output file until after checking for the executable. | ||
| 47 | Report any failure to open /dev/null. | ||
| 48 | Don't open /dev/null for writing twice; once is enough. | ||
| 49 | Don't create pipe if all output is being discarded or sent to file. | ||
| 50 | Don't worry about setting up the coding system or reading from the | ||
| 51 | pipe if all output is being discarded. | ||
| 52 | Hoist fd_error local into top level, to lessen block nesting. | ||
| 53 | Don't record deleted pid here; now done by Fcall_process_region. | ||
| 54 | (Fcall_process) [MSDOS]: Report mktemp failure immediately, | ||
| 55 | and note its success in synch_process_tempfile. | ||
| 56 | Do not leak resources when child_setup fails. | ||
| 57 | (Fcall_process) [!MSDOS && !WINDOWSNT]: Remove duplicate assignment | ||
| 58 | to child_errno. Remove unnecessary close of fd0; it's close-on-exec. | ||
| 59 | (create_temp_file): Now returns open fd, with an additional | ||
| 60 | Lisp_Object * argument to return the name. All callers changed. | ||
| 61 | Do not close the file; rewind it instead, and leave it open for | ||
| 62 | the caller. Do not lock the temp file. Unwind-protect the file | ||
| 63 | and the file-descriptor. | ||
| 64 | (Fcall_process_region): If the input is /dev/null, unwind-protect it. | ||
| 65 | If an asynchrounous process, record it here, not in call_process. | ||
| 66 | (syms_of_callproc) [MSDOS]: Initialize synch_process_tempfile. | ||
| 67 | * eval.c (set_unwind_protect): New function. | ||
| 68 | * fileio.c (write_region): New function, generalized from the | ||
| 69 | old Fwrite_region. Do not lock temp files. | ||
| 70 | (Fwrite_region): Use it. | ||
| 71 | * lisp.h (set_unwind_protect, write_region): New decls. | ||
| 72 | * process.c: Include <verify.h>. | ||
| 73 | (make_process): Mark fds as initially closed. | ||
| 74 | (deleted_pid_list): Now a list of pid-filename pairs. | ||
| 75 | All uses changed. | ||
| 76 | (close_process_fd): New function. | ||
| 77 | (SUBPROCESS_STDIN, WRITE_TO_SUBPROCESS, READ_FROM_SUBPROCESS) | ||
| 78 | (SUBPROCESS_STDOUT, READ_FROM_EXEC_MONITOR, EXEC_MONITOR_OUTPUT): | ||
| 79 | New constants. Verify that their number matches PROCESS_OPEN_FDS. | ||
| 80 | (create_process, create_pty, Fmake_serial_process) | ||
| 81 | (server_accept_connection): Record which fds need to be closed, | ||
| 82 | and let deactivate_process close them. | ||
| 83 | (Fmake_network_process): Do not discard the unwind-protect | ||
| 84 | until it's safe to do so. | ||
| 85 | (deactivate_process): Close the fds opened by create_process etc. | ||
| 86 | (Fprocess_send_eof): Adjust to new way of recording open fds. | ||
| 87 | Report an error if /dev/null can't be opened, instead of aborting. | ||
| 88 | * process.h (PROCESS_OPEN_FDS): New constant. | ||
| 89 | (struct Lisp_Process): New member open_fds. | ||
| 90 | (record_kill_process, record_deleted_pid): Adjust signatures. | ||
| 91 | (record_deleted_pid): Move decl here ... | ||
| 92 | * syswait.h (record_deleted_pid): ... from here. | ||
| 93 | |||
| 94 | 2013-08-11 Paul Eggert <eggert@cs.ucla.edu> | ||
| 95 | |||
| 96 | * decompress.c: Fix bugs with large buffers and weird inputs. | ||
| 97 | Tune a bit. Reindent as per usual Emacs style. | ||
| 98 | (BUFFER_SIZE): Remove. | ||
| 99 | (Fdecompress_gzipped_region): Do not mishandle input buffers with | ||
| 100 | more than UINT_MAX bytes. Decompress into the gap instead of into | ||
| 101 | an auto buffer, as this should avoid copying. Return nil if | ||
| 102 | 'inflate' returns Z_NEED_DICT, as we have no dictionary. Do not | ||
| 103 | set immediate_quit; we shouldn't trust zlib code that much. | ||
| 104 | |||
| 1 | 2013-08-11 Lars Magne Ingebrigtsen <larsi@gnus.org> | 105 | 2013-08-11 Lars Magne Ingebrigtsen <larsi@gnus.org> |
| 2 | 106 | ||
| 3 | * decompress.c (Fdecompress_gzipped_region): Respect all zlib | 107 | * decompress.c (Fdecompress_gzipped_region): Respect all zlib |
diff --git a/src/callproc.c b/src/callproc.c index 54bc5cd9dc0..2a9162cb5cc 100644 --- a/src/callproc.c +++ b/src/callproc.c | |||
| @@ -68,9 +68,10 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ | |||
| 68 | /* Pattern used by call-process-region to make temp files. */ | 68 | /* Pattern used by call-process-region to make temp files. */ |
| 69 | static Lisp_Object Vtemp_file_name_pattern; | 69 | static Lisp_Object Vtemp_file_name_pattern; |
| 70 | 70 | ||
| 71 | /* The next two variables are valid only while record-unwind-protect | 71 | /* The next two variables are used while record-unwind-protect is in place |
| 72 | is in place during call-process for a synchronous subprocess. At | 72 | during call-process for a subprocess for which record_deleted_pid has |
| 73 | other times, their contents are irrelevant. Doing this via static | 73 | not yet been called. At other times, synch_process_pid is zero and |
| 74 | synch_process_tempfile's contents are irrelevant. Doing this via static | ||
| 74 | C variables is more convenient than putting them into the arguments | 75 | C variables is more convenient than putting them into the arguments |
| 75 | of record-unwind-protect, as they need to be updated at randomish | 76 | of record-unwind-protect, as they need to be updated at randomish |
| 76 | times in the code, and Lisp cannot always store these values as | 77 | times in the code, and Lisp cannot always store these values as |
| @@ -80,8 +81,28 @@ static Lisp_Object Vtemp_file_name_pattern; | |||
| 80 | /* If nonzero, a process-ID that has not been reaped. */ | 81 | /* If nonzero, a process-ID that has not been reaped. */ |
| 81 | static pid_t synch_process_pid; | 82 | static pid_t synch_process_pid; |
| 82 | 83 | ||
| 83 | /* If nonnegative, a file descriptor that has not been closed. */ | 84 | /* If a string, the name of a temp file that has not been removed. */ |
| 84 | static int synch_process_fd; | 85 | #ifdef MSDOS |
| 86 | static Lisp_Object synch_process_tempfile; | ||
| 87 | #else | ||
| 88 | # define synch_process_tempfile make_number (0) | ||
| 89 | #endif | ||
| 90 | |||
| 91 | /* Indexes of file descriptors that need closing on call_process_kill. */ | ||
| 92 | enum | ||
| 93 | { | ||
| 94 | /* The subsidiary process's stdout and stderr. stdin is handled | ||
| 95 | separately, in either Fcall_process_region or create_temp_file. */ | ||
| 96 | CALLPROC_STDOUT, CALLPROC_STDERR, | ||
| 97 | |||
| 98 | /* How to read from a pipe (or substitute) from the subsidiary process. */ | ||
| 99 | CALLPROC_PIPEREAD, | ||
| 100 | |||
| 101 | /* A bound on the number of file descriptors. */ | ||
| 102 | CALLPROC_FDS | ||
| 103 | }; | ||
| 104 | |||
| 105 | static Lisp_Object call_process (ptrdiff_t, Lisp_Object *, int); | ||
| 85 | 106 | ||
| 86 | /* Block SIGCHLD. */ | 107 | /* Block SIGCHLD. */ |
| 87 | 108 | ||
| @@ -107,80 +128,68 @@ unblock_child_signal (void) | |||
| 107 | reaped on receipt of the first SIGCHLD after the critical section. */ | 128 | reaped on receipt of the first SIGCHLD after the critical section. */ |
| 108 | 129 | ||
| 109 | void | 130 | void |
| 110 | record_kill_process (struct Lisp_Process *p) | 131 | record_kill_process (struct Lisp_Process *p, Lisp_Object tempfile) |
| 111 | { | 132 | { |
| 112 | block_child_signal (); | 133 | block_child_signal (); |
| 113 | 134 | ||
| 114 | if (p->alive) | 135 | if (p->alive) |
| 115 | { | 136 | { |
| 137 | record_deleted_pid (p->pid, tempfile); | ||
| 116 | p->alive = 0; | 138 | p->alive = 0; |
| 117 | record_deleted_pid (p->pid); | ||
| 118 | kill (- p->pid, SIGKILL); | 139 | kill (- p->pid, SIGKILL); |
| 119 | } | 140 | } |
| 120 | 141 | ||
| 121 | unblock_child_signal (); | 142 | unblock_child_signal (); |
| 122 | } | 143 | } |
| 123 | 144 | ||
| 124 | /* Clean up when exiting call_process_cleanup. */ | 145 | /* Clean up files, file descriptors and processes created by Fcall_process. */ |
| 146 | |||
| 147 | static void | ||
| 148 | delete_temp_file (Lisp_Object name) | ||
| 149 | { | ||
| 150 | unlink (SSDATA (name)); | ||
| 151 | } | ||
| 125 | 152 | ||
| 126 | static void | 153 | static void |
| 127 | call_process_kill (void) | 154 | call_process_kill (void *ptr) |
| 128 | { | 155 | { |
| 129 | if (synch_process_fd >= 0) | 156 | int *callproc_fd = ptr; |
| 130 | emacs_close (synch_process_fd); | 157 | int i; |
| 158 | for (i = 0; i < CALLPROC_FDS; i++) | ||
| 159 | if (0 <= callproc_fd[i]) | ||
| 160 | emacs_close (callproc_fd[i]); | ||
| 131 | 161 | ||
| 132 | if (synch_process_pid) | 162 | if (synch_process_pid) |
| 133 | { | 163 | { |
| 134 | struct Lisp_Process proc; | 164 | struct Lisp_Process proc; |
| 135 | proc.alive = 1; | 165 | proc.alive = 1; |
| 136 | proc.pid = synch_process_pid; | 166 | proc.pid = synch_process_pid; |
| 137 | record_kill_process (&proc); | 167 | record_kill_process (&proc, synch_process_tempfile); |
| 168 | synch_process_pid = 0; | ||
| 138 | } | 169 | } |
| 170 | else if (STRINGP (synch_process_tempfile)) | ||
| 171 | delete_temp_file (synch_process_tempfile); | ||
| 139 | } | 172 | } |
| 140 | 173 | ||
| 141 | /* Clean up when exiting Fcall_process. | 174 | /* Clean up when exiting Fcall_process: restore the buffer, and |
| 142 | On MSDOS, delete the temporary file on any kind of termination. | 175 | kill the subsidiary process group if the process still exists. */ |
| 143 | On Unix, kill the process and any children on termination by signal. */ | ||
| 144 | 176 | ||
| 145 | static void | 177 | static void |
| 146 | call_process_cleanup (Lisp_Object arg) | 178 | call_process_cleanup (Lisp_Object buffer) |
| 147 | { | 179 | { |
| 148 | #ifdef MSDOS | ||
| 149 | Lisp_Object buffer = Fcar (arg); | ||
| 150 | Lisp_Object file = Fcdr (arg); | ||
| 151 | #else | ||
| 152 | Lisp_Object buffer = arg; | ||
| 153 | #endif | ||
| 154 | |||
| 155 | Fset_buffer (buffer); | 180 | Fset_buffer (buffer); |
| 156 | 181 | ||
| 157 | #ifndef MSDOS | ||
| 158 | /* If the process still exists, kill its process group. */ | ||
| 159 | if (synch_process_pid) | 182 | if (synch_process_pid) |
| 160 | { | 183 | { |
| 161 | ptrdiff_t count = SPECPDL_INDEX (); | ||
| 162 | kill (-synch_process_pid, SIGINT); | 184 | kill (-synch_process_pid, SIGINT); |
| 163 | record_unwind_protect_void (call_process_kill); | ||
| 164 | message1 ("Waiting for process to die...(type C-g again to kill it instantly)"); | 185 | message1 ("Waiting for process to die...(type C-g again to kill it instantly)"); |
| 165 | immediate_quit = 1; | 186 | immediate_quit = 1; |
| 166 | QUIT; | 187 | QUIT; |
| 167 | wait_for_termination (synch_process_pid, 0, 1); | 188 | wait_for_termination (synch_process_pid, 0, 1); |
| 168 | synch_process_pid = 0; | 189 | synch_process_pid = 0; |
| 169 | immediate_quit = 0; | 190 | immediate_quit = 0; |
| 170 | specpdl_ptr = specpdl + count; /* Discard the unwind protect. */ | ||
| 171 | message1 ("Waiting for process to die...done"); | 191 | message1 ("Waiting for process to die...done"); |
| 172 | } | 192 | } |
| 173 | #endif | ||
| 174 | |||
| 175 | if (synch_process_fd >= 0) | ||
| 176 | emacs_close (synch_process_fd); | ||
| 177 | |||
| 178 | #ifdef MSDOS | ||
| 179 | /* FILE is "" when we didn't actually create a temporary file in | ||
| 180 | call-process. */ | ||
| 181 | if (!(strcmp (SDATA (file), NULL_DEVICE) == 0 || SREF (file, 0) == '\0')) | ||
| 182 | unlink (SDATA (file)); | ||
| 183 | #endif | ||
| 184 | } | 193 | } |
| 185 | 194 | ||
| 186 | #ifdef DOS_NT | 195 | #ifdef DOS_NT |
| @@ -218,10 +227,42 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you quit again. | |||
| 218 | usage: (call-process PROGRAM &optional INFILE DESTINATION DISPLAY &rest ARGS) */) | 227 | usage: (call-process PROGRAM &optional INFILE DESTINATION DISPLAY &rest ARGS) */) |
| 219 | (ptrdiff_t nargs, Lisp_Object *args) | 228 | (ptrdiff_t nargs, Lisp_Object *args) |
| 220 | { | 229 | { |
| 221 | Lisp_Object infile, buffer, current_dir, path; | 230 | Lisp_Object infile, encoded_infile; |
| 231 | int filefd; | ||
| 232 | struct gcpro gcpro1; | ||
| 233 | ptrdiff_t count = SPECPDL_INDEX (); | ||
| 234 | |||
| 235 | if (nargs >= 2 && ! NILP (args[1])) | ||
| 236 | { | ||
| 237 | infile = Fexpand_file_name (args[1], BVAR (current_buffer, directory)); | ||
| 238 | CHECK_STRING (infile); | ||
| 239 | } | ||
| 240 | else | ||
| 241 | infile = build_string (NULL_DEVICE); | ||
| 242 | |||
| 243 | GCPRO1 (infile); | ||
| 244 | encoded_infile = STRING_MULTIBYTE (infile) ? ENCODE_FILE (infile) : infile; | ||
| 245 | |||
| 246 | filefd = emacs_open (SSDATA (encoded_infile), O_RDONLY, 0); | ||
| 247 | if (filefd < 0) | ||
| 248 | report_file_error ("Opening process input file", infile); | ||
| 249 | record_unwind_protect_int (close_file_unwind, filefd); | ||
| 250 | UNGCPRO; | ||
| 251 | return unbind_to (count, call_process (nargs, args, filefd)); | ||
| 252 | } | ||
| 253 | |||
| 254 | /* Like Fcall_process (NARGS, ARGS), except use FILEFD as the input file. | ||
| 255 | At entry, the specpdl stack top entry must be close_file_unwind (FILEFD). */ | ||
| 256 | |||
| 257 | static Lisp_Object | ||
| 258 | call_process (ptrdiff_t nargs, Lisp_Object *args, int filefd) | ||
| 259 | { | ||
| 260 | Lisp_Object buffer, current_dir, path; | ||
| 222 | bool display_p; | 261 | bool display_p; |
| 223 | int fd0, fd1, filefd; | 262 | int fd0; |
| 263 | int callproc_fd[CALLPROC_FDS]; | ||
| 224 | int status; | 264 | int status; |
| 265 | ptrdiff_t i; | ||
| 225 | ptrdiff_t count = SPECPDL_INDEX (); | 266 | ptrdiff_t count = SPECPDL_INDEX (); |
| 226 | USE_SAFE_ALLOCA; | 267 | USE_SAFE_ALLOCA; |
| 227 | 268 | ||
| @@ -231,19 +272,21 @@ usage: (call-process PROGRAM &optional INFILE DESTINATION DISPLAY &rest ARGS) * | |||
| 231 | Lisp_Object error_file; | 272 | Lisp_Object error_file; |
| 232 | Lisp_Object output_file = Qnil; | 273 | Lisp_Object output_file = Qnil; |
| 233 | #ifdef MSDOS /* Demacs 1.1.1 91/10/16 HIRANO Satoshi */ | 274 | #ifdef MSDOS /* Demacs 1.1.1 91/10/16 HIRANO Satoshi */ |
| 234 | char *outf, *tempfile = NULL; | 275 | char *tempfile = NULL; |
| 235 | int outfilefd; | ||
| 236 | int pid; | 276 | int pid; |
| 237 | #else | 277 | #else |
| 238 | pid_t pid; | 278 | pid_t pid; |
| 239 | #endif | 279 | #endif |
| 240 | int child_errno; | 280 | int child_errno; |
| 241 | int fd_output = -1; | 281 | int fd_output, fd_error; |
| 242 | struct coding_system process_coding; /* coding-system of process output */ | 282 | struct coding_system process_coding; /* coding-system of process output */ |
| 243 | struct coding_system argument_coding; /* coding-system of arguments */ | 283 | struct coding_system argument_coding; /* coding-system of arguments */ |
| 244 | /* Set to the return value of Ffind_operation_coding_system. */ | 284 | /* Set to the return value of Ffind_operation_coding_system. */ |
| 245 | Lisp_Object coding_systems; | 285 | Lisp_Object coding_systems; |
| 246 | bool output_to_buffer = 1; | 286 | bool discard_output; |
| 287 | |||
| 288 | if (synch_process_pid) | ||
| 289 | error ("call-process invoked recursively"); | ||
| 247 | 290 | ||
| 248 | /* Qt denotes that Ffind_operation_coding_system is not yet called. */ | 291 | /* Qt denotes that Ffind_operation_coding_system is not yet called. */ |
| 249 | coding_systems = Qt; | 292 | coding_systems = Qt; |
| @@ -262,7 +305,6 @@ usage: (call-process PROGRAM &optional INFILE DESTINATION DISPLAY &rest ARGS) * | |||
| 262 | /* Decide the coding-system for giving arguments. */ | 305 | /* Decide the coding-system for giving arguments. */ |
| 263 | { | 306 | { |
| 264 | Lisp_Object val, *args2; | 307 | Lisp_Object val, *args2; |
| 265 | ptrdiff_t i; | ||
| 266 | 308 | ||
| 267 | /* If arguments are supplied, we may have to encode them. */ | 309 | /* If arguments are supplied, we may have to encode them. */ |
| 268 | if (nargs >= 5) | 310 | if (nargs >= 5) |
| @@ -301,24 +343,16 @@ usage: (call-process PROGRAM &optional INFILE DESTINATION DISPLAY &rest ARGS) * | |||
| 301 | } | 343 | } |
| 302 | } | 344 | } |
| 303 | 345 | ||
| 304 | if (nargs >= 2 && ! NILP (args[1])) | 346 | if (nargs < 3) |
| 305 | { | 347 | buffer = Qnil; |
| 306 | infile = Fexpand_file_name (args[1], BVAR (current_buffer, directory)); | ||
| 307 | CHECK_STRING (infile); | ||
| 308 | } | ||
| 309 | else | 348 | else |
| 310 | infile = build_string (NULL_DEVICE); | ||
| 311 | |||
| 312 | if (nargs >= 3) | ||
| 313 | { | 349 | { |
| 314 | buffer = args[2]; | 350 | buffer = args[2]; |
| 315 | 351 | ||
| 316 | /* If BUFFER is a list, its meaning is (BUFFER-FOR-STDOUT | 352 | /* If BUFFER is a list, its meaning is (BUFFER-FOR-STDOUT |
| 317 | FILE-FOR-STDERR), unless the first element is :file, in which case see | 353 | FILE-FOR-STDERR), unless the first element is :file, in which case see |
| 318 | the next paragraph. */ | 354 | the next paragraph. */ |
| 319 | if (CONSP (buffer) | 355 | if (CONSP (buffer) && !EQ (XCAR (buffer), QCfile)) |
| 320 | && (! SYMBOLP (XCAR (buffer)) | ||
| 321 | || strcmp (SSDATA (SYMBOL_NAME (XCAR (buffer))), ":file"))) | ||
| 322 | { | 356 | { |
| 323 | if (CONSP (XCDR (buffer))) | 357 | if (CONSP (XCDR (buffer))) |
| 324 | { | 358 | { |
| @@ -335,9 +369,7 @@ usage: (call-process PROGRAM &optional INFILE DESTINATION DISPLAY &rest ARGS) * | |||
| 335 | } | 369 | } |
| 336 | 370 | ||
| 337 | /* If the buffer is (still) a list, it might be a (:file "file") spec. */ | 371 | /* If the buffer is (still) a list, it might be a (:file "file") spec. */ |
| 338 | if (CONSP (buffer) | 372 | if (CONSP (buffer) && EQ (XCAR (buffer), QCfile)) |
| 339 | && SYMBOLP (XCAR (buffer)) | ||
| 340 | && ! strcmp (SSDATA (SYMBOL_NAME (XCAR (buffer))), ":file")) | ||
| 341 | { | 373 | { |
| 342 | output_file = Fexpand_file_name (XCAR (XCDR (buffer)), | 374 | output_file = Fexpand_file_name (XCAR (XCDR (buffer)), |
| 343 | BVAR (current_buffer, directory)); | 375 | BVAR (current_buffer, directory)); |
| @@ -345,9 +377,7 @@ usage: (call-process PROGRAM &optional INFILE DESTINATION DISPLAY &rest ARGS) * | |||
| 345 | buffer = Qnil; | 377 | buffer = Qnil; |
| 346 | } | 378 | } |
| 347 | 379 | ||
| 348 | if (!(EQ (buffer, Qnil) | 380 | if (! (NILP (buffer) || EQ (buffer, Qt) || INTEGERP (buffer))) |
| 349 | || EQ (buffer, Qt) | ||
| 350 | || INTEGERP (buffer))) | ||
| 351 | { | 381 | { |
| 352 | Lisp_Object spec_buffer; | 382 | Lisp_Object spec_buffer; |
| 353 | spec_buffer = buffer; | 383 | spec_buffer = buffer; |
| @@ -358,8 +388,6 @@ usage: (call-process PROGRAM &optional INFILE DESTINATION DISPLAY &rest ARGS) * | |||
| 358 | CHECK_BUFFER (buffer); | 388 | CHECK_BUFFER (buffer); |
| 359 | } | 389 | } |
| 360 | } | 390 | } |
| 361 | else | ||
| 362 | buffer = Qnil; | ||
| 363 | 391 | ||
| 364 | /* Make sure that the child will be able to chdir to the current | 392 | /* Make sure that the child will be able to chdir to the current |
| 365 | buffer's current directory, or its unhandled equivalent. We | 393 | buffer's current directory, or its unhandled equivalent. We |
| @@ -372,11 +400,11 @@ usage: (call-process PROGRAM &optional INFILE DESTINATION DISPLAY &rest ARGS) * | |||
| 372 | protected by the caller, so all we really have to worry about is | 400 | protected by the caller, so all we really have to worry about is |
| 373 | buffer. */ | 401 | buffer. */ |
| 374 | { | 402 | { |
| 375 | struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5; | 403 | struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; |
| 376 | 404 | ||
| 377 | current_dir = BVAR (current_buffer, directory); | 405 | current_dir = BVAR (current_buffer, directory); |
| 378 | 406 | ||
| 379 | GCPRO5 (infile, buffer, current_dir, error_file, output_file); | 407 | GCPRO4 (buffer, current_dir, error_file, output_file); |
| 380 | 408 | ||
| 381 | current_dir = Funhandled_file_name_directory (current_dir); | 409 | current_dir = Funhandled_file_name_directory (current_dir); |
| 382 | if (NILP (current_dir)) | 410 | if (NILP (current_dir)) |
| @@ -390,8 +418,6 @@ usage: (call-process PROGRAM &optional INFILE DESTINATION DISPLAY &rest ARGS) * | |||
| 390 | report_file_error ("Setting current directory", | 418 | report_file_error ("Setting current directory", |
| 391 | BVAR (current_buffer, directory)); | 419 | BVAR (current_buffer, directory)); |
| 392 | 420 | ||
| 393 | if (STRING_MULTIBYTE (infile)) | ||
| 394 | infile = ENCODE_FILE (infile); | ||
| 395 | if (STRING_MULTIBYTE (current_dir)) | 421 | if (STRING_MULTIBYTE (current_dir)) |
| 396 | current_dir = ENCODE_FILE (current_dir); | 422 | current_dir = ENCODE_FILE (current_dir); |
| 397 | if (STRINGP (error_file) && STRING_MULTIBYTE (error_file)) | 423 | if (STRINGP (error_file) && STRING_MULTIBYTE (error_file)) |
| @@ -403,44 +429,23 @@ usage: (call-process PROGRAM &optional INFILE DESTINATION DISPLAY &rest ARGS) * | |||
| 403 | 429 | ||
| 404 | display_p = INTERACTIVE && nargs >= 4 && !NILP (args[3]); | 430 | display_p = INTERACTIVE && nargs >= 4 && !NILP (args[3]); |
| 405 | 431 | ||
| 406 | filefd = emacs_open (SSDATA (infile), O_RDONLY, 0); | 432 | for (i = 0; i < CALLPROC_FDS; i++) |
| 407 | if (filefd < 0) | 433 | callproc_fd[i] = -1; |
| 408 | { | 434 | #ifdef MSDOS |
| 409 | int open_errno = errno; | 435 | synch_process_tempfile = make_number (0); |
| 410 | report_file_errno ("Opening process input file", DECODE_FILE (infile), | 436 | #endif |
| 411 | open_errno); | 437 | record_unwind_protect_ptr (call_process_kill, callproc_fd); |
| 412 | } | ||
| 413 | |||
| 414 | if (STRINGP (output_file)) | ||
| 415 | { | ||
| 416 | fd_output = emacs_open (SSDATA (output_file), | ||
| 417 | O_WRONLY | O_CREAT | O_TRUNC | O_TEXT, | ||
| 418 | default_output_mode); | ||
| 419 | if (fd_output < 0) | ||
| 420 | { | ||
| 421 | int open_errno = errno; | ||
| 422 | output_file = DECODE_FILE (output_file); | ||
| 423 | report_file_errno ("Opening process output file", | ||
| 424 | output_file, open_errno); | ||
| 425 | } | ||
| 426 | if (STRINGP (error_file) || NILP (error_file)) | ||
| 427 | output_to_buffer = 0; | ||
| 428 | } | ||
| 429 | 438 | ||
| 430 | /* Search for program; barf if not found. */ | 439 | /* Search for program; barf if not found. */ |
| 431 | { | 440 | { |
| 432 | struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; | 441 | struct gcpro gcpro1, gcpro2, gcpro3; |
| 433 | int ok; | 442 | int ok; |
| 434 | 443 | ||
| 435 | GCPRO4 (infile, buffer, current_dir, error_file); | 444 | GCPRO3 (buffer, current_dir, error_file); |
| 436 | ok = openp (Vexec_path, args[0], Vexec_suffixes, &path, make_number (X_OK)); | 445 | ok = openp (Vexec_path, args[0], Vexec_suffixes, &path, make_number (X_OK)); |
| 437 | UNGCPRO; | 446 | UNGCPRO; |
| 438 | if (ok < 0) | 447 | if (ok < 0) |
| 439 | { | 448 | report_file_error ("Searching for program", args[0]); |
| 440 | int openp_errno = errno; | ||
| 441 | emacs_close (filefd); | ||
| 442 | report_file_errno ("Searching for program", args[0], openp_errno); | ||
| 443 | } | ||
| 444 | } | 449 | } |
| 445 | 450 | ||
| 446 | /* If program file name starts with /: for quoting a magic name, | 451 | /* If program file name starts with /: for quoting a magic name, |
| @@ -452,9 +457,9 @@ usage: (call-process PROGRAM &optional INFILE DESTINATION DISPLAY &rest ARGS) * | |||
| 452 | new_argv = SAFE_ALLOCA ((nargs > 4 ? nargs - 2 : 2) * sizeof *new_argv); | 457 | new_argv = SAFE_ALLOCA ((nargs > 4 ? nargs - 2 : 2) * sizeof *new_argv); |
| 453 | 458 | ||
| 454 | { | 459 | { |
| 455 | struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5; | 460 | struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; |
| 456 | 461 | ||
| 457 | GCPRO5 (infile, buffer, current_dir, path, error_file); | 462 | GCPRO4 (buffer, current_dir, path, error_file); |
| 458 | if (nargs > 4) | 463 | if (nargs > 4) |
| 459 | { | 464 | { |
| 460 | ptrdiff_t i; | 465 | ptrdiff_t i; |
| @@ -479,254 +484,213 @@ usage: (call-process PROGRAM &optional INFILE DESTINATION DISPLAY &rest ARGS) * | |||
| 479 | UNGCPRO; | 484 | UNGCPRO; |
| 480 | } | 485 | } |
| 481 | 486 | ||
| 482 | #ifdef MSDOS /* MW, July 1993 */ | 487 | discard_output = INTEGERP (buffer) || (NILP (buffer) && NILP (output_file)); |
| 483 | 488 | ||
| 484 | /* If we're redirecting STDOUT to a file, that file is already open | 489 | #ifdef MSDOS |
| 485 | on fd_output. */ | 490 | if (! discard_output && ! STRINGP (output_file)) |
| 486 | if (fd_output < 0) | ||
| 487 | { | 491 | { |
| 488 | if ((outf = egetenv ("TMPDIR"))) | 492 | char const *tmpdir = egetenv ("TMPDIR"); |
| 489 | strcpy (tempfile = alloca (strlen (outf) + 20), outf); | 493 | char const *outf = tmpdir ? tmpdir : ""; |
| 490 | else | 494 | tempfile = alloca (strlen (outf) + 20); |
| 491 | { | 495 | strcpy (tempfile, outf); |
| 492 | tempfile = alloca (20); | ||
| 493 | *tempfile = '\0'; | ||
| 494 | } | ||
| 495 | dostounix_filename (tempfile, 0); | 496 | dostounix_filename (tempfile, 0); |
| 496 | if (*tempfile == '\0' || tempfile[strlen (tempfile) - 1] != '/') | 497 | if (*tempfile == '\0' || tempfile[strlen (tempfile) - 1] != '/') |
| 497 | strcat (tempfile, "/"); | 498 | strcat (tempfile, "/"); |
| 498 | strcat (tempfile, "detmp.XXX"); | 499 | strcat (tempfile, "detmp.XXX"); |
| 499 | mktemp (tempfile); | 500 | mktemp (tempfile); |
| 500 | outfilefd = emacs_open (tempfile, O_WRONLY | O_CREAT | O_TRUNC, | 501 | if (!*tempfile) |
| 501 | S_IREAD | S_IWRITE); | 502 | report_file_error ("Opening process output file", Qnil); |
| 502 | if (outfilefd < 0) | 503 | output_file = build_string (tempfile); |
| 504 | synch_process_tempfile = output_file; | ||
| 505 | } | ||
| 506 | #endif | ||
| 507 | |||
| 508 | if (discard_output) | ||
| 509 | { | ||
| 510 | fd_output = emacs_open (NULL_DEVICE, O_WRONLY, 0); | ||
| 511 | if (fd_output < 0) | ||
| 512 | report_file_error ("Opening null device", Qnil); | ||
| 513 | } | ||
| 514 | else if (STRINGP (output_file)) | ||
| 515 | { | ||
| 516 | fd_output = emacs_open (SSDATA (output_file), | ||
| 517 | O_WRONLY | O_CREAT | O_TRUNC | O_TEXT, | ||
| 518 | default_output_mode); | ||
| 519 | if (fd_output < 0) | ||
| 503 | { | 520 | { |
| 504 | int open_errno = errno; | 521 | int open_errno = errno; |
| 505 | emacs_close (filefd); | 522 | output_file = DECODE_FILE (output_file); |
| 506 | report_file_errno ("Opening process output file", | 523 | report_file_errno ("Opening process output file", |
| 507 | build_string (tempfile), open_errno); | 524 | output_file, open_errno); |
| 508 | } | 525 | } |
| 509 | } | 526 | } |
| 510 | else | 527 | else |
| 511 | outfilefd = fd_output; | ||
| 512 | fd0 = filefd; | ||
| 513 | fd1 = outfilefd; | ||
| 514 | #endif /* MSDOS */ | ||
| 515 | |||
| 516 | if (INTEGERP (buffer)) | ||
| 517 | { | ||
| 518 | fd0 = -1; | ||
| 519 | fd1 = emacs_open (NULL_DEVICE, O_WRONLY, 0); | ||
| 520 | } | ||
| 521 | else | ||
| 522 | { | 528 | { |
| 523 | #ifndef MSDOS | ||
| 524 | int fd[2]; | 529 | int fd[2]; |
| 525 | if (emacs_pipe (fd) != 0) | 530 | if (emacs_pipe (fd) != 0) |
| 526 | { | 531 | report_file_error ("Creating process pipe", Qnil); |
| 527 | int pipe_errno = errno; | 532 | callproc_fd[CALLPROC_PIPEREAD] = fd[0]; |
| 528 | emacs_close (filefd); | 533 | fd_output = fd[1]; |
| 529 | report_file_errno ("Creating process pipe", Qnil, pipe_errno); | ||
| 530 | } | ||
| 531 | fd0 = fd[0]; | ||
| 532 | fd1 = fd[1]; | ||
| 533 | #endif | ||
| 534 | } | 534 | } |
| 535 | callproc_fd[CALLPROC_STDOUT] = fd_output; | ||
| 535 | 536 | ||
| 536 | { | 537 | fd_error = fd_output; |
| 537 | int fd_error = fd1; | ||
| 538 | 538 | ||
| 539 | if (fd_output >= 0) | 539 | if (STRINGP (error_file) || (NILP (error_file) && !discard_output)) |
| 540 | fd1 = fd_output; | 540 | { |
| 541 | 541 | fd_error = emacs_open ((STRINGP (error_file) | |
| 542 | if (NILP (error_file)) | 542 | ? SSDATA (error_file) |
| 543 | fd_error = emacs_open (NULL_DEVICE, O_WRONLY, 0); | 543 | : NULL_DEVICE), |
| 544 | else if (STRINGP (error_file)) | ||
| 545 | fd_error = emacs_open (SSDATA (error_file), | ||
| 546 | O_WRONLY | O_CREAT | O_TRUNC | O_TEXT, | 544 | O_WRONLY | O_CREAT | O_TRUNC | O_TEXT, |
| 547 | default_output_mode); | 545 | default_output_mode); |
| 548 | 546 | if (fd_error < 0) | |
| 549 | if (fd_error < 0) | 547 | { |
| 550 | { | 548 | int open_errno = errno; |
| 551 | int open_errno = errno; | 549 | report_file_errno ("Cannot redirect stderr", |
| 552 | emacs_close (filefd); | 550 | (STRINGP (error_file) |
| 553 | if (fd0 != filefd) | 551 | ? DECODE_FILE (error_file) |
| 554 | emacs_close (fd0); | 552 | : build_string (NULL_DEVICE)), |
| 555 | if (fd1 >= 0) | 553 | open_errno); |
| 556 | emacs_close (fd1); | 554 | } |
| 557 | #ifdef MSDOS | 555 | callproc_fd[CALLPROC_STDERR] = fd_error; |
| 558 | unlink (tempfile); | 556 | } |
| 559 | #endif | ||
| 560 | if (NILP (error_file)) | ||
| 561 | error_file = build_string (NULL_DEVICE); | ||
| 562 | else if (STRINGP (error_file)) | ||
| 563 | error_file = DECODE_FILE (error_file); | ||
| 564 | report_file_errno ("Cannot redirect stderr", error_file, open_errno); | ||
| 565 | } | ||
| 566 | 557 | ||
| 567 | #ifdef MSDOS /* MW, July 1993 */ | 558 | #ifdef MSDOS /* MW, July 1993 */ |
| 568 | /* Note that on MSDOS `child_setup' actually returns the child process | 559 | /* Note that on MSDOS `child_setup' actually returns the child process |
| 569 | exit status, not its PID, so assign it to status below. */ | 560 | exit status, not its PID, so assign it to status below. */ |
| 570 | pid = child_setup (filefd, outfilefd, fd_error, new_argv, 0, current_dir); | 561 | pid = child_setup (filefd, fd_output, fd_error, new_argv, 0, current_dir); |
| 571 | child_errno = errno; | 562 | |
| 572 | 563 | if (pid < 0) | |
| 573 | emacs_close (outfilefd); | 564 | { |
| 574 | if (fd_error != outfilefd) | 565 | child_errno = errno; |
| 575 | emacs_close (fd_error); | 566 | unbind_to (count, Qnil); |
| 576 | if (pid < 0) | 567 | synchronize_system_messages_locale (); |
| 577 | { | 568 | return |
| 578 | synchronize_system_messages_locale (); | 569 | code_convert_string_norecord (build_string (strerror (child_errno)), |
| 579 | return | 570 | Vlocale_coding_system, 0); |
| 580 | code_convert_string_norecord (build_string (strerror (child_errno)), | 571 | } |
| 581 | Vlocale_coding_system, 0); | 572 | status = pid; |
| 582 | } | 573 | |
| 583 | status = pid; | 574 | for (i = 0; i < CALLPROC_FDS; i++) |
| 584 | fd1 = -1; /* No harm in closing that one! */ | 575 | if (0 <= callproc_fd[i]) |
| 585 | if (tempfile) | ||
| 586 | { | 576 | { |
| 587 | /* Since CRLF is converted to LF within `decode_coding', we | 577 | emacs_close (callproc_fd[i]); |
| 588 | can always open a file with binary mode. */ | 578 | callproc_fd[i] = -1; |
| 589 | fd0 = emacs_open (tempfile, O_RDONLY | O_BINARY, 0); | ||
| 590 | if (fd0 < 0) | ||
| 591 | { | ||
| 592 | int open_errno = errno; | ||
| 593 | unlink (tempfile); | ||
| 594 | emacs_close (filefd); | ||
| 595 | report_file_errno ("Cannot re-open temporary file", | ||
| 596 | build_string (tempfile), open_errno); | ||
| 597 | } | ||
| 598 | } | 579 | } |
| 599 | else | 580 | emacs_close (filefd); |
| 600 | fd0 = -1; /* We are not going to read from tempfile. */ | 581 | clear_unwind_protect (count - 1); |
| 582 | |||
| 583 | if (tempfile) | ||
| 584 | { | ||
| 585 | /* Since CRLF is converted to LF within `decode_coding', we | ||
| 586 | can always open a file with binary mode. */ | ||
| 587 | callproc_fd[CALLPROC_PIPEREAD] = emacs_open (tempfile, | ||
| 588 | O_RDONLY | O_BINARY, 0); | ||
| 589 | if (callproc_fd[CALLPROC_PIPEREAD] < 0) | ||
| 590 | { | ||
| 591 | int open_errno = errno; | ||
| 592 | report_file_errno ("Cannot re-open temporary file", | ||
| 593 | build_string (tempfile), open_errno); | ||
| 594 | } | ||
| 595 | } | ||
| 596 | |||
| 601 | #endif /* MSDOS */ | 597 | #endif /* MSDOS */ |
| 602 | 598 | ||
| 603 | /* Do the unwind-protect now, even though the pid is not known, so | 599 | /* Do the unwind-protect now, even though the pid is not known, so |
| 604 | that no storage allocation is done in the critical section. | 600 | that no storage allocation is done in the critical section. |
| 605 | The actual PID will be filled in during the critical section. */ | 601 | The actual PID will be filled in during the critical section. */ |
| 606 | synch_process_pid = 0; | 602 | record_unwind_protect (call_process_cleanup, Fcurrent_buffer ()); |
| 607 | synch_process_fd = fd0; | ||
| 608 | 603 | ||
| 609 | #ifdef MSDOS | 604 | #ifndef MSDOS |
| 610 | /* MSDOS needs different cleanup information. */ | ||
| 611 | record_unwind_protect (call_process_cleanup, | ||
| 612 | Fcons (Fcurrent_buffer (), | ||
| 613 | build_string (tempfile ? tempfile : ""))); | ||
| 614 | #else | ||
| 615 | record_unwind_protect (call_process_cleanup, Fcurrent_buffer ()); | ||
| 616 | 605 | ||
| 617 | block_input (); | 606 | block_input (); |
| 618 | block_child_signal (); | 607 | block_child_signal (); |
| 619 | 608 | ||
| 620 | #ifdef WINDOWSNT | 609 | #ifdef WINDOWSNT |
| 621 | pid = child_setup (filefd, fd1, fd_error, new_argv, 0, current_dir); | 610 | pid = child_setup (filefd, fd_output, fd_error, new_argv, 0, current_dir); |
| 622 | /* We need to record the input file of this child, for when we are | ||
| 623 | called from call-process-region to create an async subprocess. | ||
| 624 | That's because call-process-region's unwind procedure will | ||
| 625 | attempt to delete the temporary input file, which will fail | ||
| 626 | because that file is still in use. Recording it with the child | ||
| 627 | will allow us to delete the file when the subprocess exits. | ||
| 628 | The second part of this is in delete_temp_file, q.v. */ | ||
| 629 | if (pid > 0 && INTEGERP (buffer) && nargs >= 2 && !NILP (args[1])) | ||
| 630 | record_infile (pid, xstrdup (SSDATA (infile))); | ||
| 631 | #else /* not WINDOWSNT */ | 611 | #else /* not WINDOWSNT */ |
| 632 | 612 | ||
| 633 | /* vfork, and prevent local vars from being clobbered by the vfork. */ | 613 | /* vfork, and prevent local vars from being clobbered by the vfork. */ |
| 634 | { | 614 | { |
| 635 | Lisp_Object volatile buffer_volatile = buffer; | 615 | Lisp_Object volatile buffer_volatile = buffer; |
| 636 | Lisp_Object volatile coding_systems_volatile = coding_systems; | 616 | Lisp_Object volatile coding_systems_volatile = coding_systems; |
| 637 | Lisp_Object volatile current_dir_volatile = current_dir; | 617 | Lisp_Object volatile current_dir_volatile = current_dir; |
| 638 | bool volatile display_p_volatile = display_p; | 618 | bool volatile display_p_volatile = display_p; |
| 639 | bool volatile output_to_buffer_volatile = output_to_buffer; | 619 | bool volatile sa_must_free_volatile = sa_must_free; |
| 640 | bool volatile sa_must_free_volatile = sa_must_free; | 620 | int volatile fd_error_volatile = fd_error; |
| 641 | int volatile fd1_volatile = fd1; | 621 | int volatile filefd_volatile = filefd; |
| 642 | int volatile fd_error_volatile = fd_error; | 622 | ptrdiff_t volatile count_volatile = count; |
| 643 | int volatile fd_output_volatile = fd_output; | 623 | ptrdiff_t volatile sa_count_volatile = sa_count; |
| 644 | int volatile filefd_volatile = filefd; | 624 | char **volatile new_argv_volatile = new_argv; |
| 645 | ptrdiff_t volatile count_volatile = count; | 625 | int volatile callproc_fd_volatile[CALLPROC_FDS]; |
| 646 | ptrdiff_t volatile sa_count_volatile = sa_count; | 626 | for (i = 0; i < CALLPROC_FDS; i++) |
| 647 | char **volatile new_argv_volatile = new_argv; | 627 | callproc_fd_volatile[i] = callproc_fd[i]; |
| 648 | 628 | ||
| 649 | pid = vfork (); | 629 | pid = vfork (); |
| 650 | child_errno = errno; | 630 | |
| 651 | 631 | buffer = buffer_volatile; | |
| 652 | buffer = buffer_volatile; | 632 | coding_systems = coding_systems_volatile; |
| 653 | coding_systems = coding_systems_volatile; | 633 | current_dir = current_dir_volatile; |
| 654 | current_dir = current_dir_volatile; | 634 | display_p = display_p_volatile; |
| 655 | display_p = display_p_volatile; | 635 | sa_must_free = sa_must_free_volatile; |
| 656 | output_to_buffer = output_to_buffer_volatile; | 636 | fd_error = fd_error_volatile; |
| 657 | sa_must_free = sa_must_free_volatile; | 637 | filefd = filefd_volatile; |
| 658 | fd1 = fd1_volatile; | 638 | count = count_volatile; |
| 659 | fd_error = fd_error_volatile; | 639 | sa_count = sa_count_volatile; |
| 660 | fd_output = fd_output_volatile; | 640 | new_argv = new_argv_volatile; |
| 661 | filefd = filefd_volatile; | 641 | |
| 662 | count = count_volatile; | 642 | for (i = 0; i < CALLPROC_FDS; i++) |
| 663 | sa_count = sa_count_volatile; | 643 | callproc_fd[i] = callproc_fd_volatile[i]; |
| 664 | new_argv = new_argv_volatile; | 644 | fd_output = callproc_fd[CALLPROC_STDOUT]; |
| 665 | 645 | } | |
| 666 | fd0 = synch_process_fd; | ||
| 667 | } | ||
| 668 | |||
| 669 | if (pid == 0) | ||
| 670 | { | ||
| 671 | unblock_child_signal (); | ||
| 672 | 646 | ||
| 673 | if (fd0 >= 0) | 647 | if (pid == 0) |
| 674 | emacs_close (fd0); | 648 | { |
| 649 | unblock_child_signal (); | ||
| 675 | 650 | ||
| 676 | setsid (); | 651 | setsid (); |
| 677 | 652 | ||
| 678 | /* Emacs ignores SIGPIPE, but the child should not. */ | 653 | /* Emacs ignores SIGPIPE, but the child should not. */ |
| 679 | signal (SIGPIPE, SIG_DFL); | 654 | signal (SIGPIPE, SIG_DFL); |
| 680 | 655 | ||
| 681 | child_setup (filefd, fd1, fd_error, new_argv, 0, current_dir); | 656 | child_setup (filefd, fd_output, fd_error, new_argv, 0, current_dir); |
| 682 | } | 657 | } |
| 683 | 658 | ||
| 684 | #endif /* not WINDOWSNT */ | 659 | #endif /* not WINDOWSNT */ |
| 685 | 660 | ||
| 686 | child_errno = errno; | 661 | child_errno = errno; |
| 687 | 662 | ||
| 688 | if (pid > 0) | 663 | if (pid > 0) |
| 689 | { | 664 | synch_process_pid = pid; |
| 690 | if (INTEGERP (buffer)) | ||
| 691 | record_deleted_pid (pid); | ||
| 692 | else | ||
| 693 | synch_process_pid = pid; | ||
| 694 | } | ||
| 695 | 665 | ||
| 696 | unblock_child_signal (); | 666 | unblock_child_signal (); |
| 697 | unblock_input (); | 667 | unblock_input (); |
| 698 | 668 | ||
| 699 | /* The MSDOS case did this already. */ | ||
| 700 | if (fd_error >= 0) | ||
| 701 | emacs_close (fd_error); | ||
| 702 | #endif /* not MSDOS */ | 669 | #endif /* not MSDOS */ |
| 703 | 670 | ||
| 704 | /* Close most of our file descriptors, but not fd0 | ||
| 705 | since we will use that to read input from. */ | ||
| 706 | emacs_close (filefd); | ||
| 707 | if (fd_output >= 0) | ||
| 708 | emacs_close (fd_output); | ||
| 709 | if (fd1 >= 0 && fd1 != fd_error) | ||
| 710 | emacs_close (fd1); | ||
| 711 | } | ||
| 712 | |||
| 713 | if (pid < 0) | 671 | if (pid < 0) |
| 714 | report_file_errno ("Doing vfork", Qnil, child_errno); | 672 | report_file_errno ("Doing vfork", Qnil, child_errno); |
| 715 | 673 | ||
| 674 | /* Close our file descriptors, except for callproc_fd[CALLPROC_PIPEREAD] | ||
| 675 | since we will use that to read input from. */ | ||
| 676 | for (i = 0; i < CALLPROC_FDS; i++) | ||
| 677 | if (i != CALLPROC_PIPEREAD && 0 <= callproc_fd[i]) | ||
| 678 | { | ||
| 679 | emacs_close (callproc_fd[i]); | ||
| 680 | callproc_fd[i] = -1; | ||
| 681 | } | ||
| 682 | emacs_close (filefd); | ||
| 683 | clear_unwind_protect (count - 1); | ||
| 684 | |||
| 716 | if (INTEGERP (buffer)) | 685 | if (INTEGERP (buffer)) |
| 717 | return unbind_to (count, Qnil); | 686 | return unbind_to (count, Qnil); |
| 718 | 687 | ||
| 719 | if (BUFFERP (buffer)) | 688 | if (BUFFERP (buffer)) |
| 720 | Fset_buffer (buffer); | 689 | Fset_buffer (buffer); |
| 721 | 690 | ||
| 722 | if (NILP (buffer)) | 691 | fd0 = callproc_fd[CALLPROC_PIPEREAD]; |
| 723 | { | 692 | |
| 724 | /* If BUFFER is nil, we must read process output once and then | 693 | if (0 <= fd0) |
| 725 | discard it, so setup coding system but with nil. */ | ||
| 726 | setup_coding_system (Qnil, &process_coding); | ||
| 727 | process_coding.dst_multibyte = 0; | ||
| 728 | } | ||
| 729 | else | ||
| 730 | { | 694 | { |
| 731 | Lisp_Object val, *args2; | 695 | Lisp_Object val, *args2; |
| 732 | 696 | ||
| @@ -762,13 +726,13 @@ usage: (call-process PROGRAM &optional INFILE DESTINATION DISPLAY &rest ARGS) * | |||
| 762 | setup_coding_system (val, &process_coding); | 726 | setup_coding_system (val, &process_coding); |
| 763 | process_coding.dst_multibyte | 727 | process_coding.dst_multibyte |
| 764 | = ! NILP (BVAR (current_buffer, enable_multibyte_characters)); | 728 | = ! NILP (BVAR (current_buffer, enable_multibyte_characters)); |
| 729 | process_coding.src_multibyte = 0; | ||
| 765 | } | 730 | } |
| 766 | process_coding.src_multibyte = 0; | ||
| 767 | 731 | ||
| 768 | immediate_quit = 1; | 732 | immediate_quit = 1; |
| 769 | QUIT; | 733 | QUIT; |
| 770 | 734 | ||
| 771 | if (output_to_buffer) | 735 | if (0 <= fd0) |
| 772 | { | 736 | { |
| 773 | enum { CALLPROC_BUFFER_SIZE_MIN = 16 * 1024 }; | 737 | enum { CALLPROC_BUFFER_SIZE_MIN = 16 * 1024 }; |
| 774 | enum { CALLPROC_BUFFER_SIZE_MAX = 4 * CALLPROC_BUFFER_SIZE_MIN }; | 738 | enum { CALLPROC_BUFFER_SIZE_MAX = 4 * CALLPROC_BUFFER_SIZE_MIN }; |
| @@ -779,9 +743,8 @@ usage: (call-process PROGRAM &optional INFILE DESTINATION DISPLAY &rest ARGS) * | |||
| 779 | EMACS_INT total_read = 0; | 743 | EMACS_INT total_read = 0; |
| 780 | int carryover = 0; | 744 | int carryover = 0; |
| 781 | bool display_on_the_fly = display_p; | 745 | bool display_on_the_fly = display_p; |
| 782 | struct coding_system saved_coding; | 746 | struct coding_system saved_coding = process_coding; |
| 783 | 747 | ||
| 784 | saved_coding = process_coding; | ||
| 785 | while (1) | 748 | while (1) |
| 786 | { | 749 | { |
| 787 | /* Repeatedly read until we've filled as much as possible | 750 | /* Repeatedly read until we've filled as much as possible |
| @@ -812,58 +775,54 @@ usage: (call-process PROGRAM &optional INFILE DESTINATION DISPLAY &rest ARGS) * | |||
| 812 | /* Now NREAD is the total amount of data in the buffer. */ | 775 | /* Now NREAD is the total amount of data in the buffer. */ |
| 813 | immediate_quit = 0; | 776 | immediate_quit = 0; |
| 814 | 777 | ||
| 815 | if (!NILP (buffer)) | 778 | if (NILP (BVAR (current_buffer, enable_multibyte_characters)) |
| 816 | { | 779 | && ! CODING_MAY_REQUIRE_DECODING (&process_coding)) |
| 817 | if (NILP (BVAR (current_buffer, enable_multibyte_characters)) | 780 | insert_1_both (buf, nread, nread, 0, 1, 0); |
| 818 | && ! CODING_MAY_REQUIRE_DECODING (&process_coding)) | 781 | else |
| 819 | insert_1_both (buf, nread, nread, 0, 1, 0); | 782 | { /* We have to decode the input. */ |
| 820 | else | 783 | Lisp_Object curbuf; |
| 821 | { /* We have to decode the input. */ | 784 | ptrdiff_t count1 = SPECPDL_INDEX (); |
| 822 | Lisp_Object curbuf; | 785 | |
| 823 | ptrdiff_t count1 = SPECPDL_INDEX (); | 786 | XSETBUFFER (curbuf, current_buffer); |
| 824 | 787 | /* We cannot allow after-change-functions be run | |
| 825 | XSETBUFFER (curbuf, current_buffer); | 788 | during decoding, because that might modify the |
| 826 | /* We cannot allow after-change-functions be run | 789 | buffer, while we rely on process_coding.produced to |
| 827 | during decoding, because that might modify the | 790 | faithfully reflect inserted text until we |
| 828 | buffer, while we rely on process_coding.produced to | 791 | TEMP_SET_PT_BOTH below. */ |
| 829 | faithfully reflect inserted text until we | 792 | specbind (Qinhibit_modification_hooks, Qt); |
| 830 | TEMP_SET_PT_BOTH below. */ | 793 | decode_coding_c_string (&process_coding, |
| 831 | specbind (Qinhibit_modification_hooks, Qt); | 794 | (unsigned char *) buf, nread, curbuf); |
| 832 | decode_coding_c_string (&process_coding, | 795 | unbind_to (count1, Qnil); |
| 833 | (unsigned char *) buf, nread, curbuf); | 796 | if (display_on_the_fly |
| 834 | unbind_to (count1, Qnil); | 797 | && CODING_REQUIRE_DETECTION (&saved_coding) |
| 835 | if (display_on_the_fly | 798 | && ! CODING_REQUIRE_DETECTION (&process_coding)) |
| 836 | && CODING_REQUIRE_DETECTION (&saved_coding) | 799 | { |
| 837 | && ! CODING_REQUIRE_DETECTION (&process_coding)) | 800 | /* We have detected some coding system, but the |
| 838 | { | 801 | detection may have been via insufficient data. |
| 839 | /* We have detected some coding system. But, | 802 | So give up displaying on the fly. */ |
| 840 | there's a possibility that the detection was | 803 | if (process_coding.produced > 0) |
| 841 | done by insufficient data. So, we give up | 804 | del_range_2 (process_coding.dst_pos, |
| 842 | displaying on the fly. */ | 805 | process_coding.dst_pos_byte, |
| 843 | if (process_coding.produced > 0) | 806 | (process_coding.dst_pos |
| 844 | del_range_2 (process_coding.dst_pos, | 807 | + process_coding.produced_char), |
| 845 | process_coding.dst_pos_byte, | 808 | (process_coding.dst_pos_byte |
| 846 | process_coding.dst_pos | 809 | + process_coding.produced), |
| 847 | + process_coding.produced_char, | 810 | 0); |
| 848 | process_coding.dst_pos_byte | 811 | display_on_the_fly = 0; |
| 849 | + process_coding.produced, 0); | 812 | process_coding = saved_coding; |
| 850 | display_on_the_fly = 0; | 813 | carryover = nread; |
| 851 | process_coding = saved_coding; | 814 | /* Make the above condition always fail in the future. */ |
| 852 | carryover = nread; | 815 | saved_coding.common_flags |
| 853 | /* This is to make the above condition always | 816 | &= ~CODING_REQUIRE_DETECTION_MASK; |
| 854 | fails in the future. */ | 817 | continue; |
| 855 | saved_coding.common_flags | ||
| 856 | &= ~CODING_REQUIRE_DETECTION_MASK; | ||
| 857 | continue; | ||
| 858 | } | ||
| 859 | |||
| 860 | TEMP_SET_PT_BOTH (PT + process_coding.produced_char, | ||
| 861 | PT_BYTE + process_coding.produced); | ||
| 862 | carryover = process_coding.carryover_bytes; | ||
| 863 | if (carryover > 0) | ||
| 864 | memcpy (buf, process_coding.carryover, | ||
| 865 | process_coding.carryover_bytes); | ||
| 866 | } | 818 | } |
| 819 | |||
| 820 | TEMP_SET_PT_BOTH (PT + process_coding.produced_char, | ||
| 821 | PT_BYTE + process_coding.produced); | ||
| 822 | carryover = process_coding.carryover_bytes; | ||
| 823 | if (carryover > 0) | ||
| 824 | memcpy (buf, process_coding.carryover, | ||
| 825 | process_coding.carryover_bytes); | ||
| 867 | } | 826 | } |
| 868 | 827 | ||
| 869 | if (process_coding.mode & CODING_MODE_LAST_BLOCK) | 828 | if (process_coding.mode & CODING_MODE_LAST_BLOCK) |
| @@ -882,7 +841,7 @@ usage: (call-process PROGRAM &optional INFILE DESTINATION DISPLAY &rest ARGS) * | |||
| 882 | first = 0; | 841 | first = 0; |
| 883 | redisplay_preserve_echo_area (1); | 842 | redisplay_preserve_echo_area (1); |
| 884 | /* This variable might have been set to 0 for code | 843 | /* This variable might have been set to 0 for code |
| 885 | detection. In that case, we set it back to 1 because | 844 | detection. In that case, set it back to 1 because |
| 886 | we should have already detected a coding system. */ | 845 | we should have already detected a coding system. */ |
| 887 | display_on_the_fly = 1; | 846 | display_on_the_fly = 1; |
| 888 | } | 847 | } |
| @@ -901,7 +860,7 @@ usage: (call-process PROGRAM &optional INFILE DESTINATION DISPLAY &rest ARGS) * | |||
| 901 | 860 | ||
| 902 | #ifndef MSDOS | 861 | #ifndef MSDOS |
| 903 | /* Wait for it to terminate, unless it already has. */ | 862 | /* Wait for it to terminate, unless it already has. */ |
| 904 | wait_for_termination (pid, &status, !output_to_buffer); | 863 | wait_for_termination (pid, &status, fd0 < 0); |
| 905 | #endif | 864 | #endif |
| 906 | 865 | ||
| 907 | immediate_quit = 0; | 866 | immediate_quit = 0; |
| @@ -931,37 +890,18 @@ usage: (call-process PROGRAM &optional INFILE DESTINATION DISPLAY &rest ARGS) * | |||
| 931 | return make_number (WEXITSTATUS (status)); | 890 | return make_number (WEXITSTATUS (status)); |
| 932 | } | 891 | } |
| 933 | 892 | ||
| 934 | static void | ||
| 935 | delete_temp_file (Lisp_Object name) | ||
| 936 | { | ||
| 937 | /* Suppress jka-compr handling, etc. */ | ||
| 938 | ptrdiff_t count = SPECPDL_INDEX (); | ||
| 939 | specbind (intern ("file-name-handler-alist"), Qnil); | ||
| 940 | #ifdef WINDOWSNT | ||
| 941 | /* If this is called when the subprocess didn't exit yet, the | ||
| 942 | attempt to delete its input file will fail. In that case, we | ||
| 943 | schedule the file for deletion when the subprocess exits. This | ||
| 944 | is the 2nd part of handling this situation; see the call to | ||
| 945 | record_infile in call-process above, for the first part. */ | ||
| 946 | if (!internal_delete_file (name)) | ||
| 947 | { | ||
| 948 | Lisp_Object encoded_file = ENCODE_FILE (name); | ||
| 949 | |||
| 950 | record_pending_deletion (SSDATA (encoded_file)); | ||
| 951 | } | ||
| 952 | #else | ||
| 953 | internal_delete_file (name); | ||
| 954 | #endif | ||
| 955 | unbind_to (count, Qnil); | ||
| 956 | } | ||
| 957 | |||
| 958 | /* Create a temporary file suitable for storing the input data of | 893 | /* Create a temporary file suitable for storing the input data of |
| 959 | call-process-region. NARGS and ARGS are the same as for | 894 | call-process-region. NARGS and ARGS are the same as for |
| 960 | call-process-region. */ | 895 | call-process-region. Store into *FILENAME_STRING_PTR a Lisp string |
| 896 | naming the file, and return a file descriptor for reading. | ||
| 897 | Unwind-protect the file, so that the file descriptor will be closed | ||
| 898 | and the file removed when the caller unwinds the specpdl stack. */ | ||
| 961 | 899 | ||
| 962 | static Lisp_Object | 900 | static int |
| 963 | create_temp_file (ptrdiff_t nargs, Lisp_Object *args) | 901 | create_temp_file (ptrdiff_t nargs, Lisp_Object *args, |
| 902 | Lisp_Object *filename_string_ptr) | ||
| 964 | { | 903 | { |
| 904 | int fd; | ||
| 965 | struct gcpro gcpro1; | 905 | struct gcpro gcpro1; |
| 966 | Lisp_Object filename_string; | 906 | Lisp_Object filename_string; |
| 967 | Lisp_Object val, start, end; | 907 | Lisp_Object val, start, end; |
| @@ -988,6 +928,7 @@ create_temp_file (ptrdiff_t nargs, Lisp_Object *args) | |||
| 988 | { | 928 | { |
| 989 | Lisp_Object pattern = Fexpand_file_name (Vtemp_file_name_pattern, tmpdir); | 929 | Lisp_Object pattern = Fexpand_file_name (Vtemp_file_name_pattern, tmpdir); |
| 990 | char *tempfile; | 930 | char *tempfile; |
| 931 | ptrdiff_t count; | ||
| 991 | 932 | ||
| 992 | #ifdef WINDOWSNT | 933 | #ifdef WINDOWSNT |
| 993 | /* Cannot use the result of Fexpand_file_name, because it | 934 | /* Cannot use the result of Fexpand_file_name, because it |
| @@ -1008,15 +949,14 @@ create_temp_file (ptrdiff_t nargs, Lisp_Object *args) | |||
| 1008 | GCPRO1 (filename_string); | 949 | GCPRO1 (filename_string); |
| 1009 | tempfile = SSDATA (filename_string); | 950 | tempfile = SSDATA (filename_string); |
| 1010 | 951 | ||
| 1011 | { | 952 | count = SPECPDL_INDEX (); |
| 1012 | int fd = mkostemp (tempfile, O_CLOEXEC); | 953 | record_unwind_protect_nothing (); |
| 1013 | if (fd < 0) | 954 | fd = mkostemp (tempfile, O_CLOEXEC); |
| 1014 | report_file_error ("Failed to open temporary file using pattern", | 955 | if (fd < 0) |
| 1015 | pattern); | 956 | report_file_error ("Failed to open temporary file using pattern", |
| 1016 | emacs_close (fd); | 957 | pattern); |
| 1017 | } | 958 | set_unwind_protect (count, delete_temp_file, filename_string); |
| 1018 | 959 | record_unwind_protect_int (close_file_unwind, fd); | |
| 1019 | record_unwind_protect (delete_temp_file, filename_string); | ||
| 1020 | } | 960 | } |
| 1021 | 961 | ||
| 1022 | start = args[0]; | 962 | start = args[0]; |
| @@ -1047,15 +987,20 @@ create_temp_file (ptrdiff_t nargs, Lisp_Object *args) | |||
| 1047 | /* POSIX lets mk[s]temp use "."; don't invoke jka-compr if we | 987 | /* POSIX lets mk[s]temp use "."; don't invoke jka-compr if we |
| 1048 | happen to get a ".Z" suffix. */ | 988 | happen to get a ".Z" suffix. */ |
| 1049 | specbind (intern ("file-name-handler-alist"), Qnil); | 989 | specbind (intern ("file-name-handler-alist"), Qnil); |
| 1050 | Fwrite_region (start, end, filename_string, Qnil, Qlambda, Qnil, Qnil); | 990 | write_region (start, end, filename_string, Qnil, Qlambda, Qnil, Qnil, fd); |
| 1051 | 991 | ||
| 1052 | unbind_to (count1, Qnil); | 992 | unbind_to (count1, Qnil); |
| 1053 | } | 993 | } |
| 1054 | 994 | ||
| 995 | if (lseek (fd, 0, SEEK_SET) < 0) | ||
| 996 | report_file_error ("Setting file position", filename_string); | ||
| 997 | |||
| 1055 | /* Note that Fcall_process takes care of binding | 998 | /* Note that Fcall_process takes care of binding |
| 1056 | coding-system-for-read. */ | 999 | coding-system-for-read. */ |
| 1057 | 1000 | ||
| 1058 | RETURN_UNGCPRO (filename_string); | 1001 | *filename_string_ptr = filename_string; |
| 1002 | UNGCPRO; | ||
| 1003 | return fd; | ||
| 1059 | } | 1004 | } |
| 1060 | 1005 | ||
| 1061 | DEFUN ("call-process-region", Fcall_process_region, Scall_process_region, | 1006 | DEFUN ("call-process-region", Fcall_process_region, Scall_process_region, |
| @@ -1085,12 +1030,13 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you quit again. | |||
| 1085 | usage: (call-process-region START END PROGRAM &optional DELETE BUFFER DISPLAY &rest ARGS) */) | 1030 | usage: (call-process-region START END PROGRAM &optional DELETE BUFFER DISPLAY &rest ARGS) */) |
| 1086 | (ptrdiff_t nargs, Lisp_Object *args) | 1031 | (ptrdiff_t nargs, Lisp_Object *args) |
| 1087 | { | 1032 | { |
| 1088 | struct gcpro gcpro1; | 1033 | struct gcpro gcpro1, gcpro2; |
| 1089 | Lisp_Object infile; | 1034 | Lisp_Object infile, val; |
| 1090 | ptrdiff_t count = SPECPDL_INDEX (); | 1035 | ptrdiff_t count = SPECPDL_INDEX (); |
| 1091 | Lisp_Object start = args[0]; | 1036 | Lisp_Object start = args[0]; |
| 1092 | Lisp_Object end = args[1]; | 1037 | Lisp_Object end = args[1]; |
| 1093 | bool empty_input; | 1038 | bool empty_input; |
| 1039 | int fd; | ||
| 1094 | 1040 | ||
| 1095 | if (STRINGP (start)) | 1041 | if (STRINGP (start)) |
| 1096 | empty_input = SCHARS (start) == 0; | 1042 | empty_input = SCHARS (start) == 0; |
| @@ -1104,8 +1050,19 @@ usage: (call-process-region START END PROGRAM &optional DELETE BUFFER DISPLAY &r | |||
| 1104 | empty_input = XINT (start) == XINT (end); | 1050 | empty_input = XINT (start) == XINT (end); |
| 1105 | } | 1051 | } |
| 1106 | 1052 | ||
| 1107 | infile = empty_input ? Qnil : create_temp_file (nargs, args); | 1053 | if (!empty_input) |
| 1108 | GCPRO1 (infile); | 1054 | fd = create_temp_file (nargs, args, &infile); |
| 1055 | else | ||
| 1056 | { | ||
| 1057 | infile = Qnil; | ||
| 1058 | fd = emacs_open (NULL_DEVICE, O_RDONLY, 0); | ||
| 1059 | if (fd < 0) | ||
| 1060 | report_file_error ("Opening null device", Qnil); | ||
| 1061 | record_unwind_protect_int (close_file_unwind, fd); | ||
| 1062 | } | ||
| 1063 | |||
| 1064 | val = infile; | ||
| 1065 | GCPRO2 (infile, val); | ||
| 1109 | 1066 | ||
| 1110 | if (nargs > 3 && !NILP (args[3])) | 1067 | if (nargs > 3 && !NILP (args[3])) |
| 1111 | Fdelete_region (start, end); | 1068 | Fdelete_region (start, end); |
| @@ -1122,7 +1079,17 @@ usage: (call-process-region START END PROGRAM &optional DELETE BUFFER DISPLAY &r | |||
| 1122 | } | 1079 | } |
| 1123 | args[1] = infile; | 1080 | args[1] = infile; |
| 1124 | 1081 | ||
| 1125 | RETURN_UNGCPRO (unbind_to (count, Fcall_process (nargs, args))); | 1082 | val = call_process (nargs, args, fd); |
| 1083 | |||
| 1084 | if (!empty_input && 4 < nargs | ||
| 1085 | && (INTEGERP (CONSP (args[4]) ? XCAR (args[4]) : args[4]))) | ||
| 1086 | { | ||
| 1087 | record_deleted_pid (synch_process_pid, infile); | ||
| 1088 | synch_process_pid = 0; | ||
| 1089 | clear_unwind_protect (count); | ||
| 1090 | } | ||
| 1091 | |||
| 1092 | RETURN_UNGCPRO (unbind_to (count, val)); | ||
| 1126 | } | 1093 | } |
| 1127 | 1094 | ||
| 1128 | #ifndef WINDOWSNT | 1095 | #ifndef WINDOWSNT |
| @@ -1683,6 +1650,11 @@ syms_of_callproc (void) | |||
| 1683 | #endif | 1650 | #endif |
| 1684 | staticpro (&Vtemp_file_name_pattern); | 1651 | staticpro (&Vtemp_file_name_pattern); |
| 1685 | 1652 | ||
| 1653 | #ifdef MSDOS | ||
| 1654 | synch_process_tempfile = make_number (0); | ||
| 1655 | staticpro (&synch_process_tempfile); | ||
| 1656 | #endif | ||
| 1657 | |||
| 1686 | DEFVAR_LISP ("shell-file-name", Vshell_file_name, | 1658 | DEFVAR_LISP ("shell-file-name", Vshell_file_name, |
| 1687 | doc: /* File name to load inferior shells from. | 1659 | doc: /* File name to load inferior shells from. |
| 1688 | Initialized from the SHELL environment variable, or to a system-dependent | 1660 | Initialized from the SHELL environment variable, or to a system-dependent |
diff --git a/src/decompress.c b/src/decompress.c index a6323a843e9..866f4f51516 100644 --- a/src/decompress.c +++ b/src/decompress.c | |||
| @@ -27,48 +27,48 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ | |||
| 27 | #include "buffer.h" | 27 | #include "buffer.h" |
| 28 | 28 | ||
| 29 | 29 | ||
| 30 | #define BUFFER_SIZE 16384 | 30 | struct decompress_unwind_data |
| 31 | 31 | { | |
| 32 | struct decompress_unwind_data { | ||
| 33 | ptrdiff_t old_point, start; | 32 | ptrdiff_t old_point, start; |
| 34 | z_stream *stream; | 33 | z_stream *stream; |
| 35 | }; | 34 | }; |
| 36 | 35 | ||
| 37 | static void | 36 | static void |
| 38 | unwind_decompress (void *ddata) { | 37 | unwind_decompress (void *ddata) |
| 38 | { | ||
| 39 | struct decompress_unwind_data *data = ddata; | 39 | struct decompress_unwind_data *data = ddata; |
| 40 | inflateEnd (data->stream); | 40 | inflateEnd (data->stream); |
| 41 | /* Delete any uncompressed data already inserted and restore | 41 | |
| 42 | point. */ | 42 | /* Delete any uncompressed data already inserted and restore point. */ |
| 43 | if (data->start) { | 43 | if (data->start) |
| 44 | del_range (data->start, PT); | 44 | { |
| 45 | SET_PT (data->old_point); | 45 | del_range (data->start, PT); |
| 46 | } | 46 | SET_PT (data->old_point); |
| 47 | } | ||
| 47 | } | 48 | } |
| 48 | 49 | ||
| 49 | DEFUN ("decompress-gzipped-region", Fdecompress_gzipped_region, | 50 | DEFUN ("decompress-gzipped-region", Fdecompress_gzipped_region, |
| 50 | Sdecompress_gzipped_region, | 51 | Sdecompress_gzipped_region, |
| 51 | 2, 2, 0, | 52 | 2, 2, 0, |
| 52 | doc: /* Decompress a gzip-compressed region. | 53 | doc: /* Decompress a gzip-compressed region. |
| 53 | The text in the region will be replaced by the decompressed data. | 54 | Replace the text in the region by the decompressed data. |
| 54 | On failure, nil is returned and the data is left in place. | 55 | On failure, return nil and leave the data in place. |
| 55 | This function can only be called in unibyte buffers.*/) | 56 | This function can be called only in unibyte buffers. */) |
| 56 | (Lisp_Object start, Lisp_Object end) | 57 | (Lisp_Object start, Lisp_Object end) |
| 57 | { | 58 | { |
| 58 | ptrdiff_t istart, iend, point = PT; | 59 | ptrdiff_t istart, iend, pos_byte; |
| 59 | z_stream stream; | 60 | z_stream stream; |
| 60 | int decompressed; | 61 | int inflate_status; |
| 61 | char out[16384]; | ||
| 62 | struct decompress_unwind_data unwind_data; | 62 | struct decompress_unwind_data unwind_data; |
| 63 | ptrdiff_t count = SPECPDL_INDEX (); | 63 | ptrdiff_t count = SPECPDL_INDEX (); |
| 64 | 64 | ||
| 65 | validate_region (&start, &end); | 65 | validate_region (&start, &end); |
| 66 | 66 | ||
| 67 | if (! NILP (BVAR (current_buffer, enable_multibyte_characters))) | 67 | if (! NILP (BVAR (current_buffer, enable_multibyte_characters))) |
| 68 | error ("This function can only be called in unibyte buffers"); | 68 | error ("This function can be called only in unibyte buffers"); |
| 69 | 69 | ||
| 70 | /* This is a unibyte buffer, so character positions and bytes are | 70 | /* This is a unibyte buffer, so character positions and bytes are |
| 71 | the same. */ | 71 | the same. */ |
| 72 | istart = XINT (start); | 72 | istart = XINT (start); |
| 73 | iend = XINT (end); | 73 | iend = XINT (end); |
| 74 | move_gap_both (iend, iend); | 74 | move_gap_both (iend, iend); |
| @@ -79,49 +79,55 @@ This function can only be called in unibyte buffers.*/) | |||
| 79 | stream.avail_in = 0; | 79 | stream.avail_in = 0; |
| 80 | stream.next_in = Z_NULL; | 80 | stream.next_in = Z_NULL; |
| 81 | 81 | ||
| 82 | /* This magic number apparently means "this is gzip". */ | 82 | /* This magic number apparently means "this is gzip". */ |
| 83 | if (inflateInit2 (&stream, 16 + MAX_WBITS) != Z_OK) | 83 | if (inflateInit2 (&stream, 16 + MAX_WBITS) != Z_OK) |
| 84 | return Qnil; | 84 | return Qnil; |
| 85 | 85 | ||
| 86 | /* We're inserting the decompressed data at the end of the | ||
| 87 | compressed data. */ | ||
| 88 | SET_PT (iend); | ||
| 89 | |||
| 90 | stream.avail_in = iend - istart; | ||
| 91 | stream.next_in = (char *) BYTE_POS_ADDR (istart); | ||
| 92 | |||
| 93 | unwind_data.start = iend; | 86 | unwind_data.start = iend; |
| 94 | unwind_data.stream = &stream; | 87 | unwind_data.stream = &stream; |
| 95 | unwind_data.old_point = point; | 88 | unwind_data.old_point = PT; |
| 89 | |||
| 96 | record_unwind_protect_ptr (unwind_decompress, &unwind_data); | 90 | record_unwind_protect_ptr (unwind_decompress, &unwind_data); |
| 97 | 91 | ||
| 98 | immediate_quit = 1; | 92 | /* Insert the decompressed data at the end of the compressed data. */ |
| 99 | 93 | SET_PT (iend); | |
| 100 | /* Run inflate() on input until the output buffer isn't full. */ | ||
| 101 | do { | ||
| 102 | int result; | ||
| 103 | stream.avail_out = BUFFER_SIZE; | ||
| 104 | stream.next_out = out; | ||
| 105 | result = inflate (&stream, Z_NO_FLUSH); | ||
| 106 | if (result < 0) { | ||
| 107 | unbind_to (count, Qnil); | ||
| 108 | return Qnil; | ||
| 109 | } | ||
| 110 | 94 | ||
| 111 | decompressed = BUFFER_SIZE - stream.avail_out; | 95 | pos_byte = istart; |
| 112 | insert_1_both (out, decompressed, decompressed, 0, 0, 0); | 96 | |
| 113 | QUIT; | 97 | /* Keep calling 'inflate' until it reports an error or end-of-input. */ |
| 114 | } while (stream.avail_out == 0); | 98 | do |
| 99 | { | ||
| 100 | /* Maximum number of bytes that one 'inflate' call should read and write. | ||
| 101 | zlib requires that these values not exceed UINT_MAX. | ||
| 102 | Do not make avail_out too large, as that might unduly delay C-g. */ | ||
| 103 | ptrdiff_t avail_in = min (iend - pos_byte, UINT_MAX); | ||
| 104 | ptrdiff_t avail_out = min (1 << 14, UINT_MAX); | ||
| 105 | |||
| 106 | ptrdiff_t decompressed; | ||
| 107 | |||
| 108 | if (GAP_SIZE < avail_out) | ||
| 109 | make_gap (avail_out - GAP_SIZE); | ||
| 110 | stream.next_in = BYTE_POS_ADDR (pos_byte); | ||
| 111 | stream.avail_in = avail_in; | ||
| 112 | stream.next_out = GPT_ADDR; | ||
| 113 | stream.avail_out = avail_out; | ||
| 114 | inflate_status = inflate (&stream, Z_NO_FLUSH); | ||
| 115 | pos_byte += avail_in - stream.avail_in; | ||
| 116 | decompressed = avail_out - stream.avail_out; | ||
| 117 | insert_from_gap (decompressed, decompressed, 0); | ||
| 118 | QUIT; | ||
| 119 | } | ||
| 120 | while (inflate_status == Z_OK); | ||
| 115 | 121 | ||
| 116 | immediate_quit = 0; | 122 | if (inflate_status != Z_STREAM_END) |
| 123 | return unbind_to (count, Qnil); | ||
| 117 | 124 | ||
| 118 | unwind_data.start = 0; | 125 | unwind_data.start = 0; |
| 119 | unbind_to (count, Qnil); | ||
| 120 | 126 | ||
| 121 | /* Delete the compressed data. */ | 127 | /* Delete the compressed data. */ |
| 122 | del_range (istart, iend); | 128 | del_range (istart, iend); |
| 123 | 129 | ||
| 124 | return Qt; | 130 | return unbind_to (count, Qt); |
| 125 | } | 131 | } |
| 126 | 132 | ||
| 127 | 133 | ||
diff --git a/src/eval.c b/src/eval.c index 8ee259110f4..566be0c2a83 100644 --- a/src/eval.c +++ b/src/eval.c | |||
| @@ -3302,6 +3302,16 @@ clear_unwind_protect (ptrdiff_t count) | |||
| 3302 | previous value without invoking it. */ | 3302 | previous value without invoking it. */ |
| 3303 | 3303 | ||
| 3304 | void | 3304 | void |
| 3305 | set_unwind_protect (ptrdiff_t count, void (*func) (Lisp_Object), | ||
| 3306 | Lisp_Object arg) | ||
| 3307 | { | ||
| 3308 | union specbinding *p = specpdl + count; | ||
| 3309 | p->unwind.kind = SPECPDL_UNWIND; | ||
| 3310 | p->unwind.func = func; | ||
| 3311 | p->unwind.arg = arg; | ||
| 3312 | } | ||
| 3313 | |||
| 3314 | void | ||
| 3305 | set_unwind_protect_ptr (ptrdiff_t count, void (*func) (void *), void *arg) | 3315 | set_unwind_protect_ptr (ptrdiff_t count, void (*func) (void *), void *arg) |
| 3306 | { | 3316 | { |
| 3307 | union specbinding *p = specpdl + count; | 3317 | union specbinding *p = specpdl + count; |
diff --git a/src/fileio.c b/src/fileio.c index 6b24e592bb3..6ec5f78c2cf 100644 --- a/src/fileio.c +++ b/src/fileio.c | |||
| @@ -4746,25 +4746,39 @@ This does code conversion according to the value of | |||
| 4746 | 4746 | ||
| 4747 | This calls `write-region-annotate-functions' at the start, and | 4747 | This calls `write-region-annotate-functions' at the start, and |
| 4748 | `write-region-post-annotation-function' at the end. */) | 4748 | `write-region-post-annotation-function' at the end. */) |
| 4749 | (Lisp_Object start, Lisp_Object end, Lisp_Object filename, Lisp_Object append, Lisp_Object visit, Lisp_Object lockname, Lisp_Object mustbenew) | 4749 | (Lisp_Object start, Lisp_Object end, Lisp_Object filename, Lisp_Object append, |
| 4750 | Lisp_Object visit, Lisp_Object lockname, Lisp_Object mustbenew) | ||
| 4751 | { | ||
| 4752 | return write_region (start, end, filename, append, visit, lockname, mustbenew, | ||
| 4753 | -1); | ||
| 4754 | } | ||
| 4755 | |||
| 4756 | /* Like Fwrite_region, except that if DESC is nonnegative, it is a file | ||
| 4757 | descriptor for FILENAME, so do not open or close FILENAME. */ | ||
| 4758 | |||
| 4759 | Lisp_Object | ||
| 4760 | write_region (Lisp_Object start, Lisp_Object end, Lisp_Object filename, | ||
| 4761 | Lisp_Object append, Lisp_Object visit, Lisp_Object lockname, | ||
| 4762 | Lisp_Object mustbenew, int desc) | ||
| 4750 | { | 4763 | { |
| 4751 | int desc; | ||
| 4752 | int open_flags; | 4764 | int open_flags; |
| 4753 | int mode; | 4765 | int mode; |
| 4754 | off_t offset IF_LINT (= 0); | 4766 | off_t offset IF_LINT (= 0); |
| 4767 | bool open_and_close_file = desc < 0; | ||
| 4755 | bool ok; | 4768 | bool ok; |
| 4756 | int save_errno = 0; | 4769 | int save_errno = 0; |
| 4757 | const char *fn; | 4770 | const char *fn; |
| 4758 | struct stat st; | 4771 | struct stat st; |
| 4759 | EMACS_TIME modtime; | 4772 | EMACS_TIME modtime; |
| 4760 | ptrdiff_t count = SPECPDL_INDEX (); | 4773 | ptrdiff_t count = SPECPDL_INDEX (); |
| 4761 | ptrdiff_t count1; | 4774 | ptrdiff_t count1 IF_LINT (= 0); |
| 4762 | Lisp_Object handler; | 4775 | Lisp_Object handler; |
| 4763 | Lisp_Object visit_file; | 4776 | Lisp_Object visit_file; |
| 4764 | Lisp_Object annotations; | 4777 | Lisp_Object annotations; |
| 4765 | Lisp_Object encoded_filename; | 4778 | Lisp_Object encoded_filename; |
| 4766 | bool visiting = (EQ (visit, Qt) || STRINGP (visit)); | 4779 | bool visiting = (EQ (visit, Qt) || STRINGP (visit)); |
| 4767 | bool quietly = !NILP (visit); | 4780 | bool quietly = !NILP (visit); |
| 4781 | bool file_locked = 0; | ||
| 4768 | struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5; | 4782 | struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5; |
| 4769 | struct buffer *given_buffer; | 4783 | struct buffer *given_buffer; |
| 4770 | struct coding_system coding; | 4784 | struct coding_system coding; |
| @@ -4832,7 +4846,6 @@ This calls `write-region-annotate-functions' at the start, and | |||
| 4832 | record_unwind_protect (build_annotations_unwind, | 4846 | record_unwind_protect (build_annotations_unwind, |
| 4833 | Vwrite_region_annotation_buffers); | 4847 | Vwrite_region_annotation_buffers); |
| 4834 | Vwrite_region_annotation_buffers = list1 (Fcurrent_buffer ()); | 4848 | Vwrite_region_annotation_buffers = list1 (Fcurrent_buffer ()); |
| 4835 | count1 = SPECPDL_INDEX (); | ||
| 4836 | 4849 | ||
| 4837 | given_buffer = current_buffer; | 4850 | given_buffer = current_buffer; |
| 4838 | 4851 | ||
| @@ -4871,8 +4884,11 @@ This calls `write-region-annotate-functions' at the start, and | |||
| 4871 | coding.mode |= CODING_MODE_SELECTIVE_DISPLAY; | 4884 | coding.mode |= CODING_MODE_SELECTIVE_DISPLAY; |
| 4872 | 4885 | ||
| 4873 | #ifdef CLASH_DETECTION | 4886 | #ifdef CLASH_DETECTION |
| 4874 | if (!auto_saving) | 4887 | if (open_and_close_file && !auto_saving) |
| 4875 | lock_file (lockname); | 4888 | { |
| 4889 | lock_file (lockname); | ||
| 4890 | file_locked = 1; | ||
| 4891 | } | ||
| 4876 | #endif /* CLASH_DETECTION */ | 4892 | #endif /* CLASH_DETECTION */ |
| 4877 | 4893 | ||
| 4878 | encoded_filename = ENCODE_FILE (filename); | 4894 | encoded_filename = ENCODE_FILE (filename); |
| @@ -4889,19 +4905,23 @@ This calls `write-region-annotate-functions' at the start, and | |||
| 4889 | mode = auto_saving ? auto_save_mode_bits : 0666; | 4905 | mode = auto_saving ? auto_save_mode_bits : 0666; |
| 4890 | #endif | 4906 | #endif |
| 4891 | 4907 | ||
| 4892 | desc = emacs_open (fn, open_flags, mode); | 4908 | if (open_and_close_file) |
| 4893 | |||
| 4894 | if (desc < 0) | ||
| 4895 | { | 4909 | { |
| 4896 | int open_errno = errno; | 4910 | desc = emacs_open (fn, open_flags, mode); |
| 4911 | if (desc < 0) | ||
| 4912 | { | ||
| 4913 | int open_errno = errno; | ||
| 4897 | #ifdef CLASH_DETECTION | 4914 | #ifdef CLASH_DETECTION |
| 4898 | if (!auto_saving) unlock_file (lockname); | 4915 | if (file_locked) |
| 4916 | unlock_file (lockname); | ||
| 4899 | #endif /* CLASH_DETECTION */ | 4917 | #endif /* CLASH_DETECTION */ |
| 4900 | UNGCPRO; | 4918 | UNGCPRO; |
| 4901 | report_file_errno ("Opening output file", filename, open_errno); | 4919 | report_file_errno ("Opening output file", filename, open_errno); |
| 4902 | } | 4920 | } |
| 4903 | 4921 | ||
| 4904 | record_unwind_protect_int (close_file_unwind, desc); | 4922 | count1 = SPECPDL_INDEX (); |
| 4923 | record_unwind_protect_int (close_file_unwind, desc); | ||
| 4924 | } | ||
| 4905 | 4925 | ||
| 4906 | if (NUMBERP (append)) | 4926 | if (NUMBERP (append)) |
| 4907 | { | 4927 | { |
| @@ -4910,7 +4930,8 @@ This calls `write-region-annotate-functions' at the start, and | |||
| 4910 | { | 4930 | { |
| 4911 | int lseek_errno = errno; | 4931 | int lseek_errno = errno; |
| 4912 | #ifdef CLASH_DETECTION | 4932 | #ifdef CLASH_DETECTION |
| 4913 | if (!auto_saving) unlock_file (lockname); | 4933 | if (file_locked) |
| 4934 | unlock_file (lockname); | ||
| 4914 | #endif /* CLASH_DETECTION */ | 4935 | #endif /* CLASH_DETECTION */ |
| 4915 | UNGCPRO; | 4936 | UNGCPRO; |
| 4916 | report_file_errno ("Lseek error", filename, lseek_errno); | 4937 | report_file_errno ("Lseek error", filename, lseek_errno); |
| @@ -4945,9 +4966,9 @@ This calls `write-region-annotate-functions' at the start, and | |||
| 4945 | 4966 | ||
| 4946 | immediate_quit = 0; | 4967 | immediate_quit = 0; |
| 4947 | 4968 | ||
| 4948 | /* fsync is not crucial for auto-save files, since they might lose | 4969 | /* fsync is not crucial for temporary files. Nor for auto-save |
| 4949 | some work anyway. */ | 4970 | files, since they might lose some work anyway. */ |
| 4950 | if (!auto_saving && !write_region_inhibit_fsync) | 4971 | if (open_and_close_file && !auto_saving && !write_region_inhibit_fsync) |
| 4951 | { | 4972 | { |
| 4952 | /* Transfer data and metadata to disk, retrying if interrupted. | 4973 | /* Transfer data and metadata to disk, retrying if interrupted. |
| 4953 | fsync can report a write failure here, e.g., due to disk full | 4974 | fsync can report a write failure here, e.g., due to disk full |
| @@ -4971,12 +4992,15 @@ This calls `write-region-annotate-functions' at the start, and | |||
| 4971 | ok = 0, save_errno = errno; | 4992 | ok = 0, save_errno = errno; |
| 4972 | } | 4993 | } |
| 4973 | 4994 | ||
| 4974 | /* NFS can report a write failure now. */ | 4995 | if (open_and_close_file) |
| 4975 | if (emacs_close (desc) < 0) | 4996 | { |
| 4976 | ok = 0, save_errno = errno; | 4997 | /* NFS can report a write failure now. */ |
| 4998 | if (emacs_close (desc) < 0) | ||
| 4999 | ok = 0, save_errno = errno; | ||
| 4977 | 5000 | ||
| 4978 | /* Discard the unwind protect for close_file_unwind. */ | 5001 | /* Discard the unwind protect for close_file_unwind. */ |
| 4979 | specpdl_ptr = specpdl + count1; | 5002 | specpdl_ptr = specpdl + count1; |
| 5003 | } | ||
| 4980 | 5004 | ||
| 4981 | /* Some file systems have a bug where st_mtime is not updated | 5005 | /* Some file systems have a bug where st_mtime is not updated |
| 4982 | properly after a write. For example, CIFS might not see the | 5006 | properly after a write. For example, CIFS might not see the |
| @@ -5052,7 +5076,7 @@ This calls `write-region-annotate-functions' at the start, and | |||
| 5052 | unbind_to (count, Qnil); | 5076 | unbind_to (count, Qnil); |
| 5053 | 5077 | ||
| 5054 | #ifdef CLASH_DETECTION | 5078 | #ifdef CLASH_DETECTION |
| 5055 | if (!auto_saving) | 5079 | if (file_locked) |
| 5056 | unlock_file (lockname); | 5080 | unlock_file (lockname); |
| 5057 | #endif /* CLASH_DETECTION */ | 5081 | #endif /* CLASH_DETECTION */ |
| 5058 | 5082 | ||
diff --git a/src/frame.h b/src/frame.h index 33e4bb71d7a..e44003b15ca 100644 --- a/src/frame.h +++ b/src/frame.h | |||
| @@ -410,6 +410,10 @@ struct frame | |||
| 410 | /* Nonzero means that the pointer is invisible. */ | 410 | /* Nonzero means that the pointer is invisible. */ |
| 411 | unsigned pointer_invisible :1; | 411 | unsigned pointer_invisible :1; |
| 412 | 412 | ||
| 413 | /* Nonzero means that all windows except mini-window and | ||
| 414 | selected window on this frame have frozen window starts. */ | ||
| 415 | unsigned frozen_window_starts : 1; | ||
| 416 | |||
| 413 | /* Nonzero if we should actually display the scroll bars on this frame. */ | 417 | /* Nonzero if we should actually display the scroll bars on this frame. */ |
| 414 | enum vertical_scroll_bar_type vertical_scroll_bar_type; | 418 | enum vertical_scroll_bar_type vertical_scroll_bar_type; |
| 415 | 419 | ||
| @@ -761,6 +765,10 @@ default_pixels_per_inch_y (void) | |||
| 761 | /* Not really implemented. */ | 765 | /* Not really implemented. */ |
| 762 | #define FRAME_WANTS_MODELINE_P(f) (f)->wants_modeline | 766 | #define FRAME_WANTS_MODELINE_P(f) (f)->wants_modeline |
| 763 | 767 | ||
| 768 | /* Nonzero if all windows except selected window and mini window | ||
| 769 | are frozen on frame F. */ | ||
| 770 | #define FRAME_WINDOWS_FROZEN(f) (f)->frozen_window_starts | ||
| 771 | |||
| 764 | /* Nonzero if a size change has been requested for frame F | 772 | /* Nonzero if a size change has been requested for frame F |
| 765 | but not yet really put into effect. This can be true temporarily | 773 | but not yet really put into effect. This can be true temporarily |
| 766 | when an X event comes in at a bad time. */ | 774 | when an X event comes in at a bad time. */ |
diff --git a/src/lisp.h b/src/lisp.h index 13cb9fbcbb7..981ab3f6f0b 100644 --- a/src/lisp.h +++ b/src/lisp.h | |||
| @@ -3751,11 +3751,12 @@ extern Lisp_Object internal_condition_case_n | |||
| 3751 | Lisp_Object, Lisp_Object (*) (Lisp_Object, ptrdiff_t, Lisp_Object *)); | 3751 | Lisp_Object, Lisp_Object (*) (Lisp_Object, ptrdiff_t, Lisp_Object *)); |
| 3752 | extern void specbind (Lisp_Object, Lisp_Object); | 3752 | extern void specbind (Lisp_Object, Lisp_Object); |
| 3753 | extern void record_unwind_protect (void (*) (Lisp_Object), Lisp_Object); | 3753 | extern void record_unwind_protect (void (*) (Lisp_Object), Lisp_Object); |
| 3754 | extern void record_unwind_protect_int (void (*) (int), int); | ||
| 3755 | extern void record_unwind_protect_ptr (void (*) (void *), void *); | 3754 | extern void record_unwind_protect_ptr (void (*) (void *), void *); |
| 3755 | extern void record_unwind_protect_int (void (*) (int), int); | ||
| 3756 | extern void record_unwind_protect_void (void (*) (void)); | 3756 | extern void record_unwind_protect_void (void (*) (void)); |
| 3757 | extern void record_unwind_protect_nothing (void); | 3757 | extern void record_unwind_protect_nothing (void); |
| 3758 | extern void clear_unwind_protect (ptrdiff_t); | 3758 | extern void clear_unwind_protect (ptrdiff_t); |
| 3759 | extern void set_unwind_protect (ptrdiff_t, void (*) (Lisp_Object), Lisp_Object); | ||
| 3759 | extern void set_unwind_protect_ptr (ptrdiff_t, void (*) (void *), void *); | 3760 | extern void set_unwind_protect_ptr (ptrdiff_t, void (*) (void *), void *); |
| 3760 | extern Lisp_Object unbind_to (ptrdiff_t, Lisp_Object); | 3761 | extern Lisp_Object unbind_to (ptrdiff_t, Lisp_Object); |
| 3761 | extern _Noreturn void error (const char *, ...) ATTRIBUTE_FORMAT_PRINTF (1, 2); | 3762 | extern _Noreturn void error (const char *, ...) ATTRIBUTE_FORMAT_PRINTF (1, 2); |
| @@ -3835,6 +3836,9 @@ extern Lisp_Object Qfile_directory_p; | |||
| 3835 | extern Lisp_Object Qinsert_file_contents; | 3836 | extern Lisp_Object Qinsert_file_contents; |
| 3836 | extern Lisp_Object Qfile_name_history; | 3837 | extern Lisp_Object Qfile_name_history; |
| 3837 | extern Lisp_Object expand_and_dir_to_file (Lisp_Object, Lisp_Object); | 3838 | extern Lisp_Object expand_and_dir_to_file (Lisp_Object, Lisp_Object); |
| 3839 | extern Lisp_Object write_region (Lisp_Object, Lisp_Object, Lisp_Object, | ||
| 3840 | Lisp_Object, Lisp_Object, Lisp_Object, | ||
| 3841 | Lisp_Object, int); | ||
| 3838 | EXFUN (Fread_file_name, 6); /* Not a normal DEFUN. */ | 3842 | EXFUN (Fread_file_name, 6); /* Not a normal DEFUN. */ |
| 3839 | extern void close_file_unwind (int); | 3843 | extern void close_file_unwind (int); |
| 3840 | extern void fclose_unwind (void *); | 3844 | extern void fclose_unwind (void *); |
diff --git a/src/process.c b/src/process.c index 99c707ff97b..a2bcffe5160 100644 --- a/src/process.c +++ b/src/process.c | |||
| @@ -92,6 +92,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ | |||
| 92 | 92 | ||
| 93 | #include <c-ctype.h> | 93 | #include <c-ctype.h> |
| 94 | #include <sig2str.h> | 94 | #include <sig2str.h> |
| 95 | #include <verify.h> | ||
| 95 | 96 | ||
| 96 | #endif /* subprocesses */ | 97 | #endif /* subprocesses */ |
| 97 | 98 | ||
| @@ -722,6 +723,8 @@ make_process (Lisp_Object name) | |||
| 722 | non-Lisp data, so do it only for slots which should not be zero. */ | 723 | non-Lisp data, so do it only for slots which should not be zero. */ |
| 723 | p->infd = -1; | 724 | p->infd = -1; |
| 724 | p->outfd = -1; | 725 | p->outfd = -1; |
| 726 | for (i = 0; i < PROCESS_OPEN_FDS; i++) | ||
| 727 | p->open_fd[i] = -1; | ||
| 725 | 728 | ||
| 726 | #ifdef HAVE_GNUTLS | 729 | #ifdef HAVE_GNUTLS |
| 727 | p->gnutls_initstage = GNUTLS_STAGE_EMPTY; | 730 | p->gnutls_initstage = GNUTLS_STAGE_EMPTY; |
| @@ -818,13 +821,17 @@ get_process (register Lisp_Object name) | |||
| 818 | treated by the SIGCHLD handler and waitpid has been invoked on them; | 821 | treated by the SIGCHLD handler and waitpid has been invoked on them; |
| 819 | otherwise they might fill up the kernel's process table. | 822 | otherwise they might fill up the kernel's process table. |
| 820 | 823 | ||
| 821 | Some processes created by call-process are also put onto this list. */ | 824 | Some processes created by call-process are also put onto this list. |
| 825 | |||
| 826 | Members of this list are (process-ID . filename) pairs. The | ||
| 827 | process-ID is a number; the filename, if a string, is a file that | ||
| 828 | needs to be removed after the process exits. */ | ||
| 822 | static Lisp_Object deleted_pid_list; | 829 | static Lisp_Object deleted_pid_list; |
| 823 | 830 | ||
| 824 | void | 831 | void |
| 825 | record_deleted_pid (pid_t pid) | 832 | record_deleted_pid (pid_t pid, Lisp_Object filename) |
| 826 | { | 833 | { |
| 827 | deleted_pid_list = Fcons (make_fixnum_or_float (pid), | 834 | deleted_pid_list = Fcons (Fcons (make_fixnum_or_float (pid), filename), |
| 828 | /* GC treated elements set to nil. */ | 835 | /* GC treated elements set to nil. */ |
| 829 | Fdelq (Qnil, deleted_pid_list)); | 836 | Fdelq (Qnil, deleted_pid_list)); |
| 830 | 837 | ||
| @@ -852,7 +859,7 @@ nil, indicating the current buffer's process. */) | |||
| 852 | else | 859 | else |
| 853 | { | 860 | { |
| 854 | if (p->alive) | 861 | if (p->alive) |
| 855 | record_kill_process (p); | 862 | record_kill_process (p, Qnil); |
| 856 | 863 | ||
| 857 | if (p->infd >= 0) | 864 | if (p->infd >= 0) |
| 858 | { | 865 | { |
| @@ -1605,17 +1612,45 @@ start_process_unwind (Lisp_Object proc) | |||
| 1605 | remove_process (proc); | 1612 | remove_process (proc); |
| 1606 | } | 1613 | } |
| 1607 | 1614 | ||
| 1615 | /* If *FD_ADDR is nonnegative, close it, and mark it as closed. */ | ||
| 1616 | |||
| 1617 | static void | ||
| 1618 | close_process_fd (int *fd_addr) | ||
| 1619 | { | ||
| 1620 | int fd = *fd_addr; | ||
| 1621 | if (0 <= fd) | ||
| 1622 | { | ||
| 1623 | *fd_addr = -1; | ||
| 1624 | emacs_close (fd); | ||
| 1625 | } | ||
| 1626 | } | ||
| 1627 | |||
| 1628 | /* Indexes of file descriptors in open_fds. */ | ||
| 1629 | enum | ||
| 1630 | { | ||
| 1631 | /* The pipe from Emacs to its subprocess. */ | ||
| 1632 | SUBPROCESS_STDIN, | ||
| 1633 | WRITE_TO_SUBPROCESS, | ||
| 1634 | |||
| 1635 | /* The main pipe from the subprocess to Emacs. */ | ||
| 1636 | READ_FROM_SUBPROCESS, | ||
| 1637 | SUBPROCESS_STDOUT, | ||
| 1638 | |||
| 1639 | /* The pipe from the subprocess to Emacs that is closed when the | ||
| 1640 | subprocess execs. */ | ||
| 1641 | READ_FROM_EXEC_MONITOR, | ||
| 1642 | EXEC_MONITOR_OUTPUT | ||
| 1643 | }; | ||
| 1644 | |||
| 1645 | verify (PROCESS_OPEN_FDS == EXEC_MONITOR_OUTPUT + 1); | ||
| 1608 | 1646 | ||
| 1609 | static void | 1647 | static void |
| 1610 | create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir) | 1648 | create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir) |
| 1611 | { | 1649 | { |
| 1650 | struct Lisp_Process *p = XPROCESS (process); | ||
| 1612 | int inchannel, outchannel; | 1651 | int inchannel, outchannel; |
| 1613 | pid_t pid; | 1652 | pid_t pid; |
| 1614 | int vfork_errno; | 1653 | int vfork_errno; |
| 1615 | int sv[2]; | ||
| 1616 | #ifndef WINDOWSNT | ||
| 1617 | int wait_child_setup[2]; | ||
| 1618 | #endif | ||
| 1619 | int forkin, forkout; | 1654 | int forkin, forkout; |
| 1620 | bool pty_flag = 0; | 1655 | bool pty_flag = 0; |
| 1621 | char pty_name[PTY_NAME_SIZE]; | 1656 | char pty_name[PTY_NAME_SIZE]; |
| @@ -1629,6 +1664,7 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir) | |||
| 1629 | 1664 | ||
| 1630 | if (inchannel >= 0) | 1665 | if (inchannel >= 0) |
| 1631 | { | 1666 | { |
| 1667 | p->open_fd[READ_FROM_SUBPROCESS] = inchannel; | ||
| 1632 | #if ! defined (USG) || defined (USG_SUBTTY_WORKS) | 1668 | #if ! defined (USG) || defined (USG_SUBTTY_WORKS) |
| 1633 | /* On most USG systems it does not work to open the pty's tty here, | 1669 | /* On most USG systems it does not work to open the pty's tty here, |
| 1634 | then close it and reopen it in the child. */ | 1670 | then close it and reopen it in the child. */ |
| @@ -1637,6 +1673,7 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir) | |||
| 1637 | forkout = forkin = emacs_open (pty_name, O_RDWR | O_NOCTTY, 0); | 1673 | forkout = forkin = emacs_open (pty_name, O_RDWR | O_NOCTTY, 0); |
| 1638 | if (forkin < 0) | 1674 | if (forkin < 0) |
| 1639 | report_file_error ("Opening pty", Qnil); | 1675 | report_file_error ("Opening pty", Qnil); |
| 1676 | p->open_fd[SUBPROCESS_STDIN] = forkin; | ||
| 1640 | #else | 1677 | #else |
| 1641 | forkin = forkout = -1; | 1678 | forkin = forkout = -1; |
| 1642 | #endif /* not USG, or USG_SUBTTY_WORKS */ | 1679 | #endif /* not USG, or USG_SUBTTY_WORKS */ |
| @@ -1645,23 +1682,17 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir) | |||
| 1645 | } | 1682 | } |
| 1646 | else | 1683 | else |
| 1647 | { | 1684 | { |
| 1648 | if (emacs_pipe (sv) != 0) | 1685 | if (emacs_pipe (p->open_fd + SUBPROCESS_STDIN) != 0 |
| 1686 | || emacs_pipe (p->open_fd + READ_FROM_SUBPROCESS) != 0) | ||
| 1649 | report_file_error ("Creating pipe", Qnil); | 1687 | report_file_error ("Creating pipe", Qnil); |
| 1650 | inchannel = sv[0]; | 1688 | forkin = p->open_fd[SUBPROCESS_STDIN]; |
| 1651 | forkout = sv[1]; | 1689 | outchannel = p->open_fd[WRITE_TO_SUBPROCESS]; |
| 1652 | if (emacs_pipe (sv) != 0) | 1690 | inchannel = p->open_fd[READ_FROM_SUBPROCESS]; |
| 1653 | { | 1691 | forkout = p->open_fd[SUBPROCESS_STDOUT]; |
| 1654 | int pipe_errno = errno; | ||
| 1655 | emacs_close (inchannel); | ||
| 1656 | emacs_close (forkout); | ||
| 1657 | report_file_errno ("Creating pipe", Qnil, pipe_errno); | ||
| 1658 | } | ||
| 1659 | outchannel = sv[1]; | ||
| 1660 | forkin = sv[0]; | ||
| 1661 | } | 1692 | } |
| 1662 | 1693 | ||
| 1663 | #ifndef WINDOWSNT | 1694 | #ifndef WINDOWSNT |
| 1664 | if (emacs_pipe (wait_child_setup) != 0) | 1695 | if (emacs_pipe (p->open_fd + READ_FROM_EXEC_MONITOR) != 0) |
| 1665 | report_file_error ("Creating pipe", Qnil); | 1696 | report_file_error ("Creating pipe", Qnil); |
| 1666 | #endif | 1697 | #endif |
| 1667 | 1698 | ||
| @@ -1670,16 +1701,16 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir) | |||
| 1670 | 1701 | ||
| 1671 | /* Record this as an active process, with its channels. */ | 1702 | /* Record this as an active process, with its channels. */ |
| 1672 | chan_process[inchannel] = process; | 1703 | chan_process[inchannel] = process; |
| 1673 | XPROCESS (process)->infd = inchannel; | 1704 | p->infd = inchannel; |
| 1674 | XPROCESS (process)->outfd = outchannel; | 1705 | p->outfd = outchannel; |
| 1675 | 1706 | ||
| 1676 | /* Previously we recorded the tty descriptor used in the subprocess. | 1707 | /* Previously we recorded the tty descriptor used in the subprocess. |
| 1677 | It was only used for getting the foreground tty process, so now | 1708 | It was only used for getting the foreground tty process, so now |
| 1678 | we just reopen the device (see emacs_get_tty_pgrp) as this is | 1709 | we just reopen the device (see emacs_get_tty_pgrp) as this is |
| 1679 | more portable (see USG_SUBTTY_WORKS above). */ | 1710 | more portable (see USG_SUBTTY_WORKS above). */ |
| 1680 | 1711 | ||
| 1681 | XPROCESS (process)->pty_flag = pty_flag; | 1712 | p->pty_flag = pty_flag; |
| 1682 | pset_status (XPROCESS (process), Qrun); | 1713 | pset_status (p, Qrun); |
| 1683 | 1714 | ||
| 1684 | FD_SET (inchannel, &input_wait_mask); | 1715 | FD_SET (inchannel, &input_wait_mask); |
| 1685 | FD_SET (inchannel, &non_keyboard_wait_mask); | 1716 | FD_SET (inchannel, &non_keyboard_wait_mask); |
| @@ -1699,25 +1730,21 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir) | |||
| 1699 | { | 1730 | { |
| 1700 | Lisp_Object volatile encoded_current_dir_volatile = encoded_current_dir; | 1731 | Lisp_Object volatile encoded_current_dir_volatile = encoded_current_dir; |
| 1701 | Lisp_Object volatile lisp_pty_name_volatile = lisp_pty_name; | 1732 | Lisp_Object volatile lisp_pty_name_volatile = lisp_pty_name; |
| 1702 | Lisp_Object volatile process_volatile = process; | ||
| 1703 | char **volatile new_argv_volatile = new_argv; | 1733 | char **volatile new_argv_volatile = new_argv; |
| 1704 | int volatile forkin_volatile = forkin; | 1734 | int volatile forkin_volatile = forkin; |
| 1705 | int volatile forkout_volatile = forkout; | 1735 | int volatile forkout_volatile = forkout; |
| 1706 | int volatile wait_child_setup_0_volatile = wait_child_setup[0]; | 1736 | struct Lisp_Process *p_volatile = p; |
| 1707 | int volatile wait_child_setup_1_volatile = wait_child_setup[1]; | ||
| 1708 | 1737 | ||
| 1709 | pid = vfork (); | 1738 | pid = vfork (); |
| 1710 | 1739 | ||
| 1711 | encoded_current_dir = encoded_current_dir_volatile; | 1740 | encoded_current_dir = encoded_current_dir_volatile; |
| 1712 | lisp_pty_name = lisp_pty_name_volatile; | 1741 | lisp_pty_name = lisp_pty_name_volatile; |
| 1713 | process = process_volatile; | ||
| 1714 | new_argv = new_argv_volatile; | 1742 | new_argv = new_argv_volatile; |
| 1715 | forkin = forkin_volatile; | 1743 | forkin = forkin_volatile; |
| 1716 | forkout = forkout_volatile; | 1744 | forkout = forkout_volatile; |
| 1717 | wait_child_setup[0] = wait_child_setup_0_volatile; | 1745 | p = p_volatile; |
| 1718 | wait_child_setup[1] = wait_child_setup_1_volatile; | ||
| 1719 | 1746 | ||
| 1720 | pty_flag = XPROCESS (process)->pty_flag; | 1747 | pty_flag = p->pty_flag; |
| 1721 | } | 1748 | } |
| 1722 | 1749 | ||
| 1723 | if (pid == 0) | 1750 | if (pid == 0) |
| @@ -1833,42 +1860,42 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir) | |||
| 1833 | /* Back in the parent process. */ | 1860 | /* Back in the parent process. */ |
| 1834 | 1861 | ||
| 1835 | vfork_errno = errno; | 1862 | vfork_errno = errno; |
| 1836 | XPROCESS (process)->pid = pid; | 1863 | p->pid = pid; |
| 1837 | if (pid >= 0) | 1864 | if (pid >= 0) |
| 1838 | XPROCESS (process)->alive = 1; | 1865 | p->alive = 1; |
| 1839 | 1866 | ||
| 1840 | /* Stop blocking in the parent. */ | 1867 | /* Stop blocking in the parent. */ |
| 1841 | unblock_child_signal (); | 1868 | unblock_child_signal (); |
| 1842 | unblock_input (); | 1869 | unblock_input (); |
| 1843 | 1870 | ||
| 1844 | if (forkin >= 0) | ||
| 1845 | emacs_close (forkin); | ||
| 1846 | if (forkin != forkout && forkout >= 0) | ||
| 1847 | emacs_close (forkout); | ||
| 1848 | |||
| 1849 | if (pid < 0) | 1871 | if (pid < 0) |
| 1850 | report_file_errno ("Doing vfork", Qnil, vfork_errno); | 1872 | report_file_errno ("Doing vfork", Qnil, vfork_errno); |
| 1851 | else | 1873 | else |
| 1852 | { | 1874 | { |
| 1853 | /* vfork succeeded. */ | 1875 | /* vfork succeeded. */ |
| 1854 | 1876 | ||
| 1877 | /* Close the pipe ends that the child uses, or the child's pty. */ | ||
| 1878 | close_process_fd (&p->open_fd[SUBPROCESS_STDIN]); | ||
| 1879 | close_process_fd (&p->open_fd[SUBPROCESS_STDOUT]); | ||
| 1880 | |||
| 1855 | #ifdef WINDOWSNT | 1881 | #ifdef WINDOWSNT |
| 1856 | register_child (pid, inchannel); | 1882 | register_child (pid, inchannel); |
| 1857 | #endif /* WINDOWSNT */ | 1883 | #endif /* WINDOWSNT */ |
| 1858 | 1884 | ||
| 1859 | pset_tty_name (XPROCESS (process), lisp_pty_name); | 1885 | pset_tty_name (p, lisp_pty_name); |
| 1860 | 1886 | ||
| 1861 | #ifndef WINDOWSNT | 1887 | #ifndef WINDOWSNT |
| 1862 | /* Wait for child_setup to complete in case that vfork is | 1888 | /* Wait for child_setup to complete in case that vfork is |
| 1863 | actually defined as fork. The descriptor wait_child_setup[1] | 1889 | actually defined as fork. The descriptor |
| 1890 | XPROCESS (proc)->open_fd[EXEC_MOINTOR_OUTPUT] | ||
| 1864 | of a pipe is closed at the child side either by close-on-exec | 1891 | of a pipe is closed at the child side either by close-on-exec |
| 1865 | on successful execve or the _exit call in child_setup. */ | 1892 | on successful execve or the _exit call in child_setup. */ |
| 1866 | { | 1893 | { |
| 1867 | char dummy; | 1894 | char dummy; |
| 1868 | 1895 | ||
| 1869 | emacs_close (wait_child_setup[1]); | 1896 | close_process_fd (&p->open_fd[EXEC_MONITOR_OUTPUT]); |
| 1870 | emacs_read (wait_child_setup[0], &dummy, 1); | 1897 | emacs_read (p->open_fd[READ_FROM_EXEC_MONITOR], &dummy, 1); |
| 1871 | emacs_close (wait_child_setup[0]); | 1898 | close_process_fd (&p->open_fd[READ_FROM_EXEC_MONITOR]); |
| 1872 | } | 1899 | } |
| 1873 | #endif | 1900 | #endif |
| 1874 | } | 1901 | } |
| @@ -1877,16 +1904,13 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir) | |||
| 1877 | static void | 1904 | static void |
| 1878 | create_pty (Lisp_Object process) | 1905 | create_pty (Lisp_Object process) |
| 1879 | { | 1906 | { |
| 1907 | struct Lisp_Process *p = XPROCESS (process); | ||
| 1880 | char pty_name[PTY_NAME_SIZE]; | 1908 | char pty_name[PTY_NAME_SIZE]; |
| 1881 | int inchannel, outchannel; | 1909 | int pty_fd = NILP (Vprocess_connection_type) ? -1 : allocate_pty (pty_name); |
| 1882 | 1910 | ||
| 1883 | inchannel = outchannel = -1; | 1911 | if (pty_fd >= 0) |
| 1884 | |||
| 1885 | if (!NILP (Vprocess_connection_type)) | ||
| 1886 | outchannel = inchannel = allocate_pty (pty_name); | ||
| 1887 | |||
| 1888 | if (inchannel >= 0) | ||
| 1889 | { | 1912 | { |
| 1913 | p->open_fd[SUBPROCESS_STDIN] = pty_fd; | ||
| 1890 | #if ! defined (USG) || defined (USG_SUBTTY_WORKS) | 1914 | #if ! defined (USG) || defined (USG_SUBTTY_WORKS) |
| 1891 | /* On most USG systems it does not work to open the pty's tty here, | 1915 | /* On most USG systems it does not work to open the pty's tty here, |
| 1892 | then close it and reopen it in the child. */ | 1916 | then close it and reopen it in the child. */ |
| @@ -1895,6 +1919,7 @@ create_pty (Lisp_Object process) | |||
| 1895 | int forkout = emacs_open (pty_name, O_RDWR | O_NOCTTY, 0); | 1919 | int forkout = emacs_open (pty_name, O_RDWR | O_NOCTTY, 0); |
| 1896 | if (forkout < 0) | 1920 | if (forkout < 0) |
| 1897 | report_file_error ("Opening pty", Qnil); | 1921 | report_file_error ("Opening pty", Qnil); |
| 1922 | p->open_fd[WRITE_TO_SUBPROCESS] = forkout; | ||
| 1898 | #if defined (DONT_REOPEN_PTY) | 1923 | #if defined (DONT_REOPEN_PTY) |
| 1899 | /* In the case that vfork is defined as fork, the parent process | 1924 | /* In the case that vfork is defined as fork, the parent process |
| 1900 | (Emacs) may send some data before the child process completes | 1925 | (Emacs) may send some data before the child process completes |
| @@ -1903,33 +1928,32 @@ create_pty (Lisp_Object process) | |||
| 1903 | #endif /* DONT_REOPEN_PTY */ | 1928 | #endif /* DONT_REOPEN_PTY */ |
| 1904 | #endif /* not USG, or USG_SUBTTY_WORKS */ | 1929 | #endif /* not USG, or USG_SUBTTY_WORKS */ |
| 1905 | 1930 | ||
| 1906 | fcntl (inchannel, F_SETFL, O_NONBLOCK); | 1931 | fcntl (pty_fd, F_SETFL, O_NONBLOCK); |
| 1907 | fcntl (outchannel, F_SETFL, O_NONBLOCK); | ||
| 1908 | 1932 | ||
| 1909 | /* Record this as an active process, with its channels. | 1933 | /* Record this as an active process, with its channels. |
| 1910 | As a result, child_setup will close Emacs's side of the pipes. */ | 1934 | As a result, child_setup will close Emacs's side of the pipes. */ |
| 1911 | chan_process[inchannel] = process; | 1935 | chan_process[pty_fd] = process; |
| 1912 | XPROCESS (process)->infd = inchannel; | 1936 | p->infd = pty_fd; |
| 1913 | XPROCESS (process)->outfd = outchannel; | 1937 | p->outfd = pty_fd; |
| 1914 | 1938 | ||
| 1915 | /* Previously we recorded the tty descriptor used in the subprocess. | 1939 | /* Previously we recorded the tty descriptor used in the subprocess. |
| 1916 | It was only used for getting the foreground tty process, so now | 1940 | It was only used for getting the foreground tty process, so now |
| 1917 | we just reopen the device (see emacs_get_tty_pgrp) as this is | 1941 | we just reopen the device (see emacs_get_tty_pgrp) as this is |
| 1918 | more portable (see USG_SUBTTY_WORKS above). */ | 1942 | more portable (see USG_SUBTTY_WORKS above). */ |
| 1919 | 1943 | ||
| 1920 | XPROCESS (process)->pty_flag = 1; | 1944 | p->pty_flag = 1; |
| 1921 | pset_status (XPROCESS (process), Qrun); | 1945 | pset_status (p, Qrun); |
| 1922 | setup_process_coding_systems (process); | 1946 | setup_process_coding_systems (process); |
| 1923 | 1947 | ||
| 1924 | FD_SET (inchannel, &input_wait_mask); | 1948 | FD_SET (pty_fd, &input_wait_mask); |
| 1925 | FD_SET (inchannel, &non_keyboard_wait_mask); | 1949 | FD_SET (pty_fd, &non_keyboard_wait_mask); |
| 1926 | if (inchannel > max_process_desc) | 1950 | if (pty_fd > max_process_desc) |
| 1927 | max_process_desc = inchannel; | 1951 | max_process_desc = pty_fd; |
| 1928 | 1952 | ||
| 1929 | pset_tty_name (XPROCESS (process), build_string (pty_name)); | 1953 | pset_tty_name (p, build_string (pty_name)); |
| 1930 | } | 1954 | } |
| 1931 | 1955 | ||
| 1932 | XPROCESS (process)->pid = -2; | 1956 | p->pid = -2; |
| 1933 | } | 1957 | } |
| 1934 | 1958 | ||
| 1935 | 1959 | ||
| @@ -2535,6 +2559,7 @@ usage: (make-serial-process &rest ARGS) */) | |||
| 2535 | p = XPROCESS (proc); | 2559 | p = XPROCESS (proc); |
| 2536 | 2560 | ||
| 2537 | fd = serial_open (port); | 2561 | fd = serial_open (port); |
| 2562 | p->open_fd[SUBPROCESS_STDIN] = fd; | ||
| 2538 | p->infd = fd; | 2563 | p->infd = fd; |
| 2539 | p->outfd = fd; | 2564 | p->outfd = fd; |
| 2540 | if (fd > max_process_desc) | 2565 | if (fd > max_process_desc) |
| @@ -3297,12 +3322,6 @@ usage: (make-network-process &rest ARGS) */) | |||
| 3297 | } | 3322 | } |
| 3298 | #endif | 3323 | #endif |
| 3299 | 3324 | ||
| 3300 | /* Discard the unwind protect for closing S, if any. */ | ||
| 3301 | specpdl_ptr = specpdl + count1; | ||
| 3302 | |||
| 3303 | /* Unwind bind_polling_period and request_sigio. */ | ||
| 3304 | unbind_to (count, Qnil); | ||
| 3305 | |||
| 3306 | if (s < 0) | 3325 | if (s < 0) |
| 3307 | { | 3326 | { |
| 3308 | /* If non-blocking got this far - and failed - assume non-blocking is | 3327 | /* If non-blocking got this far - and failed - assume non-blocking is |
| @@ -3344,8 +3363,17 @@ usage: (make-network-process &rest ARGS) */) | |||
| 3344 | if ((tem = Fplist_get (contact, QCstop), !NILP (tem))) | 3363 | if ((tem = Fplist_get (contact, QCstop), !NILP (tem))) |
| 3345 | pset_command (p, Qt); | 3364 | pset_command (p, Qt); |
| 3346 | p->pid = 0; | 3365 | p->pid = 0; |
| 3366 | |||
| 3367 | p->open_fd[SUBPROCESS_STDIN] = inch; | ||
| 3347 | p->infd = inch; | 3368 | p->infd = inch; |
| 3348 | p->outfd = outch; | 3369 | p->outfd = outch; |
| 3370 | |||
| 3371 | /* Discard the unwind protect for closing S, if any. */ | ||
| 3372 | specpdl_ptr = specpdl + count1; | ||
| 3373 | |||
| 3374 | /* Unwind bind_polling_period and request_sigio. */ | ||
| 3375 | unbind_to (count, Qnil); | ||
| 3376 | |||
| 3349 | if (is_server && socktype != SOCK_DGRAM) | 3377 | if (is_server && socktype != SOCK_DGRAM) |
| 3350 | pset_status (p, Qlisten); | 3378 | pset_status (p, Qlisten); |
| 3351 | 3379 | ||
| @@ -3784,17 +3812,15 @@ FLAGS is the current flags of the interface. */) | |||
| 3784 | static void | 3812 | static void |
| 3785 | deactivate_process (Lisp_Object proc) | 3813 | deactivate_process (Lisp_Object proc) |
| 3786 | { | 3814 | { |
| 3787 | register int inchannel, outchannel; | 3815 | int inchannel; |
| 3788 | register struct Lisp_Process *p = XPROCESS (proc); | 3816 | struct Lisp_Process *p = XPROCESS (proc); |
| 3817 | int i; | ||
| 3789 | 3818 | ||
| 3790 | #ifdef HAVE_GNUTLS | 3819 | #ifdef HAVE_GNUTLS |
| 3791 | /* Delete GnuTLS structures in PROC, if any. */ | 3820 | /* Delete GnuTLS structures in PROC, if any. */ |
| 3792 | emacs_gnutls_deinit (proc); | 3821 | emacs_gnutls_deinit (proc); |
| 3793 | #endif /* HAVE_GNUTLS */ | 3822 | #endif /* HAVE_GNUTLS */ |
| 3794 | 3823 | ||
| 3795 | inchannel = p->infd; | ||
| 3796 | outchannel = p->outfd; | ||
| 3797 | |||
| 3798 | #ifdef ADAPTIVE_READ_BUFFERING | 3824 | #ifdef ADAPTIVE_READ_BUFFERING |
| 3799 | if (p->read_output_delay > 0) | 3825 | if (p->read_output_delay > 0) |
| 3800 | { | 3826 | { |
| @@ -3805,16 +3831,17 @@ deactivate_process (Lisp_Object proc) | |||
| 3805 | } | 3831 | } |
| 3806 | #endif | 3832 | #endif |
| 3807 | 3833 | ||
| 3834 | inchannel = p->infd; | ||
| 3835 | |||
| 3836 | /* Beware SIGCHLD hereabouts. */ | ||
| 3837 | if (inchannel >= 0) | ||
| 3838 | flush_pending_output (inchannel); | ||
| 3839 | |||
| 3840 | for (i = 0; i < PROCESS_OPEN_FDS; i++) | ||
| 3841 | close_process_fd (&p->open_fd[i]); | ||
| 3842 | |||
| 3808 | if (inchannel >= 0) | 3843 | if (inchannel >= 0) |
| 3809 | { | 3844 | { |
| 3810 | /* Beware SIGCHLD hereabouts. */ | ||
| 3811 | flush_pending_output (inchannel); | ||
| 3812 | emacs_close (inchannel); | ||
| 3813 | if (outchannel >= 0 && outchannel != inchannel) | ||
| 3814 | emacs_close (outchannel); | ||
| 3815 | |||
| 3816 | p->infd = -1; | ||
| 3817 | p->outfd = -1; | ||
| 3818 | #ifdef DATAGRAM_SOCKETS | 3845 | #ifdef DATAGRAM_SOCKETS |
| 3819 | if (DATAGRAM_CHAN_P (inchannel)) | 3846 | if (DATAGRAM_CHAN_P (inchannel)) |
| 3820 | { | 3847 | { |
| @@ -4095,6 +4122,7 @@ server_accept_connection (Lisp_Object server, int channel) | |||
| 4095 | /* Discard the unwind protect for closing S. */ | 4122 | /* Discard the unwind protect for closing S. */ |
| 4096 | specpdl_ptr = specpdl + count; | 4123 | specpdl_ptr = specpdl + count; |
| 4097 | 4124 | ||
| 4125 | p->open_fd[SUBPROCESS_STDIN] = s; | ||
| 4098 | p->infd = s; | 4126 | p->infd = s; |
| 4099 | p->outfd = s; | 4127 | p->outfd = s; |
| 4100 | pset_status (p, Qrun); | 4128 | pset_status (p, Qrun); |
| @@ -6014,7 +6042,8 @@ process has been transmitted to the serial port. */) | |||
| 6014 | } | 6042 | } |
| 6015 | else | 6043 | else |
| 6016 | { | 6044 | { |
| 6017 | int old_outfd, new_outfd; | 6045 | int old_outfd = XPROCESS (proc)->outfd; |
| 6046 | int new_outfd; | ||
| 6018 | 6047 | ||
| 6019 | #ifdef HAVE_SHUTDOWN | 6048 | #ifdef HAVE_SHUTDOWN |
| 6020 | /* If this is a network connection, or socketpair is used | 6049 | /* If this is a network connection, or socketpair is used |
| @@ -6022,18 +6051,15 @@ process has been transmitted to the serial port. */) | |||
| 6022 | (In some old system, shutdown to socketpair doesn't work. | 6051 | (In some old system, shutdown to socketpair doesn't work. |
| 6023 | Then we just can't win.) */ | 6052 | Then we just can't win.) */ |
| 6024 | if (EQ (XPROCESS (proc)->type, Qnetwork) | 6053 | if (EQ (XPROCESS (proc)->type, Qnetwork) |
| 6025 | || XPROCESS (proc)->outfd == XPROCESS (proc)->infd) | 6054 | || XPROCESS (proc)->infd == old_outfd) |
| 6026 | shutdown (XPROCESS (proc)->outfd, 1); | 6055 | shutdown (old_outfd, 1); |
| 6027 | /* In case of socketpair, outfd == infd, so don't close it. */ | 6056 | #endif |
| 6028 | if (XPROCESS (proc)->outfd != XPROCESS (proc)->infd) | 6057 | close_process_fd (&XPROCESS (proc)->open_fd[WRITE_TO_SUBPROCESS]); |
| 6029 | emacs_close (XPROCESS (proc)->outfd); | ||
| 6030 | #else /* not HAVE_SHUTDOWN */ | ||
| 6031 | emacs_close (XPROCESS (proc)->outfd); | ||
| 6032 | #endif /* not HAVE_SHUTDOWN */ | ||
| 6033 | new_outfd = emacs_open (NULL_DEVICE, O_WRONLY, 0); | 6058 | new_outfd = emacs_open (NULL_DEVICE, O_WRONLY, 0); |
| 6034 | if (new_outfd < 0) | 6059 | if (new_outfd < 0) |
| 6035 | emacs_abort (); | 6060 | report_file_error ("Opening null device", Qnil); |
| 6036 | old_outfd = XPROCESS (proc)->outfd; | 6061 | XPROCESS (proc)->open_fd[WRITE_TO_SUBPROCESS] = new_outfd; |
| 6062 | XPROCESS (proc)->outfd = new_outfd; | ||
| 6037 | 6063 | ||
| 6038 | if (!proc_encode_coding_system[new_outfd]) | 6064 | if (!proc_encode_coding_system[new_outfd]) |
| 6039 | proc_encode_coding_system[new_outfd] | 6065 | proc_encode_coding_system[new_outfd] |
| @@ -6042,8 +6068,6 @@ process has been transmitted to the serial port. */) | |||
| 6042 | = *proc_encode_coding_system[old_outfd]; | 6068 | = *proc_encode_coding_system[old_outfd]; |
| 6043 | memset (proc_encode_coding_system[old_outfd], 0, | 6069 | memset (proc_encode_coding_system[old_outfd], 0, |
| 6044 | sizeof (struct coding_system)); | 6070 | sizeof (struct coding_system)); |
| 6045 | |||
| 6046 | XPROCESS (proc)->outfd = new_outfd; | ||
| 6047 | } | 6071 | } |
| 6048 | return process; | 6072 | return process; |
| 6049 | } | 6073 | } |
| @@ -6120,7 +6144,8 @@ handle_child_signal (int sig) | |||
| 6120 | bool all_pids_are_fixnums | 6144 | bool all_pids_are_fixnums |
| 6121 | = (MOST_NEGATIVE_FIXNUM <= TYPE_MINIMUM (pid_t) | 6145 | = (MOST_NEGATIVE_FIXNUM <= TYPE_MINIMUM (pid_t) |
| 6122 | && TYPE_MAXIMUM (pid_t) <= MOST_POSITIVE_FIXNUM); | 6146 | && TYPE_MAXIMUM (pid_t) <= MOST_POSITIVE_FIXNUM); |
| 6123 | Lisp_Object xpid = XCAR (tail); | 6147 | Lisp_Object head = XCAR (tail); |
| 6148 | Lisp_Object xpid = XCAR (head); | ||
| 6124 | if (all_pids_are_fixnums ? INTEGERP (xpid) : NUMBERP (xpid)) | 6149 | if (all_pids_are_fixnums ? INTEGERP (xpid) : NUMBERP (xpid)) |
| 6125 | { | 6150 | { |
| 6126 | pid_t deleted_pid; | 6151 | pid_t deleted_pid; |
| @@ -6129,7 +6154,11 @@ handle_child_signal (int sig) | |||
| 6129 | else | 6154 | else |
| 6130 | deleted_pid = XFLOAT_DATA (xpid); | 6155 | deleted_pid = XFLOAT_DATA (xpid); |
| 6131 | if (child_status_changed (deleted_pid, 0, 0)) | 6156 | if (child_status_changed (deleted_pid, 0, 0)) |
| 6132 | XSETCAR (tail, Qnil); | 6157 | { |
| 6158 | if (STRINGP (XCDR (head))) | ||
| 6159 | unlink (SSDATA (XCDR (head))); | ||
| 6160 | XSETCAR (tail, Qnil); | ||
| 6161 | } | ||
| 6133 | } | 6162 | } |
| 6134 | } | 6163 | } |
| 6135 | 6164 | ||
diff --git a/src/process.h b/src/process.h index 8ae33aebf39..b312f7f2425 100644 --- a/src/process.h +++ b/src/process.h | |||
| @@ -31,6 +31,11 @@ INLINE_HEADER_BEGIN | |||
| 31 | # define PROCESS_INLINE INLINE | 31 | # define PROCESS_INLINE INLINE |
| 32 | #endif | 32 | #endif |
| 33 | 33 | ||
| 34 | /* Bound on number of file descriptors opened on behalf of a process, | ||
| 35 | that need to be closed. */ | ||
| 36 | |||
| 37 | enum { PROCESS_OPEN_FDS = 6 }; | ||
| 38 | |||
| 34 | /* This structure records information about a subprocess | 39 | /* This structure records information about a subprocess |
| 35 | or network connection. */ | 40 | or network connection. */ |
| 36 | 41 | ||
| @@ -115,6 +120,9 @@ struct Lisp_Process | |||
| 115 | int infd; | 120 | int infd; |
| 116 | /* Descriptor by which we write to this process */ | 121 | /* Descriptor by which we write to this process */ |
| 117 | int outfd; | 122 | int outfd; |
| 123 | /* Descriptors that were created for this process and that need | ||
| 124 | closing. Unused entries are negative. */ | ||
| 125 | int open_fd[PROCESS_OPEN_FDS]; | ||
| 118 | /* Event-count of last event in which this process changed status. */ | 126 | /* Event-count of last event in which this process changed status. */ |
| 119 | EMACS_INT tick; | 127 | EMACS_INT tick; |
| 120 | /* Event-count of last such event reported. */ | 128 | /* Event-count of last such event reported. */ |
| @@ -210,13 +218,16 @@ enum | |||
| 210 | 218 | ||
| 211 | extern void block_child_signal (void); | 219 | extern void block_child_signal (void); |
| 212 | extern void unblock_child_signal (void); | 220 | extern void unblock_child_signal (void); |
| 213 | extern void record_kill_process (struct Lisp_Process *); | 221 | extern void record_kill_process (struct Lisp_Process *, Lisp_Object); |
| 214 | 222 | ||
| 215 | /* Defined in process.c. */ | 223 | /* Defined in sysdep.c. */ |
| 216 | 224 | ||
| 217 | extern Lisp_Object list_system_processes (void); | 225 | extern Lisp_Object list_system_processes (void); |
| 218 | extern Lisp_Object system_process_attributes (Lisp_Object); | 226 | extern Lisp_Object system_process_attributes (Lisp_Object); |
| 219 | 227 | ||
| 228 | /* Defined in process.c. */ | ||
| 229 | |||
| 230 | extern void record_deleted_pid (pid_t, Lisp_Object); | ||
| 220 | extern void hold_keyboard_input (void); | 231 | extern void hold_keyboard_input (void); |
| 221 | extern void unhold_keyboard_input (void); | 232 | extern void unhold_keyboard_input (void); |
| 222 | extern bool kbd_on_hold_p (void); | 233 | extern bool kbd_on_hold_p (void); |
diff --git a/src/syswait.h b/src/syswait.h index 03e5cb5fe2e..4ae9129d7ed 100644 --- a/src/syswait.h +++ b/src/syswait.h | |||
| @@ -52,9 +52,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ | |||
| 52 | #define WTERMSIG(status) ((status) & 0x7f) | 52 | #define WTERMSIG(status) ((status) & 0x7f) |
| 53 | #endif | 53 | #endif |
| 54 | 54 | ||
| 55 | /* Defined in process.c. */ | ||
| 56 | extern void record_deleted_pid (pid_t); | ||
| 57 | |||
| 58 | /* Defined in sysdep.c. */ | 55 | /* Defined in sysdep.c. */ |
| 59 | extern void wait_for_termination (pid_t, int *, bool); | 56 | extern void wait_for_termination (pid_t, int *, bool); |
| 60 | extern pid_t child_status_changed (pid_t, int *, int); | 57 | extern pid_t child_status_changed (pid_t, int *, int); |
diff --git a/src/window.c b/src/window.c index 921ea86b3d2..82639b6d8ce 100644 --- a/src/window.c +++ b/src/window.c | |||
| @@ -72,7 +72,6 @@ static int get_leaf_windows (struct window *, struct window **, int); | |||
| 72 | static void window_scroll (Lisp_Object, EMACS_INT, bool, int); | 72 | static void window_scroll (Lisp_Object, EMACS_INT, bool, int); |
| 73 | static void window_scroll_pixel_based (Lisp_Object, int, bool, int); | 73 | static void window_scroll_pixel_based (Lisp_Object, int, bool, int); |
| 74 | static void window_scroll_line_based (Lisp_Object, int, bool, int); | 74 | static void window_scroll_line_based (Lisp_Object, int, bool, int); |
| 75 | static int freeze_window_start (struct window *, void *); | ||
| 76 | static Lisp_Object window_list (void); | 75 | static Lisp_Object window_list (void); |
| 77 | static int add_window_to_list (struct window *, void *); | 76 | static int add_window_to_list (struct window *, void *); |
| 78 | static Lisp_Object next_window (Lisp_Object, Lisp_Object, | 77 | static Lisp_Object next_window (Lisp_Object, Lisp_Object, |
| @@ -502,7 +501,6 @@ select_window (Lisp_Object window, Lisp_Object norecord, int inhibit_point_swap) | |||
| 502 | CHECK_LIVE_WINDOW (window); | 501 | CHECK_LIVE_WINDOW (window); |
| 503 | 502 | ||
| 504 | w = XWINDOW (window); | 503 | w = XWINDOW (window); |
| 505 | w->frozen_window_start_p = 0; | ||
| 506 | 504 | ||
| 507 | /* Make the selected window's buffer current. */ | 505 | /* Make the selected window's buffer current. */ |
| 508 | Fset_buffer (w->contents); | 506 | Fset_buffer (w->contents); |
| @@ -2058,7 +2056,6 @@ replace_window (Lisp_Object old, Lisp_Object new, int setflag) | |||
| 2058 | wset_window_end_vpos (n, make_number (0)); | 2056 | wset_window_end_vpos (n, make_number (0)); |
| 2059 | wset_window_end_pos (n, make_number (0)); | 2057 | wset_window_end_pos (n, make_number (0)); |
| 2060 | n->window_end_valid = 0; | 2058 | n->window_end_valid = 0; |
| 2061 | n->frozen_window_start_p = 0; | ||
| 2062 | } | 2059 | } |
| 2063 | 2060 | ||
| 2064 | tem = o->next; | 2061 | tem = o->next; |
| @@ -6459,38 +6456,6 @@ foreach_window_1 (struct window *w, int (*fn) (struct window *, void *), void *u | |||
| 6459 | return cont; | 6456 | return cont; |
| 6460 | } | 6457 | } |
| 6461 | 6458 | ||
| 6462 | |||
| 6463 | /* Freeze or unfreeze the window start of W unless it is a | ||
| 6464 | mini-window or the selected window. FREEZE_P non-null means freeze | ||
| 6465 | the window start. */ | ||
| 6466 | |||
| 6467 | static int | ||
| 6468 | freeze_window_start (struct window *w, void *freeze_p) | ||
| 6469 | { | ||
| 6470 | if (MINI_WINDOW_P (w) | ||
| 6471 | || (WINDOWP (selected_window) /* Can be nil in corner cases. */ | ||
| 6472 | && (w == XWINDOW (selected_window) | ||
| 6473 | || (MINI_WINDOW_P (XWINDOW (selected_window)) | ||
| 6474 | && ! NILP (Vminibuf_scroll_window) | ||
| 6475 | && w == XWINDOW (Vminibuf_scroll_window))))) | ||
| 6476 | freeze_p = NULL; | ||
| 6477 | |||
| 6478 | w->frozen_window_start_p = freeze_p != NULL; | ||
| 6479 | return 1; | ||
| 6480 | } | ||
| 6481 | |||
| 6482 | |||
| 6483 | /* Freeze or unfreeze the window starts of all leaf windows on frame | ||
| 6484 | F, except the selected window and a mini-window. FREEZE_P non-zero | ||
| 6485 | means freeze the window start. */ | ||
| 6486 | |||
| 6487 | void | ||
| 6488 | freeze_window_starts (struct frame *f, bool freeze_p) | ||
| 6489 | { | ||
| 6490 | foreach_window (f, freeze_window_start, freeze_p ? f : 0); | ||
| 6491 | } | ||
| 6492 | |||
| 6493 | |||
| 6494 | /*********************************************************************** | 6459 | /*********************************************************************** |
| 6495 | Initialization | 6460 | Initialization |
| 6496 | ***********************************************************************/ | 6461 | ***********************************************************************/ |
diff --git a/src/window.h b/src/window.h index 24949e1e287..260a672d93a 100644 --- a/src/window.h +++ b/src/window.h | |||
| @@ -316,11 +316,6 @@ struct window | |||
| 316 | Currently only used for menu bar windows of frames. */ | 316 | Currently only used for menu bar windows of frames. */ |
| 317 | unsigned pseudo_window_p : 1; | 317 | unsigned pseudo_window_p : 1; |
| 318 | 318 | ||
| 319 | /* 1 means the window start of this window is frozen and may not | ||
| 320 | be changed during redisplay. If point is not in the window, | ||
| 321 | accept that. */ | ||
| 322 | unsigned frozen_window_start_p : 1; | ||
| 323 | |||
| 324 | /* Non-zero means fringes are drawn outside display margins. | 319 | /* Non-zero means fringes are drawn outside display margins. |
| 325 | Otherwise draw them between margin areas and text. */ | 320 | Otherwise draw them between margin areas and text. */ |
| 326 | unsigned fringes_outside_margins : 1; | 321 | unsigned fringes_outside_margins : 1; |
| @@ -888,7 +883,6 @@ extern Lisp_Object window_from_coordinates (struct frame *, int, int, | |||
| 888 | extern void resize_frame_windows (struct frame *, int, bool); | 883 | extern void resize_frame_windows (struct frame *, int, bool); |
| 889 | extern void restore_window_configuration (Lisp_Object); | 884 | extern void restore_window_configuration (Lisp_Object); |
| 890 | extern void delete_all_child_windows (Lisp_Object); | 885 | extern void delete_all_child_windows (Lisp_Object); |
| 891 | extern void freeze_window_starts (struct frame *, bool); | ||
| 892 | extern void grow_mini_window (struct window *, int); | 886 | extern void grow_mini_window (struct window *, int); |
| 893 | extern void shrink_mini_window (struct window *); | 887 | extern void shrink_mini_window (struct window *); |
| 894 | extern int window_relative_x_coord (struct window *, enum window_part, int); | 888 | extern int window_relative_x_coord (struct window *, enum window_part, int); |
diff --git a/src/xdisp.c b/src/xdisp.c index 9f734981ce9..42b7977687e 100644 --- a/src/xdisp.c +++ b/src/xdisp.c | |||
| @@ -10516,7 +10516,8 @@ resize_mini_window (struct window *w, int exact_p) | |||
| 10516 | if (height > WINDOW_TOTAL_LINES (w)) | 10516 | if (height > WINDOW_TOTAL_LINES (w)) |
| 10517 | { | 10517 | { |
| 10518 | int old_height = WINDOW_TOTAL_LINES (w); | 10518 | int old_height = WINDOW_TOTAL_LINES (w); |
| 10519 | freeze_window_starts (f, 1); | 10519 | |
| 10520 | FRAME_WINDOWS_FROZEN (f) = 1; | ||
| 10520 | grow_mini_window (w, height - WINDOW_TOTAL_LINES (w)); | 10521 | grow_mini_window (w, height - WINDOW_TOTAL_LINES (w)); |
| 10521 | window_height_changed_p = WINDOW_TOTAL_LINES (w) != old_height; | 10522 | window_height_changed_p = WINDOW_TOTAL_LINES (w) != old_height; |
| 10522 | } | 10523 | } |
| @@ -10524,7 +10525,8 @@ resize_mini_window (struct window *w, int exact_p) | |||
| 10524 | && (exact_p || BEGV == ZV)) | 10525 | && (exact_p || BEGV == ZV)) |
| 10525 | { | 10526 | { |
| 10526 | int old_height = WINDOW_TOTAL_LINES (w); | 10527 | int old_height = WINDOW_TOTAL_LINES (w); |
| 10527 | freeze_window_starts (f, 0); | 10528 | |
| 10529 | FRAME_WINDOWS_FROZEN (f) = 0; | ||
| 10528 | shrink_mini_window (w); | 10530 | shrink_mini_window (w); |
| 10529 | window_height_changed_p = WINDOW_TOTAL_LINES (w) != old_height; | 10531 | window_height_changed_p = WINDOW_TOTAL_LINES (w) != old_height; |
| 10530 | } | 10532 | } |
| @@ -10535,19 +10537,21 @@ resize_mini_window (struct window *w, int exact_p) | |||
| 10535 | if (height > WINDOW_TOTAL_LINES (w)) | 10537 | if (height > WINDOW_TOTAL_LINES (w)) |
| 10536 | { | 10538 | { |
| 10537 | int old_height = WINDOW_TOTAL_LINES (w); | 10539 | int old_height = WINDOW_TOTAL_LINES (w); |
| 10538 | freeze_window_starts (f, 1); | 10540 | |
| 10541 | FRAME_WINDOWS_FROZEN (f) = 1; | ||
| 10539 | grow_mini_window (w, height - WINDOW_TOTAL_LINES (w)); | 10542 | grow_mini_window (w, height - WINDOW_TOTAL_LINES (w)); |
| 10540 | window_height_changed_p = WINDOW_TOTAL_LINES (w) != old_height; | 10543 | window_height_changed_p = WINDOW_TOTAL_LINES (w) != old_height; |
| 10541 | } | 10544 | } |
| 10542 | else if (height < WINDOW_TOTAL_LINES (w)) | 10545 | else if (height < WINDOW_TOTAL_LINES (w)) |
| 10543 | { | 10546 | { |
| 10544 | int old_height = WINDOW_TOTAL_LINES (w); | 10547 | int old_height = WINDOW_TOTAL_LINES (w); |
| 10545 | freeze_window_starts (f, 0); | 10548 | |
| 10549 | FRAME_WINDOWS_FROZEN (f) = 0; | ||
| 10546 | shrink_mini_window (w); | 10550 | shrink_mini_window (w); |
| 10547 | 10551 | ||
| 10548 | if (height) | 10552 | if (height) |
| 10549 | { | 10553 | { |
| 10550 | freeze_window_starts (f, 1); | 10554 | FRAME_WINDOWS_FROZEN (f) = 1; |
| 10551 | grow_mini_window (w, height - WINDOW_TOTAL_LINES (w)); | 10555 | grow_mini_window (w, height - WINDOW_TOTAL_LINES (w)); |
| 10552 | } | 10556 | } |
| 10553 | 10557 | ||
| @@ -10930,6 +10934,31 @@ mode_line_update_needed (struct window *w) | |||
| 10930 | && (w->column_number_displayed != current_column ())); | 10934 | && (w->column_number_displayed != current_column ())); |
| 10931 | } | 10935 | } |
| 10932 | 10936 | ||
| 10937 | /* Nonzero if window start of W is frozen and may not be changed during | ||
| 10938 | redisplay. */ | ||
| 10939 | |||
| 10940 | static bool | ||
| 10941 | window_frozen_p (struct window *w) | ||
| 10942 | { | ||
| 10943 | if (FRAME_WINDOWS_FROZEN (XFRAME (WINDOW_FRAME (w)))) | ||
| 10944 | { | ||
| 10945 | Lisp_Object window; | ||
| 10946 | |||
| 10947 | XSETWINDOW (window, w); | ||
| 10948 | if (MINI_WINDOW_P (w)) | ||
| 10949 | return 0; | ||
| 10950 | else if (EQ (window, selected_window)) | ||
| 10951 | return 0; | ||
| 10952 | else if (MINI_WINDOW_P (XWINDOW (selected_window)) | ||
| 10953 | && EQ (window, Vminibuf_scroll_window)) | ||
| 10954 | /* This special window can't be frozen too. */ | ||
| 10955 | return 0; | ||
| 10956 | else | ||
| 10957 | return 1; | ||
| 10958 | } | ||
| 10959 | return 0; | ||
| 10960 | } | ||
| 10961 | |||
| 10933 | /*********************************************************************** | 10962 | /*********************************************************************** |
| 10934 | Mode Lines and Frame Titles | 10963 | Mode Lines and Frame Titles |
| 10935 | ***********************************************************************/ | 10964 | ***********************************************************************/ |
| @@ -15573,7 +15602,7 @@ redisplay_window (Lisp_Object window, int just_this_one_p) | |||
| 15573 | 15602 | ||
| 15574 | /* Handle case where place to start displaying has been specified, | 15603 | /* Handle case where place to start displaying has been specified, |
| 15575 | unless the specified location is outside the accessible range. */ | 15604 | unless the specified location is outside the accessible range. */ |
| 15576 | if (w->force_start || w->frozen_window_start_p) | 15605 | if (w->force_start || window_frozen_p (w)) |
| 15577 | { | 15606 | { |
| 15578 | /* We set this later on if we have to adjust point. */ | 15607 | /* We set this later on if we have to adjust point. */ |
| 15579 | int new_vpos = -1; | 15608 | int new_vpos = -1; |
| @@ -15618,7 +15647,7 @@ redisplay_window (Lisp_Object window, int just_this_one_p) | |||
| 15618 | goto need_larger_matrices; | 15647 | goto need_larger_matrices; |
| 15619 | } | 15648 | } |
| 15620 | 15649 | ||
| 15621 | if (w->cursor.vpos < 0 && !w->frozen_window_start_p) | 15650 | if (w->cursor.vpos < 0 && !window_frozen_p (w)) |
| 15622 | { | 15651 | { |
| 15623 | /* If point does not appear, try to move point so it does | 15652 | /* If point does not appear, try to move point so it does |
| 15624 | appear. The desired matrix has been built above, so we | 15653 | appear. The desired matrix has been built above, so we |