added "C++FLAGS.all" (and "OBJCFLAGS.all"); "CFLAGS.all" is still in effect
[k8jam.git] / dlang / dlang.jam
blobcb1c9bb68267e605d339dc4206b6a14b942eb9e8
1 #ENABLE_GDC_DEPS = tan ;
4 if $(USE_DMD) {
5   GDC     = kdmd ;
6   GDCLINK = kdmd ;
7 } else {
8   GDC     = gdc -pipe ;
9   GDCLINK = gdc -pipe ;
12 if $(USE_GDC) || ! $(USE_DMD) {
13   USE_DMD = ;
14   #Echo "using GDC" ;
15   if ! $(PHOBOS_DYNAMIC) && ! $(DYNAMIC) {
16     PHOBOS_STATIC = tan ;
17     #GDC += -static-libphobos ;
18     #GDCLINK += -static-libphobos ;
19   } else {
20     GDCFLAGS.all += -fPIC ;
21     PHOBOS_STATIC = ;
22   }
23   GDCLINKFLAGS.all += -Wl,--gc-sections ;
24 } else {
25   USE_DMD = tan ;
26   #Echo "using DMD" ;
27   if ! $(PHOBOS_DYNAMIC) && ! $(DYNAMIC) {
28     DMD_STATIC = tan ;
29     PHOBOS_STATIC = tan ;
30   } else {
31     DMD_STATIC = ;
32     PHOBOS_STATIC = ;
33   }
36 #dmd
37 if $(USE_DMD) && ! $(DMD_STATIC) {
38   GDCFLAGS.all += -defaultlib=libphobos2.so -L/home/ketmar/zoft/dmd/lib ;
39   LINKFLAGS.all += -defaultlib=libphobos2.so -L/home/ketmar/zoft/dmd/lib ;
43 DLANG_BASE_DIR = $(HOME)/.D ;
44 DLANG_LIBSRC_DIR = $(DLANG_BASE_DIR)/libsrc ;
46 if $(USE_DMD) {
47   DLANG_LIB_DIR = $(DLANG_BASE_DIR)/libs_dmd ;
48 } else {
49   DLANG_LIB_DIR = $(DLANG_BASE_DIR)/libs ;
52 GDCFLAGS.all += -Wcast-result -Wdeprecated -Wno-unknown-pragmas -fno-property -fignore-unknown-pragmas ;
54 GDCFLAGS.all += -I$(DLANG_LIBSRC_DIR) ;
55 GDCFLAGS.all += -J$(DLANG_LIBSRC_DIR) ;
56 LINKFLAGS.all += -L$(DLANG_LIB_DIR) ;
58 HDRS += $(HOME)/.D/k8dmd ;
59 HDRS += $(HOME)/.D/k8dmd/iv ;
60 HDRS += $(HOME)/.D/k8dmd/k8 ;
63 DLANG.LIBS = ;
64 #DLANG.LIBDDEPS.* = ;
65 #DLANG.LIBSDEPS.* = ;
66 #DLANG.LIBPDEPS.* = ;
68 DLANG_LIBS_ADDED = ;
70 rule dlang.addlib libnames : ddeps : sysdeps : pkgdeps {
71   local vn ;
72   #Echo "dlang.addlib:" $(libnames) ":" $(ddeps) ":" $(sysdeps) ;
73   for local lib in $(libnames) {
74     if ! $(lib) in $(DLANG.LIBS) {
75       DLANG.LIBS += $(lib) ;
76       # d deps
77       vn = DLANG.LIBDDEPS.$(lib) ;
78       for local ln in $(ddeps) { $(vn) += $(ln) ; }
79       # sys deps
80       vn = DLANG.LIBSDEPS.$(lib) ;
81       for local ln in $(sysdeps) { $(vn) += $(ln) ; }
82       # pkgconfig deps
83       vn = DLANG.LIBPDEPS.$(lib) ;
84       for local ln in $(pkgdeps) { $(vn) += $(ln) ; }
85     } else {
86       Exit "D: duplicate library registration:" $(lib) ;
87     }
88   }
92 # take libname in form 'derelict.sdl2' and returns path to this lib relative to $(DLANG_LIBSRC_DIR)
93 rule dlang.libsrcdir libname {
94   local res = [ Split $(libname) : '.' ] ;
95   return $(res:J=/) ;
99 # take libname in form 'derelict.sdl2' and returns path to this lib relative to $(DLANG_LIB_DIR)
100 rule dlang.libdir libname {
101   local res = [ Split $(libname) : '.' ] ;
102   return $(res:J=/) ;
106 # take libname in form 'derelict.sdl2' and returns a library name for it
107 # (but without 'lib' prefix and '.a' suffix)
108 rule dlang.linkname libname : retvars {
109 ###  if ! $(USE_DMD) {
110 ###    local res = [ Split $(libname) : '.' ] ;
111 ###    return -l_d_$(res:J=_) ;
112 ###  } else {
113 ###    local res = [ Split $(libname) : '.' ] ;
114 ###    return $(DLANG_LIB_DIR)/lib_d_$(res:J=_).a ;
115 ###  }
116   local res = [ Split $(libname) : '.' ] ;
117   if $(retvars) {
118     local res = '$(DLANG_LIB_DIR)'/lib_d_$(res:J=_).a ;
119     return $(res:J=) ;
120   } else {
121     return $(DLANG_LIB_DIR)/lib_d_$(res:J=_).a ;
122   }
126 # take libname in form 'derelict.sdl2' and returns a library name for it
127 # (like 'lib_d_derelict_sdl2.a')
128 rule dlang.libaname libname {
129   local res = [ Split $(libname) : '.' ] ;
130   return lib_d_$(res:J=_).a ;
134 softinclude $(HOME)/.D/libsrc/liblist.jam ;
137 rule dlang.require libnames {
138   local ddep sdep pdep ;
139   for local lib in $(libnames) {
140     if $(lib) in $(DLANG_LIBS_ADDED) { return ; }
141     if ! $(lib) in $(DLANG.LIBS) { Exit "FATAL: unknown D library:" $(lib) ; }
142     DLANG_LIBS_ADDED += $(lib) ;
143     ddep = $(DLANG.LIBDDEPS.$(lib)) ;
144     sdep = $(DLANG.LIBSDEPS.$(lib)) ;
145     pdep = $(DLANG.LIBPDEPS.$(lib)) ;
146     local ln = [ dlang.linkname $(lib) ] ;
147     #Echo "LN:" $(ln) ;
148     LINKLIBS.all += $(ln) ;
149     if $(ddep) { dlang.require $(ddep) ; }
150     for local slib in $(sdep) { LINKLIBS.all += -l$(slib) ; }
151     for local plib in $(pdep) {
152       #Echo "checking" $(plib) ;
153       local ex = [ pkg-config-exists $(plib) ] ;
154       if $(ex) {
155         local flg = [ lib-config-ex "pkg-config '$(plib)' --cflags" ] ;
156         local lib = [ lib-config-ex "pkg-config '$(plib)' --libs" ] ;
157         if $(flg) { GDCFLAGS.all += $(flg) ; }
158         if $(lib) { LINKLIBS.all += $(lib) ; }
159       }
160     }
161   }
165 DLANG_INCLUDES_ADDED = ;
167 rule -configure-dlang-require- liblist {
168   if $(_CONFIGURE_FATAL_) = 'tan' { return ; }
169   if ! $(DLANG_INCLUDES_ADDED) {
170     DLANG_INCLUDES_ADDED = tan ;
171     -configure-add-line- '# D flags' ;
172     #-configure-add-line- 'GDCFLAGS.all +=' -I$(DLANG_LIBSRC_DIR) ';' ;
173     #-configure-add-line- 'GDCFLAGS.all +=' -J$(DLANG_LIBSRC_DIR) ';' ;
174     #-configure-add-line- 'LINKFLAGS.all +=' -L$(DLANG_LIB_DIR) ';' ;
175     -configure-add-line- 'GDCFLAGS.all += -I$(DLANG_LIBSRC_DIR) ;' ;
176     -configure-add-line- 'GDCFLAGS.all += -J$(DLANG_LIBSRC_DIR) ;' ;
177     -configure-add-line- 'LINKFLAGS.all += -L$(DLANG_LIB_DIR) ;' ;
178   }
179   for local lib in $(liblist) {
180     local dep ;
181     if $(lib) in $(DLANG_LIBS_ADDED) { return ; }
182     Echo "checking for D: $(lib) ... " : -n ;
183     if ! $(lib) in $(DLANG.LIBS) { -configure-fatal- ; Exit "not found" ; }
184     DLANG_LIBS_ADDED += $(lib) ;
185     -configure-add-line- '# D:' $(lib) ;
186     local ln = [ dlang.linkname $(lib) : 'tan' ] ;
187     -configure-add-line- 'LINKLIBS.all +=' $(ln) ';' ;
188     dep = $(DLANG.LIBPDEPS.$(lib)) ;
189     for local plib in $(dep) {
190       local ex = [ -configure-pkg-config-check-done- $(plib) ] ;
191       if $(ex) != 'tan' {
192         #-CONFIGURE-PKG-CONFIG-DONE- += $(plib) ;
193         ex = [ Match '^\s*([^\s<>=]+)' : $(plib) ] ;
194         -CONFIGURE-PKG-CONFIG-DONE-NAMES- += $(ex[1]) ;
195         local ex = [ pkg-config-exists $(plib) ] ;
196         if $(ex) {
197           local flg = [ lib-config-ex "pkg-config '$(plib)' --cflags" ] ;
198           local lib = [ lib-config-ex "pkg-config '$(plib)' --libs" ] ;
199           if $(flg) { -configure-add-line- 'GDCFLAGS.all +=' $(flg) ';' ; }
200           if $(lib) { -configure-add-line- 'LINKLIBS.all +=' $(lib) ';' ; }
201         } else {
202           -configure-fatal- ;
203           Exit "not found (pkg-config dependency" $(plib) ")" ;
204         }
205       } else {
206         #Echo "(here" $(plib) ")" ;
207       }
208     }
209     Echo "found" ;
210     dep = $(DLANG.LIBDDEPS.$(lib)) ;
211     if $(dep) { -configure-dlang-require- $(dep) ; }
212     dep = $(DLANG.LIBSDEPS.$(lib)) ;
213     for local slib in $(dep) { -configure-add-line- 'LINKLIBS.all +=' -l$(slib) ';' ; }
214   }