mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 10:39:40 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			330 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			330 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/bin/sh
 | 
						|
#
 | 
						|
#  $Id: samplecfg,v 1.13 2005/02/19 18:50:20 florian Exp $
 | 
						|
#
 | 
						|
#  Generate Sample Free Pascal configuration file
 | 
						|
#
 | 
						|
 | 
						|
function 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`
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
function 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
 | 
						|
 | 
						|
# 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
 | 
						|
#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<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
 |