Makefile 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972
  1. #
  2. # Makefile generated from Makefile.fpc on 1999-11-09 16:25
  3. #
  4. defaultrule: Makefile all
  5. Makefile: Makefile.fpc
  6. fpcmake
  7. #####################################################################
  8. # Autodetect OS (Linux or Dos or Windows NT)
  9. # define inlinux when running under linux
  10. # define inWinNT when running under WinNT
  11. #####################################################################
  12. # We need only / in the path
  13. override PATH:=$(subst \,/,$(PATH))
  14. # Search for PWD and determine also if we are under linux
  15. PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(subst ;, ,$(PATH)))))
  16. ifeq ($(PWD),)
  17. PWD:=$(strip $(wildcard $(addsuffix /pwd,$(subst :, ,$(PATH)))))
  18. ifeq ($(PWD),)
  19. nopwd:
  20. @echo You need the GNU utils package to use this Makefile!
  21. @echo Get ftp://ftp.freepascal.org/pub/fpc/dist/go32v2/utilgo32.zip
  22. @exit
  23. else
  24. inlinux=1
  25. endif
  26. else
  27. PWD:=$(firstword $(PWD))
  28. endif
  29. # Detect NT - NT sets OS to Windows_NT
  30. ifndef inlinux
  31. ifeq ($(OS),Windows_NT)
  32. inWinNT=1
  33. endif
  34. endif
  35. # Detect OS/2 - OS/2 has OS2_SHELL defined
  36. ifndef inlinux
  37. ifndef inWinNT
  38. ifdef OS2_SHELL
  39. inOS2=1
  40. endif
  41. endif
  42. endif
  43. # The extension of executables
  44. ifdef inlinux
  45. EXEEXT=
  46. else
  47. EXEEXT=.exe
  48. endif
  49. # The path which is search separated by spaces
  50. ifdef inlinux
  51. SEARCHPATH=$(subst :, ,$(PATH))
  52. else
  53. SEARCHPATH=$(subst ;, ,$(PATH))
  54. endif
  55. #####################################################################
  56. # FPC version/target Detection
  57. #####################################################################
  58. # What compiler to use ?
  59. ifndef FPC
  60. ifdef inOS2
  61. export FPC=ppos2$(EXEEXT)
  62. else
  63. export FPC=ppc386$(EXEEXT)
  64. endif
  65. endif
  66. # Target OS
  67. ifndef OS_TARGET
  68. export OS_TARGET:=$(shell $(FPC) -iTO)
  69. endif
  70. # Source OS
  71. ifndef OS_SOURCE
  72. export OS_SOURCE:=$(shell $(FPC) -iSO)
  73. endif
  74. # Target CPU
  75. ifndef CPU_TARGET
  76. export CPU_TARGET:=$(shell $(FPC) -iTP)
  77. endif
  78. # Source CPU
  79. ifndef CPU_SOURCE
  80. export CPU_SOURCE:=$(shell $(FPC) -iSP)
  81. endif
  82. # FPC version
  83. ifndef FPC_VERSION
  84. export FPC_VERSION:=$(shell $(FPC) -iV)
  85. endif
  86. #####################################################################
  87. # Default Settings
  88. #####################################################################
  89. # Release ? Then force OPT and don't use extra opts via commandline
  90. ifdef RELEASE
  91. override OPT:=-Xs -OG2p3 -n
  92. endif
  93. # Verbose settings (warning,note,info)
  94. ifdef VERBOSE
  95. override OPT+=-vwni
  96. endif
  97. #####################################################################
  98. # User Settings
  99. #####################################################################
  100. # Targets
  101. EXEOBJECTS=ppudump ppumove ppdep ptop rstconv fpcmake data2inc
  102. # Clean
  103. EXTRACLEANUNITS=ppu ptopu
  104. # Install
  105. # Defaults
  106. # Directories
  107. ifndef FPCDIR
  108. FPCDIR=..
  109. endif
  110. override NEEDUNITDIR=$(FPCDIR)/fcl/$(OS_TARGET)
  111. ifndef TARGETDIR
  112. TARGETDIR=.
  113. endif
  114. # Libraries
  115. # Info
  116. FPCINFO=fpc_infocfg fpc_infoobjects fpc_infoinstall
  117. #####################################################################
  118. # Compiler Command Line
  119. #####################################################################
  120. # Load commandline OPTDEF and add FPC_CPU define
  121. override FPCOPTDEF:=-d$(CPU_TARGET)
  122. # Load commandline OPT and add target and unit dir to be sure
  123. ifneq ($(OS_TARGET),$(OS_SOURCE))
  124. override FPCOPT+=-T$(OS_TARGET)
  125. endif
  126. ifdef NEEDOPT
  127. override FPCOPT+=$(NEEDOPT)
  128. endif
  129. # RTL first and then Unit dir (a unit can override RTLunit). Don't add the
  130. # dirs if fpcdir=. which can be used for the rtl makefiles
  131. ifdef FPCDIR
  132. ifneq ($(FPCDIR),.)
  133. override FPCOPT+=-Fu$(FPCDIR)/rtl/$(OS_TARGET) -Fu$(FPCDIR)/units/$(OS_TARGET)
  134. endif
  135. endif
  136. ifdef NEEDUNITDIR
  137. override FPCOPT+=$(addprefix -Fu,$(NEEDUNITDIR))
  138. endif
  139. # Target dirs
  140. ifdef TARGETDIR
  141. override FPCOPT+=-FE$(TARGETDIR)
  142. endif
  143. # Smartlinking
  144. ifeq ($(SMARTLINK),YES)
  145. override FPCOPT+=-Cx
  146. endif
  147. # Add commandline options
  148. ifdef OPT
  149. override FPCOPT+=$(OPT)
  150. endif
  151. ifdef UNITDIR
  152. override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
  153. endif
  154. ifdef LIBDIR
  155. override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
  156. endif
  157. ifdef OBJDIR
  158. override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
  159. endif
  160. ifdef INCDIR
  161. override FPCOPT+=$(addprefix -Fi,$(INCDIR))
  162. endif
  163. # Add defines from FPCOPTDEF to FPCOPT
  164. ifdef FPCOPTDEF
  165. override FPCOPT+=$(FPCOPTDEF)
  166. endif
  167. # Was a config file specified ?
  168. ifdef CFGFILE
  169. override FPCOPT+=@$(CFGFILE)
  170. endif
  171. override COMPILER=$(FPC) $(FPCOPT)
  172. #####################################################################
  173. # Shell tools
  174. #####################################################################
  175. # To copy pograms
  176. ifndef COPY
  177. export COPY:=cp -fp
  178. endif
  179. # To move pograms
  180. ifndef MOVE
  181. export MOVE:=mv -f
  182. endif
  183. # Check delete program
  184. ifndef DEL
  185. export DEL:=rm -f
  186. endif
  187. # Check deltree program
  188. ifndef DELTREE
  189. export DELTREE:=rm -rf
  190. endif
  191. # To install files
  192. ifndef INSTALL
  193. ifdef inlinux
  194. export INSTALL:=install -m 644
  195. else
  196. export INSTALL:=$(COPY)
  197. endif
  198. endif
  199. # To install programs
  200. ifndef INSTALLEXE
  201. ifdef inlinux
  202. export INSTALLEXE:=install -m 755
  203. else
  204. export INSTALLEXE:=$(COPY)
  205. endif
  206. endif
  207. # To make a directory.
  208. ifndef MKDIR
  209. ifdef inlinux
  210. export MKDIR:=install -m 755 -d
  211. else
  212. export MKDIR:=ginstall -m 755 -d
  213. endif
  214. endif
  215. #####################################################################
  216. # Default Tools
  217. #####################################################################
  218. # assembler, redefine it if cross compiling
  219. ifndef AS
  220. AS=as
  221. endif
  222. # linker, but probably not used
  223. ifndef LD
  224. LD=ld
  225. endif
  226. # Where is the ppumove program ?
  227. ifndef PPUMOVE
  228. PPUMOVE=ppumove
  229. endif
  230. # Where is the ppdep program ?
  231. ifndef PPDEP
  232. PPDEP=ppdep
  233. endif
  234. # ppas.bat / ppas.sh
  235. ifdef inlinux
  236. PPAS=ppas.sh
  237. else
  238. ifdef inOS2
  239. PPAS=ppas.cmd
  240. else
  241. PPAS=ppas.bat
  242. endif
  243. endif
  244. # also call ppas if with command option -s
  245. ifeq (,$(findstring -s ,$(COMPILER)))
  246. EXECPPAS=
  247. else
  248. EXECPPAS=@$(PPAS)
  249. endif
  250. # ldconfig to rebuild .so cache
  251. ifdef inlinux
  252. LDCONFIG=ldconfig
  253. else
  254. LDCONFIG=
  255. endif
  256. # echo
  257. ifndef ECHO
  258. ECHO:=$(strip $(wildcard $(addsuffix /echo$(EXEEXT),$(SEARCHPATH))))
  259. ifeq ($(ECHO),)
  260. export ECHO:=echo
  261. else
  262. export ECHO:=$(firstword $(ECHO))
  263. endif
  264. endif
  265. # Look if UPX is found for go32v2 and win32. We can't use $UPX becuase
  266. # upx uses that one itself (PFV)
  267. ifndef UPXPROG
  268. ifeq ($(OS_TARGET),go32v2)
  269. UPXPROG:=1
  270. endif
  271. ifeq ($(OS_TARGET),win32)
  272. UPXPROG:=1
  273. endif
  274. ifdef UPXPROG
  275. UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(EXEEXT),$(SEARCHPATH))))
  276. ifeq ($(UPX),)
  277. UPXPROG=
  278. else
  279. export UPXPROG:=$(firstword $(UPX))
  280. endif
  281. else
  282. UPXPROG=
  283. endif
  284. endif
  285. # gdate/date
  286. ifndef DATE
  287. DATE:=$(strip $(wildcard $(addsuffix /date$(EXEEXT),$(SEARCHPATH))))
  288. ifeq ($(DATE),)
  289. DATE:=$(strip $(wildcard $(addsuffix /gdate$(EXEEXT),$(SEACHPATH))))
  290. ifeq ($(DATE),)
  291. DATE=
  292. else
  293. export DATE:=$(firstword $(DATE))
  294. endif
  295. else
  296. export DATE:=$(firstword $(DATE))
  297. endif
  298. endif
  299. ifdef DATE
  300. DATESTR:=$(shell $(DATE) +%Y%m%d)
  301. else
  302. DATESTR=
  303. endif
  304. # ZipProg, you can't use Zip as the var name (PFV)
  305. ifndef ZIPPROG
  306. ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(EXEEXT),$(SEARCHPATH))))
  307. ifeq ($(ZIPPROG),)
  308. ZIPPROG=
  309. else
  310. export ZIPPROG:=$(firstword $(ZIPPROG)) -D9 -r
  311. endif
  312. endif
  313. ifndef ZIPEXT
  314. ZIPEXT=.zip
  315. endif
  316. #####################################################################
  317. # Default Directories
  318. #####################################################################
  319. # Base dir
  320. ifdef PWD
  321. BASEDIR:=$(shell $(PWD))
  322. else
  323. BASEDIR=.
  324. endif
  325. # set the prefix directory where to install everything
  326. ifndef PREFIXINSTALLDIR
  327. ifdef inlinux
  328. export PREFIXINSTALLDIR=/usr
  329. else
  330. export PREFIXINSTALLDIR=/pp
  331. endif
  332. endif
  333. # set the directory to the rtl base
  334. ifndef RTLDIR
  335. ifdef RTL
  336. RTLDIR:=$(RTL)/$(OS_TARGET)
  337. else
  338. RTLDIR:=$(FPCDIR)/rtl/$(OS_TARGET)
  339. endif
  340. endif
  341. # specify where units are.
  342. ifndef UNITDIR
  343. ifdef UNITS
  344. UNITDIR=$(UNITS)/$(OS_TARGET)
  345. else
  346. UNITDIR=$(FPCDIR)/units/$(OS_TARGET)
  347. endif
  348. endif
  349. ifeq ($(strip $(wildcard $(UNITDIR)/*)),)
  350. UNITDIR=
  351. endif
  352. # On linux, try to find where libgcc.a is.
  353. ifdef inlinux
  354. ifndef GCCLIBDIR
  355. export GCCLIBDIR:=$(shell dirname `(gcc -v 2>&1)| head -n 1| awk '{ print $$4 } '`)
  356. endif
  357. endif
  358. # Where to find other libraries
  359. ifdef inlinux
  360. ifndef OTHERLIBDIR
  361. export OTHERLIBDIR:=$(shell grep -v "^\#" /etc/ld.so.conf | awk '{ ORS=" "; print $1 }')
  362. endif
  363. endif
  364. #####################################################################
  365. # Install Directories based on BASEINSTALLDIR
  366. #####################################################################
  367. # set the base directory where to install everything
  368. ifndef BASEINSTALLDIR
  369. ifdef inlinux
  370. BASEINSTALLDIR=$(PREFIXINSTALLDIR)/lib/fpc/$(FPC_VERSION)
  371. else
  372. BASEINSTALLDIR=$(PREFIXINSTALLDIR)
  373. endif
  374. endif
  375. # Linux binary really goes to baseinstalldir
  376. ifndef LIBINSTALLDIR
  377. ifdef inlinux
  378. LIBINSTALLDIR=$(BASEINSTALLDIR)
  379. else
  380. LIBINSTALLDIR=$(BASEINSTALLDIR)/lib
  381. endif
  382. endif
  383. # set the directory where to install the binaries
  384. ifndef BININSTALLDIR
  385. ifdef inlinux
  386. BININSTALLDIR=$(PREFIXINSTALLDIR)/bin
  387. else
  388. BININSTALLDIR=$(BASEINSTALLDIR)/bin/$(OS_TARGET)
  389. endif
  390. endif
  391. # Where the .msg files will be stored
  392. ifndef MSGINSTALLDIR
  393. MSGINSTALLDIR=$(BASEINSTALLDIR)/msg
  394. endif
  395. # Where the .msg files will be stored
  396. ifndef SOURCEINSTALLDIR
  397. SOURCEINSTALLDIR=$(BASEINSTALLDIR)/source
  398. endif
  399. # Where the doc files will be stored
  400. ifndef DOCINSTALLDIR
  401. ifdef inlinux
  402. DOCINSTALLDIR=$(PREFIXINSTALLDIR)/doc/fpc/$(FPC_VERSION)
  403. else
  404. DOCINSTALLDIR=$(BASEINSTALLDIR)/doc
  405. endif
  406. endif
  407. ########################
  408. # Unit Directories
  409. ########################
  410. # this can be set to 'rtl' when the RTL units are installed
  411. ifndef UNITPREFIX
  412. UNITPREFIX=units
  413. endif
  414. # set the directory where to install the units.
  415. ifndef UNITINSTALLDIR
  416. UNITINSTALLDIR=$(BASEINSTALLDIR)/$(UNITPREFIX)/$(OS_TARGET)
  417. endif
  418. # set the directory where to install the units.
  419. ifndef STATIC_UNITINSTALLDIR
  420. STATIC_UNITINSTALLDIR=$(UNITINSTALLDIR)/static
  421. endif
  422. # set the directory where to install the units.
  423. ifndef SHARED_UNITINSTALLDIR
  424. SHARED_UNITINSTALLDIR=$(UNITINSTALLDIR)/shared
  425. endif
  426. # set the directory where to install the libs (must exist)
  427. ifndef STATIC_LIBINSTALLDIR
  428. STATIC_LIBINSTALLDIR=$(STATIC_UNITINSTALLDIR)
  429. endif
  430. # set the directory where to install the libs (must exist)
  431. ifndef SHARED_LIBINSTALLDIR
  432. ifdef inlinux
  433. SHARED_LIBINSTALLDIR=$(PREFIXINSTALLDIR)/lib
  434. else
  435. SHARED_LIBINSTALLDIR=$(SHARED_UNITINSTALLDIR)
  436. endif
  437. endif
  438. #####################################################################
  439. # Default extensions
  440. #####################################################################
  441. # Default needed extensions (Go32v2,Linux)
  442. LOADEREXT=.as
  443. PPLEXT=.ppl
  444. PPUEXT=.ppu
  445. OEXT=.o
  446. ASMEXT=.s
  447. SMARTEXT=.sl
  448. STATICLIBEXT=.a
  449. SHAREDLIBEXT=.so
  450. PACKAGESUFFIX=
  451. # Go32v1
  452. ifeq ($(OS_TARGET),go32v1)
  453. PPUEXT=.pp1
  454. OEXT=.o1
  455. ASMEXT=.s1
  456. SMARTEXT=.sl1
  457. STATICLIBEXT=.a1
  458. SHAREDLIBEXT=.so1
  459. PACKAGESUFFIX=v1
  460. endif
  461. # Go32v2
  462. ifeq ($(OS_TARGET),go32v2)
  463. PACKAGESUFFIX=go32
  464. endif
  465. # Linux
  466. ifeq ($(OS_TARGET),linux)
  467. PACKAGESUFFIX=linux
  468. endif
  469. # Win32
  470. ifeq ($(OS_TARGET),win32)
  471. PPUEXT=.ppw
  472. OEXT=.ow
  473. ASMEXT=.sw
  474. SMARTEXT=.slw
  475. STATICLIBEXT=.aw
  476. SHAREDLIBEXT=.dll
  477. PACKAGESUFFIX=win32
  478. endif
  479. # OS/2
  480. ifeq ($(OS_TARGET),os2)
  481. PPUEXT=.ppo
  482. ASMEXT=.so2
  483. OEXT=.oo2
  484. SMARTEXT=.so
  485. STATICLIBEXT=.ao2
  486. SHAREDLIBEXT=.dll
  487. PACKAGESUFFIX=os2
  488. endif
  489. # library prefix
  490. LIBPREFIX=lib
  491. ifeq ($(OS_TARGET),go32v2)
  492. LIBPREFIX=
  493. endif
  494. ifeq ($(OS_TARGET),go32v1)
  495. LIBPREFIX=
  496. endif
  497. # determine which .pas extension is used
  498. ifndef PASEXT
  499. ifdef EXEOBJECTS
  500. override TESTPAS:=$(strip $(wildcard $(addsuffix .pas,$(firstword $(EXEOBJECTS)))))
  501. else
  502. override TESTPAS:=$(strip $(wildcard $(addsuffix .pas,$(firstword $(UNITOBJECTS)))))
  503. endif
  504. ifeq ($(TESTPAS),)
  505. PASEXT=.pp
  506. else
  507. PASEXT=.pas
  508. endif
  509. endif
  510. #####################################################################
  511. # Default rules
  512. #####################################################################
  513. .PHONY: defaultrule all staticlib sharedlib showinstall install \
  514. staticinstall sharedinstall libinstall zipinstall zipinstalladd \
  515. clean cleanall depend info
  516. staticlib: fpc_staticlib
  517. sharedlib: fpc_sharedlib
  518. showinstall: fpc_showinstall
  519. staticinstall: fpc_staticinstall
  520. sharedinstall: fpc_sharedinstall
  521. libinstall: fpc_libinstall
  522. zipinstall: fpc_zipinstall
  523. zipinstalladd: fpc_zipinstalladd
  524. clean_all: fpc_clean_all
  525. depend: fpc_depend
  526. info: fpc_info
  527. #####################################################################
  528. # General compile rules
  529. #####################################################################
  530. .PHONY: fpc_all fpc_units fpc_exes fpc_loaders
  531. # Create Filenames
  532. LOADEROFILES=$(addsuffix $(OEXT),$(LOADEROBJECTS))
  533. EXEFILES=$(addsuffix $(EXEEXT),$(EXEOBJECTS))
  534. EXEOFILES=$(addsuffix $(OEXT),$(EXEOBJECTS))
  535. UNITPPUFILES=$(addsuffix $(PPUEXT),$(UNITOBJECTS))
  536. UNITOFILES=$(addsuffix $(OEXT),$(UNITOBJECTS))
  537. UNITAFILES=$(addsuffix $(STATICLIBEXT),$(UNITOBJECTS))
  538. .SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .pp
  539. ifdef DEFAULTUNITS
  540. fpc_all: fpc_loaders fpc_units
  541. else
  542. fpc_all: fpc_loaders fpc_units fpc_exes
  543. endif
  544. fpc_loaders: $(LOADEROFILES)
  545. fpc_units: $(UNITPPUFILES)
  546. fpc_exes: $(EXEFILES)
  547. # General compile rules, available for both possible PASEXT
  548. %$(PPUEXT): %.pp
  549. $(COMPILER) $< $(REDIR)
  550. $(EXECPASS)
  551. %$(PPUEXT): %.pas
  552. $(COMPILER) $< $(REDIR)
  553. $(EXECPASS)
  554. %$(EXEEXT): %.pp
  555. $(COMPILER) $< $(REDIR)
  556. $(EXECPASS)
  557. %$(EXEEXT): %.pas
  558. $(COMPILER) $< $(REDIR)
  559. $(EXECPASS)
  560. %$(OEXT): %$(LOADEREXT)
  561. $(AS) -o $*$(OEXT) $<
  562. #####################################################################
  563. # Library
  564. #####################################################################
  565. .PHONY: fpc_staticlib fpc_sharedlib
  566. # Default sharedlib units are all unit objects
  567. ifndef SHAREDLIBUNITOBJECTS
  568. SHAREDLIBUNITOBJECTS=$(UNITOBJECTS)
  569. endif
  570. fpc_staticlib:
  571. $(MAKE) libsclean
  572. $(MAKE) all SMARTLINK=YES
  573. fpc_sharedlib: all
  574. ifdef inlinux
  575. ifndef LIBNAME
  576. @$(ECHO) LIBNAME not set
  577. else
  578. $(PPUMOVE) $(SHAREDLIBUNITOBJECTS) -o$(LIBNAME)
  579. endif
  580. else
  581. @$(ECHO) Shared Libraries not supported
  582. endif
  583. #####################################################################
  584. # Install rules
  585. #####################################################################
  586. .PHONY: fpc_showinstallfiles fpc_install
  587. ifdef UNITOBJECTS
  588. override UNITINSTALLFILES=$(wildcard $(UNITPPUFILES) $(UNITOFILES) $(UNITAFILES))
  589. endif
  590. ifdef EXTRAINSTALLUNITS
  591. override EXTRAINSTALLFILES+=$(wildcard $(addsuffix $(OEXT),$(EXTRAINSTALLUNITS)) $(addsuffix $(STATICLIBEXT),$(EXTRAINSTALLUNITS)) $(addsuffix $(PPUEXT),$(EXTRAINSTALLUNITS)))
  592. endif
  593. fpc_showinstallfiles : all
  594. ifndef DEFAULTUNITS
  595. ifdef EXEOBJECTS
  596. @$(ECHO) $(addprefix "\n"$(BININSTALLDIR)/,$(EXEFILES))
  597. endif
  598. endif
  599. ifdef LOADEROBJECTS
  600. @$(ECHO) $(addprefix "\n"$(UNITINSTALLDIR)/,$(LOADEROFILES))
  601. endif
  602. ifdef UNITINSTALLFILES
  603. @$(ECHO) $(addprefix "\n"$(UNITINSTALLDIR)/,$(UNITINSTALLFILES))
  604. endif
  605. ifdef EXTRAINSTALLFILES
  606. @$(ECHO) $(addprefix "\n"$(UNITINSTALLDIR)/,$(EXTRAINSTALLFILES))
  607. endif
  608. fpc_install:
  609. # Create UnitInstallFiles
  610. ifndef DEFAULTUNITS
  611. ifdef EXEOBJECTS
  612. $(MKDIR) $(BININSTALLDIR)
  613. # Compress the exes if upx is defined
  614. ifdef UPXPROG
  615. -$(UPXPROG) $(EXEFILES)
  616. endif
  617. $(INSTALLEXE) $(EXEFILES) $(BININSTALLDIR)
  618. endif
  619. endif
  620. ifdef LOADEROBJECTS
  621. $(MKDIR) $(UNITINSTALLDIR)
  622. $(INSTALL) $(LOADEROFILES) $(UNITINSTALLDIR)
  623. endif
  624. ifdef UNITINSTALLFILES
  625. $(MKDIR) $(UNITINSTALLDIR)
  626. $(INSTALL) $(UNITINSTALLFILES) $(UNITINSTALLDIR)
  627. endif
  628. ifdef EXTRAINSTALLFILES
  629. $(MKDIR) $(UNITINSTALLDIR)
  630. $(INSTALL) $(EXTRAINSTALLFILES) $(UNITINSTALLDIR)
  631. endif
  632. #####################################################################
  633. # Zip
  634. #####################################################################
  635. .PHONY: fpc_zipinstall fpc_zipinstalladd
  636. # Temporary path to pack a file
  637. ifndef PACKDIR
  638. ifndef inlinux
  639. PACKDIR=pack_tmp
  640. else
  641. PACKDIR=/tmp/fpc-pack
  642. endif
  643. endif
  644. # Test dir if none specified
  645. ifndef PACKAGEDIR
  646. PACKAGEDIR=$(BASEDIR)
  647. endif
  648. # Add .zip/.tar.gz extension
  649. ifdef ZIPNAME
  650. ifndef inlinux
  651. override ZIPNAME:=$(ZIPNAME)$(ZIPEXT)
  652. endif
  653. endif
  654. # Default target which is call before zipping
  655. ifndef ZIPTARGET
  656. ZIPTARGET=install
  657. endif
  658. # Note: This will not remove the zipfile first
  659. fpc_zipinstalladd:
  660. ifndef ZIPNAME
  661. @$(ECHO) Please specify ZIPNAME!
  662. @exit
  663. else
  664. $(MAKE) $(ZIPTARGET) PREFIXINSTALLDIR=$(PACKDIR)
  665. ifdef inlinux
  666. gzip -d $(PACKAGEDIR)/$(ZIPNAME).tar.gz
  667. cd $(PACKDIR) ; tar rv --file $(PACKAGEDIR)/$(ZIPNAME).tar * ; cd $(BASEDIR)
  668. gzip $(PACKAGEDIR)/$(ZIPNAME).tar
  669. else
  670. cd $(PACKDIR) ; $(ZIPPROG) $(PACKAGEDIR)/$(ZIPNAME) * ; cd $(BASEDIR)
  671. endif
  672. $(DELTREE) $(PACKDIR)
  673. endif
  674. # First remove the zip and then install
  675. fpc_zipinstall:
  676. ifndef ZIPNAME
  677. @$(ECHO) Please specify ZIPNAME!
  678. @exit
  679. else
  680. $(DEL) $(PACKAGEDIR)/$(ZIPNAME)
  681. $(MAKE) $(ZIPTARGET) PREFIXINSTALLDIR=$(PACKDIR)
  682. ifdef inlinux
  683. cd $(PACKDIR) ; tar cvz --file $(PACKAGEDIR)/$(ZIPNAME).tar.gz * ; cd $(BASEDIR)
  684. else
  685. cd $(PACKDIR) ; $(ZIPPROG) $(PACKAGEDIR)/$(ZIPNAME) * ; cd $(BASEDIR)
  686. endif
  687. $(DELTREE) $(PACKDIR)
  688. endif
  689. #####################################################################
  690. # Clean rules
  691. #####################################################################
  692. .PHONY: fpc_clean fpc_libsclean fpc_cleanall
  693. ifdef UNITOBJECTS
  694. override UNITCLEANFILES=$(wildcard $(UNITPPUFILES) $(UNITOFILES) $(UNITAFILES))
  695. endif
  696. ifdef EXTRACLEANUNITS
  697. override EXTRACLEANFILES+=$(wildcard $(addsuffix $(OEXT),$(EXTRACLEANUNITS)) $(addsuffix $(STATICLIBEXT),$(EXTRACLEANUNITS)) $(addsuffix $(PPUEXT),$(EXTRACLEANUNITS)))
  698. endif
  699. fpc_clean:
  700. ifdef EXEOBJECTS
  701. -$(DEL) $(EXEFILES) $(EXEOFILES)
  702. endif
  703. ifdef LOADEROBJECTS
  704. -$(DEL) $(LOADEROFILES)
  705. endif
  706. ifdef UNITCLEANFILES
  707. -$(DEL) $(UNITCLEANFILES)
  708. endif
  709. ifdef EXTRACLEANFILES
  710. -$(DEL) $(EXTRACLEANFILES)
  711. endif
  712. -$(DEL) $(PPAS) link.res log
  713. fpc_libsclean: clean
  714. -$(DEL) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
  715. fpc_cleanall:
  716. ifdef EXEOBJECTS
  717. -$(DEL) $(EXEFILES)
  718. endif
  719. -$(DEL) *$(OEXT) *$(PPUEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
  720. -$(DELTREE) *$(SMARTEXT)
  721. #####################################################################
  722. # Depend rules
  723. #####################################################################
  724. .PHONY: fpc_depend
  725. fpc_depend:
  726. $(PPDEP) $(UNITOBJECTS)
  727. #####################################################################
  728. # Info rules
  729. #####################################################################
  730. .PHONY: fpc_info fpc_cfginfo fpc_objectinfo fpc_toolsinfo fpc_installinfo \
  731. fpc_dirinfo
  732. fpc_info: $(FPCINFO)
  733. fpc_infocfg:
  734. @$(ECHO)
  735. @$(ECHO) == Configuration info ==
  736. @$(ECHO)
  737. @$(ECHO) FPC....... $(FPC)
  738. @$(ECHO) Version... $(FPC_VERSION)
  739. @$(ECHO) CPU....... $(CPU_TARGET)
  740. @$(ECHO) Source.... $(OS_SOURCE)
  741. @$(ECHO) Target.... $(OS_TARGET)
  742. @$(ECHO)
  743. fpc_infoinstall:
  744. @$(ECHO)
  745. @$(ECHO) == Install info ==
  746. @$(ECHO)
  747. ifdef DATE
  748. @$(ECHO) DateStr.............. $(DATESTR)
  749. endif
  750. @$(ECHO) PackageSuffix........ $(PACKAGESUFFIX)
  751. @$(ECHO)
  752. @$(ECHO) BaseInstallDir....... $(BASEINSTALLDIR)
  753. @$(ECHO) BinInstallDir........ $(BININSTALLDIR)
  754. @$(ECHO) UnitInstallDir....... $(UNITINSTALLDIR)
  755. @$(ECHO) StaticUnitInstallDir. $(STATIC_UNITINSTALLDIR)
  756. @$(ECHO) SharedUnitInstallDir. $(SHARED_UNITINSTALLDIR)
  757. @$(ECHO) LibInstallDir........ $(LIBINSTALLDIR)
  758. @$(ECHO) StaticLibInstallDir.. $(STATIC_LIBINSTALLDIR)
  759. @$(ECHO) SharedLibInstallDir.. $(SHARED_LIBINSTALLDIR)
  760. @$(ECHO) MsgInstallDir........ $(MSGINSTALLDIR)
  761. @$(ECHO) DocInstallDir........ $(DOCINSTALLDIR)
  762. @$(ECHO)
  763. #####################################################################
  764. # Users rules
  765. #####################################################################
  766. .PHONY: h2pas_all h2pas_clean h2pas_install
  767. all: fpc_all h2pas_all
  768. clean: fpc_clean h2pas_clean
  769. install: fpc_install h2pas_install
  770. #
  771. # PPU Tools
  772. #
  773. ppu$(PPUEXT): ppu.pas
  774. ppudump$(EXEEXT): ppudump.pp ppu$(PPUEXT)
  775. ppumove$(EXEEXT): ppumove.pp ppu$(PPUEXT)
  776. #
  777. # Pascal beautifier
  778. #
  779. ptop$(EXEEXT): ptop.pp ptopu$(PPUEXT)
  780. ptopu$(PPUEXT): ptopu.pp
  781. #
  782. # Other
  783. #
  784. fpcmake$(EXEEXT): fpcmake.pp
  785. ppdep$(EXEEXT): ppdep.pp
  786. #
  787. # H2Pas
  788. #
  789. h2pas_all:
  790. $(MAKE) -C h2pas all
  791. h2pas_clean:
  792. $(MAKE) -C h2pas clean
  793. h2pas_install:
  794. $(MAKE) -C h2pas install