Makefile 21 KB

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