* CVS-HEAD is not 0.5.2pre
[olsrd.git] / Makefile
index 841471f..8236872 100644 (file)
--- a/Makefile
+++ b/Makefile
 # to the project. For more information see the website or contact
 # the copyright holders.
 #
-# $Id: Makefile,v 1.57 2005/04/14 23:29:15 spoggle Exp $
+# $Id: Makefile,v 1.86 2007/07/05 23:12:43 bernd67 Exp $
 
-VERS =         0.4.9
+VERS =         0.5.2pre
 
-CC ?=          gcc
-STRIP ?=       strip
-BISON ?=       bison
-FLEX ?=                flex
+TOPDIR = .
+include Makefile.inc
 
-CCWARNINGS = -Wall -Wmissing-prototypes -Wstrict-prototypes \
-             -Wmissing-declarations -Wsign-compare
+CFLAGS +=      -DVERSION=\"$(VERS)\"
 
-INCLUDES =     -Isrc
+MAKECMD = $(MAKE) OS="$(OS)" WARNINGS="$(WARNINGS)"
 
-DEPFILE =      .depend
+LIBS +=                $(OS_LIB_DYNLOAD)
 
-SRCS =         $(wildcard src/*.c)
-HDRS =         $(wildcard src/*.h)
+ifeq ($(OS), win32)
+LDFLAGS +=     -Wl,--out-implib=libolsrd.a -Wl,--export-all-symbols
+endif
 
+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)
 
-TAGCMD ?=      etags   
-TAGFILE ?=     src/TAGS
-
-ifeq ($(OS), Windows_NT)
-OS =           win32
-endif
-
-ifeq ($(OS), linux)
-
-#
-# LINUX SPECIFIC CONFIGURATION
-#
-
-INSTALL_PREFIX ?=
-
-SRCS +=        $(wildcard src/linux/*.c) $(wildcard src/unix/*.c)
-HDRS +=                $(wildcard src/linux/*.h) $(wildcard src/unix/*.h)
-DEFINES =      -Dlinux
-CFLAGS ?=      $(CCWARNINGS) -O2 -g #-DDEBUG #-pg #-march=i686
-LIBS =         -lm -ldl #-pg
-MAKEDEPEND =   makedepend -f $(DEPFILE) $(DEFINES) -Y $(INCLUDES) $(SRCS) >/dev/null 2>&1
-LIBDIR =       $(INSTALL_PREFIX)/usr/lib
-
-all:    cfgparser olsrd
-install: install_olsrd
-
-else
-ifeq ($(OS), fbsd)
-
-#
-# FREEBSD SPECIFIC CONFIGURATION
-#
-
-LOCALBASE?=    /usr/local
-INSTALL_PREFIX?= $(LOCALBASE)
-CFGFILE?=      $(INSTALL_PREFIX)/etc/olsrd.conf
-
-SRCS +=                $(wildcard src/bsd/*.c) $(wildcard src/unix/*.c)
-HDRS +=                $(wildcard src/bsd/*.h) $(wildcard src/unix/*.h)
-CFLAGS +=      -DOLSRD_GLOBAL_CONF_FILE=\"$(CFGFILE)\"
-LIBS =         -lm
-MAKEDEPEND =   makedepend -f $(DEPFILE) -D__FreeBSD__ $(INCLUDES) $(SRCS)
-LIBDIR =       $(INSTALL_PREFIX)/lib
-
-all:    cfgparser olsrd
-install: install_olsrd
-
-else
-ifeq ($(OS), fbsd-ll)
-
-#
-# FREEBSD/LIBNET SPECIFIC CONFIGURATION
-#
-
-LOCALBASE?=    /usr/local
-INSTALL_PREFIX?= $(LOCALBASE)
-CFGFILE?=      $(INSTALL_PREFIX)/etc/olsrd.conf
-
-SRCS +=                $(wildcard src/bsd/*.c) $(wildcard src/unix/*.c)
-HDRS +=                $(wildcard src/bsd/*.h) $(wildcard src/unix/*.h)
-CFLAGS +=      -DOLSRD_GLOBAL_CONF_FILE=\"${CFGFILE}\"  -DSPOOF -I${LOCALBASE}/include
-LIBS =         -lm -L${LOCALBASE}/lib -lnet
-MAKEDEPEND =   makedepend -f $(DEPFILE) -D__FreeBSD__ $(INCLUDES) $(SRCS)
-LIBDIR =       $(INSTALL_PREFIX)/lib
-
-all:     cfgparser olsrd
-install: install_olsrd
-
-else
-ifeq ($(OS), nbsd)
-
-#
-# NETBSD SPECIFIC CONFIGURATION
-#
-
-INSTALL_PREFIX ?=
-
-SRCS +=                $(wildcard src/bsd/*.c) $(wildcard src/unix/*.c)
-HDRS +=                $(wildcard src/bsd/*.h) $(wildcard src/unix/*.h)
-CFLAGS ?=      $(CCWARNINGS) -O2 -g
-LIBS =         -lm
-MAKEDEPEND =   makedepend -f $(DEPFILE) -D__NetBSD__ $(INCLUDES) $(SRCS)
-
-all:    cfgparser olsrd
-install: install_olsrd
-
-else
-ifeq ($(OS), osx)
-
-#
-# MACOSX SPECIFIC CONFIGURATION
-#
-
-INSTALL_PREFIX ?=
-
-SRCS +=                $(wildcard src/bsd/*.c) $(wildcard src/unix/*.c)
-HDRS +=                $(wildcard src/bsd/*.h) $(wildcard src/unix/*.h)
-DEFINES =      -D__MacOSX__
-CFLAGS ?=      $(CCWARNINGS) -O2 -g 
-LIBS =         -lm -ldl
-MAKEDEPEND =   makedepend -f $(DEPFILE) $(DEFINES) $(INCLUDES) $(SRCS)
-
-all:    cfgparser olsrd
-install: install_olsrd
-
-else
-ifeq ($(OS), win32)
-
-#
-# WINDOWS32 SPECIFIC CONFIGURATION
-#
-
-INSTALL_PREFIX ?=
-
-SRCS +=                $(wildcard src/win32/*.c)
-HDRS +=                $(wildcard src/win32/*.h)
-INCLUDES +=    -Isrc/win32
-DEFINES =      -DWIN32
-CFLAGS ?=      $(CCWARNINGS) -mno-cygwin -O2 -g
-LIBS =         -mno-cygwin -lws2_32 -liphlpapi
-MAKEDEPEND =   makedepend -f $(DEPFILE) $(DEFINES) $(INCLUDES) $(SRCS)
-LIBDIR =       $(INSTALL_PREFIX)/usr/lib
-
-all:    cfgparser olsrd
-install: install_olsrd
-
-olsr-${VERS}.zip:      gui/win32/Main/Release/Switch.exe \
-               gui/win32/Shim/Release/Shim.exe \
-               olsrd.exe \
-               src/cfgparser/olsrd_cfgparser.dll \
-               README \
-               README-Link-Quality.html \
-               gui/win32/Inst/linux-manual.txt \
-               files/olsrd.conf.win32.rfc \
-               files/olsrd.conf.win32.lq \
-               gui/win32/Main/RFC-Default.olsr \
-               gui/win32/Main/LQ-Default.olsr \
-               lib/dot_draw/olsrd_dot_draw.dll \
-               lib/nameservice/olsrd_nameservice.dll \
-               lib/httpinfo/olsrd_httpinfo.dll
-               $(STRIP) olsrd.exe
-               $(STRIP) src/cfgparser/olsrd_cfgparser.dll
-               $(STRIP) lib/dot_draw/olsrd_dot_draw.dll
-               $(STRIP) lib/nameservice/olsrd_nameservice.dll
-               $(STRIP) lib/httpinfo/olsrd_httpinfo.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 ${TEMP}/olsr-${VERS}
-               cp README-Link-Quality.html ${TEMP}/olsr-${VERS}
-               cp gui/win32/Inst/linux-manual.txt ${TEMP}/olsr-${VERS}
-               cp files/olsrd.conf.win32.rfc ${TEMP}/olsr-${VERS}/olsrd.conf.rfc
-               cp files/olsrd.conf.win32.lq ${TEMP}/olsr-${VERS}/olsrd.conf.lq
-               cp gui/win32/Main/RFC-Default.olsr ${TEMP}/olsr-${VERS}
-               cp gui/win32/Main/LQ-Default.olsr ${TEMP}/olsr-${VERS}/Default.olsr
-               cp lib/dot_draw/olsrd_dot_draw.dll ${TEMP}/olsr-${VERS}
-               cp lib/nameservice/olsrd_nameservice.dll ${TEMP}/olsr-${VERS}
-               cp lib/httpinfo/olsrd_httpinfo.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 \
-               README-Link-Quality.html \
-               gui/win32/Inst/linux-manual.txt \
-               files/olsrd.conf.win32.rfc \
-               files/olsrd.conf.win32.lq \
-               gui/win32/Main/RFC-Default.olsr \
-               gui/win32/Main/LQ-Default.olsr \
-               lib/dot_draw/olsrd_dot_draw.dll \
-               lib/nameservice/olsrd_nameservice.dll \
-               lib/httpinfo/olsrd_httpinfo.dll \
-               gui/win32/Inst/installer.nsi
-               $(STRIP) olsrd.exe
-               $(STRIP) src/cfgparser/olsrd_cfgparser.dll
-               $(STRIP) lib/dot_draw/olsrd_dot_draw.dll
-               $(STRIP) lib/nameservice/olsrd_nameservice.dll
-               $(STRIP) lib/httpinfo/olsrd_httpinfo.dll
-               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
-
-else
-ifeq ($(OS), wince)
-
-#
-# WINDOWS CE SPECIFIC CONFIGURATION
-#
-
-INSTALL_PREFIX ?=
-
-SRCS +=                $(wildcard src/win32/*.c)
-HDRS +=                $(wildcard src/win32/*.h)
-INCLUDES +=    -Isrc/win32 -Isrc/win32/ce
-DEFINES =      -DWIN32 -DWINCE
-CFLAGS ?=      $(CCWARNINGS) -O2 -g
-LIBS =         -lwinsock -liphlpapi
-MAKEDEPEND =   makedepend -f $(DEPFILE) $(DEFINES) $(INCLUDES) $(SRCS)
-
-else
-
-all:   help
-install:help
-
-endif
-endif
-endif
-endif
-endif
-endif
-endif
-
-#
-# END OF OS SPECIFIC STUFF
-#
-
-ifneq ($(NODEBUG), )
-CFLAGS += -DNODEBUG
-endif
-
-OBJS = $(patsubst %.c,%.o,$(SRCS))
-override CFLAGS += $(INCLUDES) $(DEFINES)
-export CFLAGS
-
+default_target: cfgparser olsrd
 
 olsrd:         $(OBJS) $(CFGOBJS)
-               $(CC) -o $@ $(OBJS) $(CFGOBJS) $(LIBS) 
-
-$(DEPFILE):    $(SRCS) $(HDRS)
-ifdef MAKEDEPEND
-               @echo '# olsrd dependency file. AUTOGENERATED' > $(DEPFILE)
-               $(MAKEDEPEND)
-endif
+               $(CC) $(LDFLAGS) -o $@ $(OBJS) $(CFGOBJS) $(LIBS)
 
 cfgparser:     $(CFGDEPS)
-               $(MAKE) -C $(CFGDIR)
+               $(MAKECMD) -C $(CFGDIR)
+
+switch:                
+               $(MAKECMD) -C $(SWITCHDIR)
 
 $(CFGOBJS):
-               $(MAKE) -C $(CFGDIR)
-
-.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 ' nbsd  - NetBSD                     '
-       @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
+               $(MAKECMD) -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
 
 clean:
-               rm -f $(OBJS) olsrd olsrd.exe
-               $(MAKE) -C src/cfgparser clean
+               -rm -f $(OBJS) $(SRCS:%.c=%.d) olsrd olsrd.exe
+               $(MAKECMD) -C $(CFGDIR) clean
+               $(MAKECMD) -C $(SWITCHDIR) clean
 
 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
+               -rm -f $(TAGFILE)
+               find . \( -name '*.[od]' -o -name '*~' \) -print | xargs -r rm -f
+               $(MAKECMD) -C $(CFGDIR) uberclean
+               $(MAKECMD) -C $(SWITCHDIR) clean
+
+install: install_olsrd
 
 install_bin:
-               $(STRIP) olsrd
-               mkdir -p $(INSTALL_PREFIX)/usr/sbin
-               install -m 755 olsrd $(INSTALL_PREFIX)/usr/sbin
+               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 $(INSTALL_PREFIX)/etc/olsr.conf
+               @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 $(INSTALL_PREFIX)/etc
-               cp -i files/olsrd.conf.default.rfc $(INSTALL_PREFIX)/etc/olsrd.conf
+               mkdir -p $(ETCDIR)
+               -cp -i files/olsrd.conf.default.rfc $(CFGFILE)
                @echo -------------------------------------------
-               @echo Edit $(INSTALL_PREFIX)/etc/olsrd.conf before running olsrd!!
+               @echo Edit $(CFGFILE) before running olsrd!!
                @echo -------------------------------------------
                @echo Installing manpages olsrd\(8\) and olsrd.conf\(5\)
-               mkdir -p $(INSTALL_PREFIX)/usr/share/man/man8/
-               cp files/olsrd.8.gz $(INSTALL_PREFIX)/usr/share/man/man8/olsrd.8.gz
-               mkdir -p $(INSTALL_PREFIX)/usr/share/man/man5/
-               cp files/olsrd.conf.5.gz $(INSTALL_PREFIX)/usr/share/man/man5/olsrd.conf.5.gz
+               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
 #
 
 libs: 
-               $(MAKE) -C lib LIBDIR=$(LIBDIR)
+               $(MAKECMD) -C lib LIBDIR=$(LIBDIR)
 
-clean_libs: 
-               $(MAKE) -C lib LIBDIR=$(LIBDIR) clean
+libs_clean clean_libs:
+               $(MAKECMD) -C lib LIBDIR=$(LIBDIR) clean
 
-install_libs:
-               $(MAKE) -C lib LIBDIR=$(LIBDIR) install
+libs_install install_libs:
+               $(MAKECMD) -C lib LIBDIR=$(LIBDIR) install
 
 httpinfo:
-               $(MAKE) -C lib/httpinfo clean
-               $(MAKE) -C lib/httpinfo 
-               $(MAKE) -C lib/httpinfo 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 install
+               $(MAKECMD) -C lib/tas clean
+               $(MAKECMD) -C lib/tas DESTDIR=$(DESTDIR) install
 
 dot_draw:
-               $(MAKE) -C lib/dot_draw clean
-               $(MAKE) -C lib/dot_draw install
+               $(MAKECMD) -C lib/dot_draw clean
+               $(MAKECMD) -C lib/dot_draw DESTDIR=$(DESTDIR) install
 
 nameservice:
-               $(MAKE) -C lib/nameservice clean
-               $(MAKE) -C lib/nameservice install
+               $(MAKECMD) -C lib/nameservice clean
+               $(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 install
+               $(MAKECMD) -C lib/dyn_gw clean
+               $(MAKECMD) -C lib/dyn_gw
+               $(MAKECMD) -C lib/dyn_gw DESTDIR=$(DESTDIR) install
 
-powerinfo:
-               $(MAKE) -C lib/powerinfo clean
-               $(MAKE) -C lib/powerinfo 
-               $(MAKE) -C lib/powerinfo install
+dyn_gw_plain:
+               $(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 install
+               $(MAKECMD) -C lib/secure clean
+               $(MAKECMD) -C lib/secure
+               $(MAKECMD) -C lib/secure DESTDIR=$(DESTDIR) install
 
+pgraph:
+               $(MAKECMD) -C lib/pgraph clean
+               $(MAKECMD) -C lib/pgraph 
+               $(MAKECMD) -C lib/pgraph DESTDIR=$(DESTDIR) install 
+
+bmf:
+               $(MAKECMD) -C lib/bmf clean
+               $(MAKECMD) -C lib/bmf 
+               $(MAKECMD) -C lib/bmf DESTDIR=$(DESTDIR) install 
+
+quagga:
+               $(MAKECMD) -C lib/quagga clean
+               $(MAKECMD) -C lib/quagga 
+               $(MAKECMD) -C lib/quagga DESTDIR=$(DESTDIR) install 
 
-tags:
-               $(TAGCMD) -o $(TAGFILE) $(SRCS) $(HDRS) $(wildcard src/cfgparser/*.c) $(wildcard src/cfgparser/*.h)
 
-sinclude       $(DEPFILE)
+build_all:     cfgparser olsrd libs
+install_all:   install install_libs
+clean_all:     uberclean clean_libs