makefile.fpc 19 KB

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