The Makefiles in the netconf/src/* sub-directories get most of their rules and definitions from an include file located in netconf/src/platform/platform.profile.
This file can be customized as needed, but it is subject to change from release to release.
The 17.10 version of platform.profile is shown below:
#
# platform.profile
#
# libncx and libagt versions (use the same!)
# need some way to set versions without using
# environment vars, so it works in plain debuild, rpmbuild
#
LIBNCX_MAJOR_VERSION=17
LIBNCX_MINOR_VERSION=10
SOVERSION=$(LIBNCX_MAJOR_VERSION).$(LIBNCX_MINOR_VERSION)
# default DESTDIR is NULL; it is only used by packaging builds
ifdef MAC
INSTALL_PREFIX ?= /usr/local
else
INSTALL_PREFIX ?= /usr
endif # MAC
INC_PREFIX ?= $(DESTDIR)$(INSTALL_PREFIX)/include
LIB_PREFIX ?= $(INSTALL_PREFIX)/lib
ifdef CPP98
CXXFLAGS += -std=c++98 -Wno-c++0x-compat -DCPP98
$(info Compiling in C++98 mode)
else ifdef UCLINUX
CFLAGS += -D__USE_UNIX98=1
CXXFLAGS += -std=c++98 -Wno-c++0x-compat -DCPP98
$(info Compiling in UCLINUX C++98 mode)
else
CXXFLAGS += -std=c++0x
$(info Compiling in C++11 mode)
endif # CPP98
CDEFS=
ifdef NETCONFD_LIB
CFLAGS += -DNETCONFD_LIB=1
endif
ifdef STATIC_SERVER
CFLAGS += -DSTATIC_SERVER=1
endif
ifdef GPROFILE
CPPFLAGS += -g
endif
ifdef PTHREADS
CPPFLAGS += -DPTHREADS=1
CPPFLAGS += -pthread
endif
ifdef TEST_PTHREADS
CPPFLAGS += -DTEST_PTHREADS=1
endif
ifdef WINDOWS
CINC += -I/usr/i586-mingw32msvc/include
endif
CINC +=-I. -I../agt -I../mgr -I../ncx -I../platform -I../ydump -I../ycli -I../../../libdict/include
ifdef WITH_COAP
CINC += -I../../../libcoap/include -I../../../libcoap/include/coap
CDEFS += -DWITH_POSIX=1
endif # WITH_COAP
ifndef UCLINUX
CINC += -I$(INC_PREFIX) \
-I$(INC_PREFIX)/libxml2 \
-I$(INC_PREFIX)/libxml2/libxml
ifdef WITH_SNMP
CINC += -I$(INC_PREFIX)/net-snmp
endif # WITH_SNMP
endif # UCLINUX
ifdef COVERITY
ifneq "$(INSTALL_PREFIX)" "/usr"
CINC += -I${SYSROOT}/usr/include -I${SYSROOT}/usr/include/libxml2 \
-I${SYSROOT}/usr/include/libxml2/libxml
endif
endif
ifdef FREEBSD
FPATH=-L/usr/local/lib
CINC += -I${SYSROOT}/usr/local/include \
-I${SYSROOT}/usr/local/include/libxml2 \
-I${SYSROOT}/usr/local/include/libxml2/libxml
endif # FREEBSD
# add user includes if present
CINC += $(USER_SERVER_INC)
TBASE=../../target
ifdef UCLINUX
LBASE=$(TBASE)/lib
else
ifdef BITBAKE
LBASE=$(TBASE)/lib
else
ifdef DESTDIR
LBASE=$(DESTDIR)$(INSTALL_PREFIX)/lib
else
LBASE=$(TBASE)/lib
endif # DESTDIR
endif # BITBAKE
endif # UCLINUX
LPATH=-L$(LBASE)
LFLAGS += -lm $(LDFLAGS)
ifndef OWNER
ifdef DESTDIR
OWNER=
else
ifdef FREEBSD
OWNER=-o root
else
ifdef MAC
OWNER=-oroot
else
ifdef CYGWIN
OWNER=
else
OWNER= --owner=root
endif
endif
endif
endif
endif
#ifdef EVAL
#CPPFLAGS += -DEVAL_VERSION=1
#endif
ifdef USE_WERROR
WERROR=-Werror
else
WERROR=
endif
CWARN=-std=gnu99 -Wbad-function-cast -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wnested-externs -Wshadow -Waggregate-return -Winline
CXXWARN=-Wall -Wno-long-long -Wformat-y2k -Winit-self -Wswitch-default -Wunused-parameter -Wextra -Wundef -Wpointer-arith -Wwrite-strings -Wcast-qual -Wmissing-declarations -Wpacked -Winvalid-pch -Wformat -Wformat-security -Wredundant-decls -Wreturn-type $(WERROR)
# -Wunreachable-code removed due to -O3
# -O3 changed to -O2 due to code bloat from inline functions
ifdef WINDOWS
CDEFS +=-DWINDOWS=1 -DGCC=1
else
CDEFS +=-DLINUX=1 -DGCC=1
endif
ifndef PRODUCTION
CDEFS += -DDEBUG=1
endif
ifdef DEBUG2
CDEFS += -DDEBUG2=1
endif
ifdef DEBUG3
CDEFS += -DDEBUG3=1
endif
ifdef DEBUG4
CDEFS += -DDEBUG4=1
endif
ifdef FREEBSD
CDEFS += -DFREEBSD=1
endif
ifdef KEY
CDEFS += -DKEY=$(KEY)
endif
ifndef NOFLOAT
CDEFS += -DHAS_FLOAT=1
endif
ifdef LIB64
CDEFS += -DLIB64=1
endif
ifdef PATCH_RELEASE
CDEFS += -DPATCH_RELEASE=1
endif
ifdef UCLINUX
CDEFS += -DUCLINUX=1
endif
ifdef BITBAKE
CDEFS += -DBITBAKE=1
endif
ifdef PIPE_RESTRICTED
CDEFS += -DPIPE_RESTRICTED=1
endif
CFLAGS += $(CWARN)
CPPFLAGS += $(CDEFS) $(CXXWARN)
FPIC=
ifndef CYGWIN
ifndef UCLINUX
ifndef STATIC
CPPFLAGS += -fPIC
FPIC=-fPIC
endif # STATIC
endif # UCLINUX
endif # CYGWIN
ifdef UCLINUX
ifdef DEBUG
CPPFLAGS += -g -O0
endif
else
ifndef GPROFILE
ifdef DEBUG
CPPFLAGS += -ggdb3
else
CPPFLAGS += -O2
ifdef WITH_GDB
CPPFLAGS += -ggdb3
endif # WITH_GDB
endif # DEBUG
endif # GPROFILE
endif # UCLINUX
# memory leak debugging mode
ifdef MEMTRACE
CPPFLAGS += -DMEMORY_DEBUG=1
endif
# gprof profiling
ifdef GPROFILE
CPPFLAGS += -pg
endif
# strsignal not on CENTOS5
ifndef CENTOS5
CPPFLAGS += -DHAS_STRSIGNAL=1
endif
# check if debian or RPM release build
ifdef RELEASE
CPPFLAGS += -DRELEASE=$(RELEASE)
endif
# check if cygwin build
ifdef CYGWIN
CPPFLAGS += -DCYGWIN=1
endif
# check if IETF CallHome supprt requested
ifdef WITH_CALLHOME
CPPFLAGS += -DWITH_CALLHOME=1
else
ifdef EVERYTHING
CPPFLAGS += -DWITH_CALLHOME=1
endif
endif
# check if server CLI protocol requested
ifdef WITH_CLI
CPPFLAGS += -DWITH_CLI=1
else
ifdef EVERYTHING
CPPFLAGS += -DWITH_CLI=1
endif
endif
# check if server YANG-API protocol requested
ifdef WITH_YANGAPI
CPPFLAGS += -DWITH_YANGAPI=1
endif
# check if server RESTCONF protocol requested
ifdef WITH_RESTCONF
CPPFLAGS += -DWITH_RESTCONF=1
else
ifdef EVERYTHING
CPPFLAGS += -DWITH_RESTCONF=1
endif
endif
# check if libcurl enabled
ifdef WITH_CURL
CPPFLAGS += -DWITH_CURL=1
else
ifdef EVERYTHING
CPPFLAGS += -DWITH_CURL=1
endif
endif
ifdef NO_LIBSSH2
CPPFLAGS += -DNO_LIBSSH2=1
endif
# used by yangcli-pro only
ifdef NO_LIBSSL
CPPFLAGS += -DNO_LIBSSL=1
endif
# check if server YP-CoAP protocol requested
ifdef WITH_COAP
CPPFLAGS += -DWITH_COAP=1
#else
# ifdef EVERYTHING
# CPPFLAGS += -DWITH_COAP=1
# endif
endif
# check if server YP-SNMP protocol requested
ifdef WITH_SNMP
CFLAGS += -DWITH_SNMP=1
endif
# check if distributed server YControl protocol requested
ifdef WITH_YCONTROL
CPPFLAGS += -DWITH_YCONTROL=1
else
ifdef EVERYTHING
CPPFLAGS += -DWITH_YCONTROL=1
endif
endif
# check if YP-HA server redundancy protocol requested
ifdef WITH_YCONTROL
ifdef WITH_YP_HA
CPPFLAGS += -DWITH_YP_HA=1
else
ifdef EVERYTHING
CPPFLAGS += -DWITH_YP_HA=1
endif # EVERYTHING
endif # WITH_YP_HA
else
ifdef EVERYTHING
ifdef WITH_YP_HA
CPPFLAGS += -DWITH_YP_HA=1
else
ifdef EVERYTHING
CPPFLAGS += -DWITH_YP_HA=1
endif # EVERYTHING
endif # WITH_YP_HA
endif # EVERYTHING
endif # WITH_YCONTROL
# check if openssl enabled; used by server only
ifdef WITH_OPENSSL
CPPFLAGS += -DWITH_OPENSSL=1
else
ifdef EVERYTHING
CPPFLAGS += -DWITH_OPENSSL=1
endif
endif
# this is experimental; DO NOT USE
ifdef WITH_YANG_HASH
CPPFLAGS += -DWITH_YANG_HASH=1
endif
ifndef MAC
ifndef CYGWIN
ifndef CENTOS5
CPPFLAGS += -DHAS_SIGNALFD=1
endif # CENTOS5
endif # CYGWIN
endif # MAC
# check if server configuration templates requested
ifdef WITH_TEMPLATES
CPPFLAGS += -DWITH_TEMPLATES=1
else
ifdef EVERYTHING
CPPFLAGS += -DWITH_TEMPLATES=1
endif
endif
# check if yumaworks-support-save requested
ifdef WITH_SUPPORT_SAVE
CPPFLAGS += -DWITH_SUPPORT_SAVE=1
else
ifdef EVERYTHING
CPPFLAGS += -DWITH_SUPPORT_SAVE=1
endif
endif
ifdef STATIC
CPPFLAGS += -DSTATIC_LINK=1
endif # STATIC
ifdef STATIC_SERVER
CPPFLAGS += -DSTATIC_SERVER=1
endif # STATIC_SERVER
# check if YANG mapping feature requested
ifdef WITH_YANGMAP
CPPFLAGS += -DWITH_YANGMAP=1
else
ifdef EVERYTHING
CPPFLAGS += -DWITH_YANGMAP=1
endif
endif
ifndef GRP
ifdef MAC
GRP=
else
ifdef FREEBSD
GRP=-g wheel
else
ifdef DESTDIR
GRP=
else
ifdef CYGWIN
GRP=
else
GRP=--group=root
endif # CYGWIN
endif # DESTDIR
endif # FREEBSD
endif # MAC
endif # GRP
ifdef STATIC
LIBSUFFIX=a
LIBNCXSUFFIX=a
else # not STATIC
ifdef MAC
ifdef COVERITY
LIBSUFFIX=so
LIBNCXSUFFIX=so.$(SOVERSION)
else
LIBSUFFIX=dylib
LIBNCXSUFFIX=dylib
endif # COVERITY
else # not MAC
LIBSUFFIX=so
LIBNCXSUFFIX=so.$(SOVERSION)
endif # MAC
endif # STATIC
ifdef CLANG
CC = clang
CCPP = clang++
endif
ifdef CLANG_ASAN
CC= clang -O1 -fsanitize=address -fno-omit-frame-pointer
CCPP= clang++ -O1 -fsanitize=address -fno-omit-frame-pointer
LINK= clang++ -g -fsanitize=address
endif
ifdef BITBAKE
CCPP = $(CXX)
endif
ifdef COVERITY
CC = gcc
endif
ifdef WINDOWS
CC ?= i586-mingw32msvc-gcc
CCPP ?= i586-mingw32msvc-g++
LINK ?= i586-mingw32msvc-g++
RANLIB ?= i586-mingw32msvc-ranlib
else
ifdef CROSS_TARGET
CC ?= $(CROSS_TARGET)gcc
CCPP ?= $(CROSS_TARGET)g++
AR ?= $(CROSS_TARGET)ar
RANLIB ?= $(CROSS_TARGET)ranlib
LD ?= $(CROSS_TARGET)ld
else
ifdef UCLINUX
CC := $(CROSS_COMPILE_APPS)gcc
CCPP := $(CROSS_COMPILE_APPS)g++
AR := $(CROSS_COMPILE_APPS)ar
RANLIB := $(CROSS_COMPILE_APPS)ranlib
LD := $(CROSS_COMPILE_APPS)ld
else
CC ?= gcc
CCPP ?= g++
AR ?= ar
RANLIB ?= ranlib
LD ?= ld
endif # UCLINUX
endif # CROSS_TARGET
endif # WINDOWS
LINK ?= $(CCPP)
AR ?= $(CROSS_TARGET)ar
RANLIB ?= $(CROSS_TARGET)ranlib
# heap corruption debugging mode
ifdef MCHECK
LFLAGS += -lmcheck
endif
# not needed because CFLAGS sent to linker
#ifdef GPROFILE
# LFLAGS += -pg
#endif
CEES = $(wildcard *.c)
CPPS = $(wildcard *.cpp)
HEES = $(wildcard *.h)
HPPS = $(wildcard *.hpp)
AR ?= ar
RANLIB ?= ranlib
################ OBJS RULE #############
OBJS = $(patsubst %.cpp,$(TARGET)/%.o,$(CPPS)) $(patsubst %.c,$(TARGET)/%.o,$(CEES))
################ DEPS RULE #############
DEPS = $(patsubst %.c,%.D,$(wildcard *.c)) $(patsubst %.cpp,%.D,$(wildcard *.cpp))
######################## PLATFORM DEFINITIONS #############
PLATFORM_CPP=
distclean: superclean
.PHONY: all superclean clean test install uninstall distclean depend notabs addheader
######################### MAKE RULES ######################
#COMPILE.c= $(CC) $(CFLAGS) $(CPPFLAGS) $(PLATFORM_CPP) $(CINC) $(SUBDIR_CPP) $(TARGET_ARCH) -c
#COMPILE.cpp = $(CC) $(CXXFLAGS) $(CPPFLAGS) $(PLATFORM_CPP) $(CINC) $(SUBDIR_CPP) $(TARGET_ARCH) -c
COMMON_DEF= $(CPPFLAGS) $(PLATFORM_CPP) $(FPIC) $(CINC) $(SUBDIR_CPP) $(TARGET_ARCH)
$(TARGET)/%.o: %.c
$(CC) $(CFLAGS) $(COMMON_DEF) -c -o $@ $<
$(TARGET)/%.o: %.cpp
$(CCPP) $(CXXFLAGS) $(COMMON_DEF) -c -o $@ $<
# Common library rule
#### common cleanup rules
# dependency rule to make temp .D files from .c sources
# all the .D files are collected and appended to the
# appropriate Makefile when 'make depend' is run
# this rule is kept here to make sure it matches COMPILE.c
%.D: %.c
$(CC) -MM -MG -MT $(TARGET)/$(patsubst %.c,%.o,$<) -Wall -Wcomment $(CPPFLAGS) $(PLATFORM_CPP) $(CINC) $(CFLAGS) $(SUBDIR_CPP) $(TARGET_ARCH) -c $< > $@
%.D: %.cpp
$(CCPP) -MM -MG -MT $(TARGET)/$(patsubst %.cpp,%.o,$<) -Wall -Wcomment $(CPPFLAGS) $(PLATFORM_CPP) $(CINC) $(CXXFLAGS) $(SUBDIR_CPP) $(TARGET_ARCH) -c $< > $@
notabs:
for c in $(CEES); do\
cp $$c $$c.save;\
expand $$c > $$c.ex;\
mv $$c.ex $$c;\
done
addheader:
if [ ! -f ../platform/header.txt]; then \
echo "Error: platform/header.txt is missing!"; \
exit 1; \
fi
for c in $(CEES); do\
cp $$c $$c.save;\
cp ../platform/header.txt $$c.hdr;\
cat $$c >> $$c.hdr;\
mv $$c.hdr $$c;\
done
for h in $(HEES); do\
cp $$h $$h.save;\
cp ../platform/header.txt $$h.hdr;\
cat $$h >> $$h.hdr;\
mv $$h.hdr $$h;\
done