3 ECHO "PDCLIB_TOP: " $(PDCLIB_TOP) ;
\r
5 if ! $(PDCLIB_HAVE_PLATFORM) && ! $(PDCLIB_PLATFORM) {
\r
7 PDCLIB_PLATFORM = "win32" ;
\r
9 PDCLIB_PLATFORM = "posix" ;
\r
11 ECHO PDCLIB_PLATFORM not set and platform not automatically detected ;
\r
12 ECHO Set PDCLIB_PLATFORM to the platform to be built for ;
\r
15 PDCLIB_HAVE_PLATFORM = 1 ;
\r
18 if $(PDCLIB_TOOLCHAIN) = "" {
\r
19 local __ccparts = [ SPLIT $(CC) : "-" ] ;
\r
20 if $(JAM_TOOLSET) = "MINGW" || "gcc" in $(__ccparts)
\r
21 || "clang" in $(__ccparts) {
\r
23 PDCLIB_TOOLCHAIN = "gcc" ;
\r
24 } else if $(JAM_TOOLSET) != "" {
\r
25 PDCLIB_TOOLCHAIN = $(JAM_TOOLSET) ;
\r
27 ECHO PDCLIB_TOOLCHAIN is unset and I can't glean what toolset is being ;
\r
28 ECHO used from your environment. Please set it. ;
\r
33 if $(PDCLIB_TOOLCHAIN) = "gcc" {
\r
34 # No -Wcast-align : spurious warnings when using char* to do pointer
\r
36 # No -Winline : when compiling with e.g. -Os causes spurious
\r
37 # warnings that call is unlikely/code size would grow
\r
38 # No -Wredundant-decls : some functions must be multiply defined
\r
40 -Wall -Wextra -pedantic -Wno-unused-parameter -Wshadow
\r
41 -Wpointer-arith -Wwrite-strings -Wmissing-declarations -Wno-long-long
\r
44 PDCLIB_CCWARNINGS ?=
\r
45 -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes ;
\r
52 $(PDCLIB_WARNINGS) ;
\r
59 $(PDCLIB_WARNINGS) ;
\r
61 actions Link bind NEEDLIBS
\r
63 $(LINK) $(LINKFLAGS) -o $(<) $(UNDEFS) $(>) -Wl,--start-group $(NEEDLIBS) $(LINKLIBS) -Wl,--end-group
\r
65 } else if $(PDCLIB_TOOLCHAIN) = "WATCOM" {
\r
67 CCFLAGS = /zq /DWIN32 /zls ;
\r
68 C++FLAGS = /zq /DWIN32 /zls ;
\r
69 STDHDRS = $(WATCOM)\\h\\nt ;
\r
70 PDCLIB_CCFLAGS = "-za99 -zl -s" ;
\r
72 ECHO The value of PDCLIB_TOOLCHAIN is not recognized ;
\r
73 ECHO Currently set to $(PDCLIB_TOOLCHAIN) ;
\r
77 if $(PDCLIB_PLATFORM) {
\r
78 include [ FDirName $(PDCLIB_TOP) platform $(PDCLIB_PLATFORM) Config.jam ] ;
\r
81 rule PDCLibHeaders {
\r
82 SubDirHdrs $(PDCLIB_TOP) includes ;
\r
83 SubDirHdrs $(PDCLIB_TOP) internals ;
\r
84 SubDirHdrs $(PDCLIB_TOP) testing ;
\r
85 for opt in $(PDCLIB_OPTIONS) {
\r
86 SubDirHdrs $(PDCLIB_TOP) opt $(opt) ;
\r
88 PDCLibTargetHeaders ;
\r
92 SubDirCcFlags $(PDCLIB_CCFLAGS) ;
\r
93 SubDirC++Flags $(PDCLIB_C++FLAGS) ;
\r
95 PDCLibTargetConfig ;
\r
98 # MinGW needs appropriate prodding to cretae executables
\r
99 if $(TOOLSET) = MINGW {
\r
100 PDCLIB_TEST_LINKFLAGS += -mconsole ;
\r
101 PDCLIB_REGTEST_LINKFLAGS += -mconsole ;
\r
105 ALWAYS regtest test ;
\r
108 DEPENDS $(<) : $(>) ;
\r
110 DEPENDS test : $(<) ;
\r
114 DEPENDS $(<) : $(>) ;
\r
116 DEPENDS regtest : $(<) ;
\r
127 # list all files in a directory, except ., ..
\r
128 # [ ListDir base : dirname ]
\r
130 # start with empty list
\r
133 # for each file in the directory
\r
134 local _dirlist = [ GLOB [ FDirName $(1) $(2) ] : * ] ;
\r
135 for _subdir in $(_dirlist) {
\r
137 # if it is not . or ..
\r
138 switch $(_subdir) {
\r
139 case *\\. : _dummy = "" ; # is there some no-op statement?
\r
140 case *\\.. : _dummy = "" ; # is there some no-op statement?
\r
142 # add it to the list
\r
143 _result += $(_subdir:D=$(2)) ;
\r
147 # return resulting list
\r
148 return $(_result) ;
\r
151 # same as glob, but recurses into subdirs
\r
152 rule RecursiveGlob {
\r
153 # initially use the files in the current directory
\r
154 local _dir = $(2) ;
\r
155 local _path = [ FDirName $(1) $(2) ] ;
\r
156 local _result = [ GLOB $(_path) : $(3) ] ;
\r
157 _result = $(_result:D=$(_dir)) ;
\r
159 # list all subdirectories (and files, but it doesn't hurt)
\r
160 local _subdirlist = [ ListDir $(1) : $(2) ] ;
\r
162 # for each subdir/file
\r
163 for _subdir in $(_subdirlist) {
\r
165 _result += [ RecursiveGlob $(1) : $(_subdir) : $(3) ] ;
\r
168 # return the resulting list
\r
169 return $(_result) ;
\r
172 # Fix to work on targets in subdirs
\r
175 # Note we grist the directory name with 'dir',
\r
176 # so that directory path components and other
\r
177 # targets don't conflict.
\r
181 local _rev = [ FReverse $(>) ] ;
\r
182 if $(_rev[1]) = "." {
\r
183 _rev = $(_rev[2-]) ;
\r
185 local _dir = [ FDirName [ FReverse $(_rev) ] $(<[0]:D) ] ;
\r
187 LOCATE on $(<) = [ FDirName $(>) ] ;
\r
188 Depends $(<) : $(_dir:G=dir) ;
\r
189 MkDir $(_dir:G=dir) ;
\r