From c0274801eeb2f5307f4f695b7ed0c521d466f726 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 5 Apr 2011 19:13:16 -0700 Subject: [PATCH] Make update_autogen handle loaddefs-like files as well. * autogen/update_autogen: (usage): Add -l, -C. (clean, ldefs_flag, ldefs_in, ldefs_out): New variables. With -l, check status of lisp/ as well. With -C, clean before building. (autoreconf): Only pass -f in the `clean' case. (commit): New function. * lisp/Makefile.in (AUTOGEN_VCS): New variable. (autoloads): Use $AUTOGEN_VCS. * .bzrignore: Tighten up ignore patterns (for autogen/). --- ChangeLog | 10 +++ autogen/update_autogen | 144 ++++++++++++++++++++++++++++++++++++----- lisp/ChangeLog | 3 + lisp/Makefile.in | 20 ++++-- 4 files changed, 154 insertions(+), 23 deletions(-) diff --git a/ChangeLog b/ChangeLog index bf7a6af63b6..26fcb77121b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2011-04-06 Glenn Morris + + * autogen/update_autogen: Handle loaddefs-like files as well. + (usage): Add -l, -C. + (clean, ldefs_flag, ldefs_in, ldefs_out): New variables. + With -l, check status of lisp/ as well. + With -C, clean before building. + (autoreconf): Only pass -f in the `clean' case. + (commit): New function. + 2011-03-28 Glenn Morris * autogen/update_autogen: Pass -f to autoreconf. diff --git a/autogen/update_autogen b/autogen/update_autogen index b2a6d0b42a4..7497f33f30c 100755 --- a/autogen/update_autogen +++ b/autogen/update_autogen @@ -25,6 +25,9 @@ ## This is a helper script to update the pre-built generated files in ## the autogen/ directory. This is suitable for running from cron. ## Only Emacs maintainers need use this, so it uses bash features. +## +## With the -l option, it also updates the versioned loaddefs-like +## files in lisp/. These include ldefs-boot, cl-loaddefs, rmail, etc. ### Code: @@ -48,13 +51,16 @@ cd ../ usage () { cat 1>&2 < /dev/null" EXIT -while getopts ":hcfq" option ; do +while getopts ":hcflqC" option ; do case $option in (h) usage ;; @@ -89,8 +99,12 @@ while getopts ":hcfq" option ; do (f) force=1 ;; + (l) ldefs_flag=1 ;; + (q) quiet=1 ;; + (C) clean=1 ;; + (\?) die "Bad option -$OPTARG" ;; (:) die "Option -$OPTARG requires an argument" ;; @@ -101,16 +115,17 @@ done shift $(( --OPTIND )) OPTIND=1 -[ $# -eq 0 ] || die "Wrong number of arguments" - +## Does not work 100% because a lot of Emacs batch output comes on stderr (?). [ "$quiet" ] && exec 1> /dev/null echo "Running bzr status..." -bzr status -S $sources >| $tempfile || die "bzr status error for sources" +bzr status -S $sources ${ldefs_flag:+lisp} >| $tempfile || \ + die "bzr status error for sources" +## The lisp portion could be more permissive, eg only care about .el files. while read stat file; do case $stat in @@ -124,9 +139,21 @@ while read stat file; do done < $tempfile +## Probably this is overkill, and there's no need to "bootstrap" just +## for making autoloads. +[ "$clean" ] && { + + echo "Running 'make maintainer-clean'..." + + make maintainer-clean #|| die "Cleaning error" + + rm -f $ldefs_in +} + + echo "Running autoreconf..." -autoreconf -f -i -I m4 2>| $tempfile +autoreconf ${clean:+-f} -i -I m4 2>| $tempfile retval=$? @@ -162,27 +189,110 @@ while read stat file; do done < $tempfile -[ "$modified" ] || { - echo "No files were modified" - exit 0 +cd ../ + + +## Uses global $commit. +commit () +{ + local type=$1 + shift + + [ $# -gt 0 ] || { + echo "No files were modified" + return 0 + } + + echo "Modified file(s): $@" + + [ "$commit" ] || return 0 + + echo "Committing..." + + ## bzr status output is always relative to top-level, not PWD. + bzr commit -m "Auto-commit of $type files." "$@" || return $? + + echo "Committed files: $@" +} # function commit + + +commit "generated" $modified || die "bzr commit error" + + +[ "$ldefs_flag" ] || exit 0 + + +echo "Finding loaddef targets..." + +sed -n -e '/^AUTOGEN_VCS/,/^$/ s/\\//p' lisp/Makefile.in | \ + sed '/AUTOGEN_VCS/d' >| $tempfile || die "sed error" + +genfiles= + +while read genfile; do + + [ -r lisp/$genfile ] || die "Unable to read $genfile" + + genfiles="$genfiles $genfile" +done < $tempfile + + +[ "$genfiles" ] || die "Error setting genfiles" + + +[ -e Makefile ] || { + echo "Running ./configure..." + + ./configure || die "configure error" } -echo "Modified file(s): $modified" -[ "$commit" ] || exit 0 +## Build the minimum needed to get the autoloads. +echo "Running lib/ make..." + +make -C lib "$@" all || die "make lib error" + + +echo "Running src/ make..." + +make -C src "$@" bootstrap-emacs || die "make src error" + + +echo "Running lisp/ make..." + +make -C lisp "$@" autoloads EMACS=../src/bootstrap-emacs || die "make src error" + + +cp $ldefs_in $ldefs_out || die "cp ldefs_boot error" -echo "Committing..." +cd lisp + +echo "Checking status of loaddef files..." + +## It probably would be fine to just check+commit lisp/, since +## making autoloads should not effect any other files. But better +## safe than sorry. +bzr status -S $genfiles ${ldefs_out#lisp/} >| $tempfile || \ + die "bzr status error for generated files" + + +modified= + +while read stat file; do + + [ "$stat" != "M" ] && die "Unexpected status ($stat) for generated $file" + modified="$modified $file" + +done < $tempfile + -## bzr status output is annoyingly always relative to top-level, not PWD. cd ../ -bzr commit -m "Auto-commit of generated files." $modified || \ - die "bzr commit error" +commit "loaddefs" $modified || die "bzr commit error" -echo "Committed files: $modified" -exit +exit 0 ### update_autogen ends here diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 072f35e528a..856cb05cb8c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2011-04-06 Glenn Morris + * Makefile.in (AUTOGEN_VCS): New variable. + (autoloads): Use $AUTOGEN_VCS. + * calendar/cal-move.el (calendar-scroll-toolkit-scroll): New function. * calendar/calendar.el (calendar-mode-map): Check for toolkit scroll bars. (Bug#8305) diff --git a/lisp/Makefile.in b/lisp/Makefile.in index 083f312d613..d4ff6a4384b 100644 --- a/lisp/Makefile.in +++ b/lisp/Makefile.in @@ -70,6 +70,18 @@ AUTOGENEL = loaddefs.el \ cedet/ede/loaddefs.el \ cedet/srecode/loaddefs.el +# Versioned files that are the value of someone's `generated-autoload-file'. +# Note that update_loaddefs parses this. +AUTOGEN_VCS = \ + ps-print.el \ + emulation/tpu-edt.el \ + emacs-lisp/cl-loaddefs.el \ + mail/rmail.el \ + dired.el \ + ibuffer.el \ + htmlfontify.el \ + emacs-lisp/eieio.el + # Value of max-lisp-eval-depth when compiling initially. # During bootstrapping the byte-compiler is run interpreted when compiling # itself, and uses more stack than usual. @@ -153,13 +165,9 @@ finder-data: doit echo Directories: $$wins; \ $(emacs) -l finder --eval '(setq generated-finder-keywords-file "$(lisp)/finder-inf.el")' -f finder-compile-keywords-make-dist $$wins -# The chmod +w is to handle env var CVSREAD=1. Files named -# are identified by being the value of `generated-autoload-file'. +# The chmod +w is to handle env var CVSREAD=1. autoloads: $(LOADDEFS) doit - chmod +w $(lisp)/ps-print.el $(lisp)/emulation/tpu-edt.el \ - $(lisp)/emacs-lisp/cl-loaddefs.el $(lisp)/mail/rmail.el \ - $(lisp)/dired.el $(lisp)/ibuffer.el $(lisp)/htmlfontify.el \ - $(lisp)/emacs-lisp/eieio.el + cd $(lisp) && chmod +w $(AUTOGEN_VCS) cd $(lisp); $(setwins_almost); \ echo Directories: $$wins; \ $(emacs) -l autoload --eval '(setq generated-autoload-file "$(lisp)/loaddefs.el")' -f batch-update-autoloads $$wins -- 2.39.5