Release engineering
Migration of existing SVN checkout
The existing checkout of the 'fixes_2_0' 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.
~/fpc>>> svn sw --help switch (sw): Update the working copy to a different URL. usage: 1. switch URL [PATH] 2. switch --relocate FROM TO [PATH...]
1. Update the working copy to mirror a new URL within the repository. This behaviour is similar to 'svn update', and is the way to move a working copy to a branch or tag within the same repository.
2. Rewrite working copy URL metadata to reflect a syntactic change only. This is used when repository's root URL changes (such as a scheme or hostname change) but your working copy still reflects the same directory within the same repository.
Create libgdb.a and or binutils
- 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)
- Some cygwin hints:
- ensure you've installed gcc, bison and flex
- use
./configure --disable-ide --disable-libgui --disable-install-libgui
to configure
General notes about release building
To 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).
OS/CPU specific release engineering
FreeBSD specific Release Engineering
Linux
Get sources, usually done with a command like:
svn export http://svn.freepascal.org/svn/fpcbuild/tags/release_2_0_2 fpcbuild
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.
Get the most recent docs package from the ftp site, it's called docs-pdf.tar.gz and copy it into the fpcbuild/ directory.
Change into fpcbuild/ and execute
install/makepack
Building an rpm
To build an RPM, change into fpcbuild and execute
make rpm
the documentation will be built as well and that requires a working Tex installation. To prevent the documentation from being built, execute
make rpm NODOCS=1
Building a deb
To build an Debian Package,
- Ensure that you have at least installed the following debian packages: dpkg-dev, fakeroot
- Modify the fpcbuild/install/debian/changelog file adding the following
fpc (2.0.4-x) unstable; urgency=low * release candidate build -- First Last <mail@address.ext> Thu, 07 Jul 2006 23:44:00 +0100
where x is package building number. If x = 0, then packages will be named substituting x by the building date, otherwise it will be conserved. Please note that x could be a number but also a word like rc1, beta...
- change into fpcbuild and execute
make deb
the documentation will be built as well and that requires a working Tex installation. To prevent the documentation from being built, execute
make deb NODOCS=1
Darwin (Mac OS X) - Fink
Files
- fpc.info
- fpc-doc.info
- No patch files are required.
Bootstrap Compiler
Building the package is based on a bootstrap compiler. Version 2.0.4 is powerpc and Rosetta emulation only, so only a powerpc bootstrap compiler is needed. With version 2.2 both native i386 and powerpc compilers will be supported (on going work). Separate bootstrap compilers for i386 and powerpc 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 regarded as neglectable compared to the size of the complete source tarball. A reversion of this decision should be doable by well chosen names for the bootstrap compiler tar balls, for example fpc-%v.%m-darwin.bootstrap.tar.bz2, with %m being powerpc and i386. The universal bootstrap compiler is simply created using lipo from the two separate compilers. 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 will do only two cycles instead of three.
Usually Required Adjustments for New Releases
These fields usually need changes in the file fpc.info (examples from version 2.1.2, a beta version of 2.2):
Version: 2.1.2 Source: ftp://ftp.freepascal.org/pub/fpc/beta/%v/source/fpcbuild-%v.source.tar.gz Source-MD5: a2ee4db22301cdcbda07185a7b6679b2 Source2: ftp://ftp.freepascal.org/pub/fpc/beta/%v/source/fpc-%v.universal-darwin.bootstrap.tar.bz2 Source2-MD5: ca5e29e3683ff6d5caa491c0adf4635e
The MD5 checksums can be obtained from the error message when fetching the sources with fink or with the terminal command md5sum.
The fpc-doc.info file also needs according changes in the Source and Source-MD5 fields.
History
2.0.4 first version in stable tree (powerpc and Rosetta emulation only)
1.9.8 initial version in unstable tree
Future Plans
- Version 2.2.x:
- native support of powerpc and i386
- universal bootstrap compiler
- replacement of separate make commands for compiler, rtl, ... by make all
- lazarus
Source zip generation
Change to a temporary directory and execute
fpcbuild/install/makesource <release version>
e.g.
fpcbuild/install/makesource 2.0.2
Documentation building and LaTeX limits
A 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").
The Free Pascal documentation is fairly large, and uses a lot of labels for convenient hyperlinked PDFs and thus hits this limit.
This can be remedied by modiying the save_size line in texmf.conf to
save_size=10000
Usually, you can also do this by environment variable.
export save_size=10000 pdflatex rtl.tex
Packaging system
See Packaging System and dividing FPC - Lazarus into packages
Building the official fpc-packages
Create directories on ftp
- Create the following structure on ftp: (check which platforms are released for this version)
- {version}
- docs
- source
- arm-linux
- i386-freebsd
- i386-go32v2
- separate
- i386-linux
- deb
- rpm
- i386-netware
- i386-netwlibc
- i386-os2
- separate
- i386-win32
- separate
- powerpc-linux
- powerpc-macos
- powerpc-morphos
- sparc-linux
- x86_64-linux
- deb
- rpm
- x86_64-win64
- separate
- 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)
Update the version-number
Version number of the Makefiles
All Makefile.fpc files containing version=... (plus regenerate all corresponding Makefiles). do this in the fpc and the fpcbuild-repository. This can be done using the updmkver script from the root of both repositories:
cd fpcbuild install/updmkver {version} cd ../fpc ../fpcbuild/install/updmkver {version}
Version number in the source & documentation files
The version number has to be updated in the following places.
FPCBuild:
- /install/doc/readme.txt
- /install/fpc.spec
- /install/debian/changelog
- /install/install.sh Done by makepack, but change it also in the svn
- /docs/fpc.sty (macro fpcversion)
FPC:
- /installer/install.dat (header)
- /installer/install.pas (installer version)
- /compiler/version.pas
Tag version
Use the createbranche in fpcbuild to create a 'release_{version}' tag in svn. Use underscores in the version, instead of dots!
./createbranche.sh tags/release_2_1_2
Create fpcbuild.zip
- Create an export of the SVN fpcbuild-repository. Place the export in a directory called 'fpcbuild-{version}' like 'fpcbuild-2.1.2' (mind the dots in the name, no underscores.) For example:
svn export fpcbuild-release_2_1_2 fpcbuild-2.1.2
- Create a zip called 'fpcbuild-{version}.zip' which contains the just created export. For example:
zip -r fpcbuild-2.1.2.zip fpcbuild-2.1.2
- Create a .tar.gz called 'fpcbuild-{version}.tar.gz' with the just created export. For example:
tar -czf fpcbuild-2.1.2.tar.gz fpcbuild-2.1.2
- Upload the zip and the .tar.gz to the 'source' directory
Create bootstrap compiler archives
- darwin (fink)
From 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.
Testing a release
In general:
- check all zip/deb/rpm etc files
- try the installer (if available)
- make sure readme.txt & whatsnew.txt are for the current version
- run all executables
- make cycle with newly installed binaries and sources
- run testsuite
- IDE
- open the installed hello.pp in IDE
- make a minor change in the demo in IDE & save it
- view documentation in IDE, traverse 2-3 pages (at least one with screenshots)
- compile the demo file in IDE
- run the demo within the IDE (debugger)
- Documentation (open all files)
- Check PDF documentation (if available)
- Check HTML documentation (if available)
- Check TXT documentation (if available)
Target-specific:
- GO32v2
- dos???.zip installation
- dos???full.zip installation (over the previously installed dos???.zip to simulate updates)
- OS/2
- os2???.zip installation
- os2???full.zip installation (over the previously installed os2???.zip to simulate updates)
- Win32
- Run installer
- x86_64-linux and i386-linux
- Test a .rpm install
- Test a .deb install
- darwin (fink)
- fink install fpc
- fink install fpc-doc