Makefile 24 KB

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