summaryrefslogtreecommitdiff
path: root/compiler/utils/samplecfg
blob: 1a32ef35ab358bb600ff986f5525f5aa236ec08e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
#!/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/httpd-1.3/
#ELSE
#IFDEF FPCAPACHE_2_0
-Fu$FPCPATH/units/\$fpctarget/httpd-2.0
#ELSE
-Fu$FPCPATH/units/\$fpctarget/httpd-2.2
#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
 -Ratt
 -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
 -Ratt
 -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
 -Ratt
 -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