Makefile 33 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598
  1. #
  2. # Makefile generated by fpcmake v1.00 [2000/12/19]
  3. #
  4. defaultrule: all
  5. #####################################################################
  6. # Autodetect OS (Linux or Dos or Windows NT or OS/2)
  7. # define inUnix when running under Unix (Linux,FreeBSD)
  8. # define inWinNT when running under WinNT
  9. # define inOS2 when running under OS/2
  10. #####################################################################
  11. # We need only / in the path
  12. override PATH:=$(subst \,/,$(PATH))
  13. # Search for PWD and determine also if we are under linux
  14. PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(subst ;, ,$(PATH)))))
  15. ifeq ($(PWD),)
  16. PWD:=$(strip $(wildcard $(addsuffix /pwd,$(subst :, ,$(PATH)))))
  17. ifeq ($(PWD),)
  18. nopwd:
  19. @echo You need the GNU utils package to use this Makefile!
  20. @echo Get ftp://ftp.freepascal.org/pub/fpc/dist/go32v2/utilgo32.zip
  21. @exit
  22. else
  23. inUnix=1
  24. PWD:=$(firstword $(PWD))
  25. endif
  26. else
  27. PWD:=$(firstword $(PWD))
  28. endif
  29. # Detect NT - NT sets OS to Windows_NT
  30. # Detect OS/2 - OS/2 has OS2_SHELL defined
  31. ifndef inUnix
  32. ifeq ($(OS),Windows_NT)
  33. inWinNT=1
  34. else
  35. ifdef OS2_SHELL
  36. inOS2=1
  37. endif
  38. endif
  39. endif
  40. # The extension of executables
  41. ifdef inUnix
  42. SRCEXEEXT=
  43. else
  44. SRCEXEEXT=.exe
  45. endif
  46. # The path which is searched separated by spaces
  47. ifdef inUnix
  48. SEARCHPATH=$(subst :, ,$(PATH))
  49. else
  50. SEARCHPATH=$(subst ;, ,$(PATH))
  51. endif
  52. # Base dir
  53. ifdef PWD
  54. BASEDIR:=$(shell $(PWD))
  55. else
  56. BASEDIR=.
  57. endif
  58. #####################################################################
  59. # FPC version/target Detection
  60. #####################################################################
  61. # What compiler to use ?
  62. ifndef FPC
  63. # Compatibility with old makefiles
  64. ifdef PP
  65. FPC=$(PP)
  66. else
  67. FPC=ppc386
  68. endif
  69. endif
  70. override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
  71. override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
  72. # Target OS
  73. ifndef OS_TARGET
  74. OS_TARGET:=$(shell $(FPC) -iTO)
  75. endif
  76. # Source OS
  77. ifndef OS_SOURCE
  78. OS_SOURCE:=$(shell $(FPC) -iSO)
  79. endif
  80. # Target CPU
  81. ifndef CPU_TARGET
  82. CPU_TARGET:=$(shell $(FPC) -iTP)
  83. endif
  84. # Source CPU
  85. ifndef CPU_SOURCE
  86. CPU_SOURCE:=$(shell $(FPC) -iSP)
  87. endif
  88. # FPC version
  89. ifndef FPC_VERSION
  90. FPC_VERSION:=$(shell $(FPC) -iV)
  91. endif
  92. export FPC OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FPC_VERSION
  93. #####################################################################
  94. # FPCDIR Setting
  95. #####################################################################
  96. # Test FPCDIR to look if the RTL dir exists
  97. ifdef FPCDIR
  98. override FPCDIR:=$(subst \,/,$(FPCDIR))
  99. ifeq ($(wildcard $(FPCDIR)/rtl),)
  100. ifeq ($(wildcard $(FPCDIR)/units),)
  101. override FPCDIR=wrong
  102. endif
  103. endif
  104. else
  105. override FPCDIR=wrong
  106. endif
  107. # Default FPCDIR
  108. ifeq ($(FPCDIR),wrong)
  109. override FPCDIR=..
  110. ifeq ($(wildcard $(FPCDIR)/rtl),)
  111. ifeq ($(wildcard $(FPCDIR)/units),)
  112. override FPCDIR=wrong
  113. endif
  114. endif
  115. endif
  116. # Detect FPCDIR
  117. ifeq ($(FPCDIR),wrong)
  118. ifdef inUnix
  119. override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION)
  120. ifeq ($(wildcard $(FPCDIR)/units),)
  121. override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
  122. endif
  123. else
  124. override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))))
  125. override FPCDIR:=$(FPCDIR)/..
  126. ifeq ($(wildcard $(FPCDIR)/rtl),)
  127. ifeq ($(wildcard $(FPCDIR)/units),)
  128. override FPCDIR:=$(FPCDIR)/..
  129. ifeq ($(wildcard $(FPCDIR)/rtl),)
  130. ifeq ($(wildcard $(FPCDIR)/units),)
  131. override FPCDIR=c:/pp
  132. endif
  133. endif
  134. endif
  135. endif
  136. endif
  137. endif
  138. ifndef PACKAGESDIR
  139. PACKAGESDIR=$(FPCDIR)/packages
  140. endif
  141. ifndef TOOLKITSDIR
  142. TOOLKITSDIR=
  143. endif
  144. ifndef COMPONENTSDIR
  145. COMPONENTSDIR=
  146. endif
  147. # Create units dir
  148. ifneq ($(FPCDIR),.)
  149. UNITSDIR=$(FPCDIR)/units/$(OS_TARGET)
  150. endif
  151. #####################################################################
  152. # User Settings
  153. #####################################################################
  154. # Targets
  155. override DIROBJECTS+=$(wildcard tply h2pas fprcp)
  156. override EXEOBJECTS+=ppufiles ppudump ppumove ppdep ptop rstconv data2inc fpcmake delp bin2obj postw32
  157. # Clean
  158. override EXTRACLEANUNITS+=ppu ptopu makeini crc
  159. # Install
  160. PACKAGENAME=util
  161. ZIPTARGET=install
  162. # Defaults
  163. # Directories
  164. ifndef TARGETDIR
  165. TARGETDIR=.
  166. endif
  167. # Packages
  168. override PACKAGES+=rtl fcl
  169. ifeq ($(OS_TARGET),linux)
  170. override PACKAGES+=zlib
  171. endif
  172. ifeq ($(OS_TARGET),go32v2)
  173. override PACKAGES+=paszlib
  174. endif
  175. ifeq ($(OS_TARGET),win32)
  176. override PACKAGES+=paszlib
  177. endif
  178. ifeq ($(OS_TARGET),os2)
  179. override PACKAGES+=paszlib
  180. endif
  181. # Libraries
  182. # Info
  183. INFOTARGET=fpc_infocfg fpc_infoobjects fpc_infoinstall
  184. #####################################################################
  185. # Shell tools
  186. #####################################################################
  187. # echo
  188. ifndef ECHO
  189. ECHO:=$(strip $(wildcard $(addsuffix /gecho$(EXEEXT),$(SEARCHPATH))))
  190. ifeq ($(ECHO),)
  191. ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
  192. ifeq ($(ECHO),)
  193. ECHO:=echo
  194. ECHOE:=echo
  195. else
  196. ECHO:=$(firstword $(ECHO))
  197. ECHOE=$(ECHO) -E
  198. endif
  199. else
  200. ECHO:=$(firstword $(ECHO))
  201. ECHOE=$(ECHO) -E
  202. endif
  203. endif
  204. # To copy pograms
  205. ifndef COPY
  206. COPY:=cp -fp
  207. endif
  208. # Copy a whole tree
  209. ifndef COPYTREE
  210. COPYTREE:=cp -rfp
  211. endif
  212. # To move pograms
  213. ifndef MOVE
  214. MOVE:=mv -f
  215. endif
  216. # Check delete program
  217. ifndef DEL
  218. DEL:=rm -f
  219. endif
  220. # Check deltree program
  221. ifndef DELTREE
  222. DELTREE:=rm -rf
  223. endif
  224. # To install files
  225. ifndef INSTALL
  226. ifdef inUnix
  227. INSTALL:=install -c -m 644
  228. else
  229. INSTALL:=$(COPY)
  230. endif
  231. endif
  232. # To install programs
  233. ifndef INSTALLEXE
  234. ifdef inUnix
  235. INSTALLEXE:=install -c -m 755
  236. else
  237. INSTALLEXE:=$(COPY)
  238. endif
  239. endif
  240. # To make a directory.
  241. ifndef MKDIR
  242. ifdef inUnix
  243. MKDIR:=install -m 755 -d
  244. else
  245. MKDIR:=ginstall -m 755 -d
  246. endif
  247. endif
  248. export ECHO ECHOE COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
  249. #####################################################################
  250. # Default Tools
  251. #####################################################################
  252. # assembler, redefine it if cross compiling
  253. ifndef AS
  254. AS=as
  255. endif
  256. # linker, but probably not used
  257. ifndef LD
  258. LD=ld
  259. endif
  260. # ppas.bat / ppas.sh
  261. ifdef inUnix
  262. PPAS=ppas.sh
  263. else
  264. ifdef inOS2
  265. PPAS=ppas.cmd
  266. else
  267. PPAS=ppas.bat
  268. endif
  269. endif
  270. # ldconfig to rebuild .so cache
  271. ifdef inUnix
  272. LDCONFIG=ldconfig
  273. else
  274. LDCONFIG=
  275. endif
  276. # ppumove
  277. ifndef PPUMOVE
  278. PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
  279. ifeq ($(PPUMOVE),)
  280. PPUMOVE=
  281. else
  282. PPUMOVE:=$(firstword $(PPUMOVE))
  283. endif
  284. endif
  285. export PPUMOVE
  286. # ppufiles
  287. ifndef PPUFILES
  288. PPUFILES:=$(strip $(wildcard $(addsuffix /ppufiles$(SRCEXEEXT),$(SEARCHPATH))))
  289. ifeq ($(PPUFILES),)
  290. PPUFILES=
  291. else
  292. PPUFILES:=$(firstword $(PPUFILES))
  293. endif
  294. endif
  295. export PPUFILES
  296. # data2inc
  297. ifndef DATA2INC
  298. DATA2INC:=$(strip $(wildcard $(addsuffix /data2inc$(SRCEXEEXT),$(SEARCHPATH))))
  299. ifeq ($(DATA2INC),)
  300. DATA2INC=
  301. else
  302. DATA2INC:=$(firstword $(DATA2INC))
  303. endif
  304. endif
  305. export DATA2INC
  306. # Look if UPX is found for go32v2 and win32. We can't use $UPX becuase
  307. # upx uses that one itself (PFV)
  308. ifndef UPXPROG
  309. ifeq ($(OS_TARGET),go32v2)
  310. UPXPROG:=1
  311. endif
  312. ifeq ($(OS_TARGET),win32)
  313. UPXPROG:=1
  314. endif
  315. ifdef UPXPROG
  316. UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(SRCEXEEXT),$(SEARCHPATH))))
  317. ifeq ($(UPXPROG),)
  318. UPXPROG=
  319. else
  320. UPXPROG:=$(firstword $(UPXPROG))
  321. endif
  322. else
  323. UPXPROG=
  324. endif
  325. endif
  326. export UPXPROG
  327. # ZipProg, you can't use Zip as the var name (PFV)
  328. ifndef ZIPPROG
  329. ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
  330. ifeq ($(ZIPPROG),)
  331. ZIPPROG=
  332. else
  333. ZIPPROG:=$(firstword $(ZIPPROG))
  334. endif
  335. endif
  336. export ZIPPROG
  337. ZIPOPT=-9
  338. ZIPEXT=.zip
  339. # Tar
  340. ifndef TARPROG
  341. TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
  342. ifeq ($(TARPROG),)
  343. TARPROG=
  344. else
  345. TARPROG:=$(firstword $(TARPROG))
  346. endif
  347. endif
  348. export TARPROG
  349. ifeq ($(USETAR),bz2)
  350. TAROPT=vI
  351. TAREXT=.tar.bz2
  352. else
  353. TAROPT=vz
  354. TAREXT=.tar.gz
  355. endif
  356. #####################################################################
  357. # Default extensions
  358. #####################################################################
  359. # Default needed extensions (Go32v2,Linux)
  360. LOADEREXT=.as
  361. EXEEXT=.exe
  362. PPLEXT=.ppl
  363. PPUEXT=.ppu
  364. OEXT=.o
  365. ASMEXT=.s
  366. SMARTEXT=.sl
  367. STATICLIBEXT=.a
  368. SHAREDLIBEXT=.so
  369. RSTEXT=.rst
  370. FPCMADE=fpcmade
  371. # Go32v1
  372. ifeq ($(OS_TARGET),go32v1)
  373. PPUEXT=.pp1
  374. OEXT=.o1
  375. ASMEXT=.s1
  376. SMARTEXT=.sl1
  377. STATICLIBEXT=.a1
  378. SHAREDLIBEXT=.so1
  379. FPCMADE=fpcmade.v1
  380. endif
  381. # Go32v2
  382. ifeq ($(OS_TARGET),go32v2)
  383. FPCMADE=fpcmade.dos
  384. endif
  385. # Linux
  386. ifeq ($(OS_TARGET),linux)
  387. EXEEXT=
  388. HASSHAREDLIB=1
  389. FPCMADE=fpcmade.lnx
  390. endif
  391. # Linux
  392. ifeq ($(OS_TARGET),freebsd)
  393. EXEEXT=
  394. HASSHAREDLIB=1
  395. FPCMADE=fpcmade.freebsd
  396. endif
  397. # Win32
  398. ifeq ($(OS_TARGET),win32)
  399. PPUEXT=.ppw
  400. OEXT=.ow
  401. ASMEXT=.sw
  402. SMARTEXT=.slw
  403. STATICLIBEXT=.aw
  404. SHAREDLIBEXT=.dll
  405. FPCMADE=fpcmade.w32
  406. endif
  407. # OS/2
  408. ifeq ($(OS_TARGET),os2)
  409. PPUEXT=.ppo
  410. ASMEXT=.so2
  411. OEXT=.oo2
  412. SMARTEXT=.so
  413. STATICLIBEXT=.ao2
  414. SHAREDLIBEXT=.dll
  415. FPCMADE=fpcmade.os2
  416. endif
  417. # library prefix
  418. LIBPREFIX=lib
  419. ifeq ($(OS_TARGET),go32v2)
  420. LIBPREFIX=
  421. endif
  422. ifeq ($(OS_TARGET),go32v1)
  423. LIBPREFIX=
  424. endif
  425. # determine which .pas extension is used
  426. ifndef PASEXT
  427. ifdef EXEOBJECTS
  428. override TESTPAS:=$(strip $(wildcard $(addsuffix .pas,$(firstword $(EXEOBJECTS)))))
  429. else
  430. override TESTPAS:=$(strip $(wildcard $(addsuffix .pas,$(firstword $(UNITOBJECTS)))))
  431. endif
  432. ifeq ($(TESTPAS),)
  433. PASEXT=.pp
  434. else
  435. PASEXT=.pas
  436. endif
  437. endif
  438. # Check if the dirs really exists, else turn it off
  439. ifeq ($(wildcard $(UNITSDIR)),)
  440. UNITSDIR=
  441. endif
  442. ifeq ($(wildcard $(TOOLKITSDIR)),)
  443. TOOLKITSDIR=
  444. endif
  445. ifeq ($(wildcard $(PACKAGESDIR)),)
  446. PACKAGESDIR=
  447. endif
  448. ifeq ($(wildcard $(COMPONENTSDIR)),)
  449. COMPONENTSDIR=
  450. endif
  451. # PACKAGESDIR packages
  452. PACKAGERTL=1
  453. PACKAGEFCL=1
  454. ifeq ($(OS_TARGET),linux)
  455. PACKAGEZLIB=1
  456. endif
  457. ifeq ($(OS_TARGET),go32v2)
  458. PACKAGEPASZLIB=1
  459. endif
  460. ifeq ($(OS_TARGET),win32)
  461. PACKAGEPASZLIB=1
  462. endif
  463. ifeq ($(OS_TARGET),os2)
  464. PACKAGEPASZLIB=1
  465. endif
  466. ifdef PACKAGERTL
  467. ifneq ($(wildcard $(FPCDIR)/rtl),)
  468. ifneq ($(wildcard $(FPCDIR)/rtl/$(OS_TARGET)),)
  469. PACKAGEDIR_RTL=$(FPCDIR)/rtl/$(OS_TARGET)
  470. else
  471. PACKAGEDIR_RTL=$(FPCDIR)/rtl
  472. endif
  473. ifeq ($(wildcard $(PACKAGEDIR_RTL)/$(FPCMADE)),)
  474. override COMPILEPACKAGES+=package_rtl
  475. package_rtl:
  476. $(MAKE) -C $(PACKAGEDIR_RTL) all
  477. endif
  478. UNITDIR_RTL=$(PACKAGEDIR_RTL)
  479. else
  480. PACKAGEDIR_RTL=
  481. ifneq ($(wildcard $(UNITSDIR)/rtl),)
  482. ifneq ($(wildcard $(UNITSDIR)/rtl/$(OS_TARGET)),)
  483. UNITDIR_RTL=$(UNITSDIR)/rtl/$(OS_TARGET)
  484. else
  485. UNITDIR_RTL=$(UNITSDIR)/rtl
  486. endif
  487. else
  488. UNITDIR_RTL=
  489. endif
  490. endif
  491. ifdef UNITDIR_RTL
  492. override NEEDUNITDIR+=$(UNITDIR_RTL)
  493. endif
  494. endif
  495. ifdef PACKAGEFCL
  496. ifneq ($(wildcard $(FPCDIR)/fcl),)
  497. ifneq ($(wildcard $(FPCDIR)/fcl/$(OS_TARGET)),)
  498. PACKAGEDIR_FCL=$(FPCDIR)/fcl/$(OS_TARGET)
  499. else
  500. PACKAGEDIR_FCL=$(FPCDIR)/fcl
  501. endif
  502. ifeq ($(wildcard $(PACKAGEDIR_FCL)/$(FPCMADE)),)
  503. override COMPILEPACKAGES+=package_fcl
  504. package_fcl:
  505. $(MAKE) -C $(PACKAGEDIR_FCL) all
  506. endif
  507. UNITDIR_FCL=$(PACKAGEDIR_FCL)
  508. else
  509. PACKAGEDIR_FCL=
  510. ifneq ($(wildcard $(UNITSDIR)/fcl),)
  511. ifneq ($(wildcard $(UNITSDIR)/fcl/$(OS_TARGET)),)
  512. UNITDIR_FCL=$(UNITSDIR)/fcl/$(OS_TARGET)
  513. else
  514. UNITDIR_FCL=$(UNITSDIR)/fcl
  515. endif
  516. else
  517. UNITDIR_FCL=
  518. endif
  519. endif
  520. ifdef UNITDIR_FCL
  521. override NEEDUNITDIR+=$(UNITDIR_FCL)
  522. endif
  523. endif
  524. ifdef PACKAGEZLIB
  525. ifneq ($(wildcard $(PACKAGESDIR)/zlib),)
  526. ifneq ($(wildcard $(PACKAGESDIR)/zlib/$(OS_TARGET)),)
  527. PACKAGEDIR_ZLIB=$(PACKAGESDIR)/zlib/$(OS_TARGET)
  528. else
  529. PACKAGEDIR_ZLIB=$(PACKAGESDIR)/zlib
  530. endif
  531. ifeq ($(wildcard $(PACKAGEDIR_ZLIB)/$(FPCMADE)),)
  532. override COMPILEPACKAGES+=package_zlib
  533. package_zlib:
  534. $(MAKE) -C $(PACKAGEDIR_ZLIB) all
  535. endif
  536. UNITDIR_ZLIB=$(PACKAGEDIR_ZLIB)
  537. else
  538. PACKAGEDIR_ZLIB=
  539. ifneq ($(wildcard $(UNITSDIR)/zlib),)
  540. ifneq ($(wildcard $(UNITSDIR)/zlib/$(OS_TARGET)),)
  541. UNITDIR_ZLIB=$(UNITSDIR)/zlib/$(OS_TARGET)
  542. else
  543. UNITDIR_ZLIB=$(UNITSDIR)/zlib
  544. endif
  545. else
  546. UNITDIR_ZLIB=
  547. endif
  548. endif
  549. ifdef UNITDIR_ZLIB
  550. override NEEDUNITDIR+=$(UNITDIR_ZLIB)
  551. endif
  552. endif
  553. ifdef PACKAGEPASZLIB
  554. ifneq ($(wildcard $(PACKAGESDIR)/paszlib),)
  555. ifneq ($(wildcard $(PACKAGESDIR)/paszlib/$(OS_TARGET)),)
  556. PACKAGEDIR_PASZLIB=$(PACKAGESDIR)/paszlib/$(OS_TARGET)
  557. else
  558. PACKAGEDIR_PASZLIB=$(PACKAGESDIR)/paszlib
  559. endif
  560. ifeq ($(wildcard $(PACKAGEDIR_PASZLIB)/$(FPCMADE)),)
  561. override COMPILEPACKAGES+=package_paszlib
  562. package_paszlib:
  563. $(MAKE) -C $(PACKAGEDIR_PASZLIB) all
  564. endif
  565. UNITDIR_PASZLIB=$(PACKAGEDIR_PASZLIB)
  566. else
  567. PACKAGEDIR_PASZLIB=
  568. ifneq ($(wildcard $(UNITSDIR)/paszlib),)
  569. ifneq ($(wildcard $(UNITSDIR)/paszlib/$(OS_TARGET)),)
  570. UNITDIR_PASZLIB=$(UNITSDIR)/paszlib/$(OS_TARGET)
  571. else
  572. UNITDIR_PASZLIB=$(UNITSDIR)/paszlib
  573. endif
  574. else
  575. UNITDIR_PASZLIB=
  576. endif
  577. endif
  578. ifdef UNITDIR_PASZLIB
  579. override NEEDUNITDIR+=$(UNITDIR_PASZLIB)
  580. endif
  581. endif
  582. #####################################################################
  583. # Default Directories
  584. #####################################################################
  585. # Linux and freebsd use unix dirs with /usr/bin, /usr/lib
  586. # When zipping use the target as default, when normal install then
  587. # use the source os as default
  588. ifdef ZIPNAME
  589. # Zipinstall
  590. ifeq ($(OS_TARGET),linux)
  591. UNIXINSTALLDIR=1
  592. endif
  593. ifeq ($(OS_TARGET),freebsd)
  594. UNIXINSTALLDIR=1
  595. endif
  596. else
  597. # Normal install
  598. ifeq ($(OS_SOURCE),linux)
  599. UNIXINSTALLDIR=1
  600. endif
  601. ifeq ($(OS_SOURCE),freebsd)
  602. UNIXINSTALLDIR=1
  603. endif
  604. endif
  605. # set the prefix directory where to install everything
  606. ifndef PREFIXINSTALLDIR
  607. ifdef UNIXINSTALLDIR
  608. PREFIXINSTALLDIR=/usr
  609. else
  610. PREFIXINSTALLDIR=/pp
  611. endif
  612. endif
  613. export PREFIXINSTALLDIR
  614. # Where to place the resulting zip files
  615. ifndef DESTZIPDIR
  616. DESTZIPDIR:=$(BASEDIR)
  617. endif
  618. export DESTZIPDIR
  619. #####################################################################
  620. # Install Directories
  621. #####################################################################
  622. # set the base directory where to install everything
  623. ifndef BASEINSTALLDIR
  624. ifdef UNIXINSTALLDIR
  625. BASEINSTALLDIR=$(PREFIXINSTALLDIR)/lib/fpc/$(FPC_VERSION)
  626. else
  627. BASEINSTALLDIR=$(PREFIXINSTALLDIR)
  628. endif
  629. endif
  630. # set the directory where to install the binaries
  631. ifndef BININSTALLDIR
  632. ifdef UNIXINSTALLDIR
  633. BININSTALLDIR=$(PREFIXINSTALLDIR)/bin
  634. else
  635. BININSTALLDIR=$(BASEINSTALLDIR)/bin/$(OS_TARGET)
  636. endif
  637. endif
  638. # set the directory where to install the units.
  639. ifndef UNITINSTALLDIR
  640. UNITINSTALLDIR=$(BASEINSTALLDIR)/units/$(OS_TARGET)
  641. ifdef UNITSUBDIR
  642. UNITINSTALLDIR:=$(UNITINSTALLDIR)/$(UNITSUBDIR)
  643. endif
  644. endif
  645. # Where to install shared libraries
  646. ifndef LIBINSTALLDIR
  647. ifdef UNIXINSTALLDIR
  648. LIBINSTALLDIR=$(PREFIXINSTALLDIR)/lib
  649. else
  650. LIBINSTALLDIR=$(UNITINSTALLDIR)
  651. endif
  652. endif
  653. # Where the source files will be stored
  654. ifndef SOURCEINSTALLDIR
  655. ifdef UNIXINSTALLDIR
  656. SOURCEINSTALLDIR=$(PREFIXINSTALLDIR)/src/fpc-$(FPC_VERSION)
  657. else
  658. SOURCEINSTALLDIR=$(BASEINSTALLDIR)/source
  659. endif
  660. ifdef SOURCESUBDIR
  661. SOURCEINSTALLDIR:=$(SOURCEINSTALLDIR)/$(SOURCESUBDIR)
  662. endif
  663. endif
  664. # Where the doc files will be stored
  665. ifndef DOCINSTALLDIR
  666. ifdef UNIXINSTALLDIR
  667. DOCINSTALLDIR=$(PREFIXINSTALLDIR)/doc/fpc-$(FPC_VERSION)
  668. else
  669. DOCINSTALLDIR=$(BASEINSTALLDIR)/doc
  670. endif
  671. endif
  672. # Where to install the examples, under linux we use the doc dir
  673. # because the copytree command will create a subdir itself
  674. ifndef EXAMPLEINSTALLDIR
  675. ifdef UNIXINSTALLDIR
  676. EXAMPLEINSTALLDIR=$(DOCINSTALLDIR)/examples
  677. else
  678. EXAMPLEINSTALLDIR=$(BASEINSTALLDIR)/examples
  679. endif
  680. ifdef EXAMPLESUBDIR
  681. EXAMPLEINSTALLDIR:=$(EXAMPLEINSTALLDIR)/$(EXAMPLESUBDIR)
  682. endif
  683. endif
  684. # Where the some extra (data)files will be stored
  685. ifndef DATAINSTALLDIR
  686. DATAINSTALLDIR=$(BASEINSTALLDIR)
  687. endif
  688. #####################################################################
  689. # Redirection
  690. #####################################################################
  691. ifndef REDIRFILE
  692. REDIRFILE=log
  693. endif
  694. ifdef REDIR
  695. ifndef inUnix
  696. override FPC=redir -eo $(FPC)
  697. endif
  698. # set the verbosity to max
  699. override FPCOPT+=-va
  700. override REDIR:= >> $(REDIRFILE)
  701. endif
  702. #####################################################################
  703. # Compiler Command Line
  704. #####################################################################
  705. # Load commandline OPTDEF and add FPC_CPU define
  706. override FPCOPTDEF:=-d$(CPU_TARGET)
  707. # Load commandline OPT and add target and unit dir to be sure
  708. ifneq ($(OS_TARGET),$(OS_SOURCE))
  709. override FPCOPT+=-T$(OS_TARGET)
  710. endif
  711. # User dirs should be first, so they are looked at first
  712. ifdef UNITDIR
  713. override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
  714. endif
  715. ifdef LIBDIR
  716. override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
  717. endif
  718. ifdef OBJDIR
  719. override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
  720. endif
  721. ifdef INCDIR
  722. override FPCOPT+=$(addprefix -Fi,$(INCDIR))
  723. endif
  724. # Smartlinking
  725. ifdef LINKSMART
  726. override FPCOPT+=-XX
  727. endif
  728. # Smartlinking creation
  729. ifdef CREATESMART
  730. override FPCOPT+=-CX
  731. endif
  732. # Debug
  733. ifdef DEBUG
  734. override FPCOPT+=-gl -dDEBUG
  735. endif
  736. # Release mode (strip, optimize and don't load ppc386.cfg)
  737. # 0.99.12b has a bug in the optimizer so don't use it by default
  738. ifdef RELEASE
  739. ifeq ($(FPC_VERSION),0.99.12)
  740. override FPCOPT+=-Xs -OGp3 -n
  741. else
  742. override FPCOPT+=-Xs -OG2p3 -n
  743. endif
  744. endif
  745. # Strip
  746. ifdef STRIP
  747. override FPCOPT+=-Xs
  748. endif
  749. # Optimizer
  750. ifdef OPTIMIZE
  751. override FPCOPT+=-OG2p3
  752. endif
  753. # Verbose settings (warning,note,info)
  754. ifdef VERBOSE
  755. override FPCOPT+=-vwni
  756. endif
  757. ifdef NEEDUNITDIR
  758. override FPCOPT+=$(addprefix -Fu,$(NEEDUNITDIR))
  759. endif
  760. ifdef UNITSDIR
  761. override FPCOPT+=-Fu$(UNITSDIR)
  762. endif
  763. # Target dirs and the prefix to use for clean/install
  764. ifdef TARGETDIR
  765. override FPCOPT+=-FE$(TARGETDIR)
  766. ifeq ($(TARGETDIR),.)
  767. override TARGETDIRPREFIX=
  768. else
  769. override TARGETDIRPREFIX=$(TARGETDIR)/
  770. endif
  771. endif
  772. ifdef UNITTARGETDIR
  773. override FPCOPT+=-FU$(UNITTARGETDIR)
  774. ifeq ($(UNITTARGETDIR),.)
  775. override UNITTARGETDIRPREFIX=
  776. else
  777. override UNITTARGETDIRPREFIX=$(TARGETDIR)/
  778. endif
  779. else
  780. ifdef TARGETDIR
  781. override UNITTARGETDIR=$(TARGETDIR)
  782. override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
  783. endif
  784. endif
  785. # Add commandline options last so they can override
  786. ifdef OPT
  787. override FPCOPT+=$(OPT)
  788. endif
  789. # Add defines from FPCOPTDEF to FPCOPT
  790. ifdef FPCOPTDEF
  791. override FPCOPT+=$(FPCOPTDEF)
  792. endif
  793. # Error file ?
  794. ifdef ERRORFILE
  795. override FPCOPT+=-Fr$(ERRORFILE)
  796. endif
  797. # Was a config file specified ?
  798. ifdef CFGFILE
  799. override FPCOPT+=@$(CFGFILE)
  800. endif
  801. # For win32 the options are passed using the environment FPCEXTCMD
  802. ifeq ($(OS_SOURCE),win32)
  803. override FPCEXTCMD:=$(FPCOPT)
  804. override FPCOPT:=!FPCEXTCMD
  805. export FPCEXTCMD
  806. endif
  807. # Compiler commandline
  808. override COMPILER:=$(FPC) $(FPCOPT)
  809. # also call ppas if with command option -s
  810. # but only if the OS_SOURCE and OS_TARGE are equal
  811. ifeq (,$(findstring -s ,$(COMPILER)))
  812. EXECPPAS=
  813. else
  814. ifeq ($(OS_SOURCE),$(OS_TARGET))
  815. EXECPPAS:=@$(PPAS)
  816. endif
  817. endif
  818. #####################################################################
  819. # Standard rules
  820. #####################################################################
  821. all: fpc_all $(addsuffix _all,$(DIROBJECTS))
  822. debug: fpc_debug $(addsuffix _debug,$(DIROBJECTS))
  823. smart: fpc_smart $(addsuffix _smart,$(DIROBJECTS))
  824. shared: fpc_shared $(addsuffix _shared,$(DIROBJECTS))
  825. showinstall: fpc_showinstall $(addsuffix _showinstall,$(DIROBJECTS))
  826. install: fpc_install $(addsuffix _install,$(DIROBJECTS))
  827. sourceinstall: fpc_sourceinstall
  828. exampleinstall: fpc_exampleinstall
  829. zipinstall: fpc_zipinstall
  830. zipsourceinstall: fpc_zipsourceinstall
  831. zipexampleinstall: fpc_zipexampleinstall
  832. clean: fpc_clean $(addsuffix _clean,$(DIROBJECTS))
  833. distclean: fpc_distclean $(addsuffix _distclean,$(DIROBJECTS))
  834. cleanall: fpc_cleanall $(addsuffix _cleanall,$(DIROBJECTS))
  835. require: $(addsuffix _require,$(DIROBJECTS))
  836. info: fpc_info
  837. .PHONY: all debug smart shared showinstall install sourceinstall exampleinstall zipinstall zipsourceinstall zipexampleinstall clean distclean cleanall require info
  838. #####################################################################
  839. # Exes
  840. #####################################################################
  841. .PHONY: fpc_exes
  842. ifdef EXEOBJECTS
  843. override EXEFILES=$(addsuffix $(EXEEXT),$(EXEOBJECTS))
  844. override EXEOFILES:=$(addsuffix $(OEXT),$(EXEOBJECTS)) $(addprefix $(LIBPREFIX),$(addsuffix $(STATICLIBEXT),$(EXEOBJECTS)))
  845. override ALLTARGET+=fpc_exes
  846. override INSTALLEXEFILES+=$(EXEFILES)
  847. override CLEANEXEFILES+=$(EXEFILES) $(EXEOFILES)
  848. endif
  849. fpc_exes: $(EXEFILES)
  850. #####################################################################
  851. # General compile rules
  852. #####################################################################
  853. .PHONY: fpc_packages fpc_all fpc_debug
  854. $(FPCMADE): $(ALLTARGET)
  855. @$(ECHO) Compiled > $(FPCMADE)
  856. fpc_packages: $(COMPILEPACKAGES)
  857. fpc_all: fpc_packages $(FPCMADE)
  858. fpc_debug:
  859. $(MAKE) all DEBUG=1
  860. # Search paths for .ppu if targetdir is set
  861. ifdef UNITTARGETDIR
  862. vpath %$(PPUEXT) $(UNITTARGETDIR)
  863. endif
  864. # General compile rules, available for both possible PASEXT
  865. .SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .pp
  866. %$(PPUEXT): %.pp
  867. $(COMPILER) $< $(REDIR)
  868. $(EXECPPAS)
  869. %$(PPUEXT): %.pas
  870. $(COMPILER) $< $(REDIR)
  871. $(EXECPPAS)
  872. %$(EXEEXT): %.pp
  873. $(COMPILER) $< $(REDIR)
  874. $(EXECPPAS)
  875. %$(EXEEXT): %.pas
  876. $(COMPILER) $< $(REDIR)
  877. $(EXECPPAS)
  878. #####################################################################
  879. # Library
  880. #####################################################################
  881. .PHONY: fpc_smart fpc_shared
  882. ifdef LIBVERSION
  883. LIBFULLNAME=$(LIBNAME).$(LIBVERSION)
  884. else
  885. LIBFULLNAME=$(LIBNAME)
  886. endif
  887. # Default sharedlib units are all unit objects
  888. ifndef SHAREDLIBUNITOBJECTS
  889. SHAREDLIBUNITOBJECTS:=$(UNITOBJECTS)
  890. endif
  891. fpc_smart:
  892. $(MAKE) all LINKSMART=1 CREATESMART=1
  893. fpc_shared: all
  894. ifdef HASSHAREDLIB
  895. ifndef LIBNAME
  896. @$(ECHO) "LIBNAME not set"
  897. else
  898. $(PPUMOVE) $(SHAREDLIBUNITOBJECTS) -o$(LIBFULLNAME)
  899. endif
  900. else
  901. @$(ECHO) "Shared Libraries not supported"
  902. endif
  903. #####################################################################
  904. # Install rules
  905. #####################################################################
  906. .PHONY: fpc_showinstall fpc_install
  907. ifdef EXTRAINSTALLUNITS
  908. override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(EXTRAINSTALLUNITS))
  909. endif
  910. ifdef INSTALLPPUFILES
  911. override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPUFILES))
  912. ifdef PPUFILES
  913. INSTALLPPULINKFILES:=$(shell $(PPUFILES) -S -O $(INSTALLPPUFILES))
  914. else
  915. INSTALLPPULINKFILES:=$(wildcard $(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(LIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))))
  916. endif
  917. override INSTALLPPULINKFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPULINKFILES))
  918. endif
  919. ifdef INSTALLEXEFILES
  920. override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(INSTALLEXEFILES))
  921. endif
  922. fpc_showinstall: $(SHOWINSTALLTARGET)
  923. ifdef INSTALLEXEFILES
  924. @$(ECHO) -e $(addprefix "\n"$(BININSTALLDIR)/,$(INSTALLEXEFILES))
  925. endif
  926. ifdef INSTALLPPUFILES
  927. @$(ECHO) -e $(addprefix "\n"$(UNITINSTALLDIR)/,$(INSTALLPPUFILES))
  928. ifneq ($(INSTALLPPULINKFILES),)
  929. @$(ECHO) -e $(addprefix "\n"$(UNITINSTALLDIR)/,$(INSTALLPPULINKFILES))
  930. endif
  931. ifneq ($(wildcard $(LIBFULLNAME)),)
  932. @$(ECHO) $(LIBINSTALLDIR)/$(LIBFULLNAME)
  933. ifdef HASSHAREDLIB
  934. @$(ECHO) $(LIBINSTALLDIR)/$(LIBNAME)
  935. endif
  936. endif
  937. endif
  938. ifdef EXTRAINSTALLFILES
  939. @$(ECHO) -e $(addprefix "\n"$(DATAINSTALLDIR)/,$(EXTRAINSTALLFILES))
  940. endif
  941. fpc_install: $(INSTALLTARGET)
  942. # Create UnitInstallFiles
  943. ifdef INSTALLEXEFILES
  944. $(MKDIR) $(BININSTALLDIR)
  945. # Compress the exes if upx is defined
  946. ifdef UPXPROG
  947. -$(UPXPROG) $(INSTALLEXEFILES)
  948. endif
  949. $(INSTALLEXE) $(INSTALLEXEFILES) $(BININSTALLDIR)
  950. endif
  951. ifdef INSTALLPPUFILES
  952. $(MKDIR) $(UNITINSTALLDIR)
  953. $(INSTALL) $(INSTALLPPUFILES) $(UNITINSTALLDIR)
  954. ifneq ($(INSTALLPPULINKFILES),)
  955. $(INSTALL) $(INSTALLPPULINKFILES) $(UNITINSTALLDIR)
  956. endif
  957. ifneq ($(wildcard $(LIBFULLNAME)),)
  958. $(MKDIR) $(LIBINSTALLDIR)
  959. $(INSTALL) $(LIBFULLNAME) $(LIBINSTALLDIR)
  960. ifdef inUnix
  961. ln -sf $(LIBFULLNAME) $(LIBINSTALLDIR)/$(LIBNAME)
  962. endif
  963. endif
  964. endif
  965. ifdef EXTRAINSTALLFILES
  966. $(MKDIR) $(DATAINSTALLDIR)
  967. $(INSTALL) $(EXTRAINSTALLFILES) $(DATAINSTALLDIR)
  968. endif
  969. #####################################################################
  970. # SourceInstall rules
  971. #####################################################################
  972. .PHONY: fpc_sourceinstall
  973. ifndef SOURCETOPDIR
  974. SOURCETOPDIR=$(BASEDIR)
  975. endif
  976. fpc_sourceinstall: clean
  977. $(MKDIR) $(SOURCEINSTALLDIR)
  978. $(COPYTREE) $(SOURCETOPDIR) $(SOURCEINSTALLDIR)
  979. #####################################################################
  980. # exampleinstall rules
  981. #####################################################################
  982. .PHONY: fpc_exampleinstall
  983. fpc_exampleinstall: $(addsuffix _clean,$(EXAMPLEDIROBJECTS))
  984. ifdef EXAMPLESOURCEFILES
  985. $(MKDIR) $(EXAMPLEINSTALLDIR)
  986. $(COPY) $(EXAMPLESOURCEFILES) $(EXAMPLEINSTALLDIR)
  987. endif
  988. ifdef EXAMPLEDIROBJECTS
  989. ifndef EXAMPLESOURCEFILES
  990. $(MKDIR) $(EXAMPLEINSTALLDIR)
  991. endif
  992. $(COPYTREE) $(addsuffix /*,$(EXAMPLEDIROBJECTS)) $(EXAMPLEINSTALLDIR)
  993. endif
  994. #####################################################################
  995. # Zip
  996. #####################################################################
  997. .PHONY: fpc_zipinstall
  998. # Create suffix to add
  999. ifndef PACKAGESUFFIX
  1000. PACKAGESUFFIX=$(OS_TARGET)
  1001. ifeq ($(OS_TARGET),go32v2)
  1002. PACKAGESUFFIX=go32
  1003. endif
  1004. ifeq ($(OS_TARGET),win32)
  1005. PACKAGESUFFIX=w32
  1006. endif
  1007. ifeq ($(OS_TARGET),os2)
  1008. PACKAGESUFFIX=emx
  1009. endif
  1010. endif
  1011. # Temporary path to pack a file
  1012. ifndef PACKDIR
  1013. ifndef inUnix
  1014. PACKDIR=$(BASEDIR)/pack_tmp
  1015. else
  1016. PACKDIR=/tmp/fpc-pack
  1017. endif
  1018. endif
  1019. # Maybe create default zipname from packagename
  1020. ifndef ZIPNAME
  1021. ifdef PACKAGENAME
  1022. ZIPNAME=$(PACKAGEPREFIX)$(PACKAGENAME)$(PACKAGESUFFIX)
  1023. endif
  1024. endif
  1025. # Use tar by default under linux
  1026. ifndef USEZIP
  1027. ifdef inUnix
  1028. USETAR=1
  1029. endif
  1030. endif
  1031. fpc_zipinstall:
  1032. ifndef ZIPNAME
  1033. @$(ECHO) "Please specify ZIPNAME!"
  1034. @exit 1
  1035. else
  1036. $(MAKE) $(ZIPTARGET) PREFIXINSTALLDIR=$(PACKDIR)
  1037. ifdef USETAR
  1038. $(DEL) $(DESTZIPDIR)/$(ZIPNAME)$(TAREXT)
  1039. cd $(PACKDIR) ; $(TARPROG) cf$(TAROPT) $(DESTZIPDIR)/$(ZIPNAME)$(TAREXT) * ; cd $(BASEDIR)
  1040. else
  1041. $(DEL) $(DESTZIPDIR)/$(ZIPNAME)$(ZIPEXT)
  1042. cd $(PACKDIR) ; $(ZIPPROG) -Dr $(ZIPOPT) $(DESTZIPDIR)/$(ZIPNAME)$(ZIPEXT) * ; cd $(BASEDIR)
  1043. endif
  1044. $(DELTREE) $(PACKDIR)
  1045. endif
  1046. .PHONY: fpc_zipsourceinstall
  1047. fpc_zipsourceinstall:
  1048. $(MAKE) fpc_zipinstall ZIPTARGET=sourceinstall PACKAGESUFFIX=src
  1049. .PHONY: fpc_zipexampleinstall
  1050. fpc_zipexampleinstall:
  1051. $(MAKE) fpc_zipinstall ZIPTARGET=exampleinstall PACKAGESUFFIX=exm
  1052. #####################################################################
  1053. # Clean rules
  1054. #####################################################################
  1055. .PHONY: fpc_clean fpc_cleanall fpc_distclean
  1056. ifdef EXEFILES
  1057. override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
  1058. endif
  1059. ifdef EXTRACLEANUNITS
  1060. override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(EXTRACLEANUNITS))
  1061. endif
  1062. ifdef CLEANPPUFILES
  1063. override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES))
  1064. # Get the .o and .a files created for the units
  1065. ifdef PPUFILES
  1066. CLEANPPULINKFILES:=$(shell $(PPUFILES) $(CLEANPPUFILES))
  1067. else
  1068. CLEANPPULINKFILES:=$(wildcard $(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(LIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))))
  1069. endif
  1070. override CLEANPPULINKFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES))
  1071. endif
  1072. fpc_clean: $(CLEANTARGET)
  1073. ifdef CLEANEXEFILES
  1074. -$(DEL) $(CLEANEXEFILES)
  1075. endif
  1076. ifdef CLEANPPUFILES
  1077. -$(DEL) $(CLEANPPUFILES)
  1078. endif
  1079. ifneq ($(CLEANPPULINKFILES),)
  1080. -$(DEL) $(CLEANPPULINKFILES)
  1081. endif
  1082. ifdef CLEANRSTFILES
  1083. -$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
  1084. endif
  1085. ifdef EXTRACLEANFILES
  1086. -$(DEL) $(EXTRACLEANFILES)
  1087. endif
  1088. ifdef LIBNAME
  1089. -$(DEL) $(LIBNAME) $(LIBFULLNAME)
  1090. endif
  1091. -$(DEL) $(FPCMADE) $(PPAS) link.res $(FPCEXTFILE) $(REDIRFILE)
  1092. fpc_distclean: fpc_clean
  1093. # Also run clean first if targetdir is set. Unittargetdir is always
  1094. # set if targetdir or unittargetdir is specified
  1095. ifdef UNITTARGETDIR
  1096. TARGETDIRCLEAN=fpc_clean
  1097. endif
  1098. fpc_cleanall: $(CLEANTARGET) $(TARGETDIRCLEAN)
  1099. ifdef CLEANEXEFILES
  1100. -$(DEL) $(CLEANEXEFILES)
  1101. endif
  1102. -$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
  1103. -$(DELTREE) *$(SMARTEXT)
  1104. -$(DEL) $(FPCMADE) $(PPAS) link.res $(FPCEXTFILE) $(REDIRFILE)
  1105. #####################################################################
  1106. # Info rules
  1107. #####################################################################
  1108. .PHONY: fpc_info fpc_cfginfo fpc_objectinfo fpc_toolsinfo fpc_installinfo \
  1109. fpc_dirinfo
  1110. fpc_info: $(INFOTARGET)
  1111. fpc_infocfg:
  1112. @$(ECHO)
  1113. @$(ECHO) == Configuration info ==
  1114. @$(ECHO)
  1115. @$(ECHO) FPC....... $(FPC)
  1116. @$(ECHO) Version... $(FPC_VERSION)
  1117. @$(ECHO) CPU....... $(CPU_TARGET)
  1118. @$(ECHO) Source.... $(OS_SOURCE)
  1119. @$(ECHO) Target.... $(OS_TARGET)
  1120. @$(ECHO)
  1121. fpc_infoobjects:
  1122. @$(ECHO)
  1123. @$(ECHO) == Object info ==
  1124. @$(ECHO)
  1125. @$(ECHO) LoaderObjects..... $(LOADEROBJECTS)
  1126. @$(ECHO) UnitObjects....... $(UNITOBJECTS)
  1127. @$(ECHO) ExeObjects........ $(EXEOBJECTS)
  1128. @$(ECHO)
  1129. @$(ECHO) ExtraCleanUnits... $(EXTRACLEANUNITS)
  1130. @$(ECHO) ExtraCleanFiles... $(EXTRACLEANFILES)
  1131. @$(ECHO)
  1132. @$(ECHO) ExtraInstallUnits. $(EXTRAINSTALLUNITS)
  1133. @$(ECHO) ExtraInstallFiles. $(EXTRAINSTALLFILES)
  1134. @$(ECHO)
  1135. fpc_infoinstall:
  1136. @$(ECHO)
  1137. @$(ECHO) == Install info ==
  1138. @$(ECHO)
  1139. ifdef DATE
  1140. @$(ECHO) DateStr.............. $(DATESTR)
  1141. endif
  1142. ifdef PACKAGEPREFIX
  1143. @$(ECHO) PackagePrefix........ $(PACKAGEPREFIX)
  1144. endif
  1145. ifdef PACKAGENAME
  1146. @$(ECHO) PackageName.......... $(PACKAGENAME)
  1147. endif
  1148. @$(ECHO) PackageSuffix........ $(PACKAGESUFFIX)
  1149. @$(ECHO)
  1150. @$(ECHO) BaseInstallDir....... $(BASEINSTALLDIR)
  1151. @$(ECHO) BinInstallDir........ $(BININSTALLDIR)
  1152. @$(ECHO) LibInstallDir........ $(LIBINSTALLDIR)
  1153. @$(ECHO) UnitInstallDir....... $(UNITINSTALLDIR)
  1154. @$(ECHO) SourceInstallDir..... $(SOURCEINSTALLDIR)
  1155. @$(ECHO) DocInstallDir........ $(DOCINSTALLDIR)
  1156. @$(ECHO) DataInstallDir....... $(DATAINSTALLDIR)
  1157. @$(ECHO)
  1158. @$(ECHO) DestZipDir........... $(DESTZIPDIR)
  1159. @$(ECHO) ZipName.............. $(ZIPNAME)
  1160. @$(ECHO)
  1161. #####################################################################
  1162. # Directories
  1163. #####################################################################
  1164. OBJECTDIRTPLY=1
  1165. OBJECTDIRH2PAS=1
  1166. OBJECTDIRFPRCP=1
  1167. # Dir tply
  1168. ifdef OBJECTDIRTPLY
  1169. .PHONY: tply_all tply_debug tply_examples tply_test tply_smart tply_shared tply_showinstall tply_install tply_sourceinstall tply_exampleinstall tply_zipinstall tply_zipsourceinstall tply_zipexampleinstall tply_clean tply_distclean tply_cleanall tply_require tply_info
  1170. tply_all:
  1171. $(MAKE) -C tply all
  1172. tply_debug:
  1173. $(MAKE) -C tply debug
  1174. tply_examples:
  1175. $(MAKE) -C tply examples
  1176. tply_test:
  1177. $(MAKE) -C tply test
  1178. tply_smart:
  1179. $(MAKE) -C tply smart
  1180. tply_shared:
  1181. $(MAKE) -C tply shared
  1182. tply_showinstall:
  1183. $(MAKE) -C tply showinstall
  1184. tply_install:
  1185. $(MAKE) -C tply install
  1186. tply_sourceinstall:
  1187. $(MAKE) -C tply sourceinstall
  1188. tply_exampleinstall:
  1189. $(MAKE) -C tply exampleinstall
  1190. tply_zipinstall:
  1191. $(MAKE) -C tply zipinstall
  1192. tply_zipsourceinstall:
  1193. $(MAKE) -C tply zipsourceinstall
  1194. tply_zipexampleinstall:
  1195. $(MAKE) -C tply zipexampleinstall
  1196. tply_clean:
  1197. $(MAKE) -C tply clean
  1198. tply_distclean:
  1199. $(MAKE) -C tply distclean
  1200. tply_cleanall:
  1201. $(MAKE) -C tply cleanall
  1202. tply_require:
  1203. $(MAKE) -C tply require
  1204. tply_info:
  1205. $(MAKE) -C tply info
  1206. endif
  1207. # Dir h2pas
  1208. ifdef OBJECTDIRH2PAS
  1209. .PHONY: h2pas_all h2pas_debug h2pas_examples h2pas_test h2pas_smart h2pas_shared h2pas_showinstall h2pas_install h2pas_sourceinstall h2pas_exampleinstall h2pas_zipinstall h2pas_zipsourceinstall h2pas_zipexampleinstall h2pas_clean h2pas_distclean h2pas_cleanall h2pas_require h2pas_info
  1210. h2pas_all:
  1211. $(MAKE) -C h2pas all
  1212. h2pas_debug:
  1213. $(MAKE) -C h2pas debug
  1214. h2pas_examples:
  1215. $(MAKE) -C h2pas examples
  1216. h2pas_test:
  1217. $(MAKE) -C h2pas test
  1218. h2pas_smart:
  1219. $(MAKE) -C h2pas smart
  1220. h2pas_shared:
  1221. $(MAKE) -C h2pas shared
  1222. h2pas_showinstall:
  1223. $(MAKE) -C h2pas showinstall
  1224. h2pas_install:
  1225. $(MAKE) -C h2pas install
  1226. h2pas_sourceinstall:
  1227. $(MAKE) -C h2pas sourceinstall
  1228. h2pas_exampleinstall:
  1229. $(MAKE) -C h2pas exampleinstall
  1230. h2pas_zipinstall:
  1231. $(MAKE) -C h2pas zipinstall
  1232. h2pas_zipsourceinstall:
  1233. $(MAKE) -C h2pas zipsourceinstall
  1234. h2pas_zipexampleinstall:
  1235. $(MAKE) -C h2pas zipexampleinstall
  1236. h2pas_clean:
  1237. $(MAKE) -C h2pas clean
  1238. h2pas_distclean:
  1239. $(MAKE) -C h2pas distclean
  1240. h2pas_cleanall:
  1241. $(MAKE) -C h2pas cleanall
  1242. h2pas_require:
  1243. $(MAKE) -C h2pas require
  1244. h2pas_info:
  1245. $(MAKE) -C h2pas info
  1246. endif
  1247. # Dir fprcp
  1248. ifdef OBJECTDIRFPRCP
  1249. .PHONY: fprcp_all fprcp_debug fprcp_examples fprcp_test fprcp_smart fprcp_shared fprcp_showinstall fprcp_install fprcp_sourceinstall fprcp_exampleinstall fprcp_zipinstall fprcp_zipsourceinstall fprcp_zipexampleinstall fprcp_clean fprcp_distclean fprcp_cleanall fprcp_require fprcp_info
  1250. fprcp_all:
  1251. $(MAKE) -C fprcp all
  1252. fprcp_debug:
  1253. $(MAKE) -C fprcp debug
  1254. fprcp_examples:
  1255. $(MAKE) -C fprcp examples
  1256. fprcp_test:
  1257. $(MAKE) -C fprcp test
  1258. fprcp_smart:
  1259. $(MAKE) -C fprcp smart
  1260. fprcp_shared:
  1261. $(MAKE) -C fprcp shared
  1262. fprcp_showinstall:
  1263. $(MAKE) -C fprcp showinstall
  1264. fprcp_install:
  1265. $(MAKE) -C fprcp install
  1266. fprcp_sourceinstall:
  1267. $(MAKE) -C fprcp sourceinstall
  1268. fprcp_exampleinstall:
  1269. $(MAKE) -C fprcp exampleinstall
  1270. fprcp_zipinstall:
  1271. $(MAKE) -C fprcp zipinstall
  1272. fprcp_zipsourceinstall:
  1273. $(MAKE) -C fprcp zipsourceinstall
  1274. fprcp_zipexampleinstall:
  1275. $(MAKE) -C fprcp zipexampleinstall
  1276. fprcp_clean:
  1277. $(MAKE) -C fprcp clean
  1278. fprcp_distclean:
  1279. $(MAKE) -C fprcp distclean
  1280. fprcp_cleanall:
  1281. $(MAKE) -C fprcp cleanall
  1282. fprcp_require:
  1283. $(MAKE) -C fprcp require
  1284. fprcp_info:
  1285. $(MAKE) -C fprcp info
  1286. endif
  1287. #####################################################################
  1288. # Local Makefile
  1289. #####################################################################
  1290. ifneq ($(wildcard fpcmake.loc),)
  1291. include fpcmake.loc
  1292. endif
  1293. #####################################################################
  1294. # Users rules
  1295. #####################################################################
  1296. #
  1297. # PPU Tools
  1298. #
  1299. ppu$(PPUEXT): ppu.pas
  1300. ppudump$(EXEEXT): ppudump.pp ppu$(PPUEXT)
  1301. ppumove$(EXEEXT): ppumove.pp ppu$(PPUEXT)
  1302. #
  1303. # Pascal beautifier
  1304. #
  1305. ptop$(EXEEXT): ptop.pp ptopu$(PPUEXT)
  1306. ptopu$(PPUEXT): ptopu.pp
  1307. #
  1308. # Other
  1309. #
  1310. makeini$(PPUEXT): makeini.pp
  1311. fpcmake.inc: fpcmake.ini
  1312. $(DATA2INC) -b -s fpcmake.ini fpcmake.inc fpcmakeini
  1313. fpcmake$(EXEEXT): fpcmake.pp fpcmake.inc makeini$(PPUEXT)
  1314. ppdep$(EXEEXT): ppdep.pp
  1315. #
  1316. # Don't export some tools, which are found in the current dir if it's in
  1317. # the path, so are not valid for the subdirs
  1318. #
  1319. unexport PPUFILES PPUMOVE DATA2INC