# to the project. For more information see the website or contact
# the copyright holders.
#
-# $Id: Makefile,v 1.31 2004/11/30 17:12:28 tlopatic Exp $
+# $Id: Makefile,v 1.76 2007/04/01 21:44:14 bernd67 Exp $
-VERS = 0.4.8
+VERS = 0.5.0
-#OS = linux
-#OS = fbsd
-#OS = win32
-#OS = osx
+TOPDIR = .
+include Makefile.inc
-CC ?= gcc
-STRIP ?= strip
-BISON ?= bison
-FLEX ?= flex
+LIBS += $(OS_LIB_DYNLOAD)
-INSTALL_PREFIX ?=
+ifeq ($(OS), win32)
+LDFLAGS += -Wl,--out-implib=libolsrd.a -Wl,--export-all-symbols
+endif
-DEFINES = -DUSE_LINK_QUALITY
-INCLUDES = -Isrc
+SWITCHDIR = src/olsr_switch
+CFGDIR = src/cfgparser
+CFGOBJS = $(CFGDIR)/oscan.o $(CFGDIR)/oparse.o $(CFGDIR)/olsrd_conf.o
+CFGDEPS = $(wildcard $(CFGDIR)/*.c) $(wildcard $(CFGDIR)/*.h) $(CFGDIR)/oparse.y $(CFGDIR)/oscan.lex
+TAG_SRCS = $(SRCS) $(HDRS) $(wildcard src/cfgparser/*.c) $(wildcard src/cfgparser/*.h) $(wildcard src/olsr_switch/*.c) $(wildcard src/olsr_switch/*.h)
-DEPFILE = .depend
+default_target: cfgparser olsrd
-SRCS = $(wildcard src/*.c)
-HDRS = $(wildcard src/*.h)
+olsrd: $(OBJS) $(CFGOBJS)
+ $(CC) $(LDFLAGS) -o $@ $(OBJS) $(CFGOBJS) $(LIBS)
-CFGDIR = src/cfgparser
-CFGOBJS = $(CFGDIR)/oscan.o $(CFGDIR)/oparse.o $(CFGDIR)/olsrd_conf.o
+cfgparser: $(CFGDEPS)
+ $(MAKE) -C $(CFGDIR)
-ifndef OS
-all: help
-else
-all: olsrd
-endif
+switch:
+ $(MAKE) -C $(SWITCHDIR)
-ifeq ($(OS), linux)
+$(CFGOBJS):
+ $(MAKE) -C $(CFGDIR)
-SRCS += $(wildcard src/linux/*.c) $(wildcard src/unix/*.c)
-HDRS += $(wildcard src/linux/*.h) $(wildcard src/unix/*.h)
-DEFINES += -Dlinux
-CFLAGS ?= -Wall -Wmissing-prototypes -Wstrict-prototypes \
- -O2 -g #-pg -DDEBUG #-march=i686
-LIBS = -lm -ldl
-MAKEDEPEND = makedepend -f $(DEPFILE) -Y $(INCLUDES) $(DEFINES) $(SRCS) >/dev/null 2>&1
+.PHONY: help libs clean_libs libs_clean clean uberclean install_libs libs_install install_bin install_olsrd install build_all install_all clean_all
-else
-ifeq ($(OS), fbsd)
+clean:
+ -rm -f $(OBJS) $(SRCS:%.c=%.d) olsrd olsrd.exe
+ $(MAKE) -C $(CFGDIR) clean
+ $(MAKE) -C $(SWITCHDIR) clean
-SRCS += $(wildcard src/bsd/*.c) $(wildcard src/unix/*.c)
-HDRS += $(wildcard src/bsd/*.h) $(wildcard src/unix/*.h)
-CFLAGS ?= -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -g
-LIBS = -lm
-MAKEDEPEND = makedepend -f $(DEPFILE) $(INCLUDES) $(DEFINES) $(SRCS)
+uberclean: clean clean_libs
+ -rm -f $(TAGFILE)
+ -rm -f src/*.[od~]
+ -rm -f src/linux/*.[od~] src/unix/*.[od~] src/win32/*.[od~] src/bsd/*.[od~]
+ $(MAKE) -C $(CFGDIR) uberclean
+ $(MAKE) -C $(SWITCHDIR) clean
-else
-ifeq ($(OS), osx)
+install: install_olsrd
-SRCS += $(wildcard src/bsd/*.c) $(wildcard src/unix/*.c)
-HDRS += $(wildcard src/bsd/*.h) $(wildcard src/unix/*.h)
-DEFINES += -D__MacOSX__
-CFLAGS ?= -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -g
-LIBS = -lm -ldl
-MAKEDEPEND = makedepend -f $(DEPFILE) $(INCLUDES) $(DEFINES) $(SRCS)
+install_bin:
+ mkdir -p $(SBINDIR)
+ install -m 755 $(EXENAME) $(SBINDIR)
+ $(STRIP) $(SBINDIR)/$(EXENAME)
+
+install_olsrd: install_bin
+ @echo ========= C O N F I G U R A T I O N - F I L E ============
+ @echo olsrd uses the configfile $(CFGFILE)
+ @echo a default configfile. A sample RFC-compliance aimed
+ @echo configfile can be installed. Note that a LQ-based configfile
+ @echo can be found at files/olsrd.conf.default.lq
+ @echo ==========================================================
+ mkdir -p $(ETCDIR)
+ -cp -i files/olsrd.conf.default.rfc $(CFGFILE)
+ @echo -------------------------------------------
+ @echo Edit $(CFGFILE) before running olsrd!!
+ @echo -------------------------------------------
+ @echo Installing manpages olsrd\(8\) and olsrd.conf\(5\)
+ mkdir -p $(MANDIR)/man8/
+ cp files/olsrd.8.gz $(MANDIR)/man8/olsrd.8.gz
+ mkdir -p $(MANDIR)/man5/
+ cp files/olsrd.conf.5.gz $(MANDIR)/man5/olsrd.conf.5.gz
+
+tags:
+ $(TAGCMD) -o $(TAGFILE) $(TAG_SRCS)
+
+rpm:
+ @$(RM) olsrd-current.tar.bz2
+ @echo "Creating olsrd-current.tar.bz2 ..."
+ @./list-excludes.sh | tar --exclude-from=- --exclude="olsrd-current.tar.bz2" -C .. -cjf olsrd-current.tar.bz2 olsrd-current
+ @echo "Building RPMs..."
+ @rpmbuild -ta olsrd-current.tar.bz2
+#
+# PLUGINS
+#
-else
-ifeq ($(OS), win32)
+libs:
+ $(MAKE) -C lib LIBDIR=$(LIBDIR)
-SRCS += $(wildcard src/win32/*.c)
-HDRS += $(wildcard src/win32/*.h)
-INCLUDES += -Isrc/win32
-DEFINES += -DWIN32
-CFLAGS ?= -Wall -Wmissing-prototypes -Wstrict-prototypes \
- -mno-cygwin -O2 -g
-LIBS = -mno-cygwin -lws2_32 -liphlpapi
-MAKEDEPEND = makedepend -f $(DEPFILE) $(INCLUDES) $(DEFINES) $(SRCS) >/dev/null 2>&1
-
-olsr-${VERS}.zip: gui/win32/Main/Release/Switch.exe \
- gui/win32/Shim/Release/Shim.exe \
- olsrd.exe \
- src/cfgparser/olsrd_cfgparser.dll \
- README-WIN32.txt \
- gui/win32/Inst/linux-manual.txt \
- files/olsrd.conf.default.win32 \
- gui/win32/Main/Default.olsr \
- lib/dot_draw/olsrd_dot_draw.dll
- rm -rf ${TEMP}/olsr-${VERS}
- rm -f ${TEMP}/olsr-${VERS}.zip
- rm -f olsr-${VERS}.zip
- mkdir ${TEMP}/olsr-${VERS}
- cp gui/win32/Main/Release/Switch.exe ${TEMP}/olsr-${VERS}
- cp gui/win32/Shim/Release/Shim.exe ${TEMP}/olsr-${VERS}
- cp olsrd.exe ${TEMP}/olsr-${VERS}
- cp src/cfgparser/olsrd_cfgparser.dll ${TEMP}/olsr-${VERS}
- cp README-WIN32.txt ${TEMP}/olsr-${VERS}
- cp gui/win32/Inst/linux-manual.txt ${TEMP}/olsr-${VERS}
- cp files/olsrd.conf.default.win32 ${TEMP}/olsr-${VERS}/olsrd.conf
- cp gui/win32/Main/Default.olsr ${TEMP}/olsr-${VERS}
- cp lib/dot_draw/olsrd_dot_draw.dll ${TEMP}/olsr-${VERS}
- cd ${TEMP}; echo y | cacls olsr-${VERS} /T /G Everyone:F
- cd ${TEMP}; zip -q -r olsr-${VERS}.zip olsr-${VERS}
- cp ${TEMP}/olsr-${VERS}.zip .
- rm -rf ${TEMP}/olsr-${VERS}
- rm -f ${TEMP}/olsr-${VERS}.zip
-
-olsr-${VERS}-setup.exe: gui/win32/Main/Release/Switch.exe \
- gui/win32/Shim/Release/Shim.exe \
- olsrd.exe \
- src/cfgparser/olsrd_cfgparser.dll \
- README-WIN32.txt \
- gui/win32/Inst/linux-manual.txt \
- files/olsrd.conf.default.win32 \
- gui/win32/Main/Default.olsr \
- lib/dot_draw/olsrd_dot_draw.dll \
- gui/win32/Inst/installer.nsi
- rm -f olsr-setup.exe
- rm -f olsr-${VERS}-setup.exe
- C:/Program\ Files/NSIS/makensis gui\win32\Inst\installer.nsi
- mv olsr-setup.exe olsr-${VERS}-setup.exe
+libs_clean clean_libs:
+ $(MAKE) -C lib LIBDIR=$(LIBDIR) clean
-endif
-endif
-endif
-endif
+libs_install install_libs:
+ $(MAKE) -C lib LIBDIR=$(LIBDIR) install
-OBJS = $(patsubst %.c,%.o,$(SRCS))
-override CFLAGS += $(INCLUDES) $(DEFINES)
-export CFLAGS
+httpinfo:
+ $(MAKE) -C lib/httpinfo clean
+ $(MAKE) -C lib/httpinfo
+ $(MAKE) -C lib/httpinfo DESTDIR=$(DESTDIR) install
+tas:
+ $(MAKE) -C lib/tas clean
+ $(MAKE) -C lib/tas DESTDIR=$(DESTDIR) install
-olsrd: $(OBJS) $(CFGOBJS)
- $(CC) -o $@ $(OBJS) $(CFGOBJS) $(LIBS)
+dot_draw:
+ $(MAKE) -C lib/dot_draw clean
+ $(MAKE) -C lib/dot_draw DESTDIR=$(DESTDIR) install
-$(DEPFILE): $(SRCS) $(HDRS)
-ifdef MAKEDEPEND
- @echo '# olsrd dependency file. AUTOGENERATED' > $(DEPFILE)
- $(MAKEDEPEND)
-endif
+nameservice:
+ $(MAKE) -C lib/nameservice clean
+ $(MAKE) -C lib/nameservice DESTDIR=$(DESTDIR) install
-$(CFGOBJS):
- $(MAKE) -C src/cfgparser
-
-
-.PHONY: help libs clean_libs clean uberclean install_libs install_bin install
-
-help:
- @echo
- @echo '***** olsr.org olsr daemon Make ****'
- @echo ' You must provide a valid target OS '
- @echo ' by setting the OS variable! Valid '
- @echo ' target OSes are: '
- @echo ' --------------------------------- '
- @echo ' linux - GNU/Linux '
- @echo ' win32 - MS Windows '
- @echo ' fbsd - FreeBSD '
- @echo ' osx - Mac OS X '
- @echo ' --------------------------------- '
- @echo ' Example - build for windows: '
- @echo ' make OS=win32 '
- @echo ' If you are developing olsrd code, '
- @echo ' exporting the OS variable might '
- @echo ' be a good idea :-) Have fun! '
- @echo '************************************'
- @echo
+dyn_gw:
+ $(MAKE) -C lib/dyn_gw clean
+ $(MAKE) -C lib/dyn_gw
+ $(MAKE) -C lib/dyn_gw DESTDIR=$(DESTDIR) install
-clean:
- rm -f $(OBJS) olsrd olsrd.exe
- $(MAKE) -C src/cfgparser clean
+dyn_gw_plain:
+ $(MAKE) -C lib/dyn_gw_plain clean
+ $(MAKE) -C lib/dyn_gw_plain
+ $(MAKE) -C lib/dyn_gw_plain DESTDIR=$(DESTDIR) install
-uberclean: clean clean_libs
- rm -f $(DEPFILE) $(DEPFILE).bak
- rm -f src/*[o~] src/linux/*[o~] src/unix/*[o~] src/win32/*[o~]
- rm -f src/bsd/*[o~]
- $(MAKE) -C src/cfgparser uberclean
+secure:
+ $(MAKE) -C lib/secure clean
+ $(MAKE) -C lib/secure
+ $(MAKE) -C lib/secure DESTDIR=$(DESTDIR) install
-install_bin:
- $(STRIP) olsrd
- mkdir -p $(INSTALL_PREFIX)/usr/sbin
- install -m 755 olsrd $(INSTALL_PREFIX)/usr/sbin
-
-install: install_bin
- @echo olsrd uses the configfile $(INSTALL_PREFIX)/etc/olsr.conf
- @echo a default configfile. A sample configfile
- @echo can be installed
- mkdir -p $(INSTALL_PREFIX)/etc
- cp -i files/olsrd.conf.default $(INSTALL_PREFIX)/etc/olsrd.conf
- @echo -------------------------------------------
- @echo Edit $(INSTALL_PREFIX)/etc/olsrd.conf before running olsrd!!
- @echo -------------------------------------------
- mkdir -p $(INSTALL_PREFIX)/usr/share/man/man8/
- cp files/olsrd.8.gz $(INSTALL_PREFIX)/usr/share/man/man8/olsrd.8.gz
+pgraph:
+ $(MAKE) -C lib/pgraph clean
+ $(MAKE) -C lib/pgraph
+ $(MAKE) -C lib/pgraph DESTDIR=$(DESTDIR) install
-libs:
- for i in lib/*; do \
- $(MAKE) -C $$i; \
- done;
+bmf:
+ $(MAKE) -C lib/bmf clean
+ $(MAKE) -C lib/bmf
+ $(MAKE) -C lib/bmf DESTDIR=$(DESTDIR) install
-clean_libs:
- for i in lib/*; do \
- $(MAKE) -C $$i clean; \
- done;
+quagga:
+ $(MAKE) -C lib/quagga clean
+ $(MAKE) -C lib/quagga
+ $(MAKE) -C lib/quagga DESTDIR=$(DESTDIR) install
-install_libs:
- for i in lib/*; do \
- $(MAKE) -C $$i LIBDIR=$(INSTALL_PREFIX)/usr/lib install; \
- done;
-sinclude $(DEPFILE)
+build_all: cfgparser olsrd libs
+install_all: install install_libs
+clean_all: uberclean clean_libs