927 lines · 29.5 KB · HTML
RawDownload
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>How to prepare a Ghostscript release</title><!-- $Id: Release.htm,v 1.95 2005/10/20 19:46:23 ray Exp $ --><!-- Originally: make.txt --><link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"></head> <body><!-- [1.0 begin visible header] ============================================ --> <!-- [1.1 begin headline] ================================================== --> <h1>How to prepare a Ghostscript release</h1> <!-- [1.1 end headline] ==================================================== --> <!-- [1.2 begin table of contents] ========================================= --> <h2>Table of contents</h2> <blockquote><ul><li><a href="#Introduction">Introduction</a><li><a href="#Servers">Servers</a><ul><li><a href="#Development_files">Development sources and bug reports</a><li><a href="#Distribution">Distribution</a></ul><li><a href="#Release_numbering">Release numbering</a><li><a href="#Making_distributions">Making distributions</a><ul><li><a href="#Preparing_source">Preparing the source code</a><li><a href="#Testing">Testing</a><li><a href="#Changelog">Updating the Changelog</a><li><a href="#Making_Tarballs">Making the source distribution</a><li><a href="#Testing_on_Windows">Testing on Windows</a><li><a href="#Windows_distribution">Building the Windows distribution</a><li><a href="#Finishing_up">Finishing up</a><li><a href="#Beta_distributions">Beta distributions</a><li><a href="#Public_releases">Public releases</a></ul><li><a href="#After_releasing">After releasing</a><li><a href="#GPL_releases">GPL Ghostscript releases</a><ul><li><a href="#GPL_code">GPL code</a><li><a href="#GPL_after_releasing">After releasing (GPL)</a></ul><li><a href="#Fonts">Fonts</a></ul></blockquote> <!-- [1.2 end table of contents] =========================================== --> <!-- [1.3 begin hint] ====================================================== --> <p>For other information, see the <a href="Readme.htm">Ghostscriptoverview</a> and the instructions on how to <a href="Make.htm">buildGhostscript</a>. <!-- [1.3 end hint] ======================================================== --> <hr> <!-- [1.0 end visible header] ============================================== --> <!-- [2.0 begin contents] ================================================== --> <h2><a name="Introduction"></a>Introduction</h2> <p>This document describes the process that artofcode LLC, the copyright holderof Ghostscript, uses for making new Ghostscript releases. Please notethat while the the license allows anyone to prepare and distributereleases in accordance with its terms and conditions, this document isreally meant only to document the process used by artofcode LLC.However, the eventual purpose of this document is to describeGhostscript release procedures in enough detail that someone who knowslittle about Ghostscript but is generally familiar with the platform onwhich the procedure is being carried out can execute the procedurescorrectly. So if you add or changing anything to/in this document,be sure to specify all command lines, file names, etc. in explicitdetail. <p>The release process for the GPL and AFPL branches are similar, thoughthere are some differences in terms of policy and release locations. Seethe section on <a href="#GPL_releases">GPL releases</a> below forinformation specific to GPL Ghostscript. <p>File names below that don't include an explicit subdirectory name are in the<b><tt>src</tt></b> subdirectory. <p>If you do plan to make your own distribution, please be aware of some itemsyou will want to change. <ul> <li>If you make any significant changes, please edit<b><tt>gscdef.c</tt></b> to change <b><tt>GS_PRODUCTFAMILY</tt></b> and<b><tt>GS_PRODUCT</tt></b> from "AFPL Ghostscript" to something else,in order to avoid confusion with artofcode's releases. <li>In the same file, you may also want to edit <b><tt>GS_COPYRIGHT</tt></b>to add your own copyright notice (although you must not remove anynotice that is there). <li>You will almost certainly want to edit <b><tt>version.mak</tt></b> tochange the revision date, <b><tt>GS_REVISIONDATE</tt></b>. <li>If you want to change the release number, you must change it in all theplaces listed under <a href="#Release_numbering">"Release numbering"</a>below. </ul> <h2><a name="Servers"></a>Servers</h2> <p>The GPL and AFPL Ghostscript files are maintained on sites accessible tothe public.  One specific site hosts the active CVS repository for code,data, and documentation, and the bug report data base; several sitesoffer distributions with release numbers, intended for widerdistribution. <h3><a name="Development_files"></a>Development sources and bug reports</h3> <p>The primary repository for GPL and AFPL Ghostscript is <ahref="http://www.ghostscript.com/" class="offsite">ghostscript.com</a>.Please check there first for any news about releases or current work,and for information about where to download ghostscript and how toaccess the mailing lists. CVS access is through <ahref="http://cvs.ghostscript.com/"class="offsite">cvs.ghostscript.com</a>. <p>It may also be helpful toread the SourceForge AFPL Ghostscript home page (<ahref="http://sourceforge.net/projects/ghostscript/" class="offsite">http://sourceforge.net/projects/ghostscript/</a>). <h3><a name="Distribution"></a>Distribution</h3> <p>Stable, beta, and development releases are all available from<blockquote><ahref="http://sourceforge.net/project/showfiles.php?group_id=1897" class="offsite">http://sourceforge.net/project/showfiles.php?group_id=1897</a></blockquote> <p>Stable releases are also distributed from <blockquote><ahref="ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/" class="offsite">ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/</a> or<br><ahref="ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gpl/" class="offsite">ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gpl/</a></blockquote> <p>Development releases are also distributed from <blockquote><a href="ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/test/" class="offsite">ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/test/</a></blockquote> <h2><a name="Release_numbering"></a>Release numbering</h2> <p>Ghostscript uses a two-part (major.minor) release number. The second partof the release number is a 2-digit decimal fraction: it counts 00,01, 02, and so on through 99. <ul> <li>Release numbers N.0x and N.5x indicate stable versions.<li>Successive increments generally indicate bug fixes and minor enhancements. <li>Development, testing and beta releases generally begin with a minor release number that isa multiple of ten and increment from there.</ul> <p>Release numbers appear in the following places in the Ghostscript files: <ul> <li>In <b><tt>lib/gs_init.ps</tt></b>, as an integer (release number x100) at the beginning of thefile just after the initial comment blocks. <li>In <b><tt>src/version.mak</tt></b>, split into 3 lines. <li>In <b><tt>doc/News.htm</tt></b>, in the two headers and their labels and at the very end inthe copyright footer. <li>At the foot of most documenation files. However, these are updated mechanically from the valuein <b><tt>News.htm</tt></b> as part of the release process and do not need to be maintaineddirectly.</ul> <h3>Before a release</h3> <p>The current release number in the development code must be set to the desired value. The incrementfrom just after the previous release (see below) is sufficient for minor updates. In the case ofmajor changes or a new stable release, the number will need to be bumped; this is generally doneas the first step of preparing a new release. <h3>After a release</h3> <p>After making a release the release number in CVS is incremented. Thus versions builtfrom cvs are always marked with a future (or unused) release number to avoid confusion. <p>Additionally, After an N.00 or N.50 stable release, a branch is made in cvs so that development can continue independently of changes to the stable series. When this happens, the minor releasenumber is incremented by 10 (or 20) on the development branch (and by 1 on the new stable branch,as above) to avoid collisions. <p>While incrementing the release number after making a release may seemcounter-intuitive, it ensures that, at any given time, the versionnumber alone is sufficient to distinguish between the current CVSstate and a numbered release. <h2><a name="Making_distributions"></a>Making distributions</h2> <p>This document only discusses source distributions.  Source distributionscurrently can only be made on Linux systems (but it probably wouldn't takemuch work to support other Unix systems).  Ghostscript as distributed alsooften includes executables or other packages for the Windows and MacOSenvironments, but artofcode does not always produce these, and this document does notdiscuss them.  For more information about Windows packages, please contact<a href="mailto:bug-gswin@ghostscript.com"><tt>bug-gswin@ghostscript.com</tt></a>;for more information about MacOS packages, please contact <ahref="mailto:mac-gs@ghostscript.com"><tt>mac-gs@ghostscript.com</tt></a>. <p>To make a source distribution, you will need the scripts and data files inthe <b><tt>toolbin/</tt></b> directory. The instructions below generallyassume that you're invoking the relative to the top level of the source tree. To run the scripts, you will need reasonably current versions of Tcl,freely available from Scriptics (<a class="offsite" href="http://www.scriptics.com"><tt>http://www.scriptics.com</tt></a>), andPython, freely available from <a class="offsite"href="http://www.python.org"><tt>http://www.python.org</tt></a>. <p>To update the changelogs, you'll also need a recent version of the cvs2cl perl script. Ifnot already installed on your system a copy can be found at<a class="offsite" href="http://www.red-bean.com/cvs2cl/cvs2cl.pl">http://www.red-bean.com/cvs2cl/cvs2cl.pl</a>. <p>The instructions below also refer to some files that are deliberatelyomitted from the public distribution, because they are not freelyredistributable. You will need to provide similar files for yourenvironment. <blockquote><pre><b><tt>data/*/*.ps</tt></b> (PostScript files) - needed for smoke testing</pre></blockquote> <h3><a name="Preparing_source"></a>Preparing the source code</h3> <p>If necessary, update the release number by incrementing it as described in<a href="#Release_numbering">Release numbering</a> above. <p>Update references to the date for release: <ul> <li>In <b><tt>version.mak</tt></b>, the numeric date. <li>In <b><tt>doc/News.htm</tt></b>, in two places, skipping the Id:line. That is, in parentheses after the <tt>VERSION X.YY</tt> heading,and in the copyright footer both the year and the release date. <li>In <b><tt>src/dwsetup.rc</tt></b> and <b><tt>src/winint.mak</tt></b>,update the year in the embedded copyright notice. </ul> <p>We recommend using a UTC release date to avoid timezone skew. <p>Also in <b><tt>doc/News.htm</tt></b>, update the number of the highestclosed bug and the list of open bugs. <p>Check in <b><tt>gscdef.c</tt></b> that the definition of<b><tt>GS_PRODUCT</tt></b> includes the appropriate one of "DEVELOPMENTRELEASE", "BETA RELEASE", or neither, and does not include "CVSPRE-RELEASE". <p>Run the source-consistency checks from the test suite: <blockquote><pre>toolbin/tests/check_all.py --gsroot=.</pre></blockquote>Where the argument of --gsroot is the path to the top level of thesource tree. Fix any problems it indicates, and commit them to cvs. <p>Check for patched configuration parameters, <b><tt>#define TEST</tt></b>s,version/date inconsistencies, and mismatches between the working directoryand the CVS repository by running: <blockquote><pre>toolbin/pre.tcl</pre></blockquote> <p>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 thecheck file on another.  See the source code for the default file names.  Theimportant one is the check file,<b><tt>toolbin/pre.chk</tt></b>.  <b><tt>pre.tcl</tt></b> also verifiesthat theright information is in the following places:<ul><li>release number in <b><tt>man/*.1</tt></b>, <b><tt>doc/*.htm</tt></b>,<b><tt>version.mak</tt></b>, <b><tt>doc/gs-vms.hlp</tt></b>,<b><tt>lib/gs_init.ps</tt></b><li>revision date in <b><tt>man/*.1</tt></b>, <b><tt>doc/*.htm</tt></b>,<b><tt>version.mak</tt></b>, <b><tt>doc/gs-vms.hlp</tt></b><li>copyright year (if necessary) in <b><tt>gscdef.c</tt></b><li>third-party library version number in <b><tt>*.mak</tt></b></ul> <p>If necessary, run <blockquote><pre>toolbin/pre.tcl update</pre></blockquote> <p>to update the version and revision date in the doc files, and then run <blockquote><pre>toolbin/pre.tcl</pre></blockquote> <p>again. To confirm that everything is updated. You may have to commit tocvs after the update to satify the script that all the dates arecorrect. <p>Check the consistency of the source code with the makefiles byrunning: <blockquote><pre>toolbin/gsmake.tcl check</pre></blockquote> This script assumes the top level makefile is named '<tt>makefile</tt>'. <p>Fix any problems and commit to cvs. <h3><a name="Testing"></a>Testing</h3> <p>Edit your top-level the Makefile to set<blockquote><pre>FEATURE_DEVS=$(FEATURE_DEVS_ALL)COMPILE_INITS=1</pre></blockquote> <p>This will help catch compilation problems. <p>Run <blockquote><pre>rm obj/*make -j2 &gt;&amp; make.log</pre></blockquote> <p>and look for warnings and errors in the log file. <p>Do a smoke test, updating the example paths as necessary: <blockquote><pre>unset GS_DEVICE GS_FONTPATH GS_LIB GS_OPTIONS./bin/gs -I./lib -I./fonts -dNOPAUSE -dBATCH toolbin/smoke.ps./bin/gs -I./lib -I./fonts -dNOPAUSE -dBATCH -sDEVICE=bitcmyk\  -sOutputFile=/dev/null -r600 -dBufferSpace=100000 toolbin/smoke.ps</pre></blockquote> <p>This reads files named <blockquote><pre><b><tt>data/misc/*.ps</tt></b><b><tt>data/ps/*.ps</tt></b><b><tt>data/psl2/*.ps</tt></b><b><tt>data/psl3/*.ps</tt></b></pre></blockquote> <p>(Edit <b><tt>toolbin/smoke.ps</tt></b> to use other test sets.)Watch for crashes, unusual error messages, or anomalous displayed output.If there are any problems, start over from the beginning of the process. <p>Undo the <b><tt>FEATURE_DEVS</tt></b> and <b><tt>COMPILE_INITS</tt></b>edits. <p>Run <blockquote><pre>cvs commit</pre></blockquote> <p>to ensure the repository is up to date. <h3><a name="Changelog"></a>Updating the changelog</h3> <p>Create a new changelog by running either (for the main HEAD branch) <blockquote><pre>cvs2cl.pl --utc -T --follow trunk --delta &lt;prev release tag&gt;:HEAD --xml -f doc/changelog.xml</pre></blockquote> or (for a non-HEAD branch) <blockquote><pre>cvs2cl.pl --utc -T --follow &lt;branch&gt; --delta &lt;prev release tag&gt;:&lt;branch tag&gt; --xml -f doc/changelog.xml</pre></blockquote>e.g.<blockquote><pre>cvs2cl.pl --utc -T --follow trunk --delta gs8_00:HEAD --xml -f doc/changelog.xml</pre></blockquote> <p>This consolidates all the CVS logs since the previous release in a readableformat. You may also wish to pass a file mapping cvs user names to real nameswith the <tt>-U</tt> option. <p>Create the html-format changes and details documents as follows: <blockquote><pre>cd doc../toolbin/split_changelog.py changelog.xml Changes.htm Details.htmcd ..</pre></blockquote> <p>The xml changelog file can now be deleted. Run <blockquote><pre>toolbin/makehist.tcl</pre></blockquote> <p>This updates <b><tt>doc/History#.htm</tt></b> from<b><tt>doc/News.htm</tt></b> and <b><tt>doc/Changes.htm</tt></b>. Then run <blockquote><pre>cvs commit</pre></blockquote> <p>again to check in the Changes and history files. <h3><a name="Making_Tarballs"></a>Making the source distribution</h3> <p>First, tag the versions of the files in cvs with the release versionnumber. <blockquote><pre><tt>cvs tag gs#_##</tt></pre>

Lines 1–500 of 927.