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 >& 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 <prev release tag>: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 <branch> --delta <prev release tag>:<branch tag> --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 <ghostscript cvsroot> 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 > doc/README</tt> 522<tt>lynx -dump -nolist doc/Public.htm > 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 © 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