APPROVE COMMIT 21.5
This nearly automates updating about.el to a sane value for release
date. Note that the version.sh hunk won't apply after a couple of
hours because of the CVS-date cron job.
Norbert, could you add the script that updates CVS-date in
xemacs_extra_name to your xemacs-builds directory?
It also provides some internals.texi documentation about the
version.sh file.
I've also done configure.ac in sjt-xft, but that's not available to
patch in the mainline yet. Commented out in the following patch:
Index: ChangeLog
===================================================================
RCS file: /Users/steve/Software/Repositories/cvs.xemacs.org/XEmacs/xemacs/ChangeLog,v
retrieving revision 1.418.2.4
diff -u -r1.418.2.4 ChangeLog
--- ChangeLog 2 Feb 2005 06:06:45 -0000 1.418.2.4
+++ ChangeLog 21 Feb 2005 11:31:31 -0000
@@ -0,0 +1,6 @@
+2005-02-21 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * version.sh (XEMACS_RELEASE_DATE): New version info variable.
+
+ * configure.in (XEMACS_RELEASE_DATE): Use it.
+
#Index: ChangeLog
#===================================================================
#RCS file: /Users/steve/Software/Repositories/cvs.xemacs.org/XEmacs/xemacs/ChangeLog,v
#retrieving revision 1.418.2.4
#diff -u -r1.418.2.4 ChangeLog
#--- ChangeLog 2 Feb 2005 06:06:45 -0000 1.418.2.4
#+++ ChangeLog 21 Feb 2005 11:31:31 -0000
#@@ -0,0 +1,4 @@
#+2005-02-21 Stephen J. Turnbull <stephen(a)xemacs.org>
#+
#+ * configure.ac (XEMACS_RELEASE_DATE): Use it.
#+
Index: src/ChangeLog
===================================================================
RCS file: /Users/steve/Software/Repositories/cvs.xemacs.org/XEmacs/xemacs/src/ChangeLog,v
retrieving revision 1.758.2.5
diff -u -r1.758.2.5 ChangeLog
--- src/ChangeLog 4 Feb 2005 16:05:30 -0000 1.758.2.5
+++ src/ChangeLog 21 Feb 2005 14:11:50 -0000
@@ -0,0 +1,9 @@
+2005-02-21 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * emacs.c (xemacs-release-date): New version info variable.
+ * config.h.in (XEMACS_RELEASE_DATE): New config.h macro.
+
+ * emacs.c (inhibit-early-packages):
+ (inhibit-all-packages):
+ (xemacs-extra-name): Improve docstrings.
+
Index: lisp/ChangeLog
===================================================================
RCS file:
/Users/steve/Software/Repositories/cvs.xemacs.org/XEmacs/xemacs/lisp/ChangeLog,v
retrieving revision 1.599.2.2
diff -u -r1.599.2.2 ChangeLog
--- lisp/ChangeLog 4 Feb 2005 16:05:54 -0000 1.599.2.2
+++ lisp/ChangeLog 21 Feb 2005 11:28:30 -0000
@@ -0,0 +1,5 @@
+2005-02-21 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * about.el (about-xemacs):
+ Compute release date from xemacs-release-date.
+
Index: man/ChangeLog
===================================================================
RCS file: /Users/steve/Software/Repositories/cvs.xemacs.org/XEmacs/xemacs/man/ChangeLog,v
retrieving revision 1.288
diff -u -r1.288 ChangeLog
--- man/ChangeLog 19 Feb 2005 16:18:52 -0000 1.288
+++ man/ChangeLog 21 Feb 2005 15:36:21 -0000
@@ -0,0 +1,12 @@
+2005-02-22 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * internals/internals.texi (The version.sh Script): New node.
+ (XEmacs from the Perspective of Building):
+ (Low-Level Modules):
+ (The Build Configuration System):
+ (Adding Configurable Features):
+ Add or update references to the version.sh node and/or file.
+
+ (XEmacs from the Perspective of Building): Improve text.
+
+
#Index: configure.ac
#===================================================================
#RCS file: /Users/steve/Software/Repositories/cvs.xemacs.org/XEmacs/xemacs/configure.ac,v
#retrieving revision 1.1.14.2
#diff -u -r1.1.14.2 configure.ac
#--- configure.ac 2 Feb 2005 06:06:58 -0000 1.1.14.2
#+++ configure.ac 21 Feb 2005 11:30:40 -0000
#@@ -1128,6 +1128,9 @@
# if test "$xemacs_extra_name" != ""; then
# AC_DEFINE_UNQUOTED(XEMACS_EXTRA_NAME, "$xemacs_extra_name")
# fi
#+if test "$xemacs_release_date" != ""; then
#+ AC_DEFINE_UNQUOTED(XEMACS_RELEASE_DATE, "$xemacs_release_date")
#+fi
# AC_DEFINE_UNQUOTED(EMACS_VERSION, "$version")
#
# if test "$with_infodock" = "yes"; then
Index: configure.in
===================================================================
RCS file: /Users/steve/Software/Repositories/cvs.xemacs.org/XEmacs/xemacs/configure.in,v
retrieving revision 1.233.2.3
diff -u -r1.233.2.3 configure.in
--- configure.in 11 Dec 2004 05:12:28 -0000 1.233.2.3
+++ configure.in 21 Feb 2005 11:28:29 -0000
@@ -1062,6 +1062,9 @@
if test "$xemacs_extra_name" != ""; then
AC_DEFINE_UNQUOTED(XEMACS_EXTRA_NAME, "$xemacs_extra_name")
fi
+if test "$xemacs_release_date" != ""; then
+ AC_DEFINE_UNQUOTED(XEMACS_RELEASE_DATE, "$xemacs_release_date")
+fi
AC_DEFINE_UNQUOTED(EMACS_VERSION, "$version")
if test "$with_infodock" = "yes"; then
Index: version.sh
===================================================================
RCS file: /Users/steve/Software/Repositories/cvs.xemacs.org/XEmacs/xemacs/version.sh,v
retrieving revision 1.984.2.2
diff -u -r1.984.2.2 version.sh
--- version.sh 1 Feb 2005 15:46:18 -0000 1.984.2.2
+++ version.sh 21 Feb 2005 13:09:38 -0000
@@ -9,3 +9,4 @@
infodock_minor_version=0
infodock_build_version=8
xemacs_extra_name="(CVS-20050221)"
+xemacs_release_date="2005-02-18"
Index: src/config.h.in
===================================================================
RCS file:
/Users/steve/Software/Repositories/cvs.xemacs.org/XEmacs/xemacs/src/config.h.in,v
retrieving revision 1.95.2.3
diff -u -r1.95.2.3 config.h.in
--- src/config.h.in 1 Feb 2005 15:46:52 -0000 1.95.2.3
+++ src/config.h.in 21 Feb 2005 11:28:29 -0000
@@ -110,6 +110,7 @@
#undef EMACS_VERSION
#undef XEMACS_CODENAME
#undef XEMACS_EXTRA_NAME
+#undef XEMACS_RELEASE_DATE
/* InfoDock versions, not used with XEmacs */
#undef INFODOCK_MAJOR_VERSION
#undef INFODOCK_MINOR_VERSION
Index: src/emacs.c
===================================================================
RCS file: /Users/steve/Software/Repositories/cvs.xemacs.org/XEmacs/xemacs/src/emacs.c,v
retrieving revision 1.150.2.2
diff -u -r1.150.2.2 emacs.c
--- src/emacs.c 10 Dec 2004 06:43:48 -0000 1.150.2.2
+++ src/emacs.c 21 Feb 2005 14:10:39 -0000
@@ -460,6 +460,7 @@
Lisp_Object Vemacs_beta_version;
Lisp_Object Vxemacs_codename;
Lisp_Object Vxemacs_extra_name;
+Lisp_Object Vxemacs_release_date;
#ifdef INFODOCK
Lisp_Object Vinfodock_major_version;
Lisp_Object Vinfodock_minor_version;
@@ -4116,15 +4117,31 @@
Vxemacs_codename = build_string (XEMACS_CODENAME);
DEFVAR_LISP ("xemacs-extra-name", &Vxemacs_extra_name /*
-Extra string to maybe put into the version string.
+Arbitrary string to place in the version string after the codename.
-Usually used to denote an XEmacs built from a CVS checkout between
-releases. In that case its value would be \"(+CVS)\".
+Appropriate surrounding whitespace will be added, but typically looks best
+if enclosed in parentheses.
+
+A standard use is to indicate the date version.sh was last updated from
+the CVS mainline, where it is automatically given a value similar to
+\"(+CVS-20050221)\". Developers may also use it to indicate particular
+branches, etc.
*/ );
#ifdef XEMACS_EXTRA_NAME
Vxemacs_extra_name = build_string (XEMACS_EXTRA_NAME);
#endif
+ DEFVAR_LISP ("xemacs-release-date", &Vxemacs_release_date /*
+ISO 8601 format date string giving the date of latest release in series.
+
+The time may optionally be given. The time zone may not be given, and
+is (implicitly) UTC. Currently not included in the version string.
+*/ );
+#ifndef XEMACS_RELEASE_DATE
+#define XEMACS_RELEASE_DATE "2005-02-18 (defaulted in emacs.c)"
+#endif
+ Vxemacs_release_date = build_string (XEMACS_RELEASE_DATE);
+
/* Lisp variables which contain command line flags.
The portable dumper stomps on these; they must be saved and restored
@@ -4139,12 +4156,14 @@
*/ );
DEFVAR_BOOL ("inhibit-early-packages", &inhibit_early_packages /*
-Set to non-nil when the early packages should not be respected at startup.
+Set to non-nil when the early packages should be ignored at startup.
+Early package directories will not be added to `load-path', nor set up as
+autoloads, nothing.
*/ );
DEFVAR_BOOL ("inhibit-all-packages", &inhibit_all_packages /*
-Set to non-nil when the no packages should not be respected at startup.
-XEmacs will utterly ignore the packages -- not in load-path, not set up as
+Set to non-nil when all packages should be ignored at startup.
+Package directories will not be added to `load-path', nor set up as
autoloads, nothing.
*/ );
Index: lisp/about.el
===================================================================
RCS file: /Users/steve/Software/Repositories/cvs.xemacs.org/XEmacs/xemacs/lisp/about.el,v
retrieving revision 1.63
diff -u -r1.63 about.el
--- lisp/about.el 7 Nov 2004 12:03:58 -0000 1.63
+++ lisp/about.el 21 Feb 2005 13:50:14 -0000
@@ -376,8 +376,28 @@
(t (format "%d.%d"
emacs-major-version
emacs-minor-version))))
- (emacs-about-version (format "version %s of September 2004"
- emacs-short-version)))
+ (emacs-release-date
+ (if (and (boundp 'xemacs-release-date)
+ (stringp xemacs-release-date)
+ (string-match "^\\([0-9]\\{4\\}\\)-\\([0-9][0-9]\\)-"
+ xemacs-release-date))
+ (format "%s %s"
+ (aref [ "January" "February" "March" "April"
+ "May" "June" "July" "August"
+ "September" "October" "November" "December"
]
+ (1- (string-to-number
+ (match-string 2 xemacs-release-date))))
+ (match-string 1 xemacs-release-date))
+ "February 2005 (defaulted in about.el)"))
+ (emacs-variant-info (if (and xemacs-extra-name
+ (stringp xemacs-extra-name)
+ (< 0 (length xemacs-extra-name)))
+ (format " %s" xemacs-extra-name)
+ ""))
+ (emacs-about-version (format "version %s of %s%s"
+ emacs-short-version
+ emacs-release-date
+ emacs-variant-info)))
(widget-insert (about-center emacs-about-version))
(widget-create 'link :help-echo "What's new in XEmacs"
:action 'about-news
Index: man/internals/internals.texi
===================================================================
RCS file:
/Users/steve/Software/Repositories/cvs.xemacs.org/XEmacs/xemacs/man/internals/internals.texi,v
retrieving revision 1.60
diff -u -r1.60 internals.texi
--- man/internals/internals.texi 19 Feb 2005 16:18:56 -0000 1.60
+++ man/internals/internals.texi 21 Feb 2005 15:46:46 -0000
@@ -2415,8 +2427,8 @@
This determines what the build environment is, chooses the
appropriate @file{s/} and @file{m/} file, and runs a series of tests to
determine many details about your environment, such as which library
-functions are available and exactly how they work. The reason for
-running these tests is that it allows XEmacs to be compiled on a much
+functions are available and exactly how they work.
+Running these tests allows XEmacs to be compiled on a much
wider variety of platforms than those that the XEmacs developers happen
to be familiar with, including various sorts of hybrid platforms. This
is especially important now that many operating systems give you a great
@@ -2425,12 +2437,17 @@
would be impossible to pre-determine and pre-specify the information for
all possible configurations.
-In fact, the @file{s/} and @file{m/} files are basically @emph{evil},
-since they contain unmaintainable platform-specific hard-coded
-information. XEmacs has been moving in the direction of having all
+Thus, the @file{s/} and @file{m/} files are basically @emph{evil},
+since they contain platform-specific hard-coded
+information. XEmacs is moving in the direction of having all
system-specific information be determined dynamically by
@file{configure}. Perhaps someday we can @code{rm -rf src/s src/m}.
+@file{configure} also parses the version information from
+(a)file{version.sh} and adds it to @file{config.h} as C preprocessor
+macros. These macros in turn are used to initialize some Lisp
+variables, such as @samp{emacs-version}. @xref{The version.sh Script}.
+
When configure is done running, it generates @file{Makefile}s and
@file{GNUmakefile}s and the file @file{src/config.h} (which describes
the features of your system) from template files. You then run
@@ -3054,6 +3071,7 @@
@file{configure}
@file{config.h.in}
@file{Makefile.in.in}
+(a)file{version.sh}
@end example
@example
@@ -3061,6 +3079,7 @@
@file{configure.in}
@end example
+@xref{The version.sh Script}.
@xref{The configure Script}.
@@ -3096,6 +3115,15 @@
@cindex modules, low-level
@example
+(a)file{version.sh}
+@end example
+
+This is a Bourne shell script which sets version-related variables. It
+is updated in the release process by the maintainer of each series or
+branch, and may also be automatically updated.
+@xref{The version.sh Script}.
+
+@example
@file{config.h}
@end example
@@ -4138,6 +4166,7 @@
macros in @file{configure.in} and @file{configure.ac}.
@menu
+* The version.sh Script::
* Adding Configurable Features::
* The configure Script::
* The Makefile Precursors::
@@ -4145,7 +4174,98 @@
-@node Adding Configurable Features, The configure Script, The Build Configuration System,
The Build Configuration System
+@node The version.sh Script, Adding Configurable Features, The Build Configuration
System, The Build Configuration System
+@section The version.sh Script
+@cindex version.sh script
+@cindex scripts, version.sh
+
+The @file{version.sh} script is a snippet of Bourne shell script which
+sets version variables. By convention, these variables are given
+descriptive names, all in lower case ASCII letters, with words separated
+by underscores (@samp{_}, ASCII 0x5F). They are converted to C
+preprocessor macro definitions and added to @file{src/config.h} by
+@file{configure}. Thus each must have a corresponding @samp{#undef} in
+(a)file{src/config.h.in}. Each macro's name is the same as the shell
+variable's, converted to all uppercase. Finally, the macros are used to
+initialize Lisp variables defined in @file{src/emacs.c}. These Lisp
+variables have the same name as the shell variables and preprocessor
+macros, except that they obey the Lisp conventions that Lisp variable
+names are all lowercase with words separated by hyphens (@samp{-}, ASCII
+0x2D), while the C implementations are the same as the shell variable
+with the letter @samp{V} (ASCII 0x56) prepended.
+
+The file is updated by various release engineers and their scripts.
+Other developers should have no need to edit this file. The main
+exception would be to add a branch tag and possibly other information to
+@samp{xemacs_extra_name} to describe informal releases from a private
+branch. In particular, @samp{xemacs_release_date} and the
+@samp{emacs_*_version} variables should refer to the most recent release
+in the parent branch, so ``private branch'' maintainers should not
+update them. If the branch is significant and long-lasting, you might
+enjoy assigning your own codenames. (Of course, if you have no intent
+of merging your changes to the mainline, you can do what you want with
+any of the variables. But in that case you should change the name of
+the program, as well, in version strings and the like.)
+
+Regarding the syntax of the file, it is simply a sequence of shell
+variable assignments. So the only thing that you can rely on is that
+the shebang (the shell's interpreter comment, @code{#!/bin/sh}) will
+occupy the first line of the file. You should not count on order or
+other comments being preserved. On the other hand, some maintainers'
+tools do depend on the order, so as much as possible your tools should
+preserve the order of assignments.
+
+Here is a table of the currently defined variables and their meanings (as
+of February 2005):
+
+@table @samp
+@item #!/bin/sh
+The shebang, making this an executable script on Unix.
+
+@item emacs_is_beta
+Set to @samp{t} when the release is a beta test release, otherwise null.
+
+@item emacs_major_version
+@itemx emacs_minor_version
+@itemx emacs_beta_version
+Strings containing decimal numbers representing the components of the
+version of the source tree. The name @samp{emacs_beta_version} is a
+relic of the time when XEmacs had a two component version for public
+releases. Since XEmacs 21.1, both the beta series and the stable series
+have three-component version numbers, and @samp{emacs_beta_version} holds
+the lowest-order component of the stable series as well as the beta series.
+
+@item xemacs_codename
+An optional string containing a codename for the release. Recent
+maintainers have chosen humorous themes for their codenames, and
+typically the names are used in alphabetical order.
+
+@item emacs_kit_version
+An optional string used for special branches. (This should be
+deprecated in favor of xemacs_extra_name.)
+
+@item infodock_major_version
+@itemx infodock_minor_version
+@itemx infodock_build_version
+Strings containing decimal numbers representing the components of the
+version of the Infodock applied to the source tree. (The Infodock
+project has been in hibernation since XEmacs 21.1.9 or so; these
+variables are unused in current XEmacsen.)
+
+@item xemacs_extra_name
+A string containing arbitrary additional information. If length is
+positive, it is automatically added to the version string after the
+codename.
+
+@item xemacs_release_date
+A string containing the date of the latest release in the series in ISO
+8601 format. The time zone should not be present, it is defined to be
+UTC. Time is optional. Not currently used in the version string.
+@end table
+
+
+
+@node Adding Configurable Features, The configure Script, The version.sh Script, The
Build Configuration System
@section Adding Configurable Features
@cindex adding configurable features
@cindex configurable features, adding
@@ -4161,7 +4281,7 @@
@node The configure Script, The Makefile Precursors, Adding Configurable Features, The
Build Configuration System
@section The configure Script
@cindex configure script
-@cindex script, configure
+@cindex scripts, configure
At the heart of the XEmacs build configuration system is the
@file{configure} script. This beast is maintained using the Autoconf
--
Institute of Policy and Planning Sciences
http://turnbull.sk.tsukuba.ac.jp
University of Tsukuba Tennodai 1-1-1 Tsukuba 305-8573 JAPAN
Ask not how you can "do" free software business;
ask what your business can "do for" free software.