From 161a7b3739cab0544841ec17c67050ae70534767 Mon Sep 17 00:00:00 2001 From: Andrew Innes Date: Thu, 14 Sep 2000 21:22:43 +0000 Subject: [PATCH] Add bootstrap support. Also copy lisp source when installing. --- lisp/makefile.w32-in | 257 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 238 insertions(+), 19 deletions(-) diff --git a/lisp/makefile.w32-in b/lisp/makefile.w32-in index 97d48a62b30..db9c23f6331 100644 --- a/lisp/makefile.w32-in +++ b/lisp/makefile.w32-in @@ -24,13 +24,232 @@ ALL = all: $(ALL) -topdontcompile = cus-load.el forms-d2.el forms-pass.el patcomp.el \ - subdirs.el version.el -maildontcompile = mail/blessmail.el mail/sc.el -playdontcompile = play/bruce.el -interdontcompile = international/latin-1.el international/latin-2.el \ - international/latin-3.el international/latin-4.el \ - international/latin-5.el international/mule-conf.el +SQUOTE=' +# ' + +#lisp=$(MAKEDIR:\=/) +lisp=. + +# You can specify a different executable on the make command line, +# e.g. "make EMACS=../src/emacs ...". + +EMACS = "../bin/emacs.exe" + +# Command line flags for Emacs. This must include --multibyte, +# otherwise some files will not compile. + +EMACSOPT = -batch --no-init-file --no-site-file --multibyte + +lisptagsfiles1 = $(lisp)/*.el +lisptagsfiles2 = $(lisp)/*/*.el +ETAGS = "../lib-src/$(BLD)/etags" + +# Files which should not be compiled. +# - emacs-lisp/cl-specs.el: only contains `def-edebug-spec's so there's +# no point compiling it, although it doesn't hurt. + +DONTCOMPILE = \ + $(lisp)/bindings.el \ + $(lisp)/cus-load.el \ + $(lisp)/cus-start.el \ + $(lisp)/emacs-lisp/cl-specs.el \ + $(lisp)/eshell/esh-maint.el \ + $(lisp)/eshell/esh-groups.el \ + $(lisp)/finder-inf.el \ + $(lisp)/forms-d2.el \ + $(lisp)/forms-pass.el \ + $(lisp)/generic-x.el \ + $(lisp)/international/latin-1.el \ + $(lisp)/international/latin-2.el \ + $(lisp)/international/latin-3.el \ + $(lisp)/international/latin-4.el \ + $(lisp)/international/latin-5.el \ + $(lisp)/international/latin-8.el \ + $(lisp)/international/latin-9.el \ + $(lisp)/international/mule-conf.el \ + $(lisp)/loaddefs.el \ + $(lisp)/loadup.el \ + $(lisp)/mail/blessmail.el \ + $(lisp)/mail/sc.el \ + $(lisp)/patcomp.el \ + $(lisp)/paths.el \ + $(lisp)/play/bruce.el \ + $(lisp)/subdirs.el \ + $(lisp)/term/internal.el \ + $(lisp)/version.el + +# Files to compile before others during a bootstrap. This is done +# to speed up the bootstrap process. + +COMPILE_FIRST = \ + $(lisp)/emacs-lisp/byte-opt.el \ + $(lisp)/emacs-lisp/bytecomp.el \ + $(lisp)/subr.el + +# The actual Emacs command run in the targets below. + +emacs = $(EMACS) $(EMACSOPT) + +# Common command to find subdirectories + +setwins=subdirs=`find $$wd -type d -print`; \ + for file in $$subdirs; do \ + case $$file in */Old | */RCS | */CVS | */CVS/* | */=* ) ;; \ + *) wins="$$wins $$file" ;; \ + esac; \ + done + +# Have to define the list of subdirs manually when not using sh. +WINS=\ + calendar \ + emacs-lisp \ + emulation \ + eshell \ + gnus \ + international \ + language \ + mail \ + net \ + play \ + progmodes \ + term \ + textmodes + +doit: + +cus-load.el: + touch $@ +custom-deps: cus-load.el doit + @echo Directories: $(WINS) + $(emacs) -l cus-dep --eval $(ARGQUOTE)(setq find-file-hooks nil)$(ARGQUOTE) -f custom-make-dependencies $(lisp) $(WINS) + +finder-inf.el: + echo (provide $(SQUOTE)finder-inf)>> $@ + +finder-data: finder-inf.el doit + @echo Directories: $(WINS) + $(emacs) -l finder -f finder-compile-keywords-make-dist $(lisp) $(WINS) + +loaddefs.el: + echo ;;; loaddefs.el --- automatically extracted autoloads> $@ + echo ;;; Code:>> $@ + echo >> $@ + echo ;;; Local Variables:>> $@ + echo ;;; version-control: never>> $@ + echo ;;; no-byte-compile: t>> $@ + echo ;;; no-update-autoloads: t>> $@ + echo ;;; End:>> $@ + echo ;;; loaddefs.el ends here>> $@ + +autoloads: loaddefs.el doit + @echo Directories: $(WINS) + set EMACSLOADPATH=$(lisp) + $(SETLOADPATH) $(emacs) -l autoload --eval $(ARGQUOTE)(setq find-file-hooks nil generated-autoload-file $(DQUOTE)$(lisp)/loaddefs.el$(DQUOTE))$(ARGQUOTE) -f batch-update-autoloads $(lisp) $(WINS) + +subdirs.el: + $(MAKE) $(MFLAGS) update-subdirs + +# Need separate version for sh and native cmd.exe +update-subdirs: update-subdirs-$(SHELLTYPE) + +update-subdirs-CMD: doit + @set QWINS= + @for %d in ($(WINS)) do if not (%d)==(term) set QWINS=%QWINS% "%d" + echo ;; In load-path, after this directory should come> subdirs.el + echo ;; certain of its subdirectories. Here we specify them.>> subdirs.el + echo (normal-top-level-add-to-load-path $(SQUOTE)(%QWINS%))>> subdirs.el + +update-subdirs-SH: doit + wd=$(lisp); $(setwins); \ + for file in $$wins; do \ + $(srcdir)/update-subdirs $$file; \ + done; + +updates: update-subdirs autoloads finder-data custom-deps + +TAGS: $(lisptagsfiles1) $(lisptagsfiles2) + $(ETAGS) $(lisptagsfiles1) $(lisptagsfiles2) + +TAGS-LISP: $(lispsource)$(lisptagsfiles1) $(lispsource)$(lisptagsfiles2) + $(ETAGS) -o TAGS-LISP $(lispsource)$(lisptagsfiles1) $(lispsource)$(lisptagsfiles2) + +.el.elc: + set EMACSLOADPATH=$(lisp) + -$(SETLOADPATH) $(emacs) -f batch-byte-compile $< + +$(DONTCOMPILE:.el=.elc): + -$(DEL) $@ + +# Compile all Lisp files, except those from DONTCOMPILE. This +# compiles files unconditionally. All .elc files are made writable +# before compilation in case we checked out read-only (CVS option -r). +# Files MUST be compiled one by one. If we compile several files in a +# row we can't make sure that the compilation environment is clean. +# We also set the load-path of the Emacs used for compilation to the +# current directory and its subdirectories, to make sure require's and +# load's in the files being compiled find the right files. + +# Need separate version for sh and native cmd.exe +compile-files: subdirs.el compile-files-$(SHELLTYPE) doit + +compile-files-CMD: + set EMACSLOADPATH=$(lisp) + -for %f in ($(lisp) $(WINS)) do for %g in (%f\*.elc) do @attrib -r %g + for %f in ($(COMPILE_FIRST)) do $(emacs) -f batch-byte-compile %f + for %f in ($(lisp) $(WINS)) do for %g in (%f/*.el) do $(emacs) -f batch-byte-compile %f/%g + +compile-files-SH: +# for elc in $(lisp)/*.elc $(lisp)/*/*.elc; do attrib -r $$elc; done + for el in $(COMPILE_FIRST); do \ + echo Compiling $$el; \ + EMACSLOADPATH=$(lisp) $(emacs) -f batch-byte-compile $$el; \ + done + for dir in $(lisp) $(WINS); do \ + for el in $$dir/*.el; do \ + echo Compiling $$el; \ + EMACSLOADPATH=$(lisp) $(emacs) -f batch-byte-compile $$el; \ + done; \ + done + +# Backup compiled Lisp files in elc.tar.gz. If that file already +# exists, make a backup of it. + +backup-compiled-files: + -mv $(lisp)/elc.tar.gz $(lisp)/elc.tar.gz~ + -tar czf $(lisp)/elc.tar.gz $(lisp)/*.elc $(lisp)/*/*.elc + +# Compile Lisp files, but save old compiled files first. + +compile: backup-compiled-files compile-files + +# Recompile all Lisp files which are newer than their .elc files. +# Note that this doesn't create .elc files. It only recompiles if an +# .elc is present. + +recompile: doit + set EMACSLOADPATH=$(lisp) + $(SETLOADPATH) $(emacs) -f batch-byte-recompile-directory . + +# Prepare a bootstrap in the lisp subdirectory. Build loaddefs.el, +# because it's not sure it's up-to-date, and if it's not, that might +# lead to errors during the bootstrap because something fails to +# autoload as expected. Remove compiled Lisp files so that +# bootstrap-emacs will be built from sources only. + +# Need separate version for sh and native cmd.exe +bootstrap-clean: bootstrap-clean-$(SHELLTYPE) + +bootstrap-clean-CMD: + if exist $(EMACS) $(MAKE) $(MFLAGS) autoloads + -for %f in ($(lisp) $(WINS)) do for %g in (%f\*.elc) do @$(DEL) %g + +bootstrap-clean-SH: + if test -f $(EMACS); then $(MAKE) $(MFLAGS) autoloads; fi + -rm -f $(lisp)/*.elc $(lisp)/*/*.elc + +# Generate/update files for the bootstrap process. + +bootstrap: autoloads compile-files custom-deps # # Assuming INSTALL_DIR is defined, copy the elisp files to it @@ -44,20 +263,20 @@ install: #ifdef COPY_LISP_SOURCE $(IFNOTSAMEDIR) $(CP_DIR) . "$(INSTALL_DIR)/lisp" $(ENDIF) #else - $(IFNOTSAMEDIR) $(CP_DIR) *.elc "$(INSTALL_DIR)/lisp" $(ENDIF) - $(IFNOTSAMEDIR) $(CP) cus-load.el "$(INSTALL_DIR)/lisp" $(ENDIF) - $(IFNOTSAMEDIR) $(CP) forms*.el "$(INSTALL_DIR)/lisp" $(ENDIF) - $(IFNOTSAMEDIR) $(CP) patcomp.el "$(INSTALL_DIR)/lisp" $(ENDIF) - $(IFNOTSAMEDIR) $(CP) subdirs.el "$(INSTALL_DIR)/lisp" $(ENDIF) - $(IFNOTSAMEDIR) $(CP) version.el "$(INSTALL_DIR)/lisp" $(ENDIF) - $(IFNOTSAMEDIR) $(CP) mail/blessmail.el "$(INSTALL_DIR)/lisp/mail" $(ENDIF) - $(IFNOTSAMEDIR) $(CP) mail/sc.el "$(INSTALL_DIR)/lisp/mail" $(ENDIF) - $(IFNOTSAMEDIR) $(CP) play/bruce.el "$(INSTALL_DIR)/lisp/play" $(ENDIF) - $(IFNOTSAMEDIR) $(CP) international/latin-*.el "$(INSTALL_DIR)/lisp/international" $(ENDIF) - $(IFNOTSAMEDIR) $(CP) international/mule-conf.el "$(INSTALL_DIR)/lisp/international" $(ENDIF) +# $(IFNOTSAMEDIR) $(CP_DIR) *.elc "$(INSTALL_DIR)/lisp" $(ENDIF) +# $(IFNOTSAMEDIR) $(CP) cus-load.el "$(INSTALL_DIR)/lisp" $(ENDIF) +# $(IFNOTSAMEDIR) $(CP) forms*.el "$(INSTALL_DIR)/lisp" $(ENDIF) +# $(IFNOTSAMEDIR) $(CP) patcomp.el "$(INSTALL_DIR)/lisp" $(ENDIF) +# $(IFNOTSAMEDIR) $(CP) subdirs.el "$(INSTALL_DIR)/lisp" $(ENDIF) +# $(IFNOTSAMEDIR) $(CP) version.el "$(INSTALL_DIR)/lisp" $(ENDIF) +# $(IFNOTSAMEDIR) $(CP) mail/blessmail.el "$(INSTALL_DIR)/lisp/mail" $(ENDIF) +# $(IFNOTSAMEDIR) $(CP) mail/sc.el "$(INSTALL_DIR)/lisp/mail" $(ENDIF) +# $(IFNOTSAMEDIR) $(CP) play/bruce.el "$(INSTALL_DIR)/lisp/play" $(ENDIF) +# $(IFNOTSAMEDIR) $(CP) international/latin-*.el "$(INSTALL_DIR)/lisp/international" $(ENDIF) +# $(IFNOTSAMEDIR) $(CP) international/mule-conf.el "$(INSTALL_DIR)/lisp/international" $(ENDIF) +#endif - $(DEL) ../same-dir.tst - $(DEL) "$(INSTALL_DIR)/same-dir.tst" -#endif # # Maintenance -- 2.39.2