Fix 'inactive' routes when using 'additional' option
[olsrd.git] / Makefile.inc
index e4428ea..31eeb74 100644 (file)
@@ -10,9 +10,6 @@ DEBUG ?= 1
 # compile OLSR_PRINTF out
 NO_DEBUG_MESSAGES ?= 0
 
-# the optimize option to be set for gcc
-OPTIMIZE ?= 
-
 # enable mudflap with 1 or deactivate with 0
 # you need a recent enough gcc and the libmudflap installed
 MUDFLAP ?= 0
@@ -38,83 +35,92 @@ endif
 BISON ?=       bison
 FLEX ?=                flex
 TAGCMD ?=      etags
+LD_HAS_DYN ?=   $(shell $(CC) -Wl,--help 2>&1|grep -w -q -- --dynamic-list && echo yes)
 
 # target directories and names
+PREFIX  ?= /usr/local
 DESTDIR ?=
-SBINDIR ?= $(DESTDIR)/usr/sbin
-ETCDIR  ?= $(DESTDIR)/etc
-LIBDIR  ?= $(DESTDIR)/usr/lib
-DOCDIR  ?= $(DESTDIR)/usr/share/doc
-MANDIR  ?= $(DESTDIR)/usr/share/man
+SBINDIR ?= $(DESTDIR)$(PREFIX)/sbin
+ETCDIR  ?= $(DESTDIR)$(subst /usr/etc,/etc,$(PREFIX)/etc)
+LIBDIR  ?= $(DESTDIR)$(PREFIX)/lib
+DOCDIR  ?= $(DESTDIR)$(PREFIX)/share/doc
+MANDIR  ?= $(DESTDIR)$(PREFIX)/share/man
 EXENAME ?= olsrd
 CFGNAME ?= $(EXENAME).conf
 CFGFILE ?= $(ETCDIR)/$(CFGNAME)
 
-CPPFLAGS =     -Isrc
-ifneq ($(TOPDIR),.)
-CPPFLAGS +=    -I$(TOPDIR)/src
-endif
+CPPFLAGS =     $(filter-out -I./src,-Isrc -I$(TOPDIR)/src)
+CPPFLAGS +=    -DOLSRD_CONF_FILE_NAME='"$(CFGNAME)"'
+CPPFLAGS +=    -DOLSRD_GLOBAL_CONF_FILE='"$(CFGFILE)"'
 
 # add gcc warnings and optimizations if CFLAGS not set
 ifndef CFLAGS
 ifndef WARNINGS
-WARNINGS +=    -Wall
-WARNINGS +=    -Wextra
-WARNINGS +=    -Wold-style-definition
-WARNINGS +=    -Wdeclaration-after-statement
-WARNINGS +=    -Wmissing-prototypes
-WARNINGS +=    -Wstrict-prototypes
-WARNINGS +=    -Wmissing-declarations
-WARNINGS +=    -Wsign-compare
-WARNINGS +=    -Waggregate-return
-WARNINGS +=    -Wmissing-noreturn
-WARNINGS +=    -Wmissing-format-attribute
-WARNINGS +=    -Wno-multichar
-WARNINGS +=    -Wno-deprecated-declarations
-WARNINGS +=    -Wendif-labels
-WARNINGS +=    -Wwrite-strings
-WARNINGS +=    -Wbad-function-cast
-WARNINGS +=    -Wpointer-arith
-WARNINGS +=    -Wcast-qual
-# the following 5 do not work yet and need more work on it
-#WARNINGS +=   -Wshadow
-#WARNINGS +=   -Wpointer-arith
-#WARNINGS +=   -Wcast-align
-#WARNINGS +=   -Wconversion
-#WARNINGS +=   -Wredundant-decls
+ALL_WARNINGS +=        -Wall
+ALL_WARNINGS +=        -Wextra
+ALL_WARNINGS +=        -Wold-style-definition
+ALL_WARNINGS +=        -Wdeclaration-after-statement
+ALL_WARNINGS +=        -Wmissing-prototypes
+ALL_WARNINGS +=        -Wstrict-prototypes
+ALL_WARNINGS +=        -Wmissing-declarations
+ALL_WARNINGS +=        -Wsign-compare
+ALL_WARNINGS +=        -Waggregate-return
+ALL_WARNINGS +=        -Wmissing-noreturn
+ALL_WARNINGS +=        -Wmissing-format-attribute
+ALL_WARNINGS +=        -Wno-multichar
+ALL_WARNINGS +=        -Wno-deprecated-declarations
+ALL_WARNINGS +=        -Wendif-labels
+ALL_WARNINGS +=        -Wwrite-strings
+ALL_WARNINGS +=        -Wbad-function-cast
+ALL_WARNINGS +=        -Wpointer-arith
+ALL_WARNINGS +=        -Wcast-qual
+ALL_WARNINGS +=        -Wshadow
+ALL_WARNINGS +=        -Wformat-2
+ALL_WARNINGS +=        -Wsequence-point
+ALL_WARNINGS +=        -Wpointer-arith
+ALL_WARNINGS +=        -Wcast-align
+# the following 2 do not work yet and need more work on it
+#ALL_WARNINGS +=       -Wconversion
+#ALL_WARNINGS +=       -Wredundant-decls
 ifeq ($(MUDFLAP),0)
 # work around a bug in gcc-4.*
-WARNINGS +=    -Wnested-externs
+ALL_WARNINGS +=        -Wnested-externs
 endif
 # Alas, htons() triggers this so we can't seriously activate it.
-#WARNINGS +=   -Wunreachable-code
-WARNINGS +=    -Winline
-WARNINGS +=    -Wdisabled-optimization
-#WARNINGS +=   -Werror
-WARNINGS +=    -finline-functions-called-once
-WARNINGS +=    -fearly-inlining
+#ALL_WARNINGS +=       -Wunreachable-code
+ALL_WARNINGS +=        -Winline
+ALL_WARNINGS +=        -Wdisabled-optimization
+ALL_WARNINGS +=        -Werror
+ALL_WARNINGS +=        -finline-functions-called-once
+ALL_WARNINGS +=        -funit-at-a-time
+ALL_WARNINGS +=        -fearly-inlining
 ifeq ($(DEBUG),0)
-WARNINGS +=    -fomit-frame-pointer
+ALL_WARNINGS +=        -fomit-frame-pointer
 endif
-# we have small inline functions in src/lq_route.h which should always be inlined
-WARNINGS +=    -finline-limit=100
+# we have small inline functions in src/ipcalc.h which should always be inlined
+ALL_WARNINGS +=        -finline-limit=350
 # These tell gcc to put each function and global variable in a separate section.
 # The linker can than remove all unreferenced section. But in the olsrd binary
 # unused doesn't imply unused at all since the function may be used by plugins,
 # e.g. the ones in src/plugin_utils.c.
-# So we can use that featuer at most to identify unused functions and remove them
+# So we can use that feature at most to identify unused functions and remove them
 # from the source by hand.
-#WARNINGS +=   -ffunction-sections
-#WARNINGS +=   -fdata-sections
-WARNINGS :=    $(shell CC="$(CC)" $(TOPDIR)/gcc-warnings $(WARNINGS))
+#ALL_WARNINGS +=       -ffunction-sections
+#ALL_WARNINGS +=       -fdata-sections
+ALL_WARNINGS +=        -Wstrict-overflow=5
+ALL_WARNINGS +=        $(EXTRA_WARNINGS)
+WARNINGS :=    $(shell CC="$(CC)" $(TOPDIR)/gcc-warnings $(ALL_WARNINGS) 2> /dev/null)
 endif
 CFLAGS +=      $(WARNINGS)
 CFLAGS +=      $(OPTIMIZE)
 CFLAGS +=      $(EXTRA_CFLAGS)
 
-# Must be specified along with -lpthread on linux
-CPPFLAGS +=    $(OS_CFLAG_PTHREAD)
+ifneq ($(filter -Wstrict-overflow%,$(WARNINGS)),)
+NO_STRICT_OVERFLOW = -Wstrict-overflow=0
 endif
+
+endif # ifndef CFLAGS
+
 ifneq ($(MUDFLAP),0)
 CFLAGS +=      -fmudflapth
 endif
@@ -124,12 +130,17 @@ ifdef OLSRD_PLUGIN
 CPPFLAGS +=    -DOLSR_PLUGIN
 LDFLAGS +=     -shared
 LDFLAGS +=     -Wl,-soname,$(PLUGIN_NAME)
-LDFLAGS +=     -Wl,--version-script=version-script.txt 
+LDFLAGS +=     -Wl,--version-script=version-script.txt
 else
 # c and ld flags for main
-LDFLAGS +=     -Wl,-export-dynamic 
+ifeq ($(LD_HAS_DYN), yes)
+LDFLAGS_EXE += -Wl,--dynamic-list=$(EXENAME).exports
+else
+LDFLAGS_EXE += -Wl,-export-dynamic
+endif
+LDFLAGS +=     -Wl,-rpath,$(LIBDIR)
 endif
-# LDFLAGS for all 
+# LDFLAGS for all
 LDFLAGS +=     -Wl,--warn-common
 # See above at "-ffunction-sections" for an explanation (and why it is disabled).
 #LDOPTS +=     -Wl,--gc-sections
@@ -138,24 +149,14 @@ LDFLAGS +=        -Wl,--warn-common
 ifneq ($(MUDFLAP),0)
 LIBS +=                -lmudflapth
 endif
-LIBS +=                $(OS_LIB_PTHREAD)
 
 # extra options from the outside
 CPPFLAGS +=    $(EXTRA_CPPFLAGS)
-
-###################################
-#
-# options to save space on small systems
-
-# we have plugins with the old interface
-#CPPFLAGS +=   -DSUPPORT_OLD_PLUGIN_VERSIONS=1
-
-# use the new fixed point math stuff
-CPPFLAGS +=     -DUSE_FPM
+LDFLAGS +=     $(EXTRA_LDFLAGS)
 
 # search sources and headers in current dir and in src/
-SRCS +=                $(wildcard src/common/*.c src/*.c *.c)
-HDRS +=                $(wildcard src/common/*.h src/*.h *.h)
+SRCS +=                $(wildcard src/common/*.c src/*.c)
+HDRS +=                $(wildcard src/common/*.h src/*.h)
 
 # OS detection
 ifeq ($(OS),Windows_NT)
@@ -179,11 +180,14 @@ OBJS +=           $(SRCS:%.c=%.o)
 ifeq ($(DEBUG),1)
 CPPFLAGS +=    -DDEBUG
 CFLAGS +=      -ggdb
+OPTIMIZE ?=    -O0
 else
 CPPFLAGS +=    -DNDEBUG
+OPTIMIZE ?=    -O2
 endif
 ifeq ($(NO_DEBUG_MESSAGES),1)
 CPPFLAGS +=    -DNODEBUG
+OPTIMIZE ?=    -Os
 endif
 
 # a make function to quote "/" and "."
@@ -191,7 +195,9 @@ quote = $(subst .,\.,$(subst /,\/,$1))
 
 # fully automatic and working dependency generation
 %.d: %.c
-       @$(filter-out $(CCACHE),$(CC)) -M $(strip $(CPPFLAGS)) "$<" | sed -e '1s/\($(call quote,$(*F))\.o\)[ :]*/$(call quote,$(*D)/\1 $@: Makefile $(TOPDIR)$(if $(TOPDIR),/)Makefile.inc) /g' >"$@"
+       @$(filter-out $(CCACHE),$(CC)) -M $(strip $(CPPFLAGS)) "$<" | sed -e '1s/\($(call quote,$(*F))\.o\)[ :]*/$(call quote,$(*D)/\1 $@: Makefile $(if $(TOPDIR),$(TOPDIR)/)Makefile.inc) /g' >"$@"
+
+src/common/autobuf.o src/mpr.o: CFLAGS += $(NO_STRICT_OVERFLOW)
 
 # we always need the includes and defines
 # for legacy since now
@@ -206,7 +212,7 @@ endif
 TAGFILE ?=     src/TAGS
 
 help:
-       @echo 
+       @echo
        @echo '***** olsr.org olsr daemon Make ****'
        @echo ' Automatic detection of your OS     '
        @echo ' failed!                            '
@@ -229,7 +235,7 @@ help:
        @echo '************************************'
        @echo
 
-ifeq ($(filter clean% %clean, $(MAKECMDGOALS)),)
+ifeq ($(filter clean% %clean rpm, $(MAKECMDGOALS)),)
 # include dependencies - we don't need any dependency for a everytime generated files
 -include $(filter-out src/builddata.%,$(SRCS:%.c=%.d))
 endif