2
0

fpcmake.ini 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293
  1. ;
  2. ; Templates used by fpcmake to create a Makefile from Makefile.fpc
  3. ;
  4. [osdetect]
  5. #####################################################################
  6. # Autodetect OS (Linux or Dos or Windows NT)
  7. # define inlinux when running under linux
  8. # define inWinNT when running under WinNT
  9. #####################################################################
  10. # We need only / in the path
  11. override PATH:=$(subst \,/,$(PATH))
  12. # Search for PWD and determine also if we are under linux
  13. PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(subst ;, ,$(PATH)))))
  14. ifeq ($(PWD),)
  15. PWD:=$(strip $(wildcard $(addsuffix /pwd,$(subst :, ,$(PATH)))))
  16. ifeq ($(PWD),)
  17. nopwd:
  18. @echo You need the GNU utils package to use this Makefile!
  19. @echo Get ftp://ftp.freepascal.org/pub/fpc/dist/go32v2/utilgo32.zip
  20. @exit
  21. else
  22. inlinux=1
  23. endif
  24. else
  25. PWD:=$(firstword $(PWD))
  26. endif
  27. # Detect NT - NT sets OS to Windows_NT
  28. ifndef inlinux
  29. ifeq ($(OS),Windows_NT)
  30. inWinNT=1
  31. endif
  32. endif
  33. # Detect OS/2 - OS/2 has OS2_SHELL defined
  34. ifndef inlinux
  35. ifndef inWinNT
  36. ifdef OS2_SHELL
  37. inOS2=1
  38. endif
  39. endif
  40. endif
  41. # The extension of executables
  42. ifdef inlinux
  43. EXEEXT=
  44. else
  45. EXEEXT=.exe
  46. endif
  47. # The path which is searched separated by spaces
  48. ifdef inlinux
  49. SEARCHPATH=$(subst :, ,$(PATH))
  50. else
  51. SEARCHPATH=$(subst ;, ,$(PATH))
  52. endif
  53. # echo
  54. ifndef ECHO
  55. ECHO:=$(strip $(wildcard $(addsuffix /echo$(EXEEXT),$(SEARCHPATH))))
  56. ifeq ($(ECHO),)
  57. ECHO:=echo
  58. else
  59. ECHO:=$(firstword $(ECHO))
  60. endif
  61. endif
  62. export ECHO
  63. # Base dir
  64. ifdef PWD
  65. BASEDIR:=$(shell $(PWD))
  66. else
  67. BASEDIR=.
  68. endif
  69. [defaulttarget]
  70. #####################################################################
  71. # Default target
  72. #####################################################################
  73. [fpcdetect]
  74. #####################################################################
  75. # FPC version/target Detection
  76. #####################################################################
  77. # What compiler to use ?
  78. ifndef FPC
  79. # Compatibility with old makefiles
  80. ifdef PP
  81. FPC=$(PP)
  82. else
  83. ifdef inOS2
  84. FPC=ppos2$(EXEEXT)
  85. else
  86. FPC=ppc386$(EXEEXT)
  87. endif
  88. endif
  89. endif
  90. # Target OS
  91. ifndef OS_TARGET
  92. OS_TARGET:=$(shell $(FPC) -iTO)
  93. endif
  94. # Source OS
  95. ifndef OS_SOURCE
  96. OS_SOURCE:=$(shell $(FPC) -iSO)
  97. endif
  98. # Target CPU
  99. ifndef CPU_TARGET
  100. CPU_TARGET:=$(shell $(FPC) -iTP)
  101. endif
  102. # Source CPU
  103. ifndef CPU_SOURCE
  104. CPU_SOURCE:=$(shell $(FPC) -iSP)
  105. endif
  106. # FPC version
  107. ifndef FPC_VERSION
  108. FPC_VERSION:=$(shell $(FPC) -iV)
  109. endif
  110. export FPC OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FPC_VERSION
  111. [fpcdircheckenv]
  112. #####################################################################
  113. # FPCDIR Setting
  114. #####################################################################
  115. # Test FPCDIR to look if the RTL dir exists
  116. ifdef FPCDIR
  117. override FPCDIR:=$(subst \,/,$(FPCDIR))
  118. ifeq ($(wildcard $(FPCDIR)/rtl),)
  119. override FPCDIR=wrong
  120. endif
  121. else
  122. override FPCDIR=wrong
  123. endif
  124. [fpcdirdetect]
  125. # Detect FPCDIR
  126. ifeq ($(FPCDIR),wrong)
  127. ifdef inlinux
  128. override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
  129. else
  130. override FPCDIR:=$(subst /$(FPC)$(EXEEXT),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC)$(EXEEXT),$(SEARCHPATH))))))
  131. endif
  132. endif
  133. [fpcdirsubs]
  134. # Create units dir
  135. ifneq ($(FPCDIR),.)
  136. UNITSDIR=$(FPCDIR)/units/$(OS_TARGET)
  137. endif
  138. [checkfpcdirsubs]
  139. # Check if the dirs really exists, else turn it off
  140. ifeq ($(wildcard $(UNITSDIR)),)
  141. UNITSDIR=
  142. endif
  143. ifeq ($(wildcard $(TOOLKITSDIR)),)
  144. TOOLKITSDIR=
  145. endif
  146. ifeq ($(wildcard $(PACKAGESDIR)),)
  147. PACKAGESDIR=
  148. endif
  149. ifeq ($(wildcard $(COMPONENTSDIR)),)
  150. COMPONENTSDIR=
  151. endif
  152. [presettings]
  153. #####################################################################
  154. # Pre Settings
  155. #####################################################################
  156. [usersettings]
  157. #####################################################################
  158. # User Settings
  159. #####################################################################
  160. [postsettings]
  161. #####################################################################
  162. # Post Settings
  163. #####################################################################
  164. [dir_default]
  165. #####################################################################
  166. # Default Directories
  167. #####################################################################
  168. # set the prefix directory where to install everything
  169. ifndef PREFIXINSTALLDIR
  170. ifdef inlinux
  171. PREFIXINSTALLDIR=/usr
  172. else
  173. PREFIXINSTALLDIR=/pp
  174. endif
  175. endif
  176. export PREFIXINSTALLDIR
  177. [dir_install]
  178. #####################################################################
  179. # Install Directories
  180. #####################################################################
  181. # set the base directory where to install everything
  182. ifndef BASEINSTALLDIR
  183. ifdef inlinux
  184. BASEINSTALLDIR=$(PREFIXINSTALLDIR)/lib/fpc/$(FPC_VERSION)
  185. else
  186. BASEINSTALLDIR=$(PREFIXINSTALLDIR)
  187. endif
  188. endif
  189. # set the directory where to install the binaries
  190. ifndef BININSTALLDIR
  191. ifdef inlinux
  192. BININSTALLDIR=$(PREFIXINSTALLDIR)/bin
  193. else
  194. BININSTALLDIR=$(BASEINSTALLDIR)/bin/$(OS_TARGET)
  195. endif
  196. endif
  197. # set the directory where to install the units.
  198. ifndef UNITINSTALLDIR
  199. UNITINSTALLDIR=$(BASEINSTALLDIR)/units/$(OS_TARGET)
  200. ifdef UNITSUBDIR
  201. UNITINSTALLDIR:=$(UNITINSTALLDIR)/$(UNITSUBDIR)
  202. endif
  203. endif
  204. # Where to install shared libraries
  205. ifndef LIBINSTALLDIR
  206. ifdef inlinux
  207. LIBINSTALLDIR=$(PREFIXINSTALLDIR)/lib
  208. else
  209. LIBINSTALLDIR=$(UNITINSTALLDIR)
  210. endif
  211. endif
  212. # Where the source files will be stored
  213. ifndef SOURCEINSTALLDIR
  214. ifdef inlinux
  215. SOURCEINSTALLDIR=$(PREFIXINSTALLDIR)/src/fpc-$(FPC_VERSION)
  216. else
  217. SOURCEINSTALLDIR=$(BASEINSTALLDIR)/source
  218. endif
  219. endif
  220. # Where the doc files will be stored
  221. ifndef DOCINSTALLDIR
  222. ifdef inlinux
  223. DOCINSTALLDIR=$(PREFIXINSTALLDIR)/doc/fpc-$(FPC_VERSION)
  224. else
  225. DOCINSTALLDIR=$(BASEINSTALLDIR)/doc
  226. endif
  227. endif
  228. # Where the some extra (data)files will be stored
  229. ifndef DATAINSTALLDIR
  230. DATAINSTALLDIR=$(BASEINSTALLDIR)
  231. endif
  232. [dir_gcclib]
  233. # On linux, try to find where libgcc.a is.
  234. ifdef inlinux
  235. ifndef GCCLIBDIR
  236. GCCLIBDIR:=$(shell dirname `(gcc -v 2>&1)| head -n 1| awk '{ print $$4 } '`)
  237. endif
  238. endif
  239. export GCCLIBDIR
  240. [dir_otherlib]
  241. # Where to find other libraries
  242. ifdef inlinux
  243. ifndef OTHERLIBDIR
  244. OTHERLIBDIR:=$(shell grep -v "^\#" /etc/ld.so.conf | awk '{ ORS=" "; print $1 }')
  245. endif
  246. endif
  247. export OTHERLIBDIR
  248. [redir]
  249. #####################################################################
  250. # Redirection
  251. #####################################################################
  252. # Release ? Then force OPT and don't use extra opts via commandline
  253. ifndef REDIRFILE
  254. REDIRFILE=log
  255. endif
  256. ifdef REDIR
  257. ifndef inlinux
  258. override FPC=redir -eo $(FPC)
  259. endif
  260. # set the verbosity to max
  261. override FPCOPT+=-va
  262. override REDIR:= >> $(REDIRFILE)
  263. endif
  264. [command_begin]
  265. #####################################################################
  266. # Compiler Command Line
  267. #####################################################################
  268. # Load commandline OPTDEF and add FPC_CPU define
  269. override FPCOPTDEF:=-d$(CPU_TARGET)
  270. # Load commandline OPT and add target and unit dir to be sure
  271. ifneq ($(OS_TARGET),$(OS_SOURCE))
  272. override FPCOPT+=-T$(OS_TARGET)
  273. endif
  274. [command_needopt]
  275. ifdef NEEDOPT
  276. override FPCOPT+=$(NEEDOPT)
  277. endif
  278. [command_needunit]
  279. ifdef NEEDUNITDIR
  280. override FPCOPT+=$(addprefix -Fu,$(NEEDUNITDIR))
  281. endif
  282. [command_unitsdir]
  283. ifdef UNITSDIR
  284. override FPCOPT+=-Fu$(UNITSDIR)
  285. endif
  286. [command_needlib]
  287. ifdef NEEDLIBDIR
  288. override FPCOPT+=$(addprefix -Fl,$(NEEDLIBDIR))
  289. endif
  290. [command_needobj]
  291. ifdef NEEDOBJDIR
  292. override FPCOPT+=$(addprefix -Fo,$(NEEDOBJDIR))
  293. endif
  294. [command_needinc]
  295. ifdef NEEDINCDIR
  296. override FPCOPT+=$(addprefix -Fi,$(NEEDINCDIR))
  297. endif
  298. [command_gcclib]
  299. # Add GCC lib path if asked
  300. ifdef GCCLIBDIR
  301. override FPCOPT+=-Fl$(GCCLIBDIR)
  302. endif
  303. [command_otherlib]
  304. # Add Other dirs path if asked
  305. ifdef OTHERLIBDIR
  306. override FPCOPT+=$(addprefix -Fl,$(OTHERLIBDIR))
  307. endif
  308. [command_target]
  309. # Target dirs
  310. ifdef TARGETDIR
  311. override FPCOPT+=-FE$(TARGETDIR)
  312. endif
  313. [command_unittarget]
  314. ifdef UNITTARGETDIR
  315. override FPCOPT+=-FU$(UNITTARGETDIR)
  316. endif
  317. [command_end]
  318. # Smartlinking
  319. ifdef SMARTLINK
  320. override FPCOPT+=-CX
  321. endif
  322. # Debug
  323. ifdef DEBUG
  324. override FPCOPT+=-g -dDEBUG
  325. endif
  326. # Release mode (strip, optimize and don't load ppc386.cfg)
  327. ifdef RELEASE
  328. override FPCOPT+=-Xs -OG2p3 -n
  329. endif
  330. # Verbose settings (warning,note,info)
  331. ifdef VERBOSE
  332. override FPCOPT+=-vwni
  333. endif
  334. # Add commandline options
  335. ifdef OPT
  336. override FPCOPT+=$(OPT)
  337. endif
  338. ifdef UNITDIR
  339. override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
  340. endif
  341. ifdef LIBDIR
  342. override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
  343. endif
  344. ifdef OBJDIR
  345. override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
  346. endif
  347. ifdef INCDIR
  348. override FPCOPT+=$(addprefix -Fi,$(INCDIR))
  349. endif
  350. # Add defines from FPCOPTDEF to FPCOPT
  351. ifdef FPCOPTDEF
  352. override FPCOPT+=$(FPCOPTDEF)
  353. endif
  354. # Error file ?
  355. ifdef ERRORFILE
  356. override FPCOPT+=-Fr$(ERRORFILE)
  357. endif
  358. # Was a config file specified ?
  359. ifdef CFGFILE
  360. override FPCOPT+=@$(CFGFILE)
  361. endif
  362. # For win32 the options are passed using the file fpcext.cmd
  363. ifeq ($(OS_SOURCE),win32)
  364. override TMPVAR:=$(shell "$(ECHO) -e $(addprefix "\n",$(FPCOPT)) > fpcext.cmd")
  365. override FPCOPT:[email protected]
  366. endif
  367. # Compiler commandline
  368. override COMPILER:=$(FPC) $(FPCOPT)
  369. [shelltools]
  370. #####################################################################
  371. # Shell tools
  372. #####################################################################
  373. # To copy pograms
  374. ifndef COPY
  375. COPY:=cp -fp
  376. endif
  377. # Copy a whole tree
  378. ifndef COPYTREE
  379. COPYTREE:=cp -rfp
  380. endif
  381. # To move pograms
  382. ifndef MOVE
  383. MOVE:=mv -f
  384. endif
  385. # Check delete program
  386. ifndef DEL
  387. DEL:=rm -f
  388. endif
  389. # Check deltree program
  390. ifndef DELTREE
  391. DELTREE:=rm -rf
  392. endif
  393. # To install files
  394. ifndef INSTALL
  395. ifdef inlinux
  396. INSTALL:=install -m 644
  397. else
  398. INSTALL:=$(COPY)
  399. endif
  400. endif
  401. # To install programs
  402. ifndef INSTALLEXE
  403. ifdef inlinux
  404. INSTALLEXE:=install -m 755
  405. else
  406. INSTALLEXE:=$(COPY)
  407. endif
  408. endif
  409. # To make a directory.
  410. ifndef MKDIR
  411. ifdef inlinux
  412. MKDIR:=install -m 755 -d
  413. else
  414. MKDIR:=ginstall -m 755 -d
  415. endif
  416. endif
  417. export COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
  418. [tool_default]
  419. #####################################################################
  420. # Default Tools
  421. #####################################################################
  422. # assembler, redefine it if cross compiling
  423. ifndef AS
  424. AS=as
  425. endif
  426. # linker, but probably not used
  427. ifndef LD
  428. LD=ld
  429. endif
  430. # ppas.bat / ppas.sh
  431. ifdef inlinux
  432. PPAS=ppas.sh
  433. else
  434. ifdef inOS2
  435. PPAS=ppas.cmd
  436. else
  437. PPAS=ppas.bat
  438. endif
  439. endif
  440. # also call ppas if with command option -s
  441. ifeq (,$(findstring -s ,$(COMPILER)))
  442. EXECPPAS=
  443. else
  444. EXECPPAS:=@$(PPAS)
  445. endif
  446. # ldconfig to rebuild .so cache
  447. ifdef inlinux
  448. LDCONFIG=ldconfig
  449. else
  450. LDCONFIG=
  451. endif
  452. [tool_ppdep]
  453. # ppdep
  454. ifndef PPDEP
  455. PPDEP:=$(strip $(wildcard $(addsuffix /ppdep$(EXEEXT),$(SEARCHPATH))))
  456. ifeq ($(PPDEP),)
  457. PPDEP=
  458. else
  459. PPDEP:=$(firstword $(PPDEP))
  460. endif
  461. endif
  462. export PPDEP
  463. [tool_ppumove]
  464. # ppumove
  465. ifndef PPUMOVE
  466. PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(EXEEXT),$(SEARCHPATH))))
  467. ifeq ($(PPUMOVE),)
  468. PPUMOVE=
  469. else
  470. PPUMOVE:=$(firstword $(PPUMOVE))
  471. endif
  472. endif
  473. export PPUMOVE
  474. [tool_ppufiles]
  475. # ppufiles
  476. ifndef PPUFILES
  477. PPUFILES:=$(strip $(wildcard $(addsuffix /ppufiles$(EXEEXT),$(SEARCHPATH))))
  478. ifeq ($(PPUFILES),)
  479. PPUFILES=
  480. else
  481. PPUFILES:=$(firstword $(PPUFILES))
  482. endif
  483. endif
  484. export PPUFILES
  485. [tool_data2inc]
  486. # data2inc
  487. ifndef DATA2INC
  488. DATA2INC:=$(strip $(wildcard $(addsuffix /data2inc$(EXEEXT),$(SEARCHPATH))))
  489. ifeq ($(DATA2INC),)
  490. DATA2INC=
  491. else
  492. DATA2INC:=$(firstword $(DATA2INC))
  493. endif
  494. endif
  495. export DATA2INC
  496. [tool_diff]
  497. # diff
  498. ifndef DIFF
  499. DIFF:=$(strip $(wildcard $(addsuffix /diff$(EXEEXT),$(SEARCHPATH))))
  500. ifeq ($(DIFF),)
  501. DIFF=
  502. else
  503. DIFF:=$(firstword $(DIFF))
  504. endif
  505. endif
  506. export DIFF
  507. [tool_cmp]
  508. # cmp
  509. ifndef CMP
  510. CMP:=$(strip $(wildcard $(addsuffix /cmp$(EXEEXT),$(SEARCHPATH))))
  511. ifeq ($(CMP),)
  512. CMP=
  513. else
  514. CMP:=$(firstword $(CMP))
  515. endif
  516. endif
  517. export CMP
  518. [tool_sed]
  519. # Sed
  520. ifndef SED
  521. SED:=$(strip $(wildcard $(addsuffix /sed$(EXEEXT),$(SEARCHPATH))))
  522. ifeq ($(SED),)
  523. SED=
  524. else
  525. SED:=$(firstword $(SED))
  526. endif
  527. endif
  528. export SED
  529. [tool_upx]
  530. # Look if UPX is found for go32v2 and win32. We can't use $UPX becuase
  531. # upx uses that one itself (PFV)
  532. ifndef UPXPROG
  533. ifeq ($(OS_TARGET),go32v2)
  534. UPXPROG:=1
  535. endif
  536. ifeq ($(OS_TARGET),win32)
  537. UPXPROG:=1
  538. endif
  539. ifdef UPXPROG
  540. UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(EXEEXT),$(SEARCHPATH))))
  541. ifeq ($(UPXPROG),)
  542. UPXPROG=
  543. else
  544. UPXPROG:=$(firstword $(UPXPROG))
  545. endif
  546. else
  547. UPXPROG=
  548. endif
  549. endif
  550. export UPXPROG
  551. [tool_date]
  552. # gdate/date
  553. ifndef DATE
  554. DATE:=$(strip $(wildcard $(addsuffix /date$(EXEEXT),$(SEARCHPATH))))
  555. ifeq ($(DATE),)
  556. DATE:=$(strip $(wildcard $(addsuffix /gdate$(EXEEXT),$(SEACHPATH))))
  557. ifeq ($(DATE),)
  558. DATE=
  559. else
  560. DATE:=$(firstword $(DATE))
  561. endif
  562. else
  563. DATE:=$(firstword $(DATE))
  564. endif
  565. endif
  566. export DATE
  567. ifdef DATE
  568. DATESTR:=$(shell $(DATE) +%Y%m%d)
  569. else
  570. DATESTR=
  571. endif
  572. [tool_zip]
  573. # ZipProg, you can't use Zip as the var name (PFV)
  574. ifndef ZIPPROG
  575. ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(EXEEXT),$(SEARCHPATH))))
  576. ifeq ($(ZIPPROG),)
  577. ZIPPROG=
  578. else
  579. ZIPPROG:=$(firstword $(ZIPPROG)) -D9 -r
  580. endif
  581. endif
  582. export ZIPPROG
  583. ifndef ZIPEXT
  584. ZIPEXT=.zip
  585. endif
  586. [extensions]
  587. #####################################################################
  588. # Default extensions
  589. #####################################################################
  590. # Default needed extensions (Go32v2,Linux)
  591. LOADEREXT=.as
  592. PPLEXT=.ppl
  593. PPUEXT=.ppu
  594. OEXT=.o
  595. ASMEXT=.s
  596. SMARTEXT=.sl
  597. STATICLIBEXT=.a
  598. SHAREDLIBEXT=.so
  599. RSTEXT=.rst
  600. PACKAGESUFFIX=
  601. FPCMADE=fpcmade
  602. # Go32v1
  603. ifeq ($(OS_TARGET),go32v1)
  604. PPUEXT=.pp1
  605. OEXT=.o1
  606. ASMEXT=.s1
  607. SMARTEXT=.sl1
  608. STATICLIBEXT=.a1
  609. SHAREDLIBEXT=.so1
  610. PACKAGESUFFIX=v1
  611. FPCMADE=fpcmade.v1
  612. endif
  613. # Go32v2
  614. ifeq ($(OS_TARGET),go32v2)
  615. PACKAGESUFFIX=go32
  616. FPCMADE=fpcmade.dos
  617. endif
  618. # Linux
  619. ifeq ($(OS_TARGET),linux)
  620. PACKAGESUFFIX=linux
  621. FPCMADE=fpcmade.lnx
  622. endif
  623. # Win32
  624. ifeq ($(OS_TARGET),win32)
  625. PPUEXT=.ppw
  626. OEXT=.ow
  627. ASMEXT=.sw
  628. SMARTEXT=.slw
  629. STATICLIBEXT=.aw
  630. SHAREDLIBEXT=.dll
  631. PACKAGESUFFIX=w32
  632. FPCMADE=fpcmade.w32
  633. endif
  634. # OS/2
  635. ifeq ($(OS_TARGET),os2)
  636. PPUEXT=.ppo
  637. ASMEXT=.so2
  638. OEXT=.oo2
  639. SMARTEXT=.so
  640. STATICLIBEXT=.ao2
  641. SHAREDLIBEXT=.dll
  642. PACKAGESUFFIX=os2
  643. FPCMADE=fpcmade.os2
  644. endif
  645. # library prefix
  646. LIBPREFIX=lib
  647. ifeq ($(OS_TARGET),go32v2)
  648. LIBPREFIX=
  649. endif
  650. ifeq ($(OS_TARGET),go32v1)
  651. LIBPREFIX=
  652. endif
  653. # determine which .pas extension is used
  654. ifndef PASEXT
  655. ifdef EXEOBJECTS
  656. override TESTPAS:=$(strip $(wildcard $(addsuffix .pas,$(firstword $(EXEOBJECTS)))))
  657. else
  658. override TESTPAS:=$(strip $(wildcard $(addsuffix .pas,$(firstword $(UNITOBJECTS)))))
  659. endif
  660. ifeq ($(TESTPAS),)
  661. PASEXT=.pp
  662. else
  663. PASEXT=.pas
  664. endif
  665. endif
  666. [standardrules]
  667. #####################################################################
  668. # Standard rules
  669. #####################################################################
  670. [packagedependrules]
  671. #####################################################################
  672. # Package depends
  673. #####################################################################
  674. [loaderrules]
  675. #####################################################################
  676. # Loaders
  677. #####################################################################
  678. .PHONY: fpc_loaders
  679. %$(OEXT): %$(LOADEREXT)
  680. $(AS) -o $*$(OEXT) $<
  681. override ALLTARGET+=fpc_loaders
  682. override CLEANTARGET+=fpc_loaders_clean
  683. override SHOWINSTALLTARGET+=fpc_loaders_showinstall
  684. override INSTALLTARGET+=fpc_loaders_install
  685. override LOADEROFILES:=$(addsuffix $(OEXT),$(LOADEROBJECTS))
  686. fpc_loaders: $(LOADEROFILES)
  687. fpc_loaders_clean:
  688. -$(DEL) $(LOADEROFILES)
  689. fpc_loaders_showinstall:
  690. @$(ECHO) -e $(addprefix "\n"$(UNITINSTALLDIR)/,$(LOADEROFILES))
  691. fpc_loaders_install:
  692. $(MKDIR) $(UNITINSTALLDIR)
  693. $(INSTALL) $(LOADEROFILES) $(UNITINSTALLDIR)
  694. [unitrules]
  695. #####################################################################
  696. # Units
  697. #####################################################################
  698. .PHONY: fpc_units
  699. override ALLTARGET+=fpc_units
  700. override UNITPPUFILES=$(addsuffix $(PPUEXT),$(UNITOBJECTS))
  701. override INSTALLPPUFILES+=$(UNITPPUFILES)
  702. override CLEANPPUFILES+=$(UNITPPUFILES)
  703. fpc_units: $(UNITPPUFILES)
  704. [exerules]
  705. #####################################################################
  706. # Exes
  707. #####################################################################
  708. .PHONY: fpc_exes
  709. override EXEFILES=$(addsuffix $(EXEEXT),$(EXEOBJECTS))
  710. override EXEOFILES=$(addsuffix $(OEXT),$(EXEOBJECTS))
  711. override ALLTARGET+=fpc_exes
  712. override INSTALLEXEFILES+=$(EXEFILES)
  713. override CLEANEXEFILES+=$(EXEFILES) $(EXEOFILES)
  714. fpc_exes: $(EXEFILES)
  715. [rstrules]
  716. #####################################################################
  717. # Resource strings
  718. #####################################################################
  719. override RSTFILES=$(addsuffix $(RSTEXT),$(RSTOBJECTS))
  720. override CLEANRSTFILES+=$(RSTFILES)
  721. [examplerules]
  722. #####################################################################
  723. # Examples
  724. #####################################################################
  725. .PHONY: fpc_examples fpc_test
  726. override EXAMPLEFILES:=$(addsuffix $(EXEEXT),$(EXAMPLEOBJECTS))
  727. override EXAMPLEOFILES:=$(addsuffix $(OEXT),$(EXAMPLEOBJECTS))
  728. override CLEANEXEFILES+=$(EXAMPLEFILES) $(EXAMPLEOFILES)
  729. fpc_examples: all $(EXAMPLEFILES)
  730. fpc_test: examples
  731. [compilerules]
  732. #####################################################################
  733. # General compile rules
  734. #####################################################################
  735. .PHONY: fpc_packages fpc_all fpc_debug
  736. $(FPCMADE): $(ALLTARGET)
  737. @$(ECHO) Compiled > $(FPCMADE)
  738. fpc_packages: $(addsuffix _package,$(COMPILEPACKAGES))
  739. fpc_all: fpc_packages $(FPCMADE)
  740. fpc_debug:
  741. $(MAKE) all DEBUG=1
  742. # General compile rules, available for both possible PASEXT
  743. .SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .pp
  744. %$(PPUEXT): %.pp
  745. $(COMPILER) $< $(REDIR)
  746. $(EXECPASS)
  747. %$(PPUEXT): %.pas
  748. $(COMPILER) $< $(REDIR)
  749. $(EXECPASS)
  750. %$(EXEEXT): %.pp
  751. $(COMPILER) $< $(REDIR)
  752. $(EXECPASS)
  753. %$(EXEEXT): %.pas
  754. $(COMPILER) $< $(REDIR)
  755. $(EXECPASS)
  756. [libraryrules]
  757. #####################################################################
  758. # Library
  759. #####################################################################
  760. .PHONY: fpc_smart fpc_shared
  761. # Default sharedlib units are all unit objects
  762. ifndef SHAREDLIBUNITOBJECTS
  763. SHAREDLIBUNITOBJECTS:=$(UNITOBJECTS)
  764. endif
  765. fpc_smart:
  766. $(MAKE) all SMARTLINK=1
  767. fpc_shared: all
  768. ifdef inlinux
  769. ifndef LIBNAME
  770. @$(ECHO) "LIBNAME not set"
  771. else
  772. $(PPUMOVE) $(SHAREDLIBUNITOBJECTS) -o$(LIBNAME)
  773. endif
  774. else
  775. @$(ECHO) "Shared Libraries not supported"
  776. endif
  777. [installrules]
  778. #####################################################################
  779. # Install rules
  780. #####################################################################
  781. .PHONY: fpc_showinstall fpc_install
  782. ifdef EXTRAINSTALLUNITS
  783. override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(EXTRAINSTALLUNITS))
  784. endif
  785. ifdef INSTALLPPUFILES
  786. ifdef PPUFILES
  787. ifdef inlinux
  788. INSTALLPPULINKFILES:=$(shell $(PPUFILES) -S -O $(INSTALLPPUFILES))
  789. INSTALLPPULIBFILES:=$(shell $(PPUFILES) -L $(INSTALLPPUFILES))
  790. else
  791. INSTALLPPULINKFILES:=$(shell $(PPUFILES) $(INSTALLPPUFILES))
  792. endif
  793. else
  794. INSTALLPPULINKFILES:=$(wildcard $(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)))
  795. endif
  796. endif
  797. fpc_showinstall: $(SHOWINSTALLTARGET)
  798. ifdef INSTALLEXEFILES
  799. @$(ECHO) -e $(addprefix "\n"$(BININSTALLDIR)/,$(INSTALLEXEFILES))
  800. endif
  801. ifdef INSTALLPPUFILES
  802. @$(ECHO) -e $(addprefix "\n"$(UNITINSTALLDIR)/,$(INSTALLPPUFILES))
  803. ifneq ($(INSTALLPPULINKFILES),)
  804. @$(ECHO) -e $(addprefix "\n"$(UNITINSTALLDIR)/,$(INSTALLPPULINKFILES))
  805. endif
  806. ifneq ($(INSTALLPPULIBFILES),)
  807. @$(ECHO) -e $(addprefix "\n"$(LIBINSTALLDIR)/,$(INSTALLPPULIBFILES))
  808. endif
  809. endif
  810. ifdef EXTRAINSTALLFILES
  811. @$(ECHO) -e $(addprefix "\n"$(DATAINSTALLDIR)/,$(EXTRAINSTALLFILES))
  812. endif
  813. fpc_install: $(INSTALLTARGET)
  814. # Create UnitInstallFiles
  815. ifdef INSTALLEXEFILES
  816. $(MKDIR) $(BININSTALLDIR)
  817. # Compress the exes if upx is defined
  818. ifdef UPXPROG
  819. -$(UPXPROG) $(INSTALLEXEFILES)
  820. endif
  821. $(INSTALLEXE) $(INSTALLEXEFILES) $(BININSTALLDIR)
  822. endif
  823. ifdef INSTALLPPUFILES
  824. $(MKDIR) $(UNITINSTALLDIR)
  825. $(INSTALL) $(INSTALLPPUFILES) $(UNITINSTALLDIR)
  826. ifneq ($(INSTALLPPULINKFILES),)
  827. $(INSTALL) $(INSTALLPPULINKFILES) $(UNITINSTALLDIR)
  828. endif
  829. ifneq ($(INSTALLPPULIBFILES),)
  830. $(MKDIR) $(LIBINSTALLDIR)
  831. $(INSTALL) $(INSTALLPPULIBFILES) $(LIBINSTALLDIR)
  832. endif
  833. endif
  834. ifdef EXTRAINSTALLFILES
  835. $(MKDIR) $(DATAINSTALLDIR)
  836. $(INSTALL) $(EXTRAINSTALLFILES) $(DATAINSTALLDIR)
  837. endif
  838. [sourceinstallrules]
  839. #####################################################################
  840. # Source install rules
  841. #####################################################################
  842. .PHONY: fpc_sourceinstall
  843. fpc_sourceinstall: clean
  844. $(MKDIR) $(SOURCEINSTALLDIR)
  845. $(COPYTREE) $(BASEDIR) $(SOURCEINSTALLDIR)
  846. [zipinstallrules]
  847. #####################################################################
  848. # Zip
  849. #####################################################################
  850. .PHONY: fpc_zipinstall fpc_zipinstalladd
  851. # Temporary path to pack a file
  852. ifndef PACKDIR
  853. ifndef inlinux
  854. PACKDIR=pack_tmp
  855. else
  856. PACKDIR=/tmp/fpc-pack
  857. endif
  858. endif
  859. # Test dir if none specified
  860. ifndef DESTZIPDIR
  861. DESTZIPDIR:=$(BASEDIR)
  862. endif
  863. # Maybe create default zipname from packagename
  864. ifndef ZIPNAME
  865. ifdef PACKAGENAME
  866. ZIPNAME=$(PACKAGENAME)$(PACKAGESUFFIX)
  867. endif
  868. endif
  869. # Add .zip/.tar.gz extension
  870. ifdef ZIPNAME
  871. ifndef inlinux
  872. override ZIPNAME:=$(ZIPNAME)$(ZIPEXT)
  873. endif
  874. endif
  875. # Note: This will not remove the zipfile first
  876. fpc_zipinstalladd:
  877. ifndef ZIPNAME
  878. @$(ECHO) "Please specify ZIPNAME!"
  879. @exit 1
  880. else
  881. $(MAKE) $(ZIPTARGET) PREFIXINSTALLDIR=$(PACKDIR)
  882. ifdef inlinux
  883. gzip -d $(DESTZIPDIR)/$(ZIPNAME).tar.gz
  884. cd $(PACKDIR) ; tar rv --file $(DESTZIPDIR)/$(ZIPNAME).tar * ; cd $(BASEDIR)
  885. gzip $(DESTZIPDIR)/$(ZIPNAME).tar
  886. else
  887. cd $(PACKDIR) ; $(ZIPPROG) $(DESTZIPDIR)/$(ZIPNAME) * ; cd $(BASEDIR)
  888. endif
  889. $(DELTREE) $(PACKDIR)
  890. endif
  891. # First remove the zip and then install
  892. fpc_zipinstall:
  893. ifndef ZIPNAME
  894. @$(ECHO) "Please specify ZIPNAME!"
  895. @exit 1
  896. else
  897. $(DEL) $(DESTZIPDIR)/$(ZIPNAME)
  898. $(MAKE) $(ZIPTARGET) PREFIXINSTALLDIR=$(PACKDIR)
  899. ifdef inlinux
  900. cd $(PACKDIR) ; tar cvz --file $(DESTZIPDIR)/$(ZIPNAME).tar.gz * ; cd $(BASEDIR)
  901. else
  902. cd $(PACKDIR) ; $(ZIPPROG) $(DESTZIPDIR)/$(ZIPNAME) * ; cd $(BASEDIR)
  903. endif
  904. $(DELTREE) $(PACKDIR)
  905. endif
  906. [cleanrules]
  907. #####################################################################
  908. # Clean rules
  909. #####################################################################
  910. .PHONY: fpc_clean fpc_cleanall
  911. ifdef EXTRACLEANUNITS
  912. override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(EXTRACLEANUNITS))
  913. endif
  914. ifdef CLEANPPUFILES
  915. ifdef PPUFILES
  916. CLEANPPULINKFILES:=$(shell $(PPUFILES) $(CLEANPPUFILES))
  917. else
  918. CLEANPPULINKFILES:=$(wildcard $(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)))
  919. endif
  920. endif
  921. fpc_clean: $(CLEANTARGET)
  922. ifdef CLEANEXEFILES
  923. -$(DEL) $(CLEANEXEFILES)
  924. endif
  925. ifdef CLEANPPUFILES
  926. -$(DEL) $(CLEANPPUFILES)
  927. endif
  928. ifneq ($(CLEANPPULINKFILES),)
  929. -$(DEL) $(CLEANPPULINKFILES)
  930. endif
  931. ifdef CLEANRSTFILES
  932. -$(DEL) $(CLEANRSTFILES)
  933. endif
  934. ifdef EXTRACLEANFILES
  935. -$(DEL) $(EXTRACLEANFILES)
  936. endif
  937. -$(DEL) $(FPCMADE) $(PPAS) link.res $(REDIRFILE)
  938. fpc_cleanall: $(CLEANTARGET)
  939. ifdef CLEANEXEFILES
  940. -$(DEL) $(CLEANEXEFILES)
  941. endif
  942. -$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
  943. -$(DELTREE) *$(SMARTEXT)
  944. -$(DEL) $(FPCMADE) $(PPAS) link.res $(REDIRFILE)
  945. [dependrules]
  946. #####################################################################
  947. # Depend rules
  948. #####################################################################
  949. .PHONY: fpc_depend
  950. fpc_depend:
  951. $(PPDEP) $(UNITOBJECTS)
  952. [inforules]
  953. #####################################################################
  954. # Info rules
  955. #####################################################################
  956. .PHONY: fpc_info fpc_cfginfo fpc_objectinfo fpc_toolsinfo fpc_installinfo \
  957. fpc_dirinfo
  958. fpc_info: $(INFOTARGET)
  959. [info_cfg]
  960. fpc_infocfg:
  961. @$(ECHO)
  962. @$(ECHO) == Configuration info ==
  963. @$(ECHO)
  964. @$(ECHO) FPC....... $(FPC)
  965. @$(ECHO) Version... $(FPC_VERSION)
  966. @$(ECHO) CPU....... $(CPU_TARGET)
  967. @$(ECHO) Source.... $(OS_SOURCE)
  968. @$(ECHO) Target.... $(OS_TARGET)
  969. @$(ECHO)
  970. [info_dirs]
  971. fpc_infodirs:
  972. ifdef inlinux
  973. @$(ECHO)
  974. @$(ECHO) == Directory info ==
  975. @$(ECHO)
  976. ifdef NEEDGCCLIB
  977. @$(ECHO) GCC library is needed.
  978. endif
  979. ifdef NEEDOTHERLIB
  980. @$(ECHO) Other library is needed.
  981. endif
  982. @$(ECHO) Basedir......... $(BASEDIR)
  983. @$(ECHO)
  984. @$(ECHO) GCC library..... $(GCCLIBDIR)
  985. @$(ECHO) Other library... $(OTHERLIBDIR)
  986. @$(ECHO)
  987. endif
  988. [info_tools]
  989. fpc_infotools:
  990. @$(ECHO)
  991. @$(ECHO) == Tools info ==
  992. @$(ECHO)
  993. @$(ECHO) Pwd....... $(PWD)
  994. @$(ECHO) Echo...... $(ECHO)
  995. ifdef PPDEP
  996. @$(ECHO) PPDep..... $(PPDEP)
  997. endif
  998. ifdef PPUMOVE
  999. @$(ECHO) PPUMove... $(PPUMOVE)
  1000. endif
  1001. ifdef PPUFILES
  1002. @$(ECHO) PPUFiles.. $(PPUFILES)
  1003. endif
  1004. ifdef DATA2INC
  1005. @$(ECHO) Data2Inc.. $(DATA2INC)
  1006. endif
  1007. ifdef SED
  1008. @$(ECHO) Sed....... $(SED)
  1009. endif
  1010. ifdef DATE
  1011. @$(ECHO) Date...... $(DATE)
  1012. endif
  1013. ifdef DIFF
  1014. @$(ECHO) Diff...... $(DIFF)
  1015. endif
  1016. ifdef CMP
  1017. @$(ECHO) Cmp....... $(CMP)
  1018. endif
  1019. ifdef UPXPROG
  1020. @$(ECHO) Upx....... $(UPXPROG)
  1021. endif
  1022. ifdef ZIPPROG
  1023. @$(ECHO) Zip....... $(ZIPPROG)
  1024. endif
  1025. @$(ECHO)
  1026. [info_objects]
  1027. fpc_infoobjects:
  1028. @$(ECHO)
  1029. @$(ECHO) == Object info ==
  1030. @$(ECHO)
  1031. @$(ECHO) LoaderObjects..... $(LOADEROBJECTS)
  1032. @$(ECHO) UnitObjects....... $(UNITOBJECTS)
  1033. @$(ECHO) ExeObjects........ $(EXEOBJECTS)
  1034. @$(ECHO)
  1035. @$(ECHO) ExtraCleanUnits... $(EXTRACLEANUNITS)
  1036. @$(ECHO) ExtraCleanFiles... $(EXTRACLEANFILES)
  1037. @$(ECHO)
  1038. @$(ECHO) ExtraInstallUnits. $(EXTRAINSTALLUNITS)
  1039. @$(ECHO) ExtraInstallFiles. $(EXTRAINSTALLFILES)
  1040. @$(ECHO)
  1041. [info_install]
  1042. fpc_infoinstall:
  1043. @$(ECHO)
  1044. @$(ECHO) == Install info ==
  1045. @$(ECHO)
  1046. ifdef DATE
  1047. @$(ECHO) DateStr.............. $(DATESTR)
  1048. endif
  1049. ifdef PACKAGENAME
  1050. @$(ECHO) PackageName.......... $(PACKAGENAME)
  1051. endif
  1052. @$(ECHO) PackageSuffix........ $(PACKAGESUFFIX)
  1053. @$(ECHO)
  1054. @$(ECHO) BaseInstallDir....... $(BASEINSTALLDIR)
  1055. @$(ECHO) BinInstallDir........ $(BININSTALLDIR)
  1056. @$(ECHO) LibInstallDir........ $(LIBINSTALLDIR)
  1057. @$(ECHO) UnitInstallDir....... $(UNITINSTALLDIR)
  1058. @$(ECHO) SourceInstallDir..... $(SOURCEINSTALLDIR)
  1059. @$(ECHO) DocInstallDir........ $(DOCINSTALLDIR)
  1060. @$(ECHO) DataInstallDir....... $(DATAINSTALLDIR)
  1061. @$(ECHO)
  1062. @$(ECHO) DestZipDir........... $(DESTZIPDIR)
  1063. @$(ECHO) ZipName.............. $(ZIPNAME)
  1064. @$(ECHO)
  1065. [localmakefile]
  1066. #####################################################################
  1067. # Local Makefile
  1068. #####################################################################
  1069. ifneq ($(wildcard fpcmake.loc),)
  1070. include fpcmake.loc
  1071. endif
  1072. [userrules]
  1073. #####################################################################
  1074. # Users rules
  1075. #####################################################################
  1076. [end]