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