Makefile 24 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181
  1. #
  2. # Makefile generated by fpcmake v0.99.13 [2000/02/09]
  3. #
  4. defaultrule: all
  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. # Base dir
  54. ifdef PWD
  55. BASEDIR:=$(shell $(PWD))
  56. else
  57. BASEDIR=.
  58. endif
  59. #####################################################################
  60. # FPC version/target Detection
  61. #####################################################################
  62. # What compiler to use ?
  63. ifndef FPC
  64. # Compatibility with old makefiles
  65. ifdef PP
  66. FPC=$(PP)
  67. else
  68. ifdef inOS2
  69. FPC=ppos2
  70. else
  71. FPC=ppc386
  72. endif
  73. endif
  74. endif
  75. override FPC:=$(subst $(EXEEXT),,$(FPC))
  76. override FPC:=$(subst \,/,$(FPC))$(EXEEXT)
  77. # Target OS
  78. ifndef OS_TARGET
  79. OS_TARGET:=$(shell $(FPC) -iTO)
  80. endif
  81. # Source OS
  82. ifndef OS_SOURCE
  83. OS_SOURCE:=$(shell $(FPC) -iSO)
  84. endif
  85. # Target CPU
  86. ifndef CPU_TARGET
  87. CPU_TARGET:=$(shell $(FPC) -iTP)
  88. endif
  89. # Source CPU
  90. ifndef CPU_SOURCE
  91. CPU_SOURCE:=$(shell $(FPC) -iSP)
  92. endif
  93. # FPC version
  94. ifndef FPC_VERSION
  95. FPC_VERSION:=$(shell $(FPC) -iV)
  96. endif
  97. export FPC OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FPC_VERSION
  98. #####################################################################
  99. # FPCDIR Setting
  100. #####################################################################
  101. # Test FPCDIR to look if the RTL dir exists
  102. ifdef FPCDIR
  103. override FPCDIR:=$(subst \,/,$(FPCDIR))
  104. ifeq ($(wildcard $(FPCDIR)/rtl),)
  105. ifeq ($(wildcard $(FPCDIR)/units),)
  106. override FPCDIR=wrong
  107. endif
  108. endif
  109. else
  110. override FPCDIR=wrong
  111. endif
  112. # Default FPCDIR
  113. ifeq ($(FPCDIR),wrong)
  114. override FPCDIR=../../..
  115. ifeq ($(wildcard $(FPCDIR)/rtl),)
  116. ifeq ($(wildcard $(FPCDIR)/units),)
  117. override FPCDIR=wrong
  118. endif
  119. endif
  120. endif
  121. # Detect FPCDIR
  122. ifeq ($(FPCDIR),wrong)
  123. ifdef inlinux
  124. override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION)
  125. ifeq ($(wildcard $(FPCDIR)/units),)
  126. override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
  127. endif
  128. else
  129. override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))))
  130. override FPCDIR:=$(FPCDIR)/..
  131. ifeq ($(wildcard $(FPCDIR)/rtl),)
  132. ifeq ($(wildcard $(FPCDIR)/units),)
  133. override FPCDIR:=$(FPCDIR)/..
  134. ifeq ($(wildcard $(FPCDIR)/rtl),)
  135. ifeq ($(wildcard $(FPCDIR)/units),)
  136. override FPCDIR=c:/pp
  137. endif
  138. endif
  139. endif
  140. endif
  141. endif
  142. endif
  143. ifndef PACKAGESDIR
  144. PACKAGESDIR=$(FPCDIR)/packages
  145. endif
  146. ifndef TOOLKITSDIR
  147. TOOLKITSDIR=
  148. endif
  149. ifndef COMPONENTSDIR
  150. COMPONENTSDIR=
  151. endif
  152. # Create units dir
  153. ifneq ($(FPCDIR),.)
  154. UNITSDIR=$(FPCDIR)/units/$(OS_TARGET)
  155. endif
  156. #####################################################################
  157. # User Settings
  158. #####################################################################
  159. # Targets
  160. override EXEOBJECTS+=pushme yesno pushbutton touchbutton minput inputall choice butttypes colsel colsel1 buttonall chartall positioner secretinput cursor fdial ldial ndial invslider sliderall borderwidth boxtype xyplotover arrowbutton browserop browserall chartstrip colbrowser counter fbrowse1 fbrowse flclock fonts goodies lalign ll longlabel menu objinactive objpos newbutton multilabel objreturn
  161. # Clean
  162. # Install
  163. ZIPTARGET=install
  164. # Defaults
  165. # Directories
  166. # Packages
  167. override PACKAGES+=rtl forms x11
  168. # Libraries
  169. override NEEDOTHERLIB=1
  170. # Info
  171. INFOTARGET=fpc_infocfg fpc_infoobjects fpc_infoinstall
  172. #####################################################################
  173. # Shell tools
  174. #####################################################################
  175. # echo
  176. ifndef ECHO
  177. ECHO:=$(strip $(wildcard $(addsuffix /gecho$(EXEEXT),$(SEARCHPATH))))
  178. ifeq ($(ECHO),)
  179. ECHO:=$(strip $(wildcard $(addsuffix /echo$(EXEEXT),$(SEARCHPATH))))
  180. ifeq ($(ECHO),)
  181. ECHO:=echo
  182. ECHOE:=echo
  183. else
  184. ECHO:=$(firstword $(ECHO))
  185. ECHOE=$(ECHO) -E
  186. endif
  187. else
  188. ECHO:=$(firstword $(ECHO))
  189. ECHOE=$(ECHO) -E
  190. endif
  191. endif
  192. # To copy pograms
  193. ifndef COPY
  194. COPY:=cp -fp
  195. endif
  196. # Copy a whole tree
  197. ifndef COPYTREE
  198. COPYTREE:=cp -rfp
  199. endif
  200. # To move pograms
  201. ifndef MOVE
  202. MOVE:=mv -f
  203. endif
  204. # Check delete program
  205. ifndef DEL
  206. DEL:=rm -f
  207. endif
  208. # Check deltree program
  209. ifndef DELTREE
  210. DELTREE:=rm -rf
  211. endif
  212. # To install files
  213. ifndef INSTALL
  214. ifdef inlinux
  215. INSTALL:=install -m 644
  216. else
  217. INSTALL:=$(COPY)
  218. endif
  219. endif
  220. # To install programs
  221. ifndef INSTALLEXE
  222. ifdef inlinux
  223. INSTALLEXE:=install -m 755
  224. else
  225. INSTALLEXE:=$(COPY)
  226. endif
  227. endif
  228. # To make a directory.
  229. ifndef MKDIR
  230. ifdef inlinux
  231. MKDIR:=install -m 755 -d
  232. else
  233. MKDIR:=ginstall -m 755 -d
  234. endif
  235. endif
  236. export ECHO ECHOE COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
  237. #####################################################################
  238. # Default Tools
  239. #####################################################################
  240. # assembler, redefine it if cross compiling
  241. ifndef AS
  242. AS=as
  243. endif
  244. # linker, but probably not used
  245. ifndef LD
  246. LD=ld
  247. endif
  248. # ppas.bat / ppas.sh
  249. ifdef inlinux
  250. PPAS=ppas.sh
  251. else
  252. ifdef inOS2
  253. PPAS=ppas.cmd
  254. else
  255. PPAS=ppas.bat
  256. endif
  257. endif
  258. # ldconfig to rebuild .so cache
  259. ifdef inlinux
  260. LDCONFIG=ldconfig
  261. else
  262. LDCONFIG=
  263. endif
  264. # ppumove
  265. ifndef PPUMOVE
  266. PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(EXEEXT),$(SEARCHPATH))))
  267. ifeq ($(PPUMOVE),)
  268. PPUMOVE=
  269. else
  270. PPUMOVE:=$(firstword $(PPUMOVE))
  271. endif
  272. endif
  273. export PPUMOVE
  274. # ppufiles
  275. ifndef PPUFILES
  276. PPUFILES:=$(strip $(wildcard $(addsuffix /ppufiles$(EXEEXT),$(SEARCHPATH))))
  277. ifeq ($(PPUFILES),)
  278. PPUFILES=
  279. else
  280. PPUFILES:=$(firstword $(PPUFILES))
  281. endif
  282. endif
  283. export PPUFILES
  284. # Look if UPX is found for go32v2 and win32. We can't use $UPX becuase
  285. # upx uses that one itself (PFV)
  286. ifndef UPXPROG
  287. ifeq ($(OS_TARGET),go32v2)
  288. UPXPROG:=1
  289. endif
  290. ifeq ($(OS_TARGET),win32)
  291. UPXPROG:=1
  292. endif
  293. ifdef UPXPROG
  294. UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(EXEEXT),$(SEARCHPATH))))
  295. ifeq ($(UPXPROG),)
  296. UPXPROG=
  297. else
  298. UPXPROG:=$(firstword $(UPXPROG))
  299. endif
  300. else
  301. UPXPROG=
  302. endif
  303. endif
  304. export UPXPROG
  305. # ZipProg, you can't use Zip as the var name (PFV)
  306. ifndef ZIPPROG
  307. ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(EXEEXT),$(SEARCHPATH))))
  308. ifeq ($(ZIPPROG),)
  309. ZIPPROG=
  310. else
  311. ZIPPROG:=$(firstword $(ZIPPROG))
  312. endif
  313. endif
  314. export ZIPPROG
  315. ZIPOPT=-9
  316. ZIPEXT=.zip
  317. # Tar
  318. ifndef TARPROG
  319. TARPROG:=$(strip $(wildcard $(addsuffix /tar$(EXEEXT),$(SEARCHPATH))))
  320. ifeq ($(TARPROG),)
  321. TARPROG=
  322. else
  323. TARPROG:=$(firstword $(TARPROG))
  324. endif
  325. endif
  326. export TARPROG
  327. ifeq ($(USETAR),bz2)
  328. TAROPT=vI
  329. TAREXT=.tar.bz2
  330. else
  331. TAROPT=vz
  332. TAREXT=.tar.gz
  333. endif
  334. #####################################################################
  335. # Default extensions
  336. #####################################################################
  337. # Default needed extensions (Go32v2,Linux)
  338. LOADEREXT=.as
  339. PPLEXT=.ppl
  340. PPUEXT=.ppu
  341. OEXT=.o
  342. ASMEXT=.s
  343. SMARTEXT=.sl
  344. STATICLIBEXT=.a
  345. SHAREDLIBEXT=.so
  346. RSTEXT=.rst
  347. FPCMADE=fpcmade
  348. # Go32v1
  349. ifeq ($(OS_TARGET),go32v1)
  350. PPUEXT=.pp1
  351. OEXT=.o1
  352. ASMEXT=.s1
  353. SMARTEXT=.sl1
  354. STATICLIBEXT=.a1
  355. SHAREDLIBEXT=.so1
  356. FPCMADE=fpcmade.v1
  357. endif
  358. # Go32v2
  359. ifeq ($(OS_TARGET),go32v2)
  360. FPCMADE=fpcmade.dos
  361. endif
  362. # Linux
  363. ifeq ($(OS_TARGET),linux)
  364. FPCMADE=fpcmade.lnx
  365. endif
  366. # Win32
  367. ifeq ($(OS_TARGET),win32)
  368. PPUEXT=.ppw
  369. OEXT=.ow
  370. ASMEXT=.sw
  371. SMARTEXT=.slw
  372. STATICLIBEXT=.aw
  373. SHAREDLIBEXT=.dll
  374. FPCMADE=fpcmade.w32
  375. endif
  376. # OS/2
  377. ifeq ($(OS_TARGET),os2)
  378. PPUEXT=.ppo
  379. ASMEXT=.so2
  380. OEXT=.oo2
  381. SMARTEXT=.so
  382. STATICLIBEXT=.ao2
  383. SHAREDLIBEXT=.dll
  384. FPCMADE=fpcmade.os2
  385. endif
  386. # library prefix
  387. LIBPREFIX=lib
  388. ifeq ($(OS_TARGET),go32v2)
  389. LIBPREFIX=
  390. endif
  391. ifeq ($(OS_TARGET),go32v1)
  392. LIBPREFIX=
  393. endif
  394. # determine which .pas extension is used
  395. ifndef PASEXT
  396. ifdef EXEOBJECTS
  397. override TESTPAS:=$(strip $(wildcard $(addsuffix .pas,$(firstword $(EXEOBJECTS)))))
  398. else
  399. override TESTPAS:=$(strip $(wildcard $(addsuffix .pas,$(firstword $(UNITOBJECTS)))))
  400. endif
  401. ifeq ($(TESTPAS),)
  402. PASEXT=.pp
  403. else
  404. PASEXT=.pas
  405. endif
  406. endif
  407. # Check if the dirs really exists, else turn it off
  408. ifeq ($(wildcard $(UNITSDIR)),)
  409. UNITSDIR=
  410. endif
  411. ifeq ($(wildcard $(TOOLKITSDIR)),)
  412. TOOLKITSDIR=
  413. endif
  414. ifeq ($(wildcard $(PACKAGESDIR)),)
  415. PACKAGESDIR=
  416. endif
  417. ifeq ($(wildcard $(COMPONENTSDIR)),)
  418. COMPONENTSDIR=
  419. endif
  420. # PACKAGESDIR packages
  421. PACKAGERTL=1
  422. PACKAGEFORMS=1
  423. PACKAGEX11=1
  424. ifdef PACKAGERTL
  425. ifneq ($(wildcard $(FPCDIR)/rtl),)
  426. ifneq ($(wildcard $(FPCDIR)/rtl/$(OS_TARGET)),)
  427. PACKAGEDIR_RTL=$(FPCDIR)/rtl/$(OS_TARGET)
  428. else
  429. PACKAGEDIR_RTL=$(FPCDIR)/rtl
  430. endif
  431. ifeq ($(wildcard $(PACKAGEDIR_RTL)/$(FPCMADE)),)
  432. override COMPILEPACKAGES+=package_rtl
  433. package_rtl:
  434. $(MAKE) -C $(PACKAGEDIR_RTL) all
  435. endif
  436. UNITDIR_RTL=$(PACKAGEDIR_RTL)
  437. else
  438. PACKAGEDIR_RTL=
  439. ifneq ($(wildcard $(UNITSDIR)/rtl),)
  440. ifneq ($(wildcard $(UNITSDIR)/rtl/$(OS_TARGET)),)
  441. UNITDIR_RTL=$(UNITSDIR)/rtl/$(OS_TARGET)
  442. else
  443. UNITDIR_RTL=$(UNITSDIR)/rtl
  444. endif
  445. else
  446. UNITDIR_RTL=
  447. endif
  448. endif
  449. ifdef UNITDIR_RTL
  450. override NEEDUNITDIR+=$(UNITDIR_RTL)
  451. endif
  452. endif
  453. ifdef PACKAGEFORMS
  454. ifneq ($(wildcard $(PACKAGESDIR)/forms),)
  455. ifneq ($(wildcard $(PACKAGESDIR)/forms/$(OS_TARGET)),)
  456. PACKAGEDIR_FORMS=$(PACKAGESDIR)/forms/$(OS_TARGET)
  457. else
  458. PACKAGEDIR_FORMS=$(PACKAGESDIR)/forms
  459. endif
  460. ifeq ($(wildcard $(PACKAGEDIR_FORMS)/$(FPCMADE)),)
  461. override COMPILEPACKAGES+=package_forms
  462. package_forms:
  463. $(MAKE) -C $(PACKAGEDIR_FORMS) all
  464. endif
  465. UNITDIR_FORMS=$(PACKAGEDIR_FORMS)
  466. else
  467. PACKAGEDIR_FORMS=
  468. ifneq ($(wildcard $(UNITSDIR)/forms),)
  469. ifneq ($(wildcard $(UNITSDIR)/forms/$(OS_TARGET)),)
  470. UNITDIR_FORMS=$(UNITSDIR)/forms/$(OS_TARGET)
  471. else
  472. UNITDIR_FORMS=$(UNITSDIR)/forms
  473. endif
  474. else
  475. UNITDIR_FORMS=
  476. endif
  477. endif
  478. ifdef UNITDIR_FORMS
  479. override NEEDUNITDIR+=$(UNITDIR_FORMS)
  480. endif
  481. endif
  482. ifdef PACKAGEX11
  483. ifneq ($(wildcard $(PACKAGESDIR)/x11),)
  484. ifneq ($(wildcard $(PACKAGESDIR)/x11/$(OS_TARGET)),)
  485. PACKAGEDIR_X11=$(PACKAGESDIR)/x11/$(OS_TARGET)
  486. else
  487. PACKAGEDIR_X11=$(PACKAGESDIR)/x11
  488. endif
  489. ifeq ($(wildcard $(PACKAGEDIR_X11)/$(FPCMADE)),)
  490. override COMPILEPACKAGES+=package_x11
  491. package_x11:
  492. $(MAKE) -C $(PACKAGEDIR_X11) all
  493. endif
  494. UNITDIR_X11=$(PACKAGEDIR_X11)
  495. else
  496. PACKAGEDIR_X11=
  497. ifneq ($(wildcard $(UNITSDIR)/x11),)
  498. ifneq ($(wildcard $(UNITSDIR)/x11/$(OS_TARGET)),)
  499. UNITDIR_X11=$(UNITSDIR)/x11/$(OS_TARGET)
  500. else
  501. UNITDIR_X11=$(UNITSDIR)/x11
  502. endif
  503. else
  504. UNITDIR_X11=
  505. endif
  506. endif
  507. ifdef UNITDIR_X11
  508. override NEEDUNITDIR+=$(UNITDIR_X11)
  509. endif
  510. endif
  511. #####################################################################
  512. # Default Directories
  513. #####################################################################
  514. # set the prefix directory where to install everything
  515. ifndef PREFIXINSTALLDIR
  516. ifdef inlinux
  517. PREFIXINSTALLDIR=/usr
  518. else
  519. PREFIXINSTALLDIR=/pp
  520. endif
  521. endif
  522. export PREFIXINSTALLDIR
  523. # Where to place the resulting zip files
  524. ifndef DESTZIPDIR
  525. DESTZIPDIR:=$(BASEDIR)
  526. endif
  527. export DESTZIPDIR
  528. # Where to find other libraries
  529. ifdef inlinux
  530. ifndef OTHERLIBDIR
  531. OTHERLIBDIR:=$(shell grep -v "^\#" /etc/ld.so.conf | awk '{ ORS=" "; print $1 }')
  532. endif
  533. endif
  534. export OTHERLIBDIR
  535. #####################################################################
  536. # Install Directories
  537. #####################################################################
  538. # set the base directory where to install everything
  539. ifndef BASEINSTALLDIR
  540. ifdef inlinux
  541. BASEINSTALLDIR=$(PREFIXINSTALLDIR)/lib/fpc/$(FPC_VERSION)
  542. else
  543. BASEINSTALLDIR=$(PREFIXINSTALLDIR)
  544. endif
  545. endif
  546. # set the directory where to install the binaries
  547. ifndef BININSTALLDIR
  548. ifdef inlinux
  549. BININSTALLDIR=$(PREFIXINSTALLDIR)/bin
  550. else
  551. BININSTALLDIR=$(BASEINSTALLDIR)/bin/$(OS_TARGET)
  552. endif
  553. endif
  554. # set the directory where to install the units.
  555. ifndef UNITINSTALLDIR
  556. UNITINSTALLDIR=$(BASEINSTALLDIR)/units/$(OS_TARGET)
  557. ifdef UNITSUBDIR
  558. UNITINSTALLDIR:=$(UNITINSTALLDIR)/$(UNITSUBDIR)
  559. endif
  560. endif
  561. # Where to install shared libraries
  562. ifndef LIBINSTALLDIR
  563. ifdef inlinux
  564. LIBINSTALLDIR=$(PREFIXINSTALLDIR)/lib
  565. else
  566. LIBINSTALLDIR=$(UNITINSTALLDIR)
  567. endif
  568. endif
  569. # Where the source files will be stored
  570. ifndef SOURCEINSTALLDIR
  571. ifdef inlinux
  572. SOURCEINSTALLDIR=$(PREFIXINSTALLDIR)/src/fpc-$(FPC_VERSION)
  573. else
  574. SOURCEINSTALLDIR=$(BASEINSTALLDIR)/source
  575. endif
  576. ifdef SOURCESUBDIR
  577. SOURCEINSTALLDIR:=$(SOURCEINSTALLDIR)/$(SOURCESUBDIR)
  578. endif
  579. endif
  580. # Where the doc files will be stored
  581. ifndef DOCINSTALLDIR
  582. ifdef inlinux
  583. DOCINSTALLDIR=$(PREFIXINSTALLDIR)/doc/fpc-$(FPC_VERSION)
  584. else
  585. DOCINSTALLDIR=$(BASEINSTALLDIR)/doc
  586. endif
  587. endif
  588. # Where the some extra (data)files will be stored
  589. ifndef DATAINSTALLDIR
  590. DATAINSTALLDIR=$(BASEINSTALLDIR)
  591. endif
  592. #####################################################################
  593. # Redirection
  594. #####################################################################
  595. ifndef REDIRFILE
  596. REDIRFILE=log
  597. endif
  598. ifdef REDIR
  599. ifndef inlinux
  600. override FPC=redir -eo $(FPC)
  601. endif
  602. # set the verbosity to max
  603. override FPCOPT+=-va
  604. override REDIR:= >> $(REDIRFILE)
  605. endif
  606. #####################################################################
  607. # Compiler Command Line
  608. #####################################################################
  609. # Load commandline OPTDEF and add FPC_CPU define
  610. override FPCOPTDEF:=-d$(CPU_TARGET)
  611. # Load commandline OPT and add target and unit dir to be sure
  612. ifneq ($(OS_TARGET),$(OS_SOURCE))
  613. override FPCOPT+=-T$(OS_TARGET)
  614. endif
  615. ifdef NEEDUNITDIR
  616. override FPCOPT+=$(addprefix -Fu,$(NEEDUNITDIR))
  617. endif
  618. ifdef UNITSDIR
  619. override FPCOPT+=-Fu$(UNITSDIR)
  620. endif
  621. # Add Other dirs path if asked
  622. ifdef OTHERLIBDIR
  623. override FPCOPT+=$(addprefix -Fl,$(OTHERLIBDIR))
  624. endif
  625. # Smartlinking
  626. ifdef LINKSMART
  627. override FPCOPT+=-CX
  628. endif
  629. # Smartlinking
  630. ifdef CREATESMART
  631. override FPCOPT+=-XX
  632. endif
  633. # Debug
  634. ifdef DEBUG
  635. override FPCOPT+=-g -dDEBUG
  636. endif
  637. # Release mode (strip, optimize and don't load ppc386.cfg)
  638. # 0.99.12b has a bug in the optimizer so don't use it by default
  639. ifdef RELEASE
  640. ifeq ($(FPC_VERSION),0.99.12)
  641. override FPCOPT+=-Xs -OGp3 -n
  642. else
  643. override FPCOPT+=-Xs -OG2p3 -n
  644. endif
  645. endif
  646. # Strip
  647. ifdef STRIP
  648. override FPCOPT+=-Xs
  649. endif
  650. # Optimizer
  651. ifdef OPTIMIZE
  652. override FPCOPT+=-OG2p3
  653. endif
  654. # Verbose settings (warning,note,info)
  655. ifdef VERBOSE
  656. override FPCOPT+=-vwni
  657. endif
  658. # Add commandline options
  659. ifdef OPT
  660. override FPCOPT+=$(OPT)
  661. endif
  662. ifdef UNITDIR
  663. override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
  664. endif
  665. ifdef LIBDIR
  666. override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
  667. endif
  668. ifdef OBJDIR
  669. override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
  670. endif
  671. ifdef INCDIR
  672. override FPCOPT+=$(addprefix -Fi,$(INCDIR))
  673. endif
  674. # Add defines from FPCOPTDEF to FPCOPT
  675. ifdef FPCOPTDEF
  676. override FPCOPT+=$(FPCOPTDEF)
  677. endif
  678. # Error file ?
  679. ifdef ERRORFILE
  680. override FPCOPT+=-Fr$(ERRORFILE)
  681. endif
  682. # Was a config file specified ?
  683. ifdef CFGFILE
  684. override FPCOPT+=@$(CFGFILE)
  685. endif
  686. # For win32 the options are passed using the environment FPCEXTCMD
  687. ifeq ($(OS_SOURCE),win32)
  688. override FPCEXTCMD:=$(FPCOPT)
  689. override FPCOPT:=!FPCEXTCMD
  690. export FPCEXTCMD
  691. endif
  692. # Compiler commandline
  693. override COMPILER:=$(FPC) $(FPCOPT)
  694. # also call ppas if with command option -s
  695. ifeq (,$(findstring -s ,$(COMPILER)))
  696. EXECPPAS=
  697. else
  698. EXECPPAS:=@$(PPAS)
  699. endif
  700. #####################################################################
  701. # Standard rules
  702. #####################################################################
  703. all: fpc_all
  704. debug: fpc_debug
  705. smart: fpc_smart
  706. shared: fpc_shared
  707. showinstall: fpc_showinstall
  708. install: fpc_install
  709. sourceinstall: fpc_sourceinstall
  710. zipinstall: fpc_zipinstall
  711. zipsourceinstall: fpc_zipsourceinstall
  712. clean: fpc_clean
  713. distclean: fpc_distclean
  714. cleanall: fpc_cleanall
  715. info: fpc_info
  716. .PHONY: all debug smart shared showinstall install sourceinstall zipinstall zipsourceinstall clean distclean cleanall info
  717. #####################################################################
  718. # Exes
  719. #####################################################################
  720. .PHONY: fpc_exes
  721. override EXEFILES=$(addsuffix $(EXEEXT),$(EXEOBJECTS))
  722. override EXEOFILES=$(addsuffix $(OEXT),$(EXEOBJECTS))
  723. override ALLTARGET+=fpc_exes
  724. override INSTALLEXEFILES+=$(EXEFILES)
  725. override CLEANEXEFILES+=$(EXEFILES) $(EXEOFILES)
  726. fpc_exes: $(EXEFILES)
  727. #####################################################################
  728. # General compile rules
  729. #####################################################################
  730. .PHONY: fpc_packages fpc_all fpc_debug
  731. $(FPCMADE): $(ALLTARGET)
  732. @$(ECHO) Compiled > $(FPCMADE)
  733. fpc_packages: $(COMPILEPACKAGES)
  734. fpc_all: fpc_packages $(FPCMADE)
  735. fpc_debug:
  736. $(MAKE) all DEBUG=1
  737. # General compile rules, available for both possible PASEXT
  738. .SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .pp
  739. %$(PPUEXT): %.pp
  740. $(COMPILER) $< $(REDIR)
  741. $(EXECPPAS)
  742. %$(PPUEXT): %.pas
  743. $(COMPILER) $< $(REDIR)
  744. $(EXECPPAS)
  745. %$(EXEEXT): %.pp
  746. $(COMPILER) $< $(REDIR)
  747. $(EXECPPAS)
  748. %$(EXEEXT): %.pas
  749. $(COMPILER) $< $(REDIR)
  750. $(EXECPPAS)
  751. #####################################################################
  752. # Library
  753. #####################################################################
  754. .PHONY: fpc_smart fpc_shared
  755. # Default sharedlib units are all unit objects
  756. ifndef SHAREDLIBUNITOBJECTS
  757. SHAREDLIBUNITOBJECTS:=$(UNITOBJECTS)
  758. endif
  759. fpc_smart:
  760. $(MAKE) all LINKSMART=1 CREATESMART=1
  761. fpc_shared: all
  762. ifdef inlinux
  763. ifndef LIBNAME
  764. @$(ECHO) "LIBNAME not set"
  765. else
  766. $(PPUMOVE) $(SHAREDLIBUNITOBJECTS) -o$(LIBNAME)
  767. endif
  768. else
  769. @$(ECHO) "Shared Libraries not supported"
  770. endif
  771. #####################################################################
  772. # Install rules
  773. #####################################################################
  774. .PHONY: fpc_showinstall fpc_install
  775. ifdef EXTRAINSTALLUNITS
  776. override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(EXTRAINSTALLUNITS))
  777. endif
  778. ifdef INSTALLPPUFILES
  779. ifdef PPUFILES
  780. ifdef inlinux
  781. INSTALLPPULINKFILES:=$(shell $(PPUFILES) -S -O $(INSTALLPPUFILES))
  782. INSTALLPPULIBFILES:=$(shell $(PPUFILES) -L $(INSTALLPPUFILES))
  783. else
  784. INSTALLPPULINKFILES:=$(shell $(PPUFILES) $(INSTALLPPUFILES))
  785. endif
  786. else
  787. INSTALLPPULINKFILES:=$(wildcard $(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)))
  788. endif
  789. endif
  790. fpc_showinstall: $(SHOWINSTALLTARGET)
  791. ifdef INSTALLEXEFILES
  792. @$(ECHO) -e $(addprefix "\n"$(BININSTALLDIR)/,$(INSTALLEXEFILES))
  793. endif
  794. ifdef INSTALLPPUFILES
  795. @$(ECHO) -e $(addprefix "\n"$(UNITINSTALLDIR)/,$(INSTALLPPUFILES))
  796. ifneq ($(INSTALLPPULINKFILES),)
  797. @$(ECHO) -e $(addprefix "\n"$(UNITINSTALLDIR)/,$(INSTALLPPULINKFILES))
  798. endif
  799. ifneq ($(INSTALLPPULIBFILES),)
  800. @$(ECHO) -e $(addprefix "\n"$(LIBINSTALLDIR)/,$(INSTALLPPULIBFILES))
  801. endif
  802. endif
  803. ifdef EXTRAINSTALLFILES
  804. @$(ECHO) -e $(addprefix "\n"$(DATAINSTALLDIR)/,$(EXTRAINSTALLFILES))
  805. endif
  806. fpc_install: $(INSTALLTARGET)
  807. # Create UnitInstallFiles
  808. ifdef INSTALLEXEFILES
  809. $(MKDIR) $(BININSTALLDIR)
  810. # Compress the exes if upx is defined
  811. ifdef UPXPROG
  812. -$(UPXPROG) $(INSTALLEXEFILES)
  813. endif
  814. $(INSTALLEXE) $(INSTALLEXEFILES) $(BININSTALLDIR)
  815. endif
  816. ifdef INSTALLPPUFILES
  817. $(MKDIR) $(UNITINSTALLDIR)
  818. $(INSTALL) $(INSTALLPPUFILES) $(UNITINSTALLDIR)
  819. ifneq ($(INSTALLPPULINKFILES),)
  820. $(INSTALL) $(INSTALLPPULINKFILES) $(UNITINSTALLDIR)
  821. endif
  822. ifneq ($(INSTALLPPULIBFILES),)
  823. $(MKDIR) $(LIBINSTALLDIR)
  824. $(INSTALL) $(INSTALLPPULIBFILES) $(LIBINSTALLDIR)
  825. endif
  826. endif
  827. ifdef EXTRAINSTALLFILES
  828. $(MKDIR) $(DATAINSTALLDIR)
  829. $(INSTALL) $(EXTRAINSTALLFILES) $(DATAINSTALLDIR)
  830. endif
  831. #####################################################################
  832. # SourceInstall rules
  833. #####################################################################
  834. .PHONY: fpc_sourceinstall
  835. ifndef SOURCETOPDIR
  836. SOURCETOPDIR=$(BASEDIR)
  837. endif
  838. fpc_sourceinstall: clean
  839. $(MKDIR) $(SOURCEINSTALLDIR)
  840. $(COPYTREE) $(SOURCETOPDIR) $(SOURCEINSTALLDIR)
  841. #####################################################################
  842. # Zip
  843. #####################################################################
  844. .PHONY: fpc_zipinstall
  845. # Create suffix to add
  846. ifndef PACKAGESUFFIX
  847. PACKAGESUFFIX=$(OS_TARGET)
  848. ifeq ($(OS_TARGET),go32v2)
  849. PACKAGESUFFIX=go32
  850. endif
  851. ifeq ($(OS_TARGET),win32)
  852. PACKAGESUFFIX=w32
  853. endif
  854. endif
  855. # Temporary path to pack a file
  856. ifndef PACKDIR
  857. ifndef inlinux
  858. PACKDIR=$(BASEDIR)/pack_tmp
  859. else
  860. PACKDIR=/tmp/fpc-pack
  861. endif
  862. endif
  863. # Maybe create default zipname from packagename
  864. ifndef ZIPNAME
  865. ifdef PACKAGENAME
  866. ZIPNAME=$(PACKAGEPREFIX)$(PACKAGENAME)$(PACKAGESUFFIX)
  867. endif
  868. endif
  869. # Use tar by default under linux
  870. ifndef USEZIP
  871. ifdef inlinux
  872. USETAR=1
  873. endif
  874. endif
  875. fpc_zipinstall:
  876. ifndef ZIPNAME
  877. @$(ECHO) "Please specify ZIPNAME!"
  878. @exit 1
  879. else
  880. $(MAKE) $(ZIPTARGET) PREFIXINSTALLDIR=$(PACKDIR)
  881. ifdef USETAR
  882. $(DEL) $(DESTZIPDIR)/$(ZIPNAME)$(TAREXT)
  883. cd $(PACKDIR) ; $(TARPROG) c$(TAROPT) --file $(DESTZIPDIR)/$(ZIPNAME)$(TAREXT) * ; cd $(BASEDIR)
  884. else
  885. $(DEL) $(DESTZIPDIR)/$(ZIPNAME)$(ZIPEXT)
  886. cd $(PACKDIR) ; $(ZIPPROG) -Dr $(ZIPOPT) $(DESTZIPDIR)/$(ZIPNAME)$(ZIPEXT) * ; cd $(BASEDIR)
  887. endif
  888. $(DELTREE) $(PACKDIR)
  889. endif
  890. .PHONY: fpc_zipsourceinstall
  891. fpc_zipsourceinstall:
  892. $(MAKE) fpc_zipinstall ZIPTARGET=sourceinstall PACKAGESUFFIX=src
  893. #####################################################################
  894. # Clean rules
  895. #####################################################################
  896. .PHONY: fpc_clean fpc_cleanall fpc_distclean
  897. ifdef EXTRACLEANUNITS
  898. override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(EXTRACLEANUNITS))
  899. endif
  900. ifdef CLEANPPUFILES
  901. ifdef PPUFILES
  902. CLEANPPULINKFILES:=$(shell $(PPUFILES) $(CLEANPPUFILES))
  903. else
  904. CLEANPPULINKFILES:=$(wildcard $(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)))
  905. endif
  906. endif
  907. fpc_clean: $(CLEANTARGET)
  908. ifdef CLEANEXEFILES
  909. -$(DEL) $(CLEANEXEFILES)
  910. endif
  911. ifdef CLEANPPUFILES
  912. -$(DEL) $(CLEANPPUFILES)
  913. endif
  914. ifneq ($(CLEANPPULINKFILES),)
  915. -$(DEL) $(CLEANPPULINKFILES)
  916. endif
  917. ifdef CLEANRSTFILES
  918. -$(DEL) $(CLEANRSTFILES)
  919. endif
  920. ifdef EXTRACLEANFILES
  921. -$(DEL) $(EXTRACLEANFILES)
  922. endif
  923. -$(DEL) $(FPCMADE) $(PPAS) link.res $(FPCEXTFILE) $(REDIRFILE)
  924. fpc_distclean: fpc_clean
  925. fpc_cleanall: $(CLEANTARGET)
  926. ifdef CLEANEXEFILES
  927. -$(DEL) $(CLEANEXEFILES)
  928. endif
  929. -$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
  930. -$(DELTREE) *$(SMARTEXT)
  931. -$(DEL) $(FPCMADE) $(PPAS) link.res $(FPCEXTFILE) $(REDIRFILE)
  932. #####################################################################
  933. # Info rules
  934. #####################################################################
  935. .PHONY: fpc_info fpc_cfginfo fpc_objectinfo fpc_toolsinfo fpc_installinfo \
  936. fpc_dirinfo
  937. fpc_info: $(INFOTARGET)
  938. fpc_infocfg:
  939. @$(ECHO)
  940. @$(ECHO) == Configuration info ==
  941. @$(ECHO)
  942. @$(ECHO) FPC....... $(FPC)
  943. @$(ECHO) Version... $(FPC_VERSION)
  944. @$(ECHO) CPU....... $(CPU_TARGET)
  945. @$(ECHO) Source.... $(OS_SOURCE)
  946. @$(ECHO) Target.... $(OS_TARGET)
  947. @$(ECHO)
  948. fpc_infoobjects:
  949. @$(ECHO)
  950. @$(ECHO) == Object info ==
  951. @$(ECHO)
  952. @$(ECHO) LoaderObjects..... $(LOADEROBJECTS)
  953. @$(ECHO) UnitObjects....... $(UNITOBJECTS)
  954. @$(ECHO) ExeObjects........ $(EXEOBJECTS)
  955. @$(ECHO)
  956. @$(ECHO) ExtraCleanUnits... $(EXTRACLEANUNITS)
  957. @$(ECHO) ExtraCleanFiles... $(EXTRACLEANFILES)
  958. @$(ECHO)
  959. @$(ECHO) ExtraInstallUnits. $(EXTRAINSTALLUNITS)
  960. @$(ECHO) ExtraInstallFiles. $(EXTRAINSTALLFILES)
  961. @$(ECHO)
  962. fpc_infoinstall:
  963. @$(ECHO)
  964. @$(ECHO) == Install info ==
  965. @$(ECHO)
  966. ifdef DATE
  967. @$(ECHO) DateStr.............. $(DATESTR)
  968. endif
  969. ifdef PACKAGEPREFIX
  970. @$(ECHO) PackagePrefix........ $(PACKAGEPREFIX)
  971. endif
  972. ifdef PACKAGENAME
  973. @$(ECHO) PackageName.......... $(PACKAGENAME)
  974. endif
  975. @$(ECHO) PackageSuffix........ $(PACKAGESUFFIX)
  976. @$(ECHO)
  977. @$(ECHO) BaseInstallDir....... $(BASEINSTALLDIR)
  978. @$(ECHO) BinInstallDir........ $(BININSTALLDIR)
  979. @$(ECHO) LibInstallDir........ $(LIBINSTALLDIR)
  980. @$(ECHO) UnitInstallDir....... $(UNITINSTALLDIR)
  981. @$(ECHO) SourceInstallDir..... $(SOURCEINSTALLDIR)
  982. @$(ECHO) DocInstallDir........ $(DOCINSTALLDIR)
  983. @$(ECHO) DataInstallDir....... $(DATAINSTALLDIR)
  984. @$(ECHO)
  985. @$(ECHO) DestZipDir........... $(DESTZIPDIR)
  986. @$(ECHO) ZipName.............. $(ZIPNAME)
  987. @$(ECHO)
  988. #####################################################################
  989. # Local Makefile
  990. #####################################################################
  991. ifneq ($(wildcard fpcmake.loc),)
  992. include fpcmake.loc
  993. endif