mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-27 17:34:37 +02:00
372 lines
8.3 KiB
Bash
372 lines
8.3 KiB
Bash
#!/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() {
|
|
# Find path to libgcc.a
|
|
GCCSPEC=`(gcc -v -arch $1 2>&1)| head -n 1| awk '{ print $4 } '`
|
|
if [ -z "$GCCSPEC" ] ; then
|
|
GCCSPEC=`gcc -print-libgcc-file-name -arch $1`
|
|
fi
|
|
|
|
GCCDIR=`dirname $GCCSPEC`
|
|
|
|
if [ -z "$GCCDIR" ] ; then
|
|
return
|
|
fi
|
|
|
|
case $1 in
|
|
ppc)
|
|
GCCDIR="#ifdef cpupowerpc
|
|
-Fl$GCCDIR
|
|
#endif"
|
|
;;
|
|
ppc64)
|
|
GCCDIR="#ifdef cpupowerpc64
|
|
-Fl$GCCDIR
|
|
#endif"
|
|
;;
|
|
i386)
|
|
GCCDIR="#ifdef cpui386
|
|
-Fl$GCCDIR
|
|
#endif"
|
|
;;
|
|
x86_64)
|
|
GCCDIR="#ifdef cpux86_64
|
|
-Fl$GCCDIR
|
|
#endif"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
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
|
|
|
|
# Detect if we have write permission in root.
|
|
if [ -w $sysdir ] ; then
|
|
echo Write permission in $sysdir.
|
|
thefile=$sysdir/fpc.cfg
|
|
else
|
|
echo No write premission in $sysdir.
|
|
thefile=$HOME/.fpc.cfg
|
|
fi
|
|
#
|
|
if [ -f $thefile ] ; then
|
|
mv $thefile $thefile.orig >/dev/null 2>&1
|
|
if [ $? = 0 ]; then
|
|
echo Saved old config to $thefile.orig
|
|
else
|
|
echo Could not save old config. Bailing out...
|
|
exit
|
|
fi
|
|
fi
|
|
|
|
setgccdir
|
|
GCCDIR2=""
|
|
GCCDIR3=""
|
|
GCCDIR4=""
|
|
|
|
# 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 ppc
|
|
GCCDIR2=$GCCDIR
|
|
setgccdirarch ppc64
|
|
GCCDIR3=$GCCDIR
|
|
setgccdirarch i386
|
|
GCCDIR4=$GCCDIR
|
|
setgccdirarch x86_64
|
|
;;
|
|
*)
|
|
if [ -d $GCCDIR ]; then
|
|
echo Found libgcc.a in $GCCDIR
|
|
GCCDIR=-Fl$GCCDIR
|
|
fi
|
|
;;
|
|
|
|
esac
|
|
|
|
CPUCROSSIFDEF1="#DEFINE NEEDCROSSBINUTILS"
|
|
CPUCROSSIFDEF2=""
|
|
|
|
case `uname -m` 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 the file
|
|
echo Writing sample configuration file to $thefile
|
|
cat <<EOFCFG > $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
|
|
-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
|
|
|
|
# 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
|