| 1 | This is a checklist for making Guile releases. |
| 2 | It's specific to the FSF's development environment; please don't put |
| 3 | it in the distribution. |
| 4 | |
| 5 | Maybe we should name Guile releases after entertaining poisons: |
| 6 | absinthe, etc. However, the first release containing the module |
| 7 | system should be called Godot: "This is the one you've been waiting |
| 8 | for." |
| 9 | |
| 10 | === Eventually: |
| 11 | |
| 12 | * Deprecate `read-only-string?'. |
| 13 | |
| 14 | After signal handling and threading have been fixed: |
| 15 | - remove the code corresponding to GUILE_OLD_ASYNC_CLICK and the corresponding |
| 16 | GUILE_OLD_ASYNC_CLICK macro. |
| 17 | |
| 18 | === In release 1.6.0: |
| 19 | |
| 20 | - Make sure that the deprecation mechanism explained in INSTALL and |
| 21 | README is completed and works. |
| 22 | |
| 23 | === In release 1.8.0: |
| 24 | |
| 25 | - remove compatability module (ice-9 and-let*). It |
| 26 | has been replaced by (ice-9 and-let-star) and/or (srfi srfi-2). |
| 27 | |
| 28 | - remove support for autoloading compiled-code modules: |
| 29 | try-module-linked |
| 30 | try-module-dynamic-link |
| 31 | init-dynamic-module |
| 32 | scm_register_module_xxx |
| 33 | etc. |
| 34 | - remove deprecated variables: |
| 35 | scm_top_level_lookup_closure_var |
| 36 | - remove deprecated functions: |
| 37 | eval.c: scm_eval2, scm_eval_3 |
| 38 | load.c: scm_read_and_eval_x |
| 39 | smob.c: scm_make_smob_type_mfpe, scm_set_smob_mfpe |
| 40 | gc.c: scm_remember |
| 41 | string.c: scm_makstr |
| 42 | - remove deprecated procedures: |
| 43 | boot-9.scm: eval-in-module, id, -1+, return-it, string-character-length, |
| 44 | flags |
| 45 | - remove deprecated macros: SCM_OUTOFRANGE, SCM_NALLOC, SCM_HUP_SIGNAL, |
| 46 | SCM_INT_SIGNAL, SCM_FPE_SIGNAL, SCM_BUS_SIGNAL, SCM_SEGV_SIGNAL, |
| 47 | SCM_ALRM_SIGNAL, SCM_GC_SIGNAL, SCM_TICK_SIGNAL, SCM_SIG_ORD, |
| 48 | SCM_ORD_SIG, SCM_NUM_SIGS, SCM_SLOPPY_STRINGP, SCM_VALIDATE_STRINGORSUBSTR, |
| 49 | SCM_FREEP, SCM_NFREEP, SCM_CHARS, SCM_UCHARS, SCM_VALIDATE_ROSTRING, |
| 50 | SCM_VALIDATE_ROSTRING_COPY, SCM_VALIDATE_NULLORROSTRING_COPY, SCM_ROLENGTH, |
| 51 | SCM_LENGTH, SCM_HUGE_LENGTH, SCM_SUBSTRP, SCM_SUBSTR_STR, SCM_SUBSTR_OFFSET, |
| 52 | SCM_COERCE_SUBSTR, SCM_ROSTRINGP, SCM_RWSTRINGP, SCM_VALIDATE_RWSTRING, |
| 53 | SCM_ROCHARS, SCM_ROUCHARS, SCM_SETLENGTH, SCM_SETCHARS, SCM_LENGTH_MAX, |
| 54 | SCM_GC8MARKP, SCM_SETGC8MARK, SCM_CLRGC8MARK, SCM_GCTYP16, SCM_GCCDR, |
| 55 | SCM_SUBR_DOC, SCM_OPDIRP, SCM_VALIDATE_OPDIR, SCM_WTA, RETURN_SCM_WTA, |
| 56 | SCM_WNA, SCM_FUNC_NAME, SCM_VALIDATE_NUMBER_COPY, |
| 57 | SCM_VALIDATE_NUMBER_DEF_COPY, SCM_SLOPPY_CONSP, SCM_SLOPPY_NCONSP, |
| 58 | SCM_SETAND_CDR, SCM_SETOR_CDR, SCM_SETAND_CAR, SCM_SETOR_CAR, |
| 59 | SCM_ARRAY_CONTIGUOUS |
| 60 | - remove scm_vector_set_length_x |
| 61 | - remove function scm_call_catching_errors |
| 62 | (replaced by catch functions from throw.[ch]) |
| 63 | - remove support for "#&" reader syntax in (ice-9 optargs). |
| 64 | - remove scm_make_shared_substring |
| 65 | - remove scm_read_only_string_p |
| 66 | - remove scm_strhash |
| 67 | - remove scm_tc7_ssymbol |
| 68 | - remove scm_tc7_msymbol |
| 69 | - remove scm_tcs_symbols |
| 70 | - remove scm_sloppy_memq, scm_sloppy_memv, scm_sloppy_member |
| 71 | - consider removing the automatic loading of (ice-9 rdelim) when guile |
| 72 | starts up. This would be a brave move, since a lot of code will |
| 73 | assume that read-line is available by default. However it would make |
| 74 | it easier to use alternative implementations of this module, e.g., a |
| 75 | strictly scsh-compatible version which uses multiple values. For |
| 76 | interactive use it would be easy to load the module in ~/.guile. |
| 77 | - remove scm_close_all_ports_except |
| 78 | - remove scm_strprint_obj |
| 79 | - remove SCM_CONST_LONG |
| 80 | - remove scm_wta |
| 81 | |
| 82 | Modules sort.c and random.c should be factored out into separate |
| 83 | modules (but still be distributed with guile-core) when we get a new |
| 84 | module system. |
| 85 | |
| 86 | Platforms for test builds: |
| 87 | SunOS (gcc and pcc) --- galapas.ai.mit.edu |
| 88 | Solaris (gcc and SUN cc) --- saturn.ai.mit.edu |
| 89 | NetBSD (gcc) --- repo-man.ai.mit.edu (use /home/repo/jimb) |
| 90 | HP/UX (gcc, HP cc) --- nutrimat.gnu.ai.mit.edu |
| 91 | |
| 92 | These gentlemen have kindly offered to do pre-release testing: |
| 93 | |
| 94 | Tom Tromey <tromey@cygnus.com>: |
| 95 | |
| 96 | alphaev5-unknown-linux-gnu |
| 97 | hppa1.1-hp-hpux10.20 |
| 98 | hppa1.1-hp-hpux11.00 |
| 99 | mips-sgi-irix5.3 |
| 100 | powerpc-ibm-aix4.2.0.0 |
| 101 | powerpc-unknown-linux-gnu |
| 102 | sparc-sun-solaris2.6 |
| 103 | i686-pc-linux-gnu |
| 104 | mips-sgi-irix6.3 |
| 105 | sparc-sun-sunos4.1.4 |
| 106 | |
| 107 | Ian Grant <I.A.N.Grant@damtp.cam.ac.uk>: |
| 108 | |
| 109 | alpha-dec-osf4.0e |
| 110 | |
| 111 | Julian Satchell <satchell@merry.dra.hmg.gb>: |
| 112 | |
| 113 | dec-mips-ultrix |
| 114 | |
| 115 | Perry Metzger <perry@piermont.com> |
| 116 | |
| 117 | NetBSD |
| 118 | |
| 119 | |
| 120 | Release Checklists =================================================== |
| 121 | |
| 122 | There are basically two phases to doing a release: |
| 123 | |
| 124 | * "SPIFFING": Updating NEWS, README, INSTALL. Running tests. Getting |
| 125 | people to try builds on various machines. Getting everything |
| 126 | straightened up. |
| 127 | |
| 128 | * "PUNTING": Updating the version numbers. Tagging the sources. Asking |
| 129 | the FSF to put the disty on ftp.gnu.org. Posting announcements. |
| 130 | |
| 131 | The "Spiffing" phase you might go through several times as you |
| 132 | discover problems. The "Punting" phase you do only once. |
| 133 | |
| 134 | |
| 135 | Spiffing checklist: |
| 136 | |
| 137 | * Do a `cvs update -A', to get rid of any sticky tags in your working |
| 138 | directory. |
| 139 | * Check for files that have changed a lot, but do not have up-to-date |
| 140 | copyright notices. This can be as simple as doing: |
| 141 | grep 'Copyright' * | grep -v 1999 |
| 142 | and looking for files you know you've worked on a lot. |
| 143 | * Make sure NEWS, INSTALL, AUTHORS and THANKS and the docs are up to date: |
| 144 | + Scan the ChangeLogs for user-visible changes, marked with an asterisk |
| 145 | at the left margin. |
| 146 | + Update NEWS and the Texinfo documentation as appropriate. |
| 147 | + Remove the user-visible markers from the log entries once they're |
| 148 | documented. |
| 149 | + Check for any [[incomplete]] sections of NEWS. |
| 150 | + Fact-check INSTALL. |
| 151 | + Make sure AUTHORS and THANKS are up-to-date. |
| 152 | * Make sure the downloading addresses and filenames in README are |
| 153 | current. (But don't bump the version number yet. We do that below.) |
| 154 | * Check that the versions of aclocal, automake, autoconf, and autoheader |
| 155 | in your PATH match those given in HACKING. Note that the `make |
| 156 | dist' process always invokes these tools, even when all the |
| 157 | generated files are up to date. |
| 158 | * Rebuild all generated files in the source tree: |
| 159 | + Install the .m4 files where aclocal will find them. |
| 160 | + Run aclocal. |
| 161 | + Run autoconf. |
| 162 | + Run autoheader. |
| 163 | + Run automake. |
| 164 | * Verify that Guile builds and runs in your working directory. |
| 165 | * Run the test suite, in guile-core/test-suite. |
| 166 | * Commit all changes to the CVS repository. |
| 167 | * Build a test distribution. |
| 168 | + BEFORE doing 'make dist', configure the source tree for build |
| 169 | in the same tree with configuration options |
| 170 | --enable-maintainer-mode --enable-debug-malloc --with-threads. |
| 171 | + Make sure that readline was enabled correctly. |
| 172 | + Build the tree. |
| 173 | (If the above steps are not done, the dependencies won't be properly |
| 174 | included in the generated Makefile.in files.) |
| 175 | + Then do 'make dist'. |
| 176 | + Check that the dependencies in guile-readline/Makefile look OK. |
| 177 | (We currently use a kludge which edits the dependencies generated |
| 178 | by automake so that Guile can be built in a directory separate |
| 179 | from the source tree also with non-GNU make programs.) |
| 180 | * Give the test disty to various people to try. Here's what you should do: |
| 181 | + Unset GUILE_LOAD_PATH. |
| 182 | + Remove automake and autoconf from your path, or turn off their |
| 183 | execute bits, or something. (Users must be able to build the |
| 184 | disty without installing those tools.) |
| 185 | + Configure, make, and install. |
| 186 | + Make sure LD_LIBRARY_PATH doesn't include anything unnecessary. |
| 187 | + Run the test suite on the installed version. |
| 188 | + You might try the example code in the doc directory. |
| 189 | |
| 190 | Once you've got a disty that seems pretty solid: |
| 191 | |
| 192 | * Choose new interface numbers for shared libraries. |
| 193 | * Update the version numbers in GUILE-VERSION and README. (There are |
| 194 | many places in README that need updating!) The Guile version |
| 195 | number should have one of the following forms: |
| 196 | N.M - a major release |
| 197 | N.M.L, where L is even - a minor release |
| 198 | N.M.L, where L is odd - sources from CVS or nightly snapshot |
| 199 | * Reformat the names in THANKS. |
| 200 | * Do a `cvs update -A' of the whole tree, to look for any stray |
| 201 | uncommitted or accidental changes. |
| 202 | * Commit your changes. |
| 203 | * Make one last test distribution. |
| 204 | |
| 205 | Punting checklist: |
| 206 | |
| 207 | * Add "Guile N.M released." entry to the top-level ChangeLog, and commit it. |
| 208 | * Tag the entire source tree with a tag of the form "release_N_M" |
| 209 | or "release_N_M_L". |
| 210 | * Do a 'make dist'. |
| 211 | * Put the distribution up for FTP somewhere, and send mail to |
| 212 | ftp-upload@gnu.org, asking them to put it on prep. |
| 213 | * Send an announcement message to gnu-announce@gnu.org. Put a brief |
| 214 | summary of the changes in this release first, then "Obtaining |
| 215 | Guile", "Thanks", "About This Distribution," and "Nightly |
| 216 | Snapshots." If I remember correctly, the moderator will delay it |
| 217 | until the distribution appears on ftp.gnu.org. The announcement |
| 218 | text should be mostly taken from Guile's README file. |
| 219 | * Notify freshmeat.net, although they're probably watching anyway. |
| 220 | (They got the 1.3 release just fine.) I have no idea if |
| 221 | www.bowerbird.com.au will be something anyone refers to, but Guile |
| 222 | does have an entry there. |
| 223 | * Tweak the version numbers in GUILE-VERSION, and README to indicate |
| 224 | that the sources are a snapshot again. Snapshots should have |
| 225 | version numbers of the form "N.M.L", where L is odd. |
| 226 | * Start a new section of the NEWS file. |
| 227 | * Start a new THANKS file. |