xref: /plan9/sys/src/cmd/gs/doc/Release.htm (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2<html>
3<head>
4<title>How to prepare a Ghostscript release</title>
5<!-- $Id: Release.htm,v 1.95 2005/10/20 19:46:23 ray Exp $ -->
6<!-- Originally: make.txt -->
7<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
8</head>
9
10<body>
11<!-- [1.0 begin visible header] ============================================ -->
12
13<!-- [1.1 begin headline] ================================================== -->
14
15<h1>How to prepare a Ghostscript release</h1>
16
17<!-- [1.1 end headline] ==================================================== -->
18
19<!-- [1.2 begin table of contents] ========================================= -->
20
21<h2>Table of contents</h2>
22
23<blockquote><ul>
24<li><a href="#Introduction">Introduction</a>
25<li><a href="#Servers">Servers</a>
26<ul>
27<li><a href="#Development_files">Development sources and bug reports</a>
28<li><a href="#Distribution">Distribution</a>
29</ul>
30<li><a href="#Release_numbering">Release numbering</a>
31<li><a href="#Making_distributions">Making distributions</a>
32<ul>
33<li><a href="#Preparing_source">Preparing the source code</a>
34<li><a href="#Testing">Testing</a>
35<li><a href="#Changelog">Updating the Changelog</a>
36<li><a href="#Making_Tarballs">Making the source distribution</a>
37<li><a href="#Testing_on_Windows">Testing on Windows</a>
38<li><a href="#Windows_distribution">Building the Windows distribution</a>
39<li><a href="#Finishing_up">Finishing up</a>
40<li><a href="#Beta_distributions">Beta distributions</a>
41<li><a href="#Public_releases">Public releases</a>
42</ul>
43<li><a href="#After_releasing">After releasing</a>
44<li><a href="#GPL_releases">GPL Ghostscript releases</a>
45<ul>
46<li><a href="#GPL_code">GPL code</a>
47<li><a href="#GPL_after_releasing">After releasing (GPL)</a>
48</ul>
49<li><a href="#Fonts">Fonts</a>
50</ul></blockquote>
51
52<!-- [1.2 end table of contents] =========================================== -->
53
54<!-- [1.3 begin hint] ====================================================== -->
55
56<p>For other information, see the <a href="Readme.htm">Ghostscript
57overview</a> and the instructions on how to <a href="Make.htm">build
58Ghostscript</a>.
59
60<!-- [1.3 end hint] ======================================================== -->
61
62<hr>
63
64<!-- [1.0 end visible header] ============================================== -->
65
66<!-- [2.0 begin contents] ================================================== -->
67
68<h2><a name="Introduction"></a>Introduction</h2>
69
70<p>
71This document describes the process that artofcode LLC, the copyright holder
72of Ghostscript, uses for making new Ghostscript releases. Please note
73that while the the license allows anyone to prepare and distribute
74releases in accordance with its terms and conditions, this document is
75really meant only to document the process used by artofcode LLC.
76However, the eventual purpose of this document is to describe
77Ghostscript release procedures in enough detail that someone who knows
78little about Ghostscript but is generally familiar with the platform on
79which the procedure is being carried out can execute the procedures
80correctly. So if you add or changing anything to/in this document,
81be sure to specify all command lines, file names, etc. in explicit
82detail.
83
84<p>
85The release process for the GPL and AFPL branches are similar, though
86there are some differences in terms of policy and release locations. See
87the section on <a href="#GPL_releases">GPL releases</a> below for
88information specific to GPL Ghostscript.
89
90<p>
91File names below that don't include an explicit subdirectory name are in the
92<b><tt>src</tt></b> subdirectory.
93
94<p>
95If you do plan to make your own distribution, please be aware of some items
96you will want to change.
97
98<ul>
99
100<li>If you make any significant changes, please edit
101<b><tt>gscdef.c</tt></b> to change <b><tt>GS_PRODUCTFAMILY</tt></b> and
102<b><tt>GS_PRODUCT</tt></b> from "AFPL Ghostscript" to something else,
103in order to avoid confusion with artofcode's releases.
104
105<li>In the same file, you may also want to edit <b><tt>GS_COPYRIGHT</tt></b>
106to add your own copyright notice (although you must not remove any
107notice that is there).
108
109<li>You will almost certainly want to edit <b><tt>version.mak</tt></b> to
110change the revision date, <b><tt>GS_REVISIONDATE</tt></b>.
111
112<li>If you want to change the release number, you must change it in all the
113places listed under <a href="#Release_numbering">"Release numbering"</a>
114below.
115
116</ul>
117
118<h2><a name="Servers"></a>Servers</h2>
119
120<p>
121The GPL and AFPL Ghostscript files are maintained on sites accessible to
122the public.  One specific site hosts the active CVS repository for code,
123data, and documentation, and the bug report data base; several sites
124offer distributions with release numbers, intended for wider
125distribution.
126
127<h3><a name="Development_files"></a>Development sources and bug reports</h3>
128
129<p>
130The primary repository for GPL and AFPL Ghostscript is <a
131href="http://www.ghostscript.com/" class="offsite">ghostscript.com</a>.
132Please check there first for any news about releases or current work,
133and for information about where to download ghostscript and how to
134access the mailing lists.
135
136CVS access is through <a
137href="http://cvs.ghostscript.com/"
138class="offsite">cvs.ghostscript.com</a>.
139
140<p>
141It may also be helpful to
142read the SourceForge AFPL Ghostscript home page (<a
143href="http://sourceforge.net/projects/ghostscript/"
144class="offsite">http://sourceforge.net/projects/ghostscript/</a>).
145
146<h3><a name="Distribution"></a>Distribution</h3>
147
148<p>
149Stable, beta, and development releases are all available from
150<blockquote>
151<a
152href="http://sourceforge.net/project/showfiles.php?group_id=1897"
153class="offsite">http://sourceforge.net/project/showfiles.php?group_id=1897</a>
154</blockquote>
155
156<p>
157Stable releases are also distributed from
158
159<blockquote>
160<a
161href="ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/"
162class="offsite">ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/</a> or
163<br>
164<a
165href="ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gpl/"
166class="offsite">ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gpl/</a>
167</blockquote>
168
169<p>
170Development releases are also distributed from
171
172<blockquote>
173<a href="ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/test/"
174class="offsite">ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/test/</a>
175</blockquote>
176
177<h2><a name="Release_numbering"></a>Release numbering</h2>
178
179<p>
180Ghostscript uses a two-part (major.minor) release number. The second part
181of the release number is a 2-digit decimal fraction: it counts 00,
18201, 02, and so on through 99.
183
184<ul>
185
186<li>Release numbers N.0x and N.5x indicate stable versions.
187<li>Successive increments generally indicate bug fixes and minor enhancements.
188<li>Development, testing and beta releases generally begin with a minor release number that is
189a multiple of ten and increment from there.
190</ul>
191
192<p>
193Release numbers appear in the following places in the Ghostscript files:
194
195<ul>
196
197<li>In <b><tt>lib/gs_init.ps</tt></b>, as an integer (release number x100) at the beginning of the
198file just after the initial comment blocks.
199
200<li>In <b><tt>src/version.mak</tt></b>, split into 3 lines.
201
202<li>In <b><tt>doc/News.htm</tt></b>, in the two headers and their labels and at the very end in
203the copyright footer.
204
205<li>At the foot of most documenation files. However, these are updated mechanically from the value
206in <b><tt>News.htm</tt></b> as part of the release process and do not need to be maintained
207directly.
208</ul>
209
210<h3>Before a release</h3>
211
212<p>
213The current release number in the development code must be set to the desired value. The increment
214from just after the previous release (see below) is sufficient for minor updates. In the case of
215major changes or a new stable release, the number will need to be bumped; this is generally done
216as the first step of preparing a new release.
217
218<h3>After a release</h3>
219
220<p>
221After making a release the release number in CVS is incremented. Thus versions built
222from cvs are always marked with a future (or unused) release number to avoid confusion.
223
224<p>
225Additionally, After an N.00 or N.50 stable release, a branch is made in cvs so that development
226can continue independently of changes to the stable series. When this happens, the minor release
227number is incremented by 10 (or 20) on the development branch (and by 1 on the new stable branch,
228as above) to avoid collisions.
229
230<p>
231While incrementing the release number after making a release may seem
232counter-intuitive, it ensures that, at any given time, the version
233number alone is sufficient to distinguish between the current CVS
234state and a numbered release.
235
236<h2><a name="Making_distributions"></a>Making distributions</h2>
237
238<p>
239This document only discusses source distributions.  Source distributions
240currently can only be made on Linux systems (but it probably wouldn't take
241much work to support other Unix systems).  Ghostscript as distributed also
242often includes executables or other packages for the Windows and MacOS
243environments, but artofcode does not always produce these, and this document does not
244discuss them.  For more information about Windows packages, please contact
245<a href="mailto:bug-gswin@ghostscript.com"><tt>bug-gswin@ghostscript.com</tt></a>;
246for more information about MacOS packages, please contact <a
247href="mailto:mac-gs@ghostscript.com"><tt>mac-gs@ghostscript.com</tt></a>.
248
249<p>
250To make a source distribution, you will need the scripts and data files in
251the <b><tt>toolbin/</tt></b> directory. The instructions below generally
252assume that you're invoking the relative to the top level of the source
253tree.
254
255To run the scripts, you will need reasonably current versions of Tcl,
256freely available from Scriptics
257(<a class="offsite" href="http://www.scriptics.com"><tt>http://www.scriptics.com</tt></a>), and
258Python, freely available from <a class="offsite"
259href="http://www.python.org"><tt>http://www.python.org</tt></a>.
260
261<p>
262To update the changelogs, you'll also need a recent version of the cvs2cl perl script. If
263not already installed on your system a copy can be found at
264<a class="offsite" href="http://www.red-bean.com/cvs2cl/cvs2cl.pl">http://www.red-bean.com/cvs2cl/cvs2cl.pl</a>.
265
266<p>
267The instructions below also refer to some files that are deliberately
268omitted from the public distribution, because they are not freely
269redistributable. You will need to provide similar files for your
270environment.
271
272<blockquote><pre>
273<b><tt>data/*/*.ps</tt></b> (PostScript files) - needed for smoke testing
274</pre></blockquote>
275
276<h3><a name="Preparing_source"></a>Preparing the source code</h3>
277
278<p>
279If necessary, update the release number by incrementing it as described in
280<a href="#Release_numbering">Release numbering</a> above.
281
282<p>
283Update references to the date for release:
284
285<ul>
286
287<li>In <b><tt>version.mak</tt></b>, the numeric date.
288
289<li>In <b><tt>doc/News.htm</tt></b>, in two places, skipping the Id:
290line. That is, in parentheses after the <tt>VERSION X.YY</tt> heading,
291and in the copyright footer both the year and the release date.
292
293<li>In <b><tt>src/dwsetup.rc</tt></b> and <b><tt>src/winint.mak</tt></b>,
294update the year in the embedded copyright notice.
295
296</ul>
297
298<p>
299We recommend using a UTC release date to avoid timezone skew.
300
301<p>
302Also in <b><tt>doc/News.htm</tt></b>, update the number of the highest
303closed bug and the list of open bugs.
304
305<p>
306Check in <b><tt>gscdef.c</tt></b> that the definition of
307<b><tt>GS_PRODUCT</tt></b> includes the appropriate one of "DEVELOPMENT
308RELEASE", "BETA RELEASE", or neither, and does not include "CVS
309PRE-RELEASE".
310
311<p>Run the source-consistency checks from the test suite:
312
313<blockquote><pre>
314toolbin/tests/check_all.py --gsroot=.
315</pre></blockquote>
316Where the argument of --gsroot is the path to the top level of the
317source tree. Fix any problems it indicates, and commit them to cvs.
318
319<p>
320Check for patched configuration parameters, <b><tt>#define TEST</tt></b>s,
321version/date inconsistencies, and mismatches between the working directory
322and the CVS repository by running:
323
324<blockquote><pre>
325toolbin/pre.tcl
326</pre></blockquote>
327
328<p>
329This program compares the result of various greps against a check file,
330writing the results of grep on one output file and the differences from the
331check file on another.  See the source code for the default file names.  The
332important one is the check file,
333<b><tt>toolbin/pre.chk</tt></b>.  <b><tt>pre.tcl</tt></b> also verifies
334that the
335right information is in the following places:
336<ul>
337<li>release number in <b><tt>man/*.1</tt></b>, <b><tt>doc/*.htm</tt></b>,
338<b><tt>version.mak</tt></b>, <b><tt>doc/gs-vms.hlp</tt></b>,
339<b><tt>lib/gs_init.ps</tt></b>
340<li>revision date in <b><tt>man/*.1</tt></b>, <b><tt>doc/*.htm</tt></b>,
341<b><tt>version.mak</tt></b>, <b><tt>doc/gs-vms.hlp</tt></b>
342<li>copyright year (if necessary) in <b><tt>gscdef.c</tt></b>
343<li>third-party library version number in <b><tt>*.mak</tt></b>
344</ul>
345
346<p>
347If necessary, run
348
349<blockquote><pre>
350toolbin/pre.tcl update
351</pre></blockquote>
352
353<p>
354to update the version and revision date in the doc files, and then run
355
356<blockquote><pre>
357toolbin/pre.tcl
358</pre></blockquote>
359
360<p>
361again. To confirm that everything is updated. You may have to commit to
362cvs after the update to satify the script that all the dates are
363correct.
364
365<p>
366Check the consistency of the source code with the makefiles by
367running:
368
369<blockquote><pre>
370toolbin/gsmake.tcl check
371</pre></blockquote>
372
373This script assumes the top level makefile is named '<tt>makefile</tt>'.
374
375<p>
376Fix any problems and commit to cvs.
377
378<h3><a name="Testing"></a>Testing</h3>
379
380<p>
381Edit your top-level the Makefile to set
382<blockquote><pre>
383FEATURE_DEVS=$(FEATURE_DEVS_ALL)
384COMPILE_INITS=1
385</pre></blockquote>
386
387<p>
388This will help catch compilation problems.
389
390<p>
391Run
392
393<blockquote><pre>
394rm obj/*
395make -j2 &gt;&amp; make.log
396</pre></blockquote>
397
398<p>
399and look for warnings and errors in the log file.
400
401<p>
402Do a smoke test, updating the example paths as necessary:
403
404<blockquote><pre>
405unset GS_DEVICE GS_FONTPATH GS_LIB GS_OPTIONS
406./bin/gs -I./lib -I./fonts -dNOPAUSE -dBATCH toolbin/smoke.ps
407./bin/gs -I./lib -I./fonts -dNOPAUSE -dBATCH -sDEVICE=bitcmyk\
408  -sOutputFile=/dev/null -r600 -dBufferSpace=100000 toolbin/smoke.ps
409</pre></blockquote>
410
411<p>
412This reads files named
413
414<blockquote><pre>
415<b><tt>data/misc/*.ps</tt></b>
416<b><tt>data/ps/*.ps</tt></b>
417<b><tt>data/psl2/*.ps</tt></b>
418<b><tt>data/psl3/*.ps</tt></b>
419</pre></blockquote>
420
421<p>
422(Edit <b><tt>toolbin/smoke.ps</tt></b> to use other test sets.)
423Watch for crashes, unusual error messages, or anomalous displayed output.
424If there are any problems, start over from the beginning of the process.
425
426<p>
427Undo the <b><tt>FEATURE_DEVS</tt></b> and <b><tt>COMPILE_INITS</tt></b>
428edits.
429
430<p>
431Run
432
433<blockquote><pre>
434cvs commit
435</pre></blockquote>
436
437<p>
438to ensure the repository is up to date.
439
440<h3><a name="Changelog"></a>Updating the changelog</h3>
441
442<p>
443Create a new changelog by running either (for the main HEAD branch)
444
445<blockquote><pre>
446cvs2cl.pl --utc -T --follow trunk --delta &lt;prev release tag&gt;:HEAD --xml -f doc/changelog.xml
447</pre></blockquote>
448
449or (for a non-HEAD branch)
450
451<blockquote><pre>
452cvs2cl.pl --utc -T --follow &lt;branch&gt; --delta &lt;prev release tag&gt;:&lt;branch tag&gt; --xml -f doc/changelog.xml
453</pre></blockquote>
454e.g.
455<blockquote>
456<pre>cvs2cl.pl --utc -T --follow trunk --delta gs8_00:HEAD --xml -f doc/changelog.xml</pre>
457</blockquote>
458
459<p>
460This consolidates all the CVS logs since the previous release in a readable
461format. You may also wish to pass a file mapping cvs user names to real names
462with the <tt>-U</tt> option.
463
464<p>
465Create the html-format changes and details documents as follows:
466
467<blockquote><pre>
468cd doc
469../toolbin/split_changelog.py changelog.xml Changes.htm Details.htm
470cd ..
471</pre></blockquote>
472
473<p>
474The xml changelog file can now be deleted. Run
475
476<blockquote><pre>
477toolbin/makehist.tcl
478</pre></blockquote>
479
480<p>
481This updates <b><tt>doc/History#.htm</tt></b> from
482<b><tt>doc/News.htm</tt></b> and <b><tt>doc/Changes.htm</tt></b>.
483
484Then run
485
486<blockquote><pre>
487cvs commit
488</pre></blockquote>
489
490<p>
491again to check in the Changes and history files.
492
493<h3><a name="Making_Tarballs"></a>Making the source distribution</h3>
494
495<p>
496First, tag the versions of the files in cvs with the release version
497number.
498
499<blockquote>
500<pre><tt>cvs tag gs#_##</tt></pre>
501</blockquote>
502
503If you've already tagged this release (e.g. in making an earlier
504release candidate) you'll need to add the <tt>-r</tt> and <tt>-F</tt>
505options after 'cvs tag' to force moving the tag to the new revisions
506of changed files.
507
508<p>
509Pull a fresh copy for distribution from the cvs repository:
510
511<blockquote><pre>
512<tt>cvs -z3 -d &lt;ghostscript cvsroot&gt; export -r gs#_## -d ghostscript-#.## gs</tt>
513</pre></blockquote>
514
515
516<p>
517Generate the text versions of the README and PUBLIC documents:
518
519<blockquote>
520<pre><tt>cd ghostscript-#.##</tt>
521<tt>lynx -dump -nolist doc/Readme.htm &gt; doc/README</tt>
522<tt>lynx -dump -nolist doc/Public.htm &gt; doc/PUBLIC</tt></pre>
523</blockquote>
524
525<p>
526Add copies of third-party libraries. Versions of the ijs and icc
527libraries are included in Ghostscript cvs, so these are provided
528by the export. Source for zlib, libjpeg, and zlib are usually provided
529in the Windows and MacOS source releases, but not the unix tarballs.
530
531<p>
532Download and unpack the latest source release of
533<a href="http://jbig2dec.sourceforge.net/">jbig2dec</a>, renaming the
534directory to just <tt>jbig2dec</tt> on the top level of ghostscript
535source directory.
536
537<p>
538For the unix source distributions only, generate the configure
539scripts. From the top level directory, run
540
541<blockquote><pre><tt>./autogen.sh</tt>
542<tt>make distclean</tt>
543</pre></blockquote>
544
545This should create links to <tt>configure.ac</tt> and
546<tt>Makefile.in</tt> in the top level directory and
547invoke autoconf to create the <tt>configure</tt> script.
548
549<p>
550Also, run <tt>autoconf</tt> in the ijs subdir to create the configure script
551for that package.
552
553<p>
554Move back to directory containing the distribution code and make the
555source archives with:
556
557<blockquote><pre>
558<tt>tar cvzf ghostscript-#.##.tar.gz ghostscript-#.##/*</tt>
559<tt>zcat ghostscript-#.##.tar.gz | bzip2 -c > ghostscript-#.##.tar.bz2</tt>
560</pre></blockquote>
561
562<p>
563This creates the files
564
565<blockquote><pre>
566<b><tt>ghostscript-#.##.tar.gz</tt></b> (main archive)
567<b><tt>ghostscript-#.##.tar.bz2</tt></b> (main archive)
568</pre></blockquote>
569
570<p>
571The important issue is that the tarballs unpack into a directory
572of the same name, and that the code be a pristine copy without
573build or CVS housekeeping files.
574
575<p>
576It is also customary to make a <tt>gs###src.zip</tt> archive for the
577convenience of windows developers. See below.
578
579<h3><a name="Testing_on_Windows"></a>Testing on Windows</h3>
580
581<p>
582For Windows testing, you will need, in addition to the files listed
583under "<a href="#Preparing_source">Preparing the source</a>" above:
584<blockquote><pre>
585<b><tt>toolbin/makewin.tcl</tt></b>
586</pre></blockquote>
587
588<p>
589The following procedures rely on a large number of MS-DOS batch scripts that
590are not discussed here: they are unlikely to be generally useful.
591
592<p>
593Mount the Windows partition on <b><tt>/c</tt></b>, and create the
594<b><tt>/c/work</tt></b> directory if needed.
595
596<p>
597Make the zip archive of all files needed for a Windows build, and copy it to
598the Windows partition:
599
600<blockquote><pre>
601toolbin/makewin
602cp gs###.zip /c/work
603</pre></blockquote>
604
605<p>
606Boot into Windows.  Unpack the archive:
607
608<blockquote><pre>
609cd \work
610unzip -oq gs###.zip
611gs###
612</pre></blockquote>
613
614<p>
615The <b><tt>gs###.bat</tt></b> script creates some necessary directories,
616sets up <b><tt>PATH</tt></b> and <b><tt>GS_LIB</tt></b> for testing, and
617makes the <b><tt>gs#.##</tt></b> directory current.
618
619<p>
620Build with the Borland compiler:
621
622<blockquote><pre>
623config bcwin32
624copy /y /b ..\gs\makefile
625erase obj\*.*
626make > bc.log
627</pre></blockquote>
628
629<p>
630Smoke test the executables (both <b><tt>gswin32</tt></b> and
631<b><tt>gswin32c</tt></b>), as described above for source distributions.
632Then build with the Microsoft compiler:
633
634<blockquote><pre>
635config msvc32
636copy /y /b ..\gs\makefile
637erase obj\*.*
638nmake > msvc.log
639</pre></blockquote>
640
641<p>
642Smoke test these executables too.
643
644<p>
645Building with the Watcom compiler doesn't work, because the
646<b><tt>wmake</tt></b> or <b><tt>wmakel</tt></b> program runs out of memory.
647However, if it did work, this is how to do it:
648
649<blockquote><pre>
650config watcw32
651copy /y /b ..\gs\makefile
652erase obj\*.*
653wmake -u > watc.log
654</pre></blockquote>
655
656<p>
657Boot back into Linux.  If testing in Windows revealed problems, edit the
658source files as necessary, and go back to <a
659href="#Preparing_source">"Preparing the source code."</a>
660
661<h3><a name="Windows_distribution"></a>Building the Windows distribution</h3>
662<p>
663Extract the sources from <b><tt>ghostscript-N.NN.tar.gz</tt></b>
664then repackage in a zip file as follows:
665<blockquote>
666<b><tt>zip -r temp.zip gsN.NN/LICENSE gsN.NN/doc gsN.NN/examples
667  gsN.NN/icclib gsN.NN/ijs gsN.NN/jasper gsN.NN/jbig2dec gsN.NN/lib
668  gsN.NN/src gsN.NN/Resource</tt></b>
669</blockquote>
670Unzip converting the line endings to CRLF:
671<blockquote>
672<b><tt>unzip -a temp.zip<br>
673del temp.zip</tt></b>
674</blockquote>
675Then finally zip up the sources to the distribution file:
676<blockquote>
677<b><tt>zip -9 -r -X gsNNNsrc.zip gsN.NN</tt></b>
678</blockquote>
679This method is reasonably portable, and does not convert binary
680files such as
681<b><tt><a href="../examples/annots.pdf">examples/annots.pdf</a></tt></b>.
682<p>
683Unzip <b><tt>gsNNNsrc.zip</tt></b>.
684The directory must be named <b><tt>gsN.NN</tt></b>.
685<p>
686Extract the AFPL fonts <b><tt>ghostscript-fonts-std-6.0.tar.gz</tt></b>
687or GNU fonts <b><tt>gnu-gs-fonts-std-6.0.tar.gz</tt></b>
688into a directory <b><tt>fonts</tt></b> adjacent to the
689<b><tt>gsN.NN</tt></b> directory.
690The fonts are needed in this location for building
691the distribution archive later.
692<p>
693You will need the command line Info-Zip zip program available from
694<a href="http://www.info-zip.org/pub/infozip/">
695http://www.info-zip.org/pub/infozip/</a>
696Alternatively, the command line version of WinZip
697(<b><tt>wzzip.exe</tt></b>) can be used by replacing the
698Info-Zip command line options <b><tt>-9 -r</tt></b>
699with <b><tt>-ex -P</tt></b> in
700<b><tt><a href="../src/winint.mak">winint.mak</a></tt></b>.
701<p>
702You will need WinZip Self-Extractor for building the
703self extracting archive.  This is commercial software.
704You may need to update the path <b><tt>WINZIPSE_XE</tt></b> in
705<b><tt><a href="../src/winint.mak">winint.mak</a></tt></b>.
706<p>
707Unzip the jpeg, libpng and zlib libraries, then make ghostscript
708as documented in <a href="Make.htm">Make.htm</a>.
709<p>
710Run the command <b><tt>nmake archive</tt></b>.  This builds the distribution
711archive <b><tt>gsNNNw32.exe</tt></b> and an ordinary zip file
712<b><tt>gsNNNw32.zip</tt></b> in the parent directory.
713If you do not have WinZip Self-Extractor, you can use
714<b><tt>nmake zip</tt></b> to make <b><tt>gsNNNw32.zip</tt></b> only.
715
716<h3><a name="Finishing_up"></a>Finishing up</h3>
717
718<p>
719Upload <b><tt>ghostscript-#.##.tar.*</tt></b> to SourceForge (by anonymous
720FTP to <b><tt>upload.sourceforge.net</tt></b>, directory
721<b><tt>/incoming</tt></b>), and then post it using the "File Release"
722facility in the AFPL Ghostscript project. If this is a stable AFPL
723release put it in the <b><tt>ghostscript</tt></b> module.
724If this is a GPL release, put it in the <b><tt>gs-gpl</tt></b> module.
725If this is a test release or beta release, put
726it in the <b><tt>gs-devel</tt></b> or <b><tt>gs-beta</tt></b> module,
727respectively.
728If you are adding executable builds or source archives for other
729platforms to an existing source release, please use the same release
730date as the source release, not the current date.
731
732<p>
733If <b><tt>doc/C-style.htm</tt></b> has changed, put it on
734<b><tt>ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/C-style.htm</tt></b>.
735
736<h3><a name="Beta_distributions"></a>Beta distributions</h3>
737
738<p>
739Do the steps for distributions in general.
740
741<p>
742Upload <b><tt>ghostscript-#.##.tar.*</tt></b> to
743<b><tt>ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/test</tt></b>.
744
745<p>
746Send an email announcement to the <tt>gs-test</tt> list
747announcing the new release.
748
749<h3><a name="Public_releases"></a>Public releases</h3>
750
751<p>
752Do the steps for distributions in general.
753
754<p>
755Create a directory at
756<b><tt>ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/gs###/</tt></b>.  In that
757directory, store the following files:
758
759<ul>
760
761<li>Standard distribution files:
762
763<blockquote><pre>
764<b><tt>ghostscript-#.##.tar.gz</tt></b>
765<b><tt>ghostscript-#.##.tar.bz2</tt></b>
766</pre></blockquote>
767
768<li>MS Windows source and executables:
769
770<blockquote><pre>
771<b><tt>gs###src.zip</tt></b>
772<b><tt>gs###w32.exe</tt></b>
773<b><tt>gs###w32.zip</tt></b>
774</pre></blockquote>
775
776<li>Third-party libraries, as links (upload these if not installed), where
777<b><tt>$$$</tt></b> et al. refer to the version number of the library, which
778should be the latest compatible release of the library and should be
779consistent with the values of and version numbers specifically listed in
780the makefiles.
781
782<blockquote><pre>
783<b><tt>jpegsrc.v$$.tar.gz</tt></b> -> <b><tt>../../3rdparty/jpegsrc.v$$.tar.gz</tt></b>
784<b><tt>libpng-$.$.$.tar.gz</tt></b> -> <b><tt>../../3rdparty/libpng-$.$.$.tar.gz</tt></b>
785<b><tt>zlib-$.$.$.tar.gz</tt></b> -> <b><tt>../../3rdparty/zlib-$.$.$.tar.gz</tt></b>
786<b><tt>jpegsr$$.zip</tt></b> -> <b><tt>../../3rdparty/jpegsr$$.zip</tt></b>
787<b><tt>lpng$$$.zip</tt></b> -> <b><tt>../../3rdparty/lpng$$$.zip</tt></b>
788<b><tt>zlib$$$.zip</tt></b> -> <b><tt>../../3rdparty/zlib$$$.zip</tt></b>
789</pre></blockquote>
790
791In any case, the names of the links in the distribution directory should reflect
792the original name of the upstream file.
793
794<li>Fonts, where <b><tt>$.$$</tt></b> refers to the most recent version
795number of the fonts:
796
797<blockquote><pre>
798<b><tt>ghostscript-fonts-other-$.$.tar.gz</tt></b> -> <b><tt>../fonts/ghostscript-fonts-other-$.$.tar.gz</tt></b>
799<b><tt>ghostscript-fonts-std-$.$.tar.gz</tt></b> -> <b><tt>../fonts/ghostscript-fonts-std-$.$.tar.gz</tt></b>
800</pre></blockquote>
801
802</ul>
803
804<p>
805(Note that the link names are somewhat inconsistent: some of them retain the
806version number of the file being referenced, and some of them use the
807Ghostscript release number.  This is a historical artifact that might be
808changed someday.)
809
810<p>
811E-mail the release announcement using:
812<blockquote><pre>
813To: gs-announce
814</pre></blockquote>
815
816<p>
817Edit the Web pages in cvs and commit to reflect the new release.
818The Wisconsin server should update automatically.
819
820<h2><a name="After_releasing"></a>After releasing</h2>
821
822<p>
823Update the release number by incrementing it as described in <a
824href="#Release_numbering">Release numbering</a> above.
825
826<p>
827In <b><tt>gscdef.c</tt></b>, edit the definition of
828<b><tt>GS_PRODUCT</tt></b> to include "CVS PRE-RELEASE".
829
830<p>
831Edit <b><tt>doc/News.htm</tt></b> to remove all the content.
832
833
834<h2><a name="GPL_releases"></a>GPL Ghostscript releases</h2>
835
836<p>
837artofcode LLC re-releases each stable AFPL Ghostscript branch as
838GPL Ghostscript (under the GNU GPL license) when the next major stable
839AFPL release comes out, or after one calendar year, whichever comes first.
840
841<h3><a name="GPL_code"></a>GPL code</h3>
842
843<p>
844To make a GPL Ghostscript release from AFPL Ghostscript, update the
845LICENCE file to reflect the new status of the code. In general there
846can be no recipe for this as it depends on the niceties of ownership and
847permisison attached to each piece of code. However, a previous GPL
848release can serve as a guide.
849
850<p>
851There are also generally some portions of code (usually drivers) which
852are limited to GPL Ghostscript only. These may want porting to the new
853version before release.
854
855<p>Once the license change is complete and the codebase has been
856updated to satifaction, follow the release process as described for AFPL
857Ghostscript above to test and package the new version. The distribution
858methods are parallel to those for the AFPL, with the GPL releases
859generally going under a separate header. For example, on the wisc
860ftp site upload the file to
861<tt>ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gpl/gs###/</tt>.
862
863
864<h2><a name="Fonts"></a>Fonts</h2>
865
866<p>
867artofcode LLC distributes a package of the base 35 PostScript fonts, and a
868package of other miscellaneous fonts.  As with the Ghostscript code, each
869package is released both with the AFPL and with the GPL; however, unlike the
870Ghostscript code, artofcode releases these versions simultaneously rather
871than with a one-version delay.
872
873<p>
874To make the font packages, run the command
875
876<blockquote><pre>
877toolbin/makefonts #.##
878</pre></blockquote>
879
880<p>
881This creates the following files:
882
883<blockquote><pre>
884ghostscript-fonts-std-#.##.tar.gz
885ghostscript-fonts-other-#.##.tar.gz
886gnu-gs-fonts-std-#.##.tar.gz
887gnu-gs-fonts-other-#.##.tar.gz
888</pre></blockquote>
889
890<p>
891The first two of these use the AFPL, and should be uploaded to
892<b><tt>ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/fonts/</tt></b>.  The other two
893use the GPL, and should be uploaded to
894<b><tt>ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gnu/fonts/</tt></b>.  For the GPL
895release, also see <a href="#GPL_after_releasing">"After releasing
896(GNU)"</a>.
897
898<!-- [2.0 end contents] ==================================================== -->
899
900<!-- [3.0 begin visible trailer] =========================================== -->
901<hr>
902
903<p>
904<small>Copyright &copy; 1999-2003 artofcode LLC. All rights
905reserved.</small>
906
907<p>
908This software is provided AS-IS with no warranty, either express or
909implied.
910
911This software is distributed under license and may not be copied,
912modified or distributed except as expressly authorized under the terms
913of the license contained in the file LICENSE in this distribution.
914
915For more information about licensing, please refer to
916http://www.ghostscript.com/licensing/. For information on
917commercial licensing, go to http://www.artifex.com/licensing/ or
918contact Artifex Software, Inc., 101 Lucas Valley Road #110,
919San Rafael, CA  94903, U.S.A., +1(415)492-9861.
920
921<p>
922<small>Ghostscript version 8.53, 20 October 2005
923
924<!-- [3.0 end visible trailer] ============================================= -->
925
926</body>
927</html>
928