mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-27 20:53:57 +02:00
172 lines
4.5 KiB
Bash
Executable File
172 lines
4.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
#set -x
|
|
set -e
|
|
|
|
#------------------------------------------------------------------------------
|
|
# parse parameters
|
|
#------------------------------------------------------------------------------
|
|
Usage="Usage: $0 [nodocs] [notemp] [deb] <FPCSrcDir> [release]"
|
|
|
|
WithDOCS=yes
|
|
if [ "x$1" = "xnodocs" ]; then
|
|
WithDOCS=no
|
|
shift
|
|
fi
|
|
|
|
WithTempDir=yes
|
|
if [ "x$1" = "xnotemp" ]; then
|
|
WithTempDir=no
|
|
shift
|
|
fi
|
|
|
|
PkgType=rpm
|
|
if [ "x$1" = "xdeb" ]; then
|
|
PkgType=deb
|
|
shift
|
|
fi
|
|
|
|
FPCSrcDir=$1
|
|
if [ "x$FPCSrcDir" = "x" ]; then
|
|
echo $Usage
|
|
exit -1
|
|
fi
|
|
FPCSrcDir=$(echo $FPCSrcDir)
|
|
shift
|
|
|
|
FPCRelease=$1
|
|
if [ "x$FPCRelease" = "x" ]; then
|
|
FPCRelease=$(date +%y%m%d)
|
|
else
|
|
shift
|
|
fi
|
|
|
|
if [ ! -d $FPCSrcDir/compiler ]; then
|
|
echo "The directory $FPCSrcDir does not look like a fpc source directory (fpc/)"
|
|
exit -1
|
|
fi
|
|
|
|
#------------------------------------------------------------------------------
|
|
# patching
|
|
#------------------------------------------------------------------------------
|
|
|
|
# create a temporary copy of the fpc sources to patch it
|
|
TmpDir=~/tmp/fpc_patchdir
|
|
if [ "$WithTempDir" = "yes" ]; then
|
|
if [ -d $TmpDir ]; then
|
|
rm -rf $TmpDir
|
|
fi
|
|
mkdir -p $TmpDir
|
|
|
|
echo "extracting FPC from local svn ..."
|
|
svn export $FPCSrcDir $TmpDir/fpc
|
|
else
|
|
TmpDir=$FPCSrcDir
|
|
fi
|
|
|
|
# retrieve the version information
|
|
echo -n "getting FPC version from local svn ..."
|
|
VersionFile="$TmpDir/fpc/compiler/version.pas"
|
|
CompilerVersion=`cat $VersionFile | grep ' *version_nr *=.*;' | sed -e 's/[^0-9]//g'`
|
|
CompilerRelease=`cat $VersionFile | grep ' *release_nr *=.*;' | sed -e 's/[^0-9]//g'`
|
|
CompilerPatch=`cat $VersionFile | grep ' *patch_nr *=.*;' | sed -e 's/[^0-9]//g'`
|
|
CompilerVersionStr="$CompilerVersion.$CompilerRelease.$CompilerPatch"
|
|
FPCVersion="$CompilerVersion.$CompilerRelease"
|
|
if [ "$CompilerPatch" != "0" ]; then
|
|
FPCVersion="$FPCVersion.$CompilerPatch"
|
|
fi
|
|
echo " $CompilerVersionStr-$FPCRelease"
|
|
|
|
Arch=$(rpm --eval "%{_arch}")
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
# patch sources
|
|
|
|
SmartStripScript=smart_strip.sh
|
|
ReplaceScript=replace_in_files.pl
|
|
|
|
|
|
# set version numbers in all Makefiles
|
|
echo "set version numbers in all Makefiles ..."
|
|
perl replace_in_files.pl -sR -f '=\d.\d.\d' -r =$CompilerVersionStr -m 'Makefile(.fpc)?' $TmpDir/fpc/*
|
|
|
|
# update smart_strip.sh
|
|
#ATM: not needed: cp $SmartStripScript $TmpDir/fpc/install/
|
|
|
|
if [ "$PkgType" = "deb" ]; then
|
|
# build fpc debs
|
|
|
|
# change debian files
|
|
DebianRulezDir=$TmpDir/fpc/install/debian/
|
|
Date=`date --rfc-822`
|
|
|
|
# prepend changelog information, needed for version
|
|
cd $DebianRulezDir
|
|
File=changelog
|
|
OldFile=changelog.old.fpc
|
|
cp $File $OldFile
|
|
echo "fpc ($FPCVersion-$FPCRelease) unstable; urgency=low" > $File
|
|
echo ' * Unofficial snapshot build for lazarus' >> $File
|
|
echo " -- Mattias Gaertner <mattias@freepascal.org> $Date" >> $File
|
|
echo "" >> $File
|
|
cat $OldFile >> $File
|
|
rm $OldFile
|
|
cd -
|
|
|
|
# fix debian/rules
|
|
# - copy the complete examples directory
|
|
# - do not install non existing files Changes.fcl Changes.utils
|
|
cd $DebianRulezDir
|
|
cat rules | \
|
|
sed -e 's/^\(.*mv .*\)uncgi\( .*examples.*\)$/\1???*\2/' \
|
|
-e 's/^.*logs\/Changes\.fcl.*$//' \
|
|
-e 's/^.*logs\/Changes\.utils.*$//' \
|
|
> rules.laz
|
|
cp rules.laz rules # use cp to preserve file attribs
|
|
rm rules.laz
|
|
cd -
|
|
|
|
|
|
# compile
|
|
cd $TmpDir/fpc
|
|
make debcopy
|
|
cd -
|
|
cd /usr/src/fpc-$FPCVersion
|
|
./debian/rules binary-arch
|
|
cd -
|
|
|
|
else
|
|
# build fpc rpm
|
|
|
|
echo "creating spec file ..."
|
|
SpecFileTemplate=rpm/fpc.spec.template
|
|
SpecFile=rpm/fpc.spec
|
|
|
|
# change spec file
|
|
cat $SpecFileTemplate | \
|
|
sed -e 's/^Version: .*/Version: '"$FPCVersion/" \
|
|
-e 's/^Release: .*/Release: '"$FPCRelease/" \
|
|
-e 's/^%define fpcversion .*/%define fpcversion '"$FPCVersion/" \
|
|
> $SpecFile
|
|
# -e 's/\(%define builddocdir.*\)/%define __strip smart_strip.sh\n\n\1/' \
|
|
# -e 's/^\%{fpcdir}\/samplecfg .*/%{fpcdir}\/samplecfg %{_libdir}\/fpc\/\\\$version/' \
|
|
|
|
SrcTGZ=$(rpm/get_rpm_source_dir.sh)/SOURCES/fpc-$CompilerVersionStr-$FPCRelease.source.tar.gz
|
|
echo "creating $SrcTGZ ..."
|
|
tar czf $SrcTGZ -C $TmpDir fpc
|
|
|
|
#----------------------------------------------------------------------------
|
|
# compile
|
|
#----------------------------------------------------------------------------
|
|
if [ "$WithDOCS" = "no" ]; then
|
|
export NODOCS=1
|
|
fi
|
|
rpmbuild --nodeps -ba $SpecFile
|
|
|
|
echo "The new rpm can be found in $(./rpm/get_rpm_source_dir.sh)/RPMS/$Arch/fpc-$FPCVersion-$FPCRelease.$Arch.rpm"
|
|
fi
|
|
|
|
# end.
|
|
|