From b9f7eda6deb3bd5f424e7e5292aa70afd0de6d0f Mon Sep 17 00:00:00 2001 From: mattias Date: Sat, 17 Sep 2005 11:58:38 +0000 Subject: [PATCH] create_lazarus_rpm.sh can now build the rpm without being root git-svn-id: trunk@7724 - --- tools/install/README | 51 ++++++++-------- tools/install/build_fpc_rpm.sh | 25 ++++---- tools/install/build_fpcsrc_rpm.sh | 28 ++++----- .../install/create_fpc_tgz_from_local_dir.sh | 10 +++- tools/install/create_lazarus_export_tgz.sh | 6 +- tools/install/create_lazarus_rpm.sh | 35 ++++++----- tools/install/fpcsrc.spec | 2 +- tools/install/get_lazarus_version.sh | 2 +- tools/install/lazarus.spec | 60 ------------------- tools/install/rpm/lazarus.spec.template | 5 +- 10 files changed, 88 insertions(+), 136 deletions(-) delete mode 100644 tools/install/lazarus.spec diff --git a/tools/install/README b/tools/install/README index abfab3b03a..24c8e8cb57 100644 --- a/tools/install/README +++ b/tools/install/README @@ -47,48 +47,49 @@ Creating the lazarus tgz: RPM: +How to create RPM packages as normal user / non root: + + You don't need to be root to built rpm packages. + You only need a ~/.rpmacros file overriding some values. The script + /tools/install/rpm/create_nonroot_macros.sh will setup one. Do: + + []$ cd /tools/install/rpm + []$ ./create_nonroot_macros.sh + + From now all new rpms will be built in ~/rpm/. + + Creating the fpc and the fpcsrc rpm: - There are two versions of the compiler: the old 2..0.x and the new (but not + There are two versions of the compiler: the old 2.0.x and the new (but not yet released) developer version 2.1.x. To build them, you must install fpc - first. Install the stable fpc release (2.0.x). Note: The 2.0.x can not be - built with a 2.1.x compiler and the recommended startup compiler for the 2.1.x - is the released fpc 2.0.x. + first. Install the stable fpc release (2.0.x). + Note: The 2.0.x can not be built with a 2.1.x compiler and the recommended + startup compiler for the 2.1.x is the released fpc 2.0.x. If you have your own fpc sources you can build the fpc rpm with: - Become root and do: - cd /tools/install - ./build_fpc_rpm.sh nodocs /path/to/your/fpc/sources/fpc 050601 + []$ cd /tools/install + []$ ./build_fpc_rpm.sh nodocs /path/to/your/fpc/sources/fpc - The 050601 stands for: 2005 june 1st - - Then build the fpcsrc rpm. Become root and do: + Then build the fpcsrc rpm: - cd /tools/install - ./build_fpcsrc_rpm.sh /path/to/your/fpc/sources/fpc 050601 + []$ ./build_fpcsrc_rpm.sh /path/to/your/fpc/sources/fpc - - The create_fpc_rpm.sh works nearly automatically. Become root and execute it. - For 2.0.x: ./create_fpc_rpm.sh stable - For 2.1.x: ./create_fpc_rpm.sh devel - - What it does: First it checks if the fpc source tgz is already created and - if not, it automatically downloads it. The script does not use the current - version, but the latest known to work with lazarus. Then it unpacks the - source, compiles it and builds the rpm. Normally you can find the rpms under - /usr/src/redhat/RPMS/i386/ and /usr/src/redhat/SRPMS/. + Normally you can find the rpms under /usr/src/redhat/RPMS/i386/ + and /usr/src/redhat/SRPMS/. + Or if you have a ~/.rpmmacros file the new rpm will be in ~/rpm/RPMS/i386/ + and ~/rpm/SRPMS/. Creating the lazarus rpm: Important: - If you have created a new fpc RPM, then you should install it, *before* you + If you have created a new fpc RPM, then you should install it *before* you build the lazarus RPM. Otherwise the compiled lazarus RPM is not compatible to the fpc RPM. - As root: - Execute create_lazarus_rpm.sh. + []$ ./create_lazarus_rpm.sh. Creating other system specific rpms: diff --git a/tools/install/build_fpc_rpm.sh b/tools/install/build_fpc_rpm.sh index 59099c1ad7..68547a6f90 100755 --- a/tools/install/build_fpc_rpm.sh +++ b/tools/install/build_fpc_rpm.sh @@ -6,7 +6,7 @@ set -e #------------------------------------------------------------------------------ # parse parameters #------------------------------------------------------------------------------ -Usage="Usage: $0 [nodocs] [notemp] [deb] " +Usage="Usage: $0 [nodocs] [notemp] [deb] [release]" WithDOCS=yes if [ "x$1" = "xnodocs" ]; then @@ -27,17 +27,17 @@ if [ "x$1" = "xdeb" ]; then fi FPCSrcDir=$1 -shift if [ "x$FPCSrcDir" = "x" ]; then echo $Usage exit -1 fi +shift LazRelease=$1 -shift if [ "x$LazRelease" = "x" ]; then - echo $Usage - exit -1 + LazRelease=$(date +%y%m%d) +else + shift fi if [ ! -d $FPCSrcDir/compiler ]; then @@ -52,7 +52,10 @@ fi # create a temporary copy of the fpc sources to patch it TmpDir=/tmp/fpc_patchdir if [ "$WithTempDir" = "yes" ]; then - rm -rf $TmpDir + if [ -d $TmpDir ]; then + rm -rf $TmpDir/* + rm -r $TmpDir + fi mkdir -p $TmpDir #ppc386 -Fu../../lcl/units/i386/linux cvsexportlocal.pas @@ -65,6 +68,7 @@ else 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'` @@ -74,6 +78,7 @@ LazVersion="$CompilerVersion.$CompilerRelease" if [ "$CompilerPatch" != "0" ]; then LazVersion="$LazVersion.$CompilerPatch" fi +echo " $CompilerVersionStr-$LazRelease" @@ -85,6 +90,7 @@ 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 @@ -135,9 +141,9 @@ if [ "$PkgType" = "deb" ]; then else # build fpc rpm + echo "creating spec file ..." SpecFileTemplate=rpm/fpc.spec.template SpecFile=rpm/fpc.spec - SrcPatch=fpcsrc-patch # change spec file cat $SpecFileTemplate | \ @@ -148,6 +154,7 @@ else # -e 's/^\%{fpcdir}\/samplecfg .*/%{fpcdir}\/samplecfg %{_libdir}\/fpc\/\\\$version/' \ SrcTGZ=$(rpm/get_rpm_source_dir.sh)/SOURCES/fpc-$CompilerVersionStr-$LazRelease.source.tar.gz + echo "creating $SrcTGZ ..." tar czf $SrcTGZ -C $TmpDir fpc #---------------------------------------------------------------------------- @@ -156,11 +163,9 @@ else if [ "$WithDOCS" = "no" ]; then export NODOCS=1 fi - cd $TmpDir - cd - rpmbuild --nodeps -ba $SpecFile - echo "The new rpm can be found in $(../rpm/get_rpm_source_dir.sh)/RPMS/i386/fpc-$LazVersion-$LazRelease.i386.rpm" + echo "The new rpm can be found in $(./rpm/get_rpm_source_dir.sh)/RPMS/i386/fpc-$LazVersion-$LazRelease.i386.rpm" fi # end. diff --git a/tools/install/build_fpcsrc_rpm.sh b/tools/install/build_fpcsrc_rpm.sh index dd67c3b889..50c91d8049 100755 --- a/tools/install/build_fpcsrc_rpm.sh +++ b/tools/install/build_fpcsrc_rpm.sh @@ -1,13 +1,13 @@ #!/bin/bash -set -x +#set -x set -e #------------------------------------------------------------------------------ # parse parameters #------------------------------------------------------------------------------ -Usage="Usage: $0 [deb] " +Usage="Usage: $0 [deb] [release]" PkgType=rpm if [ "x$1" = "xdeb" ]; then @@ -16,17 +16,17 @@ if [ "x$1" = "xdeb" ]; then fi FPCSourceDir=$1 -shift if [ "x$FPCSourceDir" = "x" ]; then echo $Usage exit -1 fi +shift LazRelease=$1 -shift if [ "x$LazRelease" = "x" ]; then - echo $Usage - exit -1 + LazRelease=$(date +%y%m%d) +else + shift fi #------------------------------------------------------------------------------ @@ -34,14 +34,16 @@ fi #------------------------------------------------------------------------------ # retrieve the version information +echo -n "getting FPC version from local svn ..." VersionFile="$FPCSourceDir/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'` -LazVersion="$CompilerVersion.$CompilerRelease" -LazVersion="$LazVersion.$CompilerPatch" +CompilerVersionStr="$CompilerVersion.$CompilerRelease.$CompilerPatch" +LazVersion=$CompilerVersionStr +echo " $CompilerVersionStr-$LazRelease" -FPCTGZ=fpcsrc-$LazVersion-$LazRelease.tgz +FPCTGZ=$(rpm/get_rpm_source_dir.sh)/SOURCES/fpcsrc-$CompilerVersionStr-$LazRelease.source.tar.gz CurDir=`pwd` # pack the directory @@ -104,13 +106,10 @@ if [ "$PkgType" = "deb" ]; then else # build fpcsrc rpm - echo building fpcsrc rpm ... - - # copy src tgz into rpm building directory - cp $FPCTGZ /usr/src/redhat/SOURCES/ + echo "building fpcsrc rpm ..." # create spec file - SpecFile=fpcsrc-$LazVersion-$LazRelease.spec + SpecFile=rpm/fpcsrc-$LazVersion-$LazRelease.spec cat fpcsrc.spec | \ sed -e "s/LAZVERSION/$LazVersion/g" -e "s/LAZRELEASE/$LazRelease/" \ > $SpecFile @@ -124,6 +123,7 @@ else # build rpm rpmbuild -ba $SpecFile || rpm -ba $SpecFile + echo "The new rpm can be found in $(./rpm/get_rpm_source_dir.sh)/RPMS/i386/fpcsrc-$LazVersion-$LazRelease.i386.rpm" fi # end. diff --git a/tools/install/create_fpc_tgz_from_local_dir.sh b/tools/install/create_fpc_tgz_from_local_dir.sh index ad79bdc38c..effcf127b7 100755 --- a/tools/install/create_fpc_tgz_from_local_dir.sh +++ b/tools/install/create_fpc_tgz_from_local_dir.sh @@ -35,14 +35,18 @@ fi TmpBaseDir=/tmp TmpDir=$TmpBaseDir/fpc +rm -rf $TmpDir if [ -d $FPCSrcDir/CVS ]; then ppc386 -Fu../../lcl/units/i386/linux cvsexportlocal.pas echo "extracting FPC from local cvs ..." - rm -rf $TmpDir ./cvsexportlocal $FPCSrcDir $TmpDir else - rm -rf $TmpDir - cp -a $FPCSrcDir $TmpDir + if [ -d $FPCSrcDir/.svn ]; then + echo "extracting FPC from local svn ..." + svn export $FPCSrcDir $TmpDir + else + cp -a $FPCSrcDir $TmpDir + fi fi if [ $RenameSmart = "yes" ]; then diff --git a/tools/install/create_lazarus_export_tgz.sh b/tools/install/create_lazarus_export_tgz.sh index 5862d3fb6c..0e7b098b8a 100755 --- a/tools/install/create_lazarus_export_tgz.sh +++ b/tools/install/create_lazarus_export_tgz.sh @@ -25,11 +25,9 @@ if [ "x$Download" = "xyes" ]; then cd - else echo "extracting lazarus from local svn ..." - cd ../.. - SourceDir=`pwd` - cd - + SourceDir=$(pwd | sed -e 's#lazarus/tools.*$#lazarus#') rm -rf /tmp/lazarus - svn export file://$SourceDir lazarus + svn export $SourceDir /tmp/lazarus fi cd /tmp diff --git a/tools/install/create_lazarus_rpm.sh b/tools/install/create_lazarus_rpm.sh index 4639fb29bc..20f62b4a8a 100755 --- a/tools/install/create_lazarus_rpm.sh +++ b/tools/install/create_lazarus_rpm.sh @@ -4,44 +4,49 @@ set -x set -e # get date of day -Year=`date +%y` -Month=`date +%m` -Day=`date +%d` +Year=$(date +%y) +Month=$(date +%m) +Day=$(date +%d) # get installed fpc version -FPCRPM=`rpm -qa | egrep '^fpc-'` +echo "getting installed fpc version ..." +FPCRPM=$(rpm -qa | egrep '^fpc-') if [ "x$FPCRPM" = "x" ]; then echo ERROR: fpc rpm not installed exit fi FPCRPMVersion=`echo $FPCRPM | sed -e 's/fpc-//g'` +echo "installed fpc version: $FPCRPMVersion" Date=$Year$Month$Day -LazVersion=0.9.8 -LazRelease=`echo $FPCRPM | sed -e 's/-/_/g'` -SrcTGZ=lazarus-$Date.tgz +LazVersion=$(./get_lazarus_version.sh) +LazRelease=$(echo $FPCRPM | sed -e 's/-/_/g') +Src=lazarus-$LazVersion-$LazRelease.tar.gz +SrcTGZ=$(./rpm/get_rpm_source_dir.sh)/SOURCES/$Src TmpDir=/tmp/lazarus$LazVersion -SpecFile=lazarus-$LazVersion-$LazRelease.spec +SpecFile=rpm/lazarus-$LazVersion-$LazRelease.spec -# download lazarus cvs if necessary +# download lazarus svn if necessary +echo "creating lazarus tgz ..." if [ ! -f $SrcTGZ ]; then sh create_lazarus_export_tgz.sh $SrcTGZ fi -# put src tgz into rpm build directory -cp $SrcTGZ /usr/src/redhat/SOURCES/ - # create spec file -cat lazarus.spec | \ +echo "creating lazarus spec file ..." +cat rpm/lazarus.spec.template | \ sed -e "s/LAZVERSION/$LazVersion/g" \ - -e "s/LAZRELEASE/$LazRelease/" \ - -e "s/LAZSOURCE/$SrcTGZ/" \ + -e "s/LAZRELEASE/$LazRelease/g" \ + -e "s/LAZSOURCE/$Src/" \ -e "s/FPCBUILDVERSION/2.0.0/" \ -e "s/FPCSRCVERSION/$FPCRPMVersion/" \ > $SpecFile # build rpm +echo "building rpm ..." rpm -ba $SpecFile || rpmbuild -ba $SpecFile +echo "The new rpm can be found at $(./rpm/get_rpm_source_dir.sh)/RPMS/i386/lazarus-$LazVersion-$LazRelease.i386.rpm" + # end. diff --git a/tools/install/fpcsrc.spec b/tools/install/fpcsrc.spec index 88ff6d2782..6d2d9b5640 100644 --- a/tools/install/fpcsrc.spec +++ b/tools/install/fpcsrc.spec @@ -3,7 +3,7 @@ Version: LAZVERSION Release: LAZRELEASE Copyright: LGPL2 Group: Development/Languages -Source: %{name}-%{version}-%{release}.tgz +Source: %{name}-%{version}-%{release}.source.tar.gz Summary: FreePascal sources Packager: Mattias Gaertner (mattias@freepascal.org) URL: http://www.freepascal.org/ diff --git a/tools/install/get_lazarus_version.sh b/tools/install/get_lazarus_version.sh index b7c71836dd..68d3a244a5 100755 --- a/tools/install/get_lazarus_version.sh +++ b/tools/install/get_lazarus_version.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -grep 'lisLazarusVersionString = ' ../../lazarusidestrconsts.pas \ +grep 'lisLazarusVersionString = ' ../../ide/lazarusidestrconsts.pas \ | sed -e 's/.*[^0-9\.]\([0-9\.]\+\)[^0-9\.].*/\1/' # end. diff --git a/tools/install/lazarus.spec b/tools/install/lazarus.spec deleted file mode 100644 index 840bc385cb..0000000000 --- a/tools/install/lazarus.spec +++ /dev/null @@ -1,60 +0,0 @@ -Name: lazarus -Version: LAZVERSION -Release: LAZRELEASE -Copyright: LGPL2/GPL2 -Group: Development/Tools -Source: LAZSOURCE -Summary: Lazarus Component Library and IDE -Packager: Mattias Gaertner (mattias@freepascal.org) -URL: http://www.lazarus.freepascal.org/ -BuildRoot: %{_tmppath}/lazarus-build -BuildRequires: fpc >= FPCBUILDVERSION -Requires: fpcsrc >= FPCSRCVERSION, fpc >= FPCBUILDVERSION -Requires: gdk-pixbuf-devel >= 0.18.0 - -%define lazdir %{_datadir}/lazarus - -%description -Lazarus is a free and opensource RAD tool for freepascal using the lazarus -component library - LCL, which is also included in this package. -The LCL is licensed under LGPL2, the IDE is licensed under GPL2. - -%prep -%setup -c - -%build - cd lazarus - make - strip lazarus - -%install - if [ %{buildroot} != "/" ]; then - rm -rf %{buildroot} - fi - mkdir -p %{buildroot}%{_datadir}/lazarus - mkdir -p %{buildroot}%{_bindir} - mkdir -p %{buildroot}%{_datadir}/pixmaps - mkdir -p %{buildroot}%{_datadir}/gnome/apps/Development - mkdir -p %{buildroot}%{_datadir}/applications - cp -a lazarus/* %{buildroot}%{_datadir}/lazarus/ - install -m 644 lazarus/images/ide_icon48x48.png %{buildroot}%{_datadir}/pixmaps/lazarus.png - install -m 644 lazarus/gnome.ide.desktop %{buildroot}%{_datadir}/gnome/apps/Development/lazarus.desktop - install -m 644 lazarus/gnome.ide.desktop %{buildroot}%{_datadir}/applications/lazarus.desktop - ln -sf %{lazdir}/lazarus %{buildroot}%{_bindir}/lazarus - -%clean - if [ %{buildroot} != "/" ]; then - rm -rf %{buildroot} - fi - -%files -%defattr(-,root,root) -%{_datadir}/lazarus -%{_bindir}/lazarus -%{_datadir}/pixmaps/lazarus.png -%{_datadir}/gnome/apps/Development/lazarus.desktop -%{_datadir}/applications/lazarus.desktop - -%changelog - - diff --git a/tools/install/rpm/lazarus.spec.template b/tools/install/rpm/lazarus.spec.template index 793350e331..b7cf557c46 100644 --- a/tools/install/rpm/lazarus.spec.template +++ b/tools/install/rpm/lazarus.spec.template @@ -6,7 +6,7 @@ Summary: Lazarus Component Library and IDE Group: Development/Languages License: GPL and modified LGPL URL: http://www.lazarus.freepascal.org/ -Source0: http://prdownloads.sourceforge.net/%{name}/%{name}-%{version}-%{release}.source.tar.gz +Source0: http://prdownloads.sourceforge.net/%{name}/%{name}-%{version}-%{release}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) #BuildRequires: @@ -24,8 +24,7 @@ component library - LCL, which is also included in this package. %build cd lazarus -make OPT="-n @$FPCCfg" -# -Fl/opt/gnome/lib +make OPT="-Fl/opt/gnome/lib" strip lazarus strip startlazarus