How to prepare an Aladdin Ghostscript release

## Table of contents

> - Introduction
> - Adding files
> - Making distributions
>   - General procedure
>   - Tester or beta distributions
>   - Public releases
> - File servers

For other information, see the Ghostscript overview and the instructions on how to build Ghostscript.

# Introduction

This document is a rough set of internal notes that Aladdin Enterprises uses to manage the process of making new Ghostscript releases. As time goes on, it will become a more suitable document for others wishing to prepare releases for distribution.

This document refers to many script files that are not currently part of the Ghostscript distribution. In the course of time, these scripts will become part of the distribution, probably in a new subdirectory.

File names below that don't include an explicit subdirectory name are in the `src` subdirectory.

Anyone is welcome to prepare and distribute releases, but please be aware of some items you will want to change.

- If you make any significant changes, please edit `gscdef.c` to change `GS_PRODUCTFAMILY` and `GS_PRODUCT` from "Aladdin Ghostscript" to something else, in order to avoid confusion with Aladdin's releases.
- In the same file, you may also want to edit `GS_COPYRIGHT` to add your own copyright notice (although you must not remove Aladdin's notice).
- You will almost certainly want to edit `version.mak` to change the revision date, `GS_REVISIONDATE`.
- If you want to change the version number, you must change it in both `version.mak` (`GS_VERSION_`*) and `lib/gs_init.ps` (the integer on a line by itself near the beginning of the file).

# Adding files

When adding or removing files other than .c or .h: If the files are included in the fileset (i.e., not just support files), check the install list in `unixinst.mak`.

When adding .c files, remember to update the relevant `.mak` file (usually `devs.mak`, `int.mak`, or `lib.mak`).

When adding operators, update `doc/Language.htm` if desired.

When adding .h files, remember to add a _h definition in the appropriate `.mak` file.

When adding or changing fonts, update `Fontmap.GS`, `fonts.mak`, and possibly the compiled fonts in `gs.mak` and the examples in `doc/Fonts.htm`.

When adding or changing filters, update `doc/Language.htm`.

When adding .ps files, update `doc/Psfiles.htm`.

# Making distributions

You will need the following tools:

> `../bin/precheck.tcl` (Tcl script)
> `../bin/put-gs.tcl` (Tcl script)
> `../bin/put-gs-c` (link to `put-gs.tcl`)
> `master/pre` (Tcl script)
> `master/pre.chk` (data file)
> `master/gsmake` (link to `gsmake.tcl`)
> `master/gsmake.tcl` (Tcl script)
> `master/makeset` (link to `makeset.tcl`)
> `master/makeset.tcl` (Tcl script)
> `master/smoke.ps` (PostScript file)
> `data/*/*.ps` (PostScript files)
> `beta.msg`

## General procedure

Make sure the release date and version number are up to date in `version.mak`, `lib/gs_init.ps`, and `doc/News.htm` (TOC and body).

Edit the makefile (presumably `unix-gcc.mak`) to set

>     FEATURE_DEVS=$(FEATURE_DEVS_ALL)
>     COMPILE_INITS=1

This will help catch compilation problems.

Run

>     rm obj/*
>     make -j2 >& t.log

and look for warnings and errors in the log file.

Do a smoke test:

>     bin/gs @b master/smoke.ps
>     export TEMP=/gs/tmp
>     bin/gs @b -sDEVICE=bitcmyk -sOutputFile=/dev/null -r600 -dMaxBitmap=1000000\
>       master/smoke.ps

Undo the `FEATURE_DEVS` and `COMPILE_INITS` edits.

Check in `gscdef.c` that the definition of `GS_PRODUCT` includes the appropriate one of "TESTER RELEASE", "BETA RELEASE", or neither.

Check for patched configuration parameters, #define TESTs, version/date inconsistencies, and changed files with no News item by running:

>     master/pre

This program compares the result of various greps against a check file, writing the results of grep on one output file and the differences from the check file on another. See the source code of `master/pre` for the default file names. The important one is the check file, `master/pre.chk`. `pre` also verifies that the right information is in the following places:

- version number in `man/*.1`, `doc/*.htm`, `version.mak`, `doc/gs-vms.hlp`, `lib/gs_init.ps`
- revision date in `man/*.1`, `doc/*.htm`, `version.mak`, `doc/gs-vms.hlp`
- copyright year (if necessary) in `gscdef.c`

If necessary, run

>     master/pre update

to update the version and revision date in the doc files, and then run

>     master/pre

again. Check the consistency of the source code with the makefiles by running:

>     master/gsmake check

Copy changed files to the DOS/Windows partition by running

>     put-gs-c

Clean up the directories with

>     rm -f src/*~ src/*.bak src/*.orig src/*.mak.tcl doc/*~ doc/*.orig lib/*~ lib/*.orig man/*~ man/*.orig examples/*~ gnu/src/*~ gnu/src/*.bak gnu/src/*.orig

Make the source archives with

>     master/makeset #.##

where #.## is the release number (e.g., 5.90). This creates the files

> `ghostscript-#.##.tar.gz` (main archive)
> `ghostscript-#.##.tar.bz2` (main archive)
> `ghostscript-#.##gnu.tar.gz` (GPL'ed files)

Unpack the main archive in a clean directory. Prepare for building:

>     ln -s src/unix-gcc.mak makefile;\
>     ln -s /gs/jpeg jpeg; ln -s /gs/libpng libpng; ln -s /gs/zlib zlib

Do a full build and smoke test (in a separate window):

>     unset GS_LIB
>     bin/gs -Ilib -I/gs/fonts -dNOPAUSE -dBATCH /gs/master/smoke.ps | tee t
>     export TEMP=/gs/tmp
>     bin/gs -Ilib -I/gs/fonts -dNOPAUSE -dBATCH -sDEVICE=bitcmyk\
>       -sOutputFile=/dev/null -r600 -dMaxBitmap=1000000 /gs/master/smoke.ps | tee t

This reads files named

> `/gs/data/ps/*.ps`
> `/gs/data/psl2/*.ps`
> `/gs/data/psl3/*.ps`
> `/gs/data/test/*.ps`

(Edit `smoke.ps` ad lib to use other test sets.) Watch for crashes, unusual error messages, or anomalous displayed output.

Boot into Windows. Build with the Borland compiler:

>     config bcwin32
>     erase obj\*.*
>     make > bc.log

Smoke test the executables (both `gswin32` and `gswin32c`). Then build with the Microsoft compiler:

>     config msvc32
>     erase obj\*.*
>     nmake > msvc.log

Smoke test these executables too.

Building with the Watcom compiler doesn't work, because the `wmake` or `wmakel` program runs out of memory. However, if it did work, this is how to do it:

>     config watcw32
>     erase obj\*.*
>     wmake -u > watc.log

If everything is OK, make the self-extracting executables:

>     cd ..
>     rename gs gs#.##
>     cd gs#.##
>     nmake archive
>     cd ..
>     rename gs#.## gs

Boot back into Linux. If testing in Windows revealed problems, edit the source files as necessary, and go back to "Check the consistency of the source code." If everything was OK, make the PC executable archive with

>     master/makeset --win #.##

This creates the files

> `gs###w32.zip` (MS Windows run-time archive, including fonts and documentation)
> `gs###src.zip` (src and man directories)

Finally, execute

>     master/makeset --move #.##

This creates `master/###` if necessary, and moves the archives to it.

## Tester or beta distributions

Do the steps for distributions in general.

FTP `ghostscript-#.##.tar.*` and `gs###*.zip` to `ftp://ftp.cs.wisc.edu/ghost/aladdin/test`.

FTP the same files from there to `ftp://www.aladdin.com/pub/ftp/ghost/aladdin/test`.

If `ansi2knr.c` has changed, put it on `ftp://ftp.cs.wisc.edu/ghost/ansi2knr.c`.

If `doc/C-style.htm` has changed, put it on `ftp://ftp.cs.wisc.edu/ghost/aladdin/C-style.htm`.

Construct the e-mail announcement by editing `beta.msg`; include the News section for this release. Mail using:

> To: gs-test@aladdin.com

## Public releases

Update the title (current version #), first heading (previous version #), and "new features" and "known problems" lists in `doc/Current.htm`.

Do the steps for distributions in general.

E-mail the release announcement using:

> To: gs-announce@aladdin.com

Edit the Web pages on the Wisconsin server to reflect the new release.

# File servers

The public distribution point is `ftp://ftp.cs.wisc.edu/ghost/aladdin/`.

The tester release distribution points are

> `ftp://ftp.cs.wisc.edu/ghost/aladdin/test/`
> `ftp://www.aladdin.com/ghost/aladdin/test/`

Copyright © 1999, 2000 Aladdin Enterprises. All rights reserved.

This file is part of Aladdin Ghostscript. See the Aladdin Free Public License (the "License") for full details of the terms of using, copying, modifying, and redistributing Aladdin Ghostscript.

Ghostscript version 6.0, 3 February 2000