Update version to 0.5.6-r9
[olsrd.git] / Makefile
index ac0993f..38f718f 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
 # The olsr.org Optimized Link-State Routing daemon(olsrd)
-# Copyright (c) 2004, Andreas TΓΈnnesen(andreto@olsr.org)
+# Copyright (c) 2004, Andreas Tonnesen(andreto@olsr.org)
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without 
 # to the project. For more information see the website or contact
 # the copyright holders.
 #
-# $Id: Makefile,v 1.79 2007/04/02 10:07:44 bernd67 Exp $
 
-VERS =         0.5.1pre
-
-CFLAGS +=      -DVERSION=\"$(VERS)\"
+# Please also write a new version to:
+# gui/win32/Main/Frontend.rc (line 71, around "CAPTION [...]")
+# gui/win32/Inst/installer.nsi (line 57, around "MessageBox MB_YESNO [...]")
+VERS =         pre-0.5.6-r9
 
 TOPDIR = .
 include Makefile.inc
 
+# pass generated variables to save time
+MAKECMD = $(MAKE) OS="$(OS)" WARNINGS="$(WARNINGS)"
+
 LIBS +=                $(OS_LIB_DYNLOAD)
 
 ifeq ($(OS), win32)
-LDFLAGS +=     -Wl,--out-implib=libolsrd.a -Wl,--export-all-symbols
+LDFLAGS +=     -Wl,--out-implib=libolsrd.a
+LDFLAGS +=     -Wl,--export-all-symbols
 endif
 
-SWITCHDIR =     src/olsr_switch
+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)
+include $(CFGDIR)/local.mk
+TAG_SRCS =     $(SRCS) $(HDRS) $(wildcard $(CFGDIR)/*.[ch] $(SWITCHDIR)/*.[ch])
 
-default_target: cfgparser olsrd
+.PHONY: default_target switch
+default_target: $(EXENAME)
 
-olsrd:         $(OBJS) $(CFGOBJS)
-               $(CC) $(LDFLAGS) -o $@ $(OBJS) $(CFGOBJS) $(LIBS)
+$(EXENAME):    $(OBJS) src/builddata.o
+               $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
 
-cfgparser:     $(CFGDEPS)
+cfgparser:     $(CFGDEPS) src/builddata.o
                $(MAKE) -C $(CFGDIR)
 
 switch:                
-               $(MAKE) -C $(SWITCHDIR)
+       $(MAKECMD) -C $(SWITCHDIR)
+
+# generate it always
+.PHONY: src/builddata.c
+src/builddata.c:
+       @$(RM) "$@"
+       @echo "#include \"defs.h\"" >> "$@" 
+       @echo "const char olsrd_version[] = \"olsr.org - $(VERS)\";" >> "$@" 
+       @date +"const char build_date[] = \"%Y-%m-%d %H:%M:%S\";" >> "$@" 
+       @echo "const char build_host[] = \"$(shell hostname)\";" >> "$@" 
 
-$(CFGOBJS):
-               $(MAKE) -C $(CFGDIR)
 
-.PHONY: help libs clean_libs libs_clean clean uberclean install_libs libs_install install_bin install_olsrd install build_all install_all clean_all
+.PHONY: help libs clean_libs libs_clean clean uberclean install_libs libs_install install_bin install_olsrd install build_all install_all clean_all 
 
 clean:
-               -rm -f $(OBJS) $(SRCS:%.c=%.d) olsrd olsrd.exe
-               $(MAKE) -C $(CFGDIR) clean
-               $(MAKE) -C $(SWITCHDIR) clean
+       -rm -f $(OBJS) $(SRCS:%.c=%.d) $(EXENAME) $(EXENAME).exe src/builddata.c $(TMPFILES)
+ifeq ($(OS), win32)
+       -rm -f libolsrd.a
+       -rm -f gui/win32/Main/olsrd_cfgparser.lib
+       -rm -f olsr-setup.exe
+       -rm -fr gui/win32/Main/Release
+       -rm -fr gui/win32/Shim/Release
+endif
 
 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
+       -rm -f $(TAGFILE)
+#      BSD-xargs has no "--no-run-if-empty" aka "-r"
+       find . \( -name '*.[od]' -o -name '*~' \) -not -path "*/.hg*" -print0 | xargs -0 rm -f
+       $(MAKECMD) -C $(SWITCHDIR) clean
+       $(MAKECMD) -C $(CFGDIR) clean
 
 install: install_olsrd
 
@@ -93,21 +109,26 @@ install_bin:
 
 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 $(EXENAME) 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 configfile can be found in olsrd.conf.default.rfc.
+               @echo However none of the larger OLSRD using networks use that
+               @echo so install a configfile with activated link quality exstensions
+               @echo per default.
                @echo can be found at files/olsrd.conf.default.lq
                @echo ==========================================================
                mkdir -p $(ETCDIR)
-               -cp -i files/olsrd.conf.default.rfc $(CFGFILE)
+               -cp -i files/olsrd.conf.default.lq $(CFGFILE)
                @echo -------------------------------------------
                @echo Edit $(CFGFILE) before running olsrd!!
                @echo -------------------------------------------
-               @echo Installing manpages olsrd\(8\) and olsrd.conf\(5\)
+               @echo Installing manpages $(EXENAME)\(8\) and $(CFGNAME)\(5\)
+ifneq ($(MANDIR),)
                mkdir -p $(MANDIR)/man8/
-               cp files/olsrd.8.gz $(MANDIR)/man8/olsrd.8.gz
+               cp files/olsrd.8.gz $(MANDIR)/man8/$(EXENAME).8.gz
                mkdir -p $(MANDIR)/man5/
-               cp files/olsrd.conf.5.gz $(MANDIR)/man5/olsrd.conf.5.gz
+               cp files/olsrd.conf.5.gz $(MANDIR)/man5/$(CFGNAME).5.gz
+endif
 
 tags:
                $(TAGCMD) -o $(TAGFILE) $(TAG_SRCS)
@@ -122,63 +143,104 @@ rpm:
 # PLUGINS
 #
 
-libs: 
-               $(MAKE) -C lib LIBDIR=$(LIBDIR)
+# This is quite ugly but at least it works
+ifeq ($(OS),linux)
+SUBDIRS = $(notdir $(shell find lib -maxdepth 2 -name Makefile -not -path lib/Makefile -printf "%h\n"|sort))
+else
+ifeq ($(OS),win32)
+SUBDIRS := dot_draw httpinfo mini pgraph secure txtinfo
+else
+ifeq ($(OS),android)
+# nameservice: no regex
+SUBDIRS := bmf dot_draw dyn_gw_plain httpinfo mini quagga secure tas txtinfo watchdog
+else
+SUBDIRS := dot_draw dyn_gw dyn_gw_plain httpinfo mini nameservice pgraph secure txtinfo watchdog
+endif
+endif
+endif
+
+libs:
+               set -e;for dir in $(SUBDIRS);do $(MAKECMD) -C lib/$$dir LIBDIR=$(LIBDIR);done
 
 libs_clean clean_libs:
-               $(MAKE) -C lib LIBDIR=$(LIBDIR) clean
+               -for dir in $(SUBDIRS);do $(MAKECMD) -C lib/$$dir LIBDIR=$(LIBDIR) clean;done
+ifeq ($(OS), win32)
+               -rm -f lib/pgraph/olsrd_pgraph.dll
+               -rm -f lib/txtinfo/olsrd_txtinfo.dll
+               -rm -f lib/httpinfo/olsrd_httpinfo.dll
+               -rm -f lib/secure/olsrd_secure.dll
+               -rm -f lib/dot_draw/olsrd_dot_draw.dll
+               -rm -f lib/mini/olsrd_mini.dll
+endif
 
 libs_install install_libs:
-               $(MAKE) -C lib LIBDIR=$(LIBDIR) install
+               set -e;for dir in $(SUBDIRS);do $(MAKECMD) -C lib/$$dir LIBDIR=$(LIBDIR) install;done
 
 httpinfo:
-               $(MAKE) -C lib/httpinfo clean
-               $(MAKE) -C lib/httpinfo 
-               $(MAKE) -C lib/httpinfo DESTDIR=$(DESTDIR) install 
+               $(MAKECMD) -C lib/httpinfo clean
+               $(MAKECMD) -C lib/httpinfo 
+               $(MAKECMD) -C lib/httpinfo DESTDIR=$(DESTDIR) install 
 
 tas:
-               $(MAKE) -C lib/tas clean
-               $(MAKE) -C lib/tas DESTDIR=$(DESTDIR) install
+               $(MAKECMD) -C lib/tas clean
+               $(MAKECMD) -C lib/tas
+               $(MAKECMD) -C lib/tas DESTDIR=$(DESTDIR) install
 
 dot_draw:
-               $(MAKE) -C lib/dot_draw clean
-               $(MAKE) -C lib/dot_draw DESTDIR=$(DESTDIR) install
+               $(MAKECMD) -C lib/dot_draw clean
+               $(MAKECMD) -C lib/dot_draw
+               $(MAKECMD) -C lib/dot_draw DESTDIR=$(DESTDIR) install
 
 nameservice:
-               $(MAKE) -C lib/nameservice clean
-               $(MAKE) -C lib/nameservice DESTDIR=$(DESTDIR) install
+               $(MAKECMD) -C lib/nameservice clean
+               $(MAKECMD) -C lib/nameservice
+               $(MAKECMD) -C lib/nameservice DESTDIR=$(DESTDIR) install
 
 dyn_gw:
-               $(MAKE) -C lib/dyn_gw clean
-               $(MAKE) -C lib/dyn_gw
-               $(MAKE) -C lib/dyn_gw DESTDIR=$(DESTDIR) install
+               $(MAKECMD) -C lib/dyn_gw clean
+               $(MAKECMD) -C lib/dyn_gw
+               $(MAKECMD) -C lib/dyn_gw DESTDIR=$(DESTDIR) install
 
 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
+               $(MAKECMD) -C lib/dyn_gw_plain clean
+               $(MAKECMD) -C lib/dyn_gw_plain
+               $(MAKECMD) -C lib/dyn_gw_plain DESTDIR=$(DESTDIR) install
 
 secure:
-               $(MAKE) -C lib/secure clean
-               $(MAKE) -C lib/secure
-               $(MAKE) -C lib/secure DESTDIR=$(DESTDIR) install
+               $(MAKECMD) -C lib/secure clean
+               $(MAKECMD) -C lib/secure
+               $(MAKECMD) -C lib/secure DESTDIR=$(DESTDIR) install
 
 pgraph:
-               $(MAKE) -C lib/pgraph clean
-               $(MAKE) -C lib/pgraph 
-               $(MAKE) -C lib/pgraph DESTDIR=$(DESTDIR) install 
+               $(MAKECMD) -C lib/pgraph clean
+               $(MAKECMD) -C lib/pgraph 
+               $(MAKECMD) -C lib/pgraph DESTDIR=$(DESTDIR) install 
 
 bmf:
-               $(MAKE) -C lib/bmf clean
-               $(MAKE) -C lib/bmf 
-               $(MAKE) -C lib/bmf DESTDIR=$(DESTDIR) install 
+               $(MAKECMD) -C lib/bmf clean
+               $(MAKECMD) -C lib/bmf 
+               $(MAKECMD) -C lib/bmf DESTDIR=$(DESTDIR) install 
 
 quagga:
-               $(MAKE) -C lib/quagga clean
-               $(MAKE) -C lib/quagga 
-               $(MAKE) -C lib/quagga DESTDIR=$(DESTDIR) install 
-
-
-build_all:     cfgparser olsrd libs
+               $(MAKECMD) -C lib/quagga clean
+               $(MAKECMD) -C lib/quagga 
+               $(MAKECMD) -C lib/quagga DESTDIR=$(DESTDIR) install 
+
+txtinfo:
+               $(MAKECMD) -C lib/txtinfo clean
+               $(MAKECMD) -C lib/txtinfo 
+               $(MAKECMD) -C lib/txtinfo DESTDIR=$(DESTDIR) install 
+
+arprefresh:
+               $(MAKECMD) -C lib/arprefresh clean
+               $(MAKECMD) -C lib/arprefresh
+               $(MAKECMD) -C lib/arprefresh DESTDIR=$(DESTDIR) install
+
+watchdog:
+               $(MAKECMD) -C lib/watchdog clean
+               $(MAKECMD) -C lib/watchdog
+               $(MAKECMD) -C lib/watchdog DESTDIR=$(DESTDIR) install
+
+build_all:     all switch libs
 install_all:   install install_libs
 clean_all:     uberclean clean_libs