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