Makefile patches by Bruno added
[olsrd.git] / Makefile
1 # The olsr.org Optimized Link-State Routing daemon(olsrd)
2 # Copyright (c) 2004, Andreas T√łnnesen(andreto@olsr.org)
3 # All rights reserved.
4 #
5 # Redistribution and use in source and binary forms, with or without 
6 # modification, are permitted provided that the following conditions 
7 # are met:
8 #
9 # * Redistributions of source code must retain the above copyright 
10 #   notice, this list of conditions and the following disclaimer.
11 # * Redistributions in binary form must reproduce the above copyright 
12 #   notice, this list of conditions and the following disclaimer in 
13 #   the documentation and/or other materials provided with the 
14 #   distribution.
15 # * Neither the name of olsr.org, olsrd nor the names of its 
16 #   contributors may be used to endorse or promote products derived 
17 #   from this software without specific prior written permission.
18 #
19 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
20 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
21 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
22 # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
23 # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
24 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
25 # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
26 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
27 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
28 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
29 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
30 # POSSIBILITY OF SUCH DAMAGE.
31 #
32 # Visit http://www.olsr.org for more information.
33 #
34 # If you find this software useful feel free to make a donation
35 # to the project. For more information see the website or contact
36 # the copyright holders.
37 #
38 # $Id: Makefile,v 1.29 2004/11/30 16:52:15 kattemat Exp $
39
40 VERS =          0.4.8
41
42 #OS ?=          linux
43 #OS =           fbsd
44 #OS =           win32
45 #OS =           osx
46
47 CC ?=           gcc
48 STRIP ?=        strip
49 BISON ?=        bison
50 FLEX ?=         flex
51
52 INSTALL_PREFIX ?=
53
54 DEFINES =       -DUSE_LINK_QUALITY
55 INCLUDES =      -I src
56
57 DEPFILE =       .depend
58
59 SRCS =          $(wildcard src/*.c)
60 HDRS =          $(wildcard src/*.h)
61
62 CFGDIR =        src/cfgparser
63 CFGOBJS =       $(CFGDIR)/oscan.o $(CFGDIR)/oparse.o $(CFGDIR)/olsrd_conf.o
64
65 ifeq ($(OS), linux)
66
67 SRCS +=         $(wildcard src/linux/*.c) $(wildcard src/unix/*.c)
68 HDRS +=         $(wildcard src/linux/*.h) $(wildcard src/unix/*.h)
69 DEFINES +=      -Dlinux
70 CFLAGS ?=       -Wall -Wmissing-prototypes -Wstrict-prototypes \
71                 -O2 -g #-pg -DDEBUG #-march=i686
72 LIBS =          -lm -ldl
73 MAKEDEPEND =    makedepend -f $(DEPFILE) -Y $(INCLUDES) $(DEFINES) $(SRCS) >/dev/null 2>&1
74
75 else
76 ifeq ($(OS), fbsd)
77
78 SRCS +=         $(wildcard src/bsd/*.c) $(wildcard src/unix/*.c)
79 HDRS +=         $(wildcard src/bsd/*.h) $(wildcard src/unix/*.h)
80 CFLAGS ?=       -Wall -Wmissing-prototypes -Wstrict-prototypes \
81                 -O2 -g
82 LIBS =          -lm
83 MAKEDEPEND =    makedepend -f $(DEPFILE) $(INCLUDES) $(DEFINES) $(SRCS)
84
85 else
86 ifeq ($(OS), win32)
87
88 SRCS +=         $(wildcard src/win32/*.c)
89 HDRS +=         $(wildcard src/win32/*.h)
90 INCLUDES +=     -Isrc/win32
91 DEFINES +=      -DWIN32
92 CFLAGS ?=       -Wall -Wmissing-prototypes \
93                 -Wstrict-prototypes -mno-cygwin -O2 -g
94 LIBS =          -mno-cygwin -lws2_32 -liphlpapi
95 MAKEDEPEND =    makedepend -f $(DEPFILE) $(INCLUDES) $(DEFINES) $(SRCS) >/dev/null 2>&1
96
97 olsr-${VERS}.zip:       gui/win32/Main/Release/Switch.exe \
98                 gui/win32/Shim/Release/Shim.exe \
99                 olsrd.exe \
100                 src/cfgparser/olsrd_cfgparser.dll \
101                 README-WIN32.txt \
102                 gui/win32/Inst/linux-manual.txt \
103                 files/olsrd.conf.default.win32 \
104                 gui/win32/Main/Default.olsr \
105                 lib/dot_draw/olsrd_dot_draw.dll
106                 rm -rf ${TEMP}/olsr-${VERS}
107                 rm -f ${TEMP}/olsr-${VERS}.zip
108                 rm -f olsr-${VERS}.zip
109                 mkdir ${TEMP}/olsr-${VERS}
110                 cp gui/win32/Main/Release/Switch.exe ${TEMP}/olsr-${VERS}
111                 cp gui/win32/Shim/Release/Shim.exe ${TEMP}/olsr-${VERS}
112                 cp olsrd.exe ${TEMP}/olsr-${VERS}
113                 cp src/cfgparser/olsrd_cfgparser.dll ${TEMP}/olsr-${VERS}
114                 cp README-WIN32.txt ${TEMP}/olsr-${VERS}
115                 cp gui/win32/Inst/linux-manual.txt ${TEMP}/olsr-${VERS}
116                 cp files/olsrd.conf.default.win32 ${TEMP}/olsr-${VERS}/olsrd.conf
117                 cp gui/win32/Main/Default.olsr ${TEMP}/olsr-${VERS}
118                 cp lib/dot_draw/olsrd_dot_draw.dll ${TEMP}/olsr-${VERS}
119                 cd ${TEMP}; echo y | cacls olsr-${VERS} /T /G Everyone:F
120                 cd ${TEMP}; zip -q -r olsr-${VERS}.zip olsr-${VERS}
121                 cp ${TEMP}/olsr-${VERS}.zip .
122                 rm -rf ${TEMP}/olsr-${VERS}
123                 rm -f ${TEMP}/olsr-${VERS}.zip
124
125 olsr-${VERS}-setup.exe: gui/win32/Main/Release/Switch.exe \
126                 gui/win32/Shim/Release/Shim.exe \
127                 olsrd.exe \
128                 src/cfgparser/olsrd_cfgparser.dll \
129                 README-WIN32.txt \
130                 gui/win32/Inst/linux-manual.txt \
131                 files/olsrd.conf.default.win32 \
132                 gui/win32/Main/Default.olsr \
133                 lib/dot_draw/olsrd_dot_draw.dll \
134                 gui/win32/Inst/installer.nsi
135                 rm -f olsr-setup.exe
136                 rm -f olsr-${VERS}-setup.exe
137                 C:/Program\ Files/NSIS/makensis gui\win32\Inst\installer.nsi
138                 mv olsr-setup.exe olsr-${VERS}-setup.exe
139
140 else
141 ifeq ($(OS), osx)
142
143 SRCS +=         $(wildcard src/bsd/*.c) $(wildcard src/unix/*.c)
144 HDRS +=         $(wildcard src/bsd/*.h) $(wildcard src/unix/*.h)
145 DEFINES +=      -D__MacOSX__
146 CFLAGS ?=       -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -g 
147 LIBS =          -lm -ldl
148 MAKEDEPEND =    makedepend -f $(DEPFILE) $(INCLUDES) $(DEFINES) $(SRCS)
149
150 endif
151 endif
152 endif
153 endif
154
155 ifndef OS
156 all: help
157 else
158 all: olsrd
159 endif
160
161
162 OBJS = $(patsubst %.c,%.o,$(SRCS))
163 override CFLAGS += $(INCLUDES) $(DEFINES)
164 export CFLAGS
165
166
167 olsrd:          $(OBJS) $(CFGOBJS)
168                 $(CC) -o $@ $(OBJS) $(CFGOBJS) $(LIBS) 
169
170 $(DEPFILE):     $(SRCS) $(HDRS)
171 ifdef MAKEDEPEND
172                 @echo '# olsrd dependency file. AUTOGENERATED' > $(DEPFILE)
173                 $(MAKEDEPEND)
174 endif
175
176 $(CFGOBJS):
177                 $(MAKE) -C src/cfgparser
178
179
180 .PHONY: help libs clean_libs clean uberclean install_libs install_bin install
181
182 help:
183         @echo
184         @echo '***** olsr.org olsr daemon Make ****'
185         @echo ' You must provide a valid target OS '
186         @echo ' by setting the OS variable! Valid  '
187         @echo ' target OSes are:                   '
188         @echo ' ---------------------------------  '
189         @echo ' linux - GNU/Linux                  '
190         @echo ' win32 - MS Windows                 '
191         @echo ' fbsd  - FreeBSD                    '
192         @echo ' osx   - Mac OS X                   '
193         @echo ' ---------------------------------  '
194         @echo ' Example - build for windows:       '
195         @echo ' make OS=win32                      '
196         @echo ' If you are developing olsrd code,  '
197         @echo ' exporting the OS variable might    '
198         @echo ' be a good idea :-) Have fun!       '
199         @echo '************************************'
200         @echo
201
202 clean:
203                 rm -f $(OBJS) olsrd olsrd.exe
204                 $(MAKE) -C src/cfgparser clean
205
206 uberclean:      clean libs_clean
207                 rm -f $(DEPFILE) $(DEPFILE).bak
208                 rm -f src/*[o~] src/linux/*[o~] src/unix/*[o~] src/win32/*[o~]
209                 rm -f src/bsd/*[o~] 
210                 $(MAKE) -C src/cfgparser uberclean
211
212
213 install_bin:
214                 $(STRIP) olsrd
215                 install -D -m 755 olsrd $(INSTALL_PREFIX)/usr/sbin/olsrd
216
217 install:        install_bin
218                 @echo olsrd uses the configfile $(INSTALL_PREFIX)/etc/olsr.conf
219                 @echo a default configfile. A sample configfile
220                 @echo can be installed
221                 mkdir -p $(INSTALL_PREFIX)/etc
222                 cp -i files/olsrd.conf.default $(INSTALL_PREFIX)/etc/olsrd.conf
223                 @echo -------------------------------------------
224                 @echo Edit $(INSTALL_PREFIX)/etc/olsrd.conf before running olsrd!!
225                 @echo -------------------------------------------
226                 mkdir -p $(INSTALL_PREFIX)/usr/share/man/man8/
227                 cp files/olsrd.8.gz $(INSTALL_PREFIX)/usr/share/man/man8/olsrd.8.gz
228
229 libs: 
230                 for i in lib/*; do \
231                         $(MAKE) -C $$i; \
232                 done; 
233
234 libs_clean: 
235                 for i in lib/*; do \
236                         $(MAKE) -C $$i clean; \
237                 done; 
238
239 libs_install:
240                 for i in lib/*; do \
241                         $(MAKE) -C $$i LIBDIR=$(INSTALL_PREFIX)/usr/lib install; \
242                 done;   
243
244 sinclude        $(DEPFILE)