123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580 |
- #!/bin/sh
- #
- # $Id: samplecfg,v 1.13 2005/02/19 18:50:20 florian Exp $
- #
- # Generate Sample Free Pascal configuration file
- #
- setgccdir() {
- # 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 $@ 2>/dev/null`
- fi
- GCCDIR=`dirname "$GCCSPEC"`
- }
- setgccdirarch() {
- # First argument is fpc define for CPU type; remaining args are passed to gcc to set corresponding architecture
- FPCDEFINE=$1
- shift
- setgccdir $@
- if [ -z "$GCCDIR" ] ; then
- return
- fi
- GCCDIR="#ifdef $FPCDEFINE
- -Fl$GCCDIR
- #endif"
- }
- HOSTOS=`uname -s | tr A-Z a-z`
- echo Running on $HOSTOS
- if [ $# = 0 ]; then
- echo 'Usage :'
- echo 'samplecfg fpcdir confdir'
- echo 'fpcdir = Path where FPC is installed'
- echo 'confdir = Path to /etc'
- exit 1
- fi
- if [ "$2" ]; then
- sysdir="$2"
- [ -d "$sysdir" ] || mkdir "$sysdir"
- else
- sysdir=/etc
- fi
- FPCBIN=`dirname "$1"`/../../bin/fpc
- FPBIN=`dirname "$1"`/../../bin/fp
- sysfpdirbase=`dirname "$1"`/`$FPCBIN -iV`
- sysfpdirbase2=$sysfpdirbase/ide
- sysfpdir=$sysfpdirbase2/text
- fpctargetos=`$FPCBIN -iTO`
- # Detect if we have write permission in sysdir.
- if [ -w "$sysdir" ] ; then
- echo Write permission in $sysdir.
- fpccfgfile="$sysdir"/fpc.cfg
- else
- echo No write premission in $sysdir.
- fpccfgfile="$HOME"/.fpc.cfg
- fi
- #
- # Don't mess with IDE configuration if fp binary does not exist
- if [ -f "$FPBIN" ] ; then
- # Assume local FP IDE configuration unless writing system-wide version possible
- fpinifile="$HOME"/.fp/fp.ini
- fpcfgfile="$HOME"/.fp/fp.cfg
- # Detect if we have write permission in sysfpdirbase.
- if [ -w "$sysfpdirbase" ] ; then
- echo Write permission in $sysfpdirbase.
- if ! [ -d "$sysfpdirbase2" ] ; then
- echo Directory $sysfpdirbase2 did not exist, attempting to create it now
- mkdir $sysfpdirbase2 >/dev/null 2>&1
- echo Attempting to create directory $sysfpdir
- mkdir $sysfpdir >/dev/null 2>&1
- elif ! [ -d "$sysfpdir" ] ; then
- echo Directory $sysfpdir did not exist, attempting to create it now
- mkdir $sysfpdir >/dev/null 2>&1
- fi
- if [ -w "$sysfpdir" ] ; then
- fpinifile="$sysfpdir"/fp.ini
- fpcfgfile="$sysfpdir"/fp.cfg
- fi
- fi
- #
- # When the local FP IDE configuration is used, check if the directory exists
- if [ $fpcfgfile = "$HOME"/.fp/fp.cfg -a ! -d "$HOME"/.fp ] ; then
- echo Directory $HOME/.fp did not exist, attempting to create it now
- mkdir "$HOME"/.fp >/dev/null 2>&1
- fi
- fi
- #
- if [ -f "$fpccfgfile" ] ; then
- mv "$fpccfgfile" "$fpccfgfile.orig" >/dev/null 2>&1
- if [ $? = 0 ]; then
- echo Saved old compiler config to $fpccfgfile.orig
- else
- echo Could not save old compiler config. Bailing out...
- exit
- fi
- fi
- if [ -f "$FPBIN" ] ; then
- if [ -f "$fpinifile" ] ; then
- mv "$fpinifile" "$fpinifile.orig" >/dev/null 2>&1
- if [ $? = 0 ]; then
- echo Saved old fp.ini to $fpinifile.orig
- else
- echo Could not save old fp.ini. Bailing out...
- exit
- fi
- fi
- if [ -f "$fpcfgfile" ] ; then
- mv "$fpcfgfile" "$fpcfgfile.orig" >/dev/null 2>&1
- if [ $? = 0 ]; then
- echo Saved old fp.cfg to $fpcfgfile.orig
- else
- echo Could not save old fp.cfg. Bailing out...
- exit
- fi
- fi
- fi
- setgccdir
- GCCDIR2=""
- GCCDIR3=""
- GCCDIR4=""
- singlearch() {
- if [ -d "$GCCDIR" ]; then
- echo Found libgcc.a in "$GCCDIR"
- GCCDIR=-Fl$GCCDIR
- fi
- }
- # include ports tree dir for FreeBSDers.
- case "$HOSTOS" in
- freebsd)
- GCCDIR=-Fl/usr/local/lib
- ;;
- openbsd)
- GCCDIR=-Fl/usr/local/lib
- ;;
- netbsd)
- GCCDIR=-Fl/usr/pkg/lib
- ;;
- darwin)
- setgccdirarch cpupowerpc -arch ppc
- GCCDIR2="$GCCDIR"
- setgccdirarch cpupowerpc64 -arch ppc64
- GCCDIR3="$GCCDIR"
- setgccdirarch cpui386 -arch i386
- GCCDIR4="$GCCDIR"
- setgccdirarch cpux86_64 -arch x86_64
- ;;
- linux)
- case `"$FPCBIN" -PP` in
- i?86|x86_64|amd64)
- # Allow for the possibility of both 32 and 64 bit compilation on same system
- setgccdirarch cpui386 -m32
- GCCDIR4="$GCCDIR"
- setgccdirarch cpux86_64 -m64
- ;;
- powerpc|powerpc64)
- # Allow for the possibility of both 32 and 64 bit compilation on same system
- setgccdirarch cpupowerpc -m32
- GCCDIR4="$GCCDIR"
- setgccdirarch cpupowerpc64 -m64
- ;;
- # Add cases for other linux dual architectures here
- *) singlearch # Default
- ;;
- esac
- ;;
- *) singlearch
- ;;
-
- esac
- CPUCROSSIFDEF1="#DEFINE NEEDCROSSBINUTILS"
- CPUCROSSIFDEF2=""
- case `"$FPCBIN" -PP` in
- i?86|x86_64|amd64)
- # Cross-binutils are not needed to compile for i386 on an x86_64 system
- CPUCROSSIFDEF1="
- #IFNDEF CPUI386
- #IFNDEF CPUAMD64
- #DEFINE NEEDCROSSBINUTILS
- #ENDIF
- #ENDIF
- "
- CPUCROSSIFDEF2="
- #IFNDEF $HOSTOS
- #DEFINE NEEDCROSSBINUTILS
- #ENDIF
- "
- ;;
- *)
- CPUCROSSIFDEF1="#DEFINE NEEDCROSSBINUTILS"
- CPUCROSSIFDEF2=""
- ;;
- esac
- # darwin->darwin does not need cross binutils
- case "$HOSTOS" in
- darwin)
- CPUCROSSIFDEF2="
- #ifdef darwin
- #undef NEEDCROSSBINUTILS
- #endif
- "
- ;;
- esac
- # set right path to FPC with $fpcversion
- FPCPATH=`dirname "$1"`/\$fpcversion
- # Write (.)fpc.cfg
- echo Writing sample configuration file to $fpccfgfile
- cat <<EOFCFG > $fpccfgfile
- #
- # 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
- -O2
- -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
- $CPUCROSSIFDEF1
- $CPUCROSSIFDEF2
- #IFDEF FPC_CROSSCOMPILING
- #IFDEF NEEDCROSSBINUTILS
- -XP\$fpctarget-
- #ENDIF NEEDCROSSBINUTILS
- #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<x> error options. <x> is a combination of the following:
- # <n> : compiler stops after the <n> errors (default is 1)
- # w : compiler stops also after warnings
- # n : compiler stops also after notes
- # h : compiler stops also after hints
- # -Sg allow LABEL and GOTO
- # -Sh Use ansistrings
- # -Si support C++ styled INLINE
- # -Sk load fpcylix unit
- # -SI<x> set interface style to <x>
- # -SIcom COM compatible interface (default)
- # -SIcorba CORBA 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
- # -Sx enable exception keywords (default in Delphi/ObjFPC modes)
- #
- # 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
- # -Os generate smaller code
- # -O1 level 1 optimizations (quick optimizations, debuggable)
- # -O2 level 2 optimizations (-O1 + optimizations which make debugging more difficult)
- # -O3 level 3 optimizations (-O2 + optimizations which also may make the program slower rather than faster)
- # -Op<x> set target cpu for optimizing, see fpc -i for possible values
- #
- # See "fpc -i" also for more fine-grained control over which optimizations
- # to perform
- # -----------------------
- # 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
- #IFDEF FPCAPACHE_1_3
- -Fu$FPCPATH/units/\$fpctarget/httpd13/
- #ELSE
- #IFDEF FPCAPACHE_2_0
- -Fu$FPCPATH/units/\$fpctarget/httpd20
- #ELSE
- -Fu$FPCPATH/units/\$fpctarget/httpd22
- #ENDIF
- #ENDIF
- # 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
- $GCCDIR2
- $GCCDIR3
- $GCCDIR4
- #-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 c : Show conditionals
- # i : Show general info d : Show debug info
- # l : Show linenumbers r : Rhide/GCC compatibility mode
- # a : Show everything x : Executable info (Win32 only)
- # b : Write file names messages with full path
- # v : write fpcdebug.txt with p : Write tree.log with parse tree
- # lots of debugging info
- #
- # Display Info, Warnings and Notes
- -viwn
- # If you don't want so much verbosity use
- #-vw
- #
- # That's all folks
- #
- EOFCFG
- if ! [ -f "$FPBIN" ] ; then
- exit
- fi
- # Write fp.cfg
- echo Writing sample configuration file to $fpcfgfile
- cat <<EOFFPCFG > $fpcfgfile
- #IFDEF NORMAL
- -Ci
- -XS
- -T$fpctargetos
- -Sg
- -O1
- -Fu$FPCPATH/units/\$fpctarget
- -Fu$FPCPATH/units/\$fpctarget\*
- -Fu$FPCPATH/units/\$fpctarget\rtl
- $GCCDIR
- $GCCDIR2
- $GCCDIR3
- $GCCDIR4
- -g-
- -p-
- -b-
- #ENDIF
- #IFDEF DEBUG
- -Ci
- -XS
- -T$fpctargetos
- -Sg
- -Cr
- -Co
- -Fu$FPCPATH/units/\$fpctarget
- -Fu$FPCPATH/units/\$fpctarget\*
- -Fu$FPCPATH/units/\$fpctarget\rtl
- $GCCDIR
- $GCCDIR2
- $GCCDIR3
- $GCCDIR4
- -g
- -p-
- -b-
- #ENDIF
- #IFDEF RELEASE
- -XS
- -T$fpctargetos
- -Sg
- -O2
- -Fu$FPCPATH/units/\$fpctarget
- -Fu$FPCPATH/units/\$fpctarget\*
- -Fu$FPCPATH/units/\$fpctarget\rtl
- $GCCDIR
- $GCCDIR2
- $GCCDIR3
- $GCCDIR4
- -g-
- -p-
- -b-
- #ENDIF
- EOFFPCFG
- # Write fp.ini
- echo Writing sample configuration file to $fpinifile
- cat <<EOFFPINI > $fpinifile
- [Compile]
- CompileMode=DEBUG
- [Editor]
- DefaultTabSize=8
- DefaultFlags=20599
- DefaultSaveExt=.pas
- DefaultIndentSize=1
- [Highlight]
- Exts="*.pas;*.pp;*.inc"
- NeedsTabs="make*;make*.*"
- [SourcePath]
- SourceList=""
- [Mouse]
- DoubleDelay=8
- ReverseButtons=0
- AltClickAction=6
- CtrlClickAction=1
- [Search]
- FindFlags=4
- [Breakpoints]
- Count=0
- [Watches]
- Count=0
- [Preferences]
- DesktopFileFlags=209
- CenterCurrentLineWhileDebugging=1
- AutoSaveFlags=7
- MiscOptions=6
- DesktopLocation=1
- [Misc]
- ShowReadme=1
- [Files]
- OpenExts="*.pas;*.pp;*.inc"
- [Tools]
- Title1="svn ~u~p (curr. dir)"
- Program1="svn"
- Params1="up \$CAP_MSG()"
- HotKey1=23296
- Title2="svn c~i~ (curr. dir)"
- Program2="svn"
- Params2="ci \$CAP_MSG()"
- HotKey2=23552
- Title3="svn ~d~iff"
- Program3="svn"
- Params3="diff \$CAP_MSG() \$EDNAME"
- HotKey3=23808
- Title4="svn ~l~og"
- Program4="svn"
- Params4="log \$CAP_MSG() \$EDNAME"
- HotKey4=34560
- Title5="svn ~b~lame"
- Program5="svn"
- Params5="blame \$CAP_MSG() \$EDNAME"
- HotKey5=34816
- Title6="svn ~a~dd"
- Program6="svn"
- Params6="add \$CAP_MSG() \$EDNAME"
- HotKey6=0'
- EOFFPINI
|