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