Fix 'inactive' routes when using 'additional' option
[olsrd.git] / Makefile.inc
index 8d34ca2..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,22 +35,23 @@ 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
@@ -79,9 +77,9 @@ ALL_WARNINGS +=       -Wcast-qual
 ALL_WARNINGS +=        -Wshadow
 ALL_WARNINGS +=        -Wformat-2
 ALL_WARNINGS +=        -Wsequence-point
-# the following 4 do not work yet and need more work on it
-#ALL_WARNINGS +=       -Wpointer-arith
-#ALL_WARNINGS +=       -Wcast-align
+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)
@@ -92,14 +90,14 @@ endif
 #ALL_WARNINGS +=       -Wunreachable-code
 ALL_WARNINGS +=        -Winline
 ALL_WARNINGS +=        -Wdisabled-optimization
-#ALL_WARNINGS +=       -Werror
+ALL_WARNINGS +=        -Werror
 ALL_WARNINGS +=        -finline-functions-called-once
 ALL_WARNINGS +=        -funit-at-a-time
 ALL_WARNINGS +=        -fearly-inlining
 ifeq ($(DEBUG),0)
 ALL_WARNINGS +=        -fomit-frame-pointer
 endif
-# we have small inline functions in src/lq_route.h which should always be inlined
+# 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
@@ -109,6 +107,7 @@ ALL_WARNINGS +=     -finline-limit=350
 # from the source by hand.
 #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
@@ -116,9 +115,12 @@ 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
@@ -128,13 +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
@@ -143,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)
@@ -184,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 "."
@@ -198,6 +197,8 @@ quote = $(subst .,\.,$(subst /,\/,$1))
 %.d: %.c
        @$(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
 CPPFLAGS += $(INCLUDES) $(DEFINES)
@@ -211,7 +212,7 @@ endif
 TAGFILE ?=     src/TAGS
 
 help:
-       @echo 
+       @echo
        @echo '***** olsr.org olsr daemon Make ****'
        @echo ' Automatic detection of your OS     '
        @echo ' failed!                            '
@@ -234,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