#!/bin/sh # Heavily based on the Slackware 12.2 SlackBuild # http://www.freepascal.org/ # definiamo alcune variabili contenenti la directory corrente e quella temporanea di lavoro: CWD=`pwd` NAME=fpc VERSION=2.2.4 ARCH=i386 BUILD=1ld if ["$TMP" = ""]; then TMP=/tmp fi PKG=$TMP/packages-fpc SRC=$TMP/$NAME-$VERSION # Settiamo qualche altra variabile per velocizzare il lavoro: if [ ! -d $SRC ]; then mkdir -p $SRC # posizione dove scompattiamo i binari fi if [ ! -d $PKG ]; then mkdir -p $PKG # posizione dove creiamo il package fi echo "+-------------+" echo "| $NAME-$VERSION |" echo "+-------------+" cd $SRC echo echo "Scompattiamo i Binari (Fase 1) ...." # scompattiamo i binari tar xf $CWD/$NAME-$VERSION.i386-linux.tar FILE_TAR=`find . -name "*.tar" -print` for file in $FILE_TAR do tar xf $file rm $file done # facciamo un po' di pulizia rm install.sh # copio l'help html e l'indice precedentemente creato HELP_HTML="doc-html.tar.gz" HELP_INDEX="fpctoc.htx" if [ -f $CWD/$HELP_HTML ]; then if [ -f $CWD/$HELP_INDEX ]; then echo "Importiamo la documentazione ...." cp $CWD/$HELP_HTML . fi fi echo "Scompattiamo i Binari (Fase 2) ...." gunzip *.gz FILE_TAR=`find . -name "*.tar" -print` for file in $FILE_TAR do tar xf $file rm $file done # Muovo i binari nel directory del package echo "Costruiamo la struttura del pacchetto ...." mkdir -p $PKG/usr mv bin lib man share/doc $PKG/usr/ cd $PKG rm -rf $TMP/$NAME-$VERSION cd $PKG/usr/doc/$NAME-$VERSION/ FILE_EXAMPLE=`find ./ -type d -maxdepth 1 -print` for file in $FILE_EXAMPLE do if [ -d $file/examples ]; then mkdir -p examples/$file cp -a $file/examples/* examples/$file/ 2> /dev/null rm -rf $file fi done cd $PKG # Segue parte dello script install.sh incluso nel mega pacchetto dei binari #--------------------------------------------------------------------- # Install /etc/fpc.cfg, this is done using the samplecfg script #------------------------------------------------------------------------ sysdir=$PKG/etc mkdir -p $sysdir thefile=$sysdir/fpc.cfg.new # Find path to libgcc.a GCCSPEC=`(gcc -v 2>&1)| head -n 1| awk '{ print $4 } '` if [ -z "$GCCSPEC" ] ; then GCCSPEC=`gcc -print-libgcc-file-name` fi GCCDIR=`dirname $GCCSPEC` if [ -d $GCCDIR ]; then echo Found libgcc.a in $GCCDIR GCCDIR=-Fl$GCCDIR fi # set right path to FPC FPCPATH=/usr/lib/fpc/$VERSION FPCTARGET=i386-linux # Write the file echo Writing sample configuration file to $thefile cat < $thefile # # Example fpc.cfg for Free Pascal Compiler # # ---------------------- # Defines (preprocessor) # ---------------------- # # nested #IFNDEF, #IFDEF, #ENDIF, #ELSE, #DEFINE, #UNDEF are allowed # # -d is the same as #DEFINE # -u is the same as #UNDEF # # # Some examples (for switches see below, and the -? helppages) # # Try compiling with the -dRELEASE or -dDEBUG on the commandline # # For a release compile with optimizes and strip debuginfo #IFDEF RELEASE -OG2p3 -Xs #WRITE Compiling Release Version #ENDIF # For a debug version compile with debuginfo and all codegeneration checks on #IFDEF DEBUG -g -Crtoi #WRITE Compiling Debug Version #ENDIF # set binutils prefix #IFDEF FPC_CROSSCOMPILING -XP$FPCTARGET- #ENDIF # ---------------- # Parsing switches # ---------------- # Pascal language mode # -Mfpc free pascal dialect (default) # -Mobjfpc switch some Delphi 2 extensions on # -Mdelphi tries to be Delphi compatible # -Mtp tries to be TP/BP 7.0 compatible # -Mgpc tries to be gpc compatible # -Mmacpas tries to be compatible to the macintosh pascal dialects # # Turn on Object Pascal extensions by default #-Mobjfpc # Assembler reader mode # -Rdefault use default assembler # -Ratt read AT&T style assembler # -Rintel read Intel style assembler # # All assembler blocks are AT&T styled by default #-Ratt # Semantic checking # -S2 same as -Mobjfpc # -Sc supports operators like C (*=,+=,/= and -=) # -Sa include assertion code. # -Sd same as -Mdelphi # -Se compiler stops after the errors (default is 1) # -Sg allow LABEL and GOTO # -Sh Use ansistrings # -Si support C++ styled INLINE # -SI set interface style to # -SIcomCOM compatible interface (default) # -SIcorbaCORBA compatible interface # -Sm support macros like C (global) # -So same as -Mtp # -Sp same as -Mgpc # -Ss constructor name must be init (destructor must be done) # -St allow static keyword in objects # # Allow goto, inline, C-operators, C-vars -Sgic # --------------- # Code generation # --------------- # Uncomment the next line if you always want static/dynamic units by default # (can be overruled with -CD, -CS at the commandline) #-CS #-CD # Set the default heapsize to 8Mb #-Ch8000000 # Set default codegeneration checks (iocheck, overflow, range, stack) #-Ci #-Co #-Cr #-Ct # Optimizer switches for i386 compiler # -Og generate smaller code # -OG generate faster code (default) # -Or keep certain variables in registers (still BUGGY!!!) # -Ou enable uncertain optimizations (see docs) # -O1 level 1 optimizations (quick optimizations) # -O2 level 2 optimizations (-O1 + slower optimizations) # -O3 level 3 optimizations (same as -O2u) # -Op target processor # -Op1 set target processor to 386/486 # -Op2 set target processor to Pentium/PentiumMMX (tm) # -Op3 set target processor to PPro/PII/c6x86/K6 (tm) # Optimize always for Size and PII #-OG2p3 # ----------------------- # Set Filenames and Paths # ----------------------- # Slashes are also allowed under dos # path to the messagefile, not necessary anymore but can be used to override # the default language #-Fr$FPCPATH/msg/errore.msg #-Fr$FPCPATH/msg/errorn.msg # searchpath for includefiles #-Fi/pp/inc;/pp/rtl/inc # searchpath for units and other system dependent things -Fu$FPCPATH/units/$FPCTARGET -Fu$FPCPATH/units/$FPCTARGET/* -Fu$FPCPATH/units/$FPCTARGET/rtl #-Fu~/fpc/packages/base/*/units/$FPCTARGET;~/fpc/fcl/units/$FPCTARGET;~/fpc/rtl/units/$FPCTARGET # searchpath for libraries $GCCDIR #-Fl/pp/lib #-Fl/lib;/usr/lib # ------------- # Linking # ------------- # generate always debugging information for GDB (slows down the compiling # process) # -gc generate checks for pointers # -gd use dbx # -gg use gsym # -gh use heap trace unit (for memory leak debugging) # -gl use line info unit to show more info for backtraces # -gv generates programs tracable with valgrind # -gw generate dwarf debugging info # # Enable debuginfo and use the line info unit by default #-gl # always pass an option to the linker #-k-s # Always strip debuginfo from the executable -Xs # ------------- # Miscellaneous # ------------- # Write always a nice FPC logo ;) -l # Verbosity # e : Show errors (default) d : Show debug info # w : Show warnings u : Show unit info # n : Show notes t : Show tried/used files # h : Show hints m : Show defined macros # i : Show general info p : Show compiled procedures # l : Show linenumbers c : Show conditionals # a : Show everything 0 : Show nothing (except errors) # b : Show all procedure r : Rhide/GCC compatibility mode # declarations if an error x : Executable info (Win32 only) # occurs # # Display Info, Warnings, Notes and Hints -viwn # If you don't want so much verbosity use #-vw # # That's all folks # EOFCFG # Fine creazione /etc/fpc.cfg #------------------------------------------------------------------- echo "Impostaimo i permessi e gzippiamo le manpages ...." # Continua lo slackBuild # Creo il link a ppc386 cd $PKG/usr/bin/ ln -s ../lib/fpc/$VERSION/ppc386 ppc386 cd $PKG # copio lo Slackbuild e lo slack-desk cat $CWD/$NAME.SlackBuild > $PKG/usr/doc/$NAME-$VERSION/$NAME.SlackBuild cat $CWD/slack-desc > $PKG/usr/doc/$NAME-$VERSION/slack.desc # gzippiamo le man pages gzip $PKG/usr/man/man1/* gzip $PKG/usr/man/man5/* # impostiamo i permessi chown -R root:root $PKG # importo fpctoc.htx indice per help dell'ide if [ -f $CWD/$HELP_INDEX ]; then echo "Importiamo l' indice della documentazione documentazione ...." cp $CWD/$HELP_INDEX $PKG/usr/doc/$NAME-$VERSION fi chmod -R 644 $PKG/usr/doc/$NAME-$VERSION # permetto di accedere alle directory in doc PERM_DOC=`find $PKG/usr/doc/$NAME-$VERSION/ -type d` for dir in $PERM_DOC do chmod +x $dir done # copiamo slack-desc in install mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc cat $CWD/doinst.sh > $PKG/install/doinst.sh # Creiamo il pacchetto con makepkg cd $PKG requiredbuilder -v -y -s $CWD $PKG makepkg -l y -c n $CWD/$NAME-$VERSION-$ARCH-$BUILD.tgz # eliminiamo le dir di lavoro qualora avessimo eseguito lo SlackBuild con l'opzione --cleanup if [ "$1" = "--cleanup" ]; then rm -rf $TMP/$NAME-$VERSION rm -rf $PKG fi