f541e4253d27ef3fcdfccd615c0f0367ab38bc04
[supertux.git] / mk / jam / compiler.jam
1 #============================================================================
2 # Rules for C and C++ files
3 #============================================================================
4
5 if $(CC)
6 {
7
8 rule CcRule
9 {
10     local object ;
11
12     if [ IsElem shared : $(2) ]
13     {
14         object = [ LocateTarget $(<:S=.lo) ] ;
15         CC on $(object) = "$(LIBTOOL) --mode=compile $(CC)" ;
16     } else {
17         object = [ LocateTarget $(<:S=.o) ] ;
18     }
19
20     CFLAGS on $(object) = $(CFLAGS) ;
21     CPPFLAGS on $(object) = $(CPPFLAGS) ;
22     Cc $(object) : $(<) ;
23     Depends $(object) : $(<) ;
24
25     return $(object) ;
26 }
27 RegisterFileType CcRule : .c ;
28 RegisterHeaderRule HeaderRule : $(HDRPATTERN) : .c ;
29
30 actions Cc
31 {
32     $(CC) -c -o $(<) $(CPPFLAGS) $(CFLAGS) $(>)
33 }
34 } # end if $(CC)
35
36 if $(CXX)
37 {
38
39 rule C++Rule
40 {
41     local object ;
42     
43     if [ IsElem shared : $(2) ] {
44         object = [ LocateTarget $(<:S=.lo) ] ;
45         CXX on $(object) = "$(LIBTOOL) --mode=compile $(CXX)" ;
46     } else {
47         object = [ LocateTarget $(<:S=.o) ] ;
48     }
49     CXXFLAGS on $(object) = $(CXXFLAGS) ;
50     CPPFLAGS on $(object) = $(CPPFLAGS) ;
51     C++ $(object) : $(<) ;
52     Depends $(object) : $(<) ;
53     return $(object) ;
54 }
55 RegisterFileType C++Rule : .cpp .cc .c++ ; # we can't register .C here because
56                                            # of windows being case-insensitive.
57 RegisterHeaderRule HeaderRule : $(HDRPATTERN) : .cpp .cc .c++ ;
58
59 actions C++
60 {
61     $(CXX) -c -o $(<) $(CPPFLAGS) $(CXXFLAGS) $(>)
62 }
63 } # end if $(CXX)
64
65 rule CreateIncludeFlags
66 {
67     return -I$(<) ;
68 }
69
70 rule CreateDefineFlags
71 {
72     return -D$(<) ;
73 }