Sign in Join
Wiki copytemporary

Release engineering: what changed

Revision 2 to 3. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11This article discusses how to make a release of the FPC compiler on various platforms.
22
33## Migration of existing SVN checkout
44
55The existing checkout of the 'fixes_2_2' branch can be switched to the release tag using SVN command "switch", specifically its first variant (see below). However, it's recommended to build in exported sources, not in checked out version.
66
7-`~/fpc>>> svn sw --help`\
8-`switch (sw): Update the working copy to a different URL.`\
9-`usage: 1. switch URL [PATH]`\
10-`       2. switch --relocate FROM TO [PATH...]`
7+```text
8+~/fpc>>> svn sw --help
9+switch (sw): Update the working copy to a different URL.
10+usage: 1. switch URL [PATH]
11+ 2. switch --relocate FROM TO [PATH...]
12+```
1113
12-` 1. Update the working copy to mirror a new URL within the`\
13-` repository.`\
14-`    This behaviour is similar to 'svn update', and is the way to move`\
15-`    a working copy to a branch or tag within the same repository.`
14+```text
15+ 1. Update the working copy to mirror a new URL within the
16+ repository.
17+ This behaviour is similar to 'svn update', and is the way to move
18+ a working copy to a branch or tag within the same repository.
19+```
1620
17-` 2. Rewrite working copy URL metadata to reflect a syntactic change`\
18-` only.`\
19-`    This is used when repository's root URL changes (such as a scheme`\
20-`    or hostname change) but your working copy still reflects the same`\
21-`    directory within the same repository.`
21+```text
22+ 2. Rewrite working copy URL metadata to reflect a syntactic change
23+ only.
24+ This is used when repository's root URL changes (such as a scheme
25+ or hostname change) but your working copy still reflects the same
26+ directory within the same repository.
27+```
2228
2329## Create libgdb.a and or binutils
2430
2531- If you have problems building recent binutils or libgdb's on any *nix, and the error is related to intl.h or libintl.a, reconfigure using ../\<srcdir\>/configure --disable-nls (assuming you use a separate builddir)
2632- Some cygwin hints:
2733 - ensure you've installed gcc, bison and flex
2834 - use\
2935 `./configure --disable-ide --disable-libgui --disable-install-libgui`\
3036 to configure
3137
3238## General notes about release building
3339
3440To create a build, you always have to start with compiler from the last previous major release (e.g. 2.0.0 for all 2.0.x and 2.2.0 releases, 2.2.0 for 2.2.x, etc.), or the last previous minor release (i.e. you can use 2.0.2 for building 2.0.4).
3541
3642## Convert the faq.adp to faq.htm and faq.txt
3743
3844The faq's in fpcbuild/install/doc are generated from the faq.adp in the html-repository. (It's a good idea too check if the faq.adp is still up-to-date before converting it.) To do the conversion, check out the html-repository and do a 'make all'. Then create the faq.htm and .txt by:
3945
40-` ./adp2html faq.adp -m external-master.adp -p maindir=`[`http://www.freepascal.org/`](http://www.freepascal.org/)` -p x=.var > faq.htm`\
41-` w3m -dump faq.htm > faq.txt`
46+``` pascal
47+ ./adp2html faq.adp -m external-master.adp -p maindir=http://www.freepascal.org/ -p x=.var > faq.htm
48+ w3m -dump faq.htm > faq.txt
49+```
4250
4351It could be that you have to install w3m first. If the conversions are succesfull update these files in the fpcbuild-repository.
4452
4553## OS/CPU specific release engineering
4654
4755### FreeBSD
4856
4957[[FreeBSD specific Release Engineering]]
5058
5159### Linux
5260
5361Get sources, download the fpcbuild from ftp and extract it or use a command like:
5462
55-` git clone --branch release_3_2_2 --depth 1 --recurse-submodules --remote-submodules --shallow-submodules `[`https://gitlab.com/freepascal.org/fpc/build.git`](https://gitlab.com/freepascal.org/fpc/build.git)` fpcbuild`\
56-` rm -rf fpcbuild/.git &&  rm -rf fpcbuild/fpcsrc/.git && rm -rf fpcbuild/fpcdocs/.git`
63+```text
64+ git clone --branch release_3_2_2 --depth 1 --recurse-submodules --remote-submodules --shallow-submodules https://gitlab.com/freepascal.org/fpc/build.git fpcbuild
65+ rm -rf fpcbuild/.git && rm -rf fpcbuild/fpcsrc/.git && rm -rf fpcbuild/fpcdocs/.git
66+```
5767
5868Versions **3.0.x and below and some special targets** are using libgdb inside the ide to be able to debug. For those versions you have to get libgdb for your CPU from <ftp://ftp.freepascal.org/pub/fpc/contrib/libgdb/>, extract it into `fpcbuild/fpcsrc/` preserving pathes. Before building please check for files **libiberty.a**, **libopcode.a** and **libbfd.a**. These files are often installed in directories like /usr/lib. The compiler **must not** be able to find them! The reason is that otherwise the compiler might use the preinstalled ones instead of the ones you put in the libgdb directory, and the preinstalled ones are not compatible with libgdb.a. If the compiler finds and uses these libraries in /usr/lib, the IDE will crash on any debugging attempt.
5969
6070Get the most recent docs package from the ftp site, it's called doc-pdf.tar.gz and copy it into the `fpcbuild/` directory.
6171
6272Change into `fpcbuild/`. Now **become root**, or use **fakeroot**, then execute
6373
64-` install/makepack`
74+```text
75+ install/makepack
76+```
6577
6678#### Building an rpm
6779
6880To build an RPM, change into `fpcbuild` and execute
6981
70-` make rpm`
82+```text
83+ make rpm
84+```
7185
7286the documentation will be built as well and that requires a working Tex installation. To prevent the documentation from being built, execute
7387
74-` make rpm NODOCS=1`
88+```text
89+ make rpm NODOCS=1
90+```
7591
7692#### Building a deb
7793
7894To build an Debian Package, please refer to [[Debian Packaging]] page. Here are quick hints :
7995
8096\- Ensure that you have at least installed the following debian packages: dpkg-dev, fakeroot
8197
8298\- Modify the `fpcbuild/install/debian/changelog` file adding the following
8399
84-`fpc (x.y.z-b) unstable; urgency=low`\
100+```text
101+fpc (x.y.z-b) unstable; urgency=low
85102
86-`  * release candidate build`\
103+ * release candidate build
87104
88-` -- First Last <mail@address.ext>  Thu, 07 Jul 2006 23:44:00 +0100`\
89-` `
105+ -- First Last <mail@address.ext> Thu, 07 Jul 2006 23:44:00 +0100
106+```
90107
91108where b is package building number. Normally if **b** = 0, then packages will be named substituting **b** by the building date, otherwise it will be conserved. But this is changed because b\>0 is reserved for official Debian-builds. So in fact we should always use b=0. The value for b is only replaced by the date when SNAPSHOT=1. Please note that **z** could be a number but also a word like 2rc1
92109
93110\- change into `fpcbuild` and execute
94111
95-` make deb [GDBLIBDIR=<path/${OS_TARGET}/${CPU_TARGET}>]`
112+```text
113+ make deb [GDBLIBDIR=<path/${OS_TARGET}/${CPU_TARGET}>]
114+```
96115
97116the documentation will be built as well and that requires a working Tex installation. To prevent the documentation from being built, execute
98117
99-` make deb NODOCS=1`
118+```text
119+ make deb NODOCS=1
120+```
100121
101122### Dos installer
102123
103124(See also [[go32v2 development]])
104125
105126The basis is the fpcbuild repository, with the last release compiler as starting compiler, as always.
106127
107128Most recent GDB for go32v2 is 6.1.1, you can fetch it from [gdb 6.1.1](ftp://freepascal.stack.nl/pub/fpc/contrib/libgdb/v6.1.1/). Older targets have no architecture designation, so put it in fpcsrc/libgdb/go32v2
108129
109130Then do a make go32v2zip in the fpcbuild/ dir. On XP this takes a really long time......
110131
111132\[b\] Note this process will not work on Vista in the default configuration, since Vista only seems to allocate 16 or 32MB for DPMI use to a dosbox (and rumour is that W7 does too), which is too little. I've tried several of the workarounds, (see [[go32v2 development]]), but as of yet, to no avail.\[/b\]
112133
113134That is, the full procedure to build a release for go32v2 is, from fpcbuild directory:
114135
1151361. \<create the fpcsrc\libgdb\go32v2 directory and copy libgdb files there\>
1161372. make go32v2zip OPT="-dGDB_V601"
1171383. make sourcezip
1181394. make demozip
1191405. make docsrc
1201416. make utilities
1211427. \<now we have long file names packages\>
1221438. make shortnames
123144
124145### Windows Inno setup
125146
126147The situation for Windows is pretty much similar to makepack. However, instead of a script, [[Inno Setup]] is used. Note that this is the rough principle only. For real, official releases, probably more steps (make sure install/doc/whatsnew is up to date etc, proper SVN tag) must be observed.
127148
128149Steps to do once only:
129150
130-`* install Inno Setup. For FPC 3.2.2 we are trialing version 5.6.1-unicode `\
131-`* If support for Win9x/Win ME is needed, install an Ansi version lower than 5.5.0 (see 5.5.0 section in `[`Inno changelog`](http://www.jrsoftware.org/files/is5-whatsnew.htm)`)   `
151+```text
152+* install Inno Setup. For FPC 3.2.2 we are trialing version 5.6.1-unicode
153+* If support for Win9x/Win ME is needed, install an Ansi version lower than 5.5.0 (see 5.5.0 section in Inno changelog)
154+```
132155
133156Steps per build:
134157
135-`* checkout fpcbuild`\
136-`* export it to avoid lardering source zips with GIT dirs. (git can only export archives, but extracting on the fly with cygwin tar works: mkdir ../fpcexp and then git archive main |tar xC ../fpcexp )`\
137-`* make sure the last FPC release is first in your path (bootstrap)`\
138-`* `~~`copy libgdb to its location (fpcsrc/libgdb/win32) (see e.g. `[`http:/www.stack.nl/~marcov/mingw`](http:/www.stack.nl/~marcov/mingw)` ). For this test release I used mingw. Pass OPT='-dUSE_MINGW_GDB'" on the make inno commandline to to select the mingw debugger for the IDE. `**`obsolete: starting with 3.2.0, IDE uses MI interface on Windows`**~~` `\
139-`* get "doc-pdf.zip" from FTP in the relevant version. Put it in fpcbuild/`\
140-`* to build the installer I ran "make inno"`\
141-`* inno has options to speed up compression (multithreading), but these are not used yet.`\
142-`* .. _WAIT_ ... :-) `
158+``` pascal
159+* checkout fpcbuild
160+* export it to avoid lardering source zips with GIT dirs. (git can only export archives, but extracting on the fly with cygwin tar works: mkdir ../fpcexp and then git archive main |tar xC ../fpcexp )
161+* make sure the last FPC release is first in your path (bootstrap)
162+* <strike>copy libgdb to its location (fpcsrc/libgdb/win32) (see e.g. http:/www.stack.nl/~marcov/mingw ). For this test release I used mingw. Pass OPT='-dUSE_MINGW_GDB'" on the make inno commandline to to select the mingw debugger for the IDE. obsolete: starting with 3.2.0, IDE uses MI interface on Windows </strike>
163+* get "doc-pdf.zip" from FTP in the relevant version. Put it in fpcbuild/
164+* to build the installer I ran "make inno"
165+* inno has options to speed up compression (multithreading), but these are not used yet.
166+* .. _WAIT_ ... :-)
167+```
143168
144169Tips:
145170
146171- if due to atypical Windows configuration the iscc.exe installation script compiler can't be found (e.g. because your program files dir is not detected properly), pass it with ISCCPROG="g:\Program Files\Inno Setup 5\ISCC.exe"
147172- the Inno script is in fpcbuild/install/fpc.ist and is postprocessed by fpcsubst to become fpc.iss passed to Inno. fpcsubst fixes the builddir, the exact versions and optionally translates and passes NODOCS to build a release without docs.
148173
149174Known Issues:
150175
151176- No help/docs for ide. (chms must be added, and maybe even preinstalled)
152177- If a FPC install has been done before, the installer suggests the old install dir. (often the previous release).
153178
154179#### Windows to x86_64 cross compiler
155180
156181- Follow the same instructions as for Windows Inno setup, but instead of "make inno OPT=...", do a:
157182
158-`make innox64`
183+```text
184+make innox64
185+```
159186
160187#### Windows combined 32-bit and x86_64 cross compiler in a single package
161188
162189- Follow the same instructions as for Windows Inno setup, but instead of "make inno OPT=...", do a:
163190
164-`make innox86x64`
191+```text
192+make innox86x64
193+```
165194
166195#### Windows to Android cross compiler
167196
168197- Install the latest FPC release for Windows.
169198- Install the Android NDK.
170199 - FPC 3.2 still supports the **android-mips** target, but **mips** support is no longer available since Android NDK r17. In order to build the setup package you need to download NDK r16b from <https://developer.android.com/ndk/downloads/older_releases> and unpack it to some folder.
171200- Follow the same instructions as for Windows Inno setup, but instead of "make inno OPT=...", do:
172201
173-`make innoandroid NDK=<Path to the NDK, like C:\Users\joost\AppData\Local\Android\Sdk\ndk\r16b>`
202+```text
203+make innoandroid NDK=<Path to the NDK, like C:\Users\joost\AppData\Local\Android\Sdk\ndk\r16b>
204+```
174205
175206- When finished you will get a setup file such as `fpc-3.2.0.i386-win32.cross.android.exe` in the top level folder of the fpcbuild's source tree.
176207
177208#### Windows to i8086-msdos cross compiler
178209
179210- Install the latest stable version of the Open Watcom C++ compiler for Windows. As of now, this is **open-watcom-c-win32-1.9.exe**.
180211- Follow the same instructions as for Windows Inno setup, but instead of "make inno OPT=...", do a:
181212
182-`make innomsdos`
213+```text
214+make innomsdos
215+```
183216
184217- Compilation takes a very long time (3-7 hours, depending on CPU speed), so be patient. The reason for that is, we build fpc 20 times (5 memory models for 4 subarchs - 8086, 80186, 80286 and 80386), using smartlinking (for which, an external assembler is launched for each function in the rtl and packages, and launching a process is slow on windows).
185218
186219### Darwin (Mac OS X) - Fink
187220
188221#### Files
189222
1902231. fpc-config.info
1912242. fpc.info
1922253. fpc-cross-*
1932264. fpc-doc.info
1942275. fpc-sources.info (needed by lazarus)
195228
196229#### 32 bit vs 64 bit
197230
198231Contrary to fpc from disk images, fpc is built as 64 bit resulting in 64bit ppcx64 as default. The main reason is that it fits better to the presence of all the 64bit C libraries in fink. Nevertheless, 32bit is still available as cross-compiler as fpc-cross-i386-darwin.
199232
200233#### Bootstrap Compiler
201234
202235Building the fink packages is based on a bootstrap compiler. Whereas the official FPC releases still support 10.4 and later, starting with fpc 3.0.0 the package descriptions support only 10.7 and up. Therefore, only the 64-bit compiler and no universal compiler are required as bootstrap compiler. The 64-bit bootstrap compiler is build using strip and tar commands similar to below. The description below refers to fpc up to 2.6 and any system above 10.4.
203236
204237Separate bootstrap compilers for each cpu would be possible, but a universal bootstrap compiler has been choosen, since it makes the installation script simpler. The increased filesize (about twice the size of a single separate bootstrap compiler) of the bootstrap compiler is considered negligible compared to the size of the complete source tarball. Reverting this decision should be doable by well chosen names for the bootstrap compiler tar balls, such as fpc-%v.%m-darwin.bootstrap.tar.bz2, with %m being the cpu. The universal bootstrap compiler is created from the separate compilers using "lipo". The file size is reduced by applying "strip" on the binaries. Although it is possible to use the previous stable release of fpc as a bootstrap compiler, it is better to use the same version, because "make cycle" becomes faster, since only two instead of three cycles are performed.
205238
206239This is a typical sequence of commands to produce the tar ball of a universal bootstrap compiler on an IntelMac:
207240
208-` make all PP=PATH_TO_A_LAST_VERSION_COMPILER`\
209-` cp compiler/ppc386 $HOME/Desktop`\
210-` make distclean`\
211-` make all CPU_TARGET=x86_64 PP=$HOME/Desktop/ppc386`\
212-` cp compiler/ppcx64 $HOME/Desktop`\
213-` make distclean`\
214-` make all CPU_TARGET=powerpc PP=$HOME/Desktop/ppc386`\
215-` cp compiler/ppcppc $HOME/Desktop`\
216-` cd $HOME/Desktop`\
217-` strip ppc386`\
218-` strip ppcx64`\
219-` strip ppcppc`\
220-` lipo -create ppc386 ppcx64 ppcppc -output ppcuniversal`\
221-` tar -cjf fpc-VERSION.universal-darwin.bootstrap.tar.bz2 ppcuniversal`\
222-` md5sum *.universal-darwin.bootstrap.tar.bz2`
241+```text
242+ make all PP=PATH_TO_A_LAST_VERSION_COMPILER
243+ cp compiler/ppc386 $HOME/Desktop
244+ make distclean
245+ make all CPU_TARGET=x86_64 PP=$HOME/Desktop/ppc386
246+ cp compiler/ppcx64 $HOME/Desktop
247+ make distclean
248+ make all CPU_TARGET=powerpc PP=$HOME/Desktop/ppc386
249+ cp compiler/ppcppc $HOME/Desktop
250+ cd $HOME/Desktop
251+ strip ppc386
252+ strip ppcx64
253+ strip ppcppc
254+ lipo -create ppc386 ppcx64 ppcppc -output ppcuniversal
255+ tar -cjf fpc-VERSION.universal-darwin.bootstrap.tar.bz2 ppcuniversal
256+ md5sum *.universal-darwin.bootstrap.tar.bz2
257+```
223258
224259#### Usually Required Adjustments for New Releases
225260
226261These fields in the file fpc.info usually need changes (examples from version 2.1.2, a beta version of 2.2):
227262
228-`Version: 2.1.2`\
229-`Source: `[`ftp://ftp.freepascal.org/pub/fpc/beta/%v/source/fpcbuild-%v.source.tar.gz`](ftp://ftp.freepascal.org/pub/fpc/beta/%v/source/fpcbuild-%v.source.tar.gz)\
230-`Source-MD5: a2ee4db22301cdcbda07185a7b6679b2`\
231-`Source2: `[`ftp://ftp.freepascal.org/pub/fpc/beta/%v/source/fpc-%v.universal-darwin.bootstrap.tar.bz2`](ftp://ftp.freepascal.org/pub/fpc/beta/%v/source/fpc-%v.universal-darwin.bootstrap.tar.bz2)\
232-`Source2-MD5: ca5e29e3683ff6d5caa491c0adf4635e`
263+```text
264+Version: 2.1.2
265+Source: ftp://ftp.freepascal.org/pub/fpc/beta/%v/source/fpcbuild-%v.source.tar.gz
266+Source-MD5: a2ee4db22301cdcbda07185a7b6679b2
267+Source2: ftp://ftp.freepascal.org/pub/fpc/beta/%v/source/fpc-%v.universal-darwin.bootstrap.tar.bz2
268+Source2-MD5: ca5e29e3683ff6d5caa491c0adf4635e
269+```
233270
234271The MD5 checksums can be obtained from the error message when fetching the sources with fink or with the terminal command md5sum.
235272
236273The fpc-doc.info file also needs according changes in the Source and Source-MD5 fields.
237274
238275#### History
239276
2402772.6.* more crosscompilers
241278
2422792.4.0 several crosscompilers (processors and systems) added.
243280
2442812.2.4 minor changes.
245282
2462832.2.2 extra package for the config file. cross compilers for win32 and linux. execution of tests enabled.
247284
2482852.2.1 interims version for lazarus 0.9.24
249286
2502872.2.0 first version with native Intel code
251288
2522892.0.4 first version in stable tree (powerpc and Rosetta emulation only)
253290
2542911.9.8 initial version in unstable tree
255292
256293### Haiku
257294
258295[[Haiku specific Release Engineering]]
259296
260297## Documentation building and LaTeX limits
261298
262299A lot of TeTeX distributions are configured to never use more than a very small amount of memory. The values chosen are more of the 486 era (several MBs, while now 256MB is considered "entry level").
263300
264301The Free Pascal documentation is fairly large, and uses a lot of labels for convenient hyperlinked PDFs and thus hits this limit.
265302
266303This can be remedied by modiying the save_size line in texmf.conf to
267304
268-` save_size=10000`
305+```text
306+ save_size=10000
307+```
269308
270309Usually, you can also do this by environment variable.
271310
272-`export save_size=10000`\
273-`pdflatex rtl.tex`
311+```text
312+export save_size=10000
313+pdflatex rtl.tex
314+```
274315
275316## Packaging system
276317
277318See [[Packaging System and dividing FPC - Lazarus into packages]]
278319
279320## Building the official fpc-packages
280321
281322### Major versions
282323
283324Major versions warrant some extra attention during the release process. Primarily the problem is that trunk is never really released from, and any branch to branch from it has to potential to have (many) hidden issues. Also during betas and release candidates, more issues are found for a major branch, since some features receive wide testing for the first time.
284325
285326However since 2.2.2, most release engineering work for the fixes branch is performed in trunk, and then merged back to fixes, and in practice this improved this a lot. This however mainly improved the quality. The release engineering from the branchpoint from trunk till release is typically still 6-8 months.
286327
287328Some points to consider:
288329
289330- Traditionally major versions have had a beta release before the first release candidate.
290331- before branching a major branch, update all makefiles in trunk with a recent fpcmake. This avoids that when a rarely used package is updated, one gets an immense diff on the makefile.
291332- This is the time to remove deprecated functions. See [[major version to do]]
292333
293334### Create directories on ftp
294335
2953361. Create the following structure on ftp: (check which platforms are released for this version)
296337 - {version}
297338 - docs
298339 - source
299340 - separate
300341 - tar
301342 - zip
302343 - short
303344 - arm-linux
304345 - arm-wince
305346 - i386-freebsd
306347 - i386-go32v2
307348 - separate
308349 - i386-linux
309350 - deb
310351 - rpm
311352 - i386-netware
312353 - i386-netwlibc
313354 - i386-os2
314355 - separate
315356 - i386-win32
316357 - powerpc-linux
317358 - powerpc-macos
318359 - powerpc-morphos
319360 - powerpc64-linux
320361 - sparc-linux
321362 - x86_64-linux
322363 - deb
323364 - rpm
324365 - x86_64-win64
3253662. Copy the extra files (asld*.zip, gdb*.zip, make*.zip) in i386-os2\separate and i386-gov32v2\separate from previous release (unless updated with new versions)
326367
327368### Update the version-number
328369
329370Make sure that fpcmake points to the relevant version for the branch you are running this for. (usually from fixes)
330371
331372#### Version number of the Makefiles
332373
333374For the final release, update the REQUIREDVERSION(2) in the toplevel Makefile.fpc to the new version and the last release.
334375
335376Update the version numbers in all Makefile.fpc files containing version=... (plus regenerate all corresponding Makefiles). Do this for the fpc and fpcbuild-repositories. This can be done using the updmkver script from within the root of both repositories. The FPC_DIR environment variable has to be set to the fpcsrc-path:
336377
337-` export FPCDIR=....../fpcbuild/fpcsrc`\
338-` cd fpcbuild`\
339-` install/updmkver {version} `\
340-` cd ../fpc`\
341-` ../fpcbuild/install/updmkver {version}`
378+```text
379+ export FPCDIR=....../fpcbuild/fpcsrc
380+ cd fpcbuild
381+ install/updmkver {version}
382+ cd ../fpc
383+ ../fpcbuild/install/updmkver {version}
384+```
342385
343386Replace {version} with the version number, for example 2.2.4 or 2.2.4rc1
344387
345388#### Version number of the fpmake files
346389
347390Update the version numbers in all fpmake.pp files in the packages directory (toplevel and build dir). These files are normal code-files so replacing the version numbers can in principle only be done manually, but there is a script updfpmkver which finds all occurences of "Version:='xxx'" where xxx can be anything. Note that this will also update all dependencies to the specified version number.
348391
349-` cd fpc`\
350-` ../../fpcbuild/install/updfpmkver {version}`
392+```text
393+ cd fpc
394+ ../../fpcbuild/install/updfpmkver {version}
395+```
351396
352397Please check the results manually. The following command searches for all occurences of "version" in all fpmake.pp files
353398
354-` find -name fpmake.pp -exec grep -i version {} ';'`
399+```text
400+ find -name fpmake.pp -exec grep -i version {} ';'
401+```
355402
356403#### Version number in the source & documentation files
357404
358405The version number has to be updated in the following places.
359406
360407FPCBuild:
361408
362409- /install/doc/readme.txt
363410- /install/doc/whatsnew.txt
364411- /install/debian/changelog
365412- /install/debian/controls contains versions too?
366413- /install/doc/faq.htm (sections about latest version, on final release only)
367414- /install/doc/faq.txt (sections about latest version, on final release only)
368415
369416FPCDocs: (there is only a trunk-version)
370417
371418- /docs/fpc.sty (macro fpcversion)
372419
373420FPC:
374421
375422- /installer/install.dat (header)
376423- /installer/install.pas (installer version and copyright year)
377424- /compiler/version.pas
378425- packages/chm/src/chmbase.pas ~~and chmcmd.lpr~~ (now compiler macro)
379426- check the year of copyright in compiler/msg/errore.msg
380427- check the year of copyright in packages/ide/src/fpviews.pas
381428
382429### Tag version
383430
384431If the changes of the version-numbers are committed, use the createbranch script in fpcbuild to create a 'release_{version}' tag in svn. Use underscores in the version, instead of dots!
385432
386-` ./createbranch.sh tags/release_3_0_4`\
387-` ./createbranch.sh tags/release_3_0_4_rc1`
433+```text
434+ ./createbranch.sh tags/release_3_0_4
435+ ./createbranch.sh tags/release_3_0_4_rc1
436+```
388437
389438### Create the source zips
390439
391440A.s. Before doing this, update whatsnew,readme and faq in the fixes branch, so that changes can be merged from fixes to rc1/final branch.
392441
393442Create all the source zips.
394443
395444Once the version is tagged the makesource script in fpcbuild/install can create the fpc-{version}.source.tar.gz and fpc-{version}.source.zip. To build the fpcbuild-{version}.tar.gz and fpcbuild-{version}.zip use the makefpcbuild script. Before you run the scripts go to a temporary directory and become root or use fakeroot. If you want to create the sourcefile from a specific branch, you can provide it using the -svnpath parameter For example:
396445
397-` fakeroot`\
398-` fpcbuild/install/makesource 3.0.4`\
399-` fpcbuild/install/makefpcbuild -svnpath tags/release_3_0_4_rc1 3.0.4rc1`
446+```text
447+ fakeroot
448+ fpcbuild/install/makesource 3.0.4
449+ fpcbuild/install/makefpcbuild -svnpath tags/release_3_0_4_rc1 3.0.4rc1
450+```
400451
401452The zips for the "source/short" directory are made on a DOS / OS/2 platform (or MS Windows with an additional parameter "OS_SOURCE=go32v2" for all three commands) by executing:
402453
403-` make sourcezip "OS_TARGET=go32v2" NOGDB=1`\
404-` make sourcezip "OS_TARGET=os2"  NOGDB=1`\
405-` make shortsrc`
454+```text
455+ make sourcezip "OS_TARGET=go32v2" NOGDB=1
456+ make sourcezip "OS_TARGET=os2" NOGDB=1
457+ make shortsrc
458+```
406459
407460The reason for multiple invocations of make sourcezip with different parameters is the fact that make sourcezip only build ZIP files for sources supported on the particular target platform by default. Since the short version of the source ZIP files is supposed to be used on OS/2 and GO32v2 targets only at the moment, these two platforms need to be listed explicitly as a general rule (obviously, slightly simpler version is possible when running it under OS/2 or native DOS, but the example above should work everywhere).
408461
409462Note, in 2.6.0 "make shortsrc" doesn't seem to work anymore. For 2.6.0 and 2.6.2 the following commands were used instead (and manually pushed "n" a few times)
410463
411-`  make renametoshort NOGDB=1 "OS_SOURCE=os2" "OS_TARGET=os2" PKGPRE=os2- PKGUNITSPRE=units-  ZIPSUFFIX=.source ZIPSUFFIXSHORT=src`\
412-`  make renametoshort NOGDB=1 "OS_SOURCE=go32v2" "OS_TARGET=go32v2" PKGPRE=go32v2- PKGUNITSPRE=units-  ZIPSUFFIX=.source ZIPSUFFIXSHORT=src`
464+```text
465+ make renametoshort NOGDB=1 "OS_SOURCE=os2" "OS_TARGET=os2" PKGPRE=os2- PKGUNITSPRE=units- ZIPSUFFIX=.source ZIPSUFFIXSHORT=src
466+ make renametoshort NOGDB=1 "OS_SOURCE=go32v2" "OS_TARGET=go32v2" PKGPRE=go32v2- PKGUNITSPRE=units- ZIPSUFFIX=.source ZIPSUFFIXSHORT=src
467+```
413468
414469### Create bootstrap compiler archives
415470
416471- darwin (fink)
417472
418473From ppc386 and ppcppc create ppcuniversal using lipo, create .tar.bz2 archive (full name: fpc-version.universal-darwin.bootstrap.tar.bz2) and place it in the source dir.
419474
420475### Documentation
421476
422477Latex takes date/time formats from the locale. Make sure your linux distro/environment variables are set to e.g. the US locale to avoid non English month names in the docs. In my case, it was simply the matter of changing the locale in the Ubuntu GUI settings app, and latex adapted.
423478
424479Most formats: run
425480
426-`  make alldist`
481+```text
482+ make alldist
483+```
427484
428485in fpcdocs/
429486
430487CHM: run fixdocs.sh but edit it first to correct the location of the fpcsrc repo.
431488
432489## Release schedule
433490
434491- [[FPC Release Schedule]].
435492
436493## Testing a release
437494
438495In general:
439496
4404971. check all zip/deb/rpm etc files
4414982. try the installer (if available)
4424993. make sure readme.txt & whatsnew.txt are for the current version
4435004. run all executables
4445015. make cycle with newly installed binaries and sources
4455026. run testsuite
4465037. IDE
447504 1. open the installed hello.pp in IDE
448505 2. make a minor change in the demo in IDE & save it
449506 3. view documentation in IDE, traverse 2-3 pages (at least one with screenshots)
450507 4. compile the demo file in IDE
451508 5. run the demo within the IDE (debugger)
4525098. Documentation (open all files)
453510 1. Check PDF documentation (if available)
454511 2. Check HTML documentation (if available)
455512 3. Check TXT documentation (if available)
456513
457514Target-specific:
458515
4595161. GO32v2
460517 1. dos???.zip installation
461518 2. dos???full.zip installation (over the previously installed dos???.zip to simulate updates)
4625192. OS/2
463520 1. os2???.zip installation
464521 2. os2???full.zip installation (over the previously installed os2???.zip to simulate updates)
4655223. Win32
466523 1. Run installer
4675244. x86_64-linux and i386-linux
468525 1. Test a .rpm install
469526 2. Test a .deb install
4705275. darwin (fink)
471528 1. fink install fpc-config fpc
472529 2. fink install fpc-doc
473530 3. optional on Intel-Darwin: fink install fpc-cross-***
474531
475532## Testers template
476533
477534See [[Testers Template]].
478535
479536### Previous releases
480537
481538| | | | |
482539|----|----|----|----|
483540| [[Testers 3.2.2]] | [[Testers 3.2.0]] | [[Testers 3.0.4]] | |
484541| [[Testers 2.6.4]] | [[Testers 2.6.2]] | [[Testers 2.6.0]] | |
485542| [[Testers 2.4.4]] | [[Testers 2.4.2]] | [[Testers 2.4.0]] | |
486543| [[Testers 2.2.4]] | [[Testers 2.0.4]] | | |
487544
488545---
489546*From the Free Pascal wiki, page "Release engineering", as it stood on 2023-07-25 after a change by Michael, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
490547Category: FPC development
491548Category: FPC release
492549Category: Release engineering

Back to history