Merge branch 'next' of ssh://down.oryx.com/oryx/aox into next
[aox:aox.git] / Jamrules
1 # No user-serviceable parts below this line. And none above it either ;)
2
3 JAMSETTINGS = Jamsettings ;
4 include $(JAMSETTINGS:D=$(TOP)) ;
5
6 VERSION = 3.1.0 ;
7
8 MKDIR = mkdir -p ;
9
10 USECACHE = 1 ;
11
12 if $(OPTIM) = "-O" {
13     OPTIM = "-O3" ;
14 }
15 OPTIM ?= ;
16 RANLIB = ;
17
18 USE_X86_ASM = ;
19 if ( $(JAMUNAME[1]) = "i686" || $(JAMUNAME[1]) = "i586" ) {
20     USE_X86_ASM = 1 ;
21 }
22
23 if $(ICC) {
24     C++ = icc ;
25     C++FLAGS += -wd1476 -wd654 -wd913 -wd873 -wd1125 ;
26     BUILD = build/icc ;
27     LINKFLAGS += -lcxa -lunwind ;
28 }
29 else {
30     C++ = g++ ;
31     C++FLAGS += -W -Wall ;
32     BUILD = build/gcc ;
33     if $(OPTIM) {
34         BUILD = build/gcc$(OPTIM) ;
35     }
36
37     if $(COV) {
38         C++FLAGS += -fprofile-arcs -ftest-coverage ;
39         BUILD = build/gcov ;
40     }
41
42     if $(CCACHE) {
43         C++ = ccache g++ ;
44     }
45 }
46
47 LINK = $(C++) ;
48
49 rule SubInclude
50 {
51     if ! $($(<[1]))
52     {
53         Exit SubInclude $(<[1]) without prior SubDir $(<[1]) ;
54     }
55
56     local _tokens = $(SUBDIR_TOKENS) ;
57     SubDir $(<) ;
58
59     local a b ;
60     for a in $(IncludedDirectories) {
61         if $(a) = $(SUBDIR) {
62             b = true ;
63         }
64     }
65
66     if ! $(b) {
67         IncludedDirectories += $(SUBDIR) ;
68         include $(JAMFILE:D=$(SUBDIR)) ;
69     }
70
71     SubDir TOP $(_tokens) ;
72 }
73
74
75 rule Build
76 {
77     LOCATE_TARGET = [ FDirName $(TOP) $(BUILD) $(SUBDIR_TOKENS) ] ;
78     Objects $(>) ;
79     set-$(<) += [ FGristFiles $(>:S=$(SUFOBJ)) ] ;
80     sets += $(<) ;
81 }
82
83
84 rule UseLibrary
85 {
86     LINKLIBS on [ FGristFiles $(<:S=$(SUFOBJ)) ] += -l$(>) ;
87 }
88
89
90 rule Executable
91 {
92     local target a ;
93     Depends exe : $(<) ;
94     Depends $(<) : $(set-$(>)) ;
95     MakeLocate $(<) : [ FDirName $(TOP) bin ] ;
96     Clean clean : $(<) ;
97     Link $(<) : $(set-$(>)) ;
98     for a in $(set-$(>)) {
99         on $(a) LINKLIBS on $(<) += $(LINKLIBS) ;
100     }
101 }
102
103 rule Program
104 {
105     Executable $(<) : $(>) ;
106     InstallBin $(INSTALLROOT)$(BINDIR) : $(<) ;
107 }
108
109 rule Server
110 {
111     Executable $(<) : $(>) ;
112     InstallBin $(INSTALLROOT)$(SBINDIR) : $(<) ;
113 }
114
115
116 actions EngraveConfig {
117 sed -e 's!$BINDIR!'$(BINDIR)'!' \
118     -e 's!$SBINDIR!'$(SBINDIR)'!' \
119     -e 's!$MANDIR!'$(MANDIR)'!' \
120     -e 's!$LIBDIR!'$(LIBDIR)'!' \
121     -e 's!$INITDIR!'$(INITDIR)'!' \
122     -e 's!$PIDFILEDIR!'$(PIDFILEDIR)'!' \
123     -e 's!$JAILDIR!'$(JAILDIR)'!' \
124     -e 's!$MESSAGEDIR!'$(MESSAGEDIR)'!' \
125     -e 's!$CONFIGDIR!'$(CONFIGDIR)'!' \
126     -e 's!$LOGFILEMODE!'$(LOGFILEMODE)'!' \
127     -e 's!$LOGFILE!'$(LOGFILE)'!' \
128     -e 's!$DBNAME!'$(DBNAME)'!' \
129     -e 's!$DBSCHEMA!'$(DBSCHEMA)'!' \
130     -e 's!$DBOWNER!'$(DBOWNER)'!' \
131     -e 's!$DBADDRESS!'$(DBADDRESS)'!' \
132     -e 's!$AOXUSER!'$(AOXUSER)'!' \
133     -e 's!$AOXGROUP!'$(AOXGROUP)'!' \
134     -e 's!$VERSION!'$(VERSION)'!' \
135     -e 's!$PREFIX!'$(PREFIX)'!' \
136     < $(>) > $(<)
137 }
138
139
140 rule Doc {
141     UDOCBIN = udoc ;
142
143     Depends $(<) : $(UDOCBIN) $(set-$(>)) ;
144     NOTFILE $(<) ;
145
146     Doc2 $(<) : $(set-$(>):S=.cpp) ;
147
148     documented-sets += $(>) ;
149
150     Depends doc : $(<) ;
151
152     Clean clean : $(output) ;
153     RemoveDirectories clean ;
154 }
155
156
157 actions together RemoveDirectories {
158     rm -rf $(TOP)/doc/man/man3 $(TOP)/$(BUILD)
159     find $(TOP)/doc/html -name udoc.css -prune -o -type f -exec rm {} \;
160 }
161
162 actions together Doc2 bind UDOCBIN {
163     mkdir -p doc/man/man3 doc/html build/doc
164     $(UDOCBIN) -o 'The Archiveopteryx Developers' -m doc/man/man3 -w doc/html $(>)
165 }
166
167
168 # If you need to do horrid or perverse things that shouldn't be
169 # version-controlled, you can create a file called Jamhacks and do
170 # them there.
171 JAMHACKS = Jamhacks ;
172 NOCARE $(JAMHACKS:D=$(TOP)) ;
173 include $(JAMHACKS:D=$(TOP)) ;