mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-02 05:27:35 +00:00

Apparently you can do `#__VA_ARGS__` and it actually does something sensible, so here we go recording the format parameters for log messages into the xref. This allows some more checking in xrelfo.py, e.g. hints to use `%pFX` and co. Signed-off-by: David Lamparter <equinox@diac24.net>
587 lines
12 KiB
Plaintext
587 lines
12 KiB
Plaintext
#
|
|
# libfrr
|
|
#
|
|
lib_LTLIBRARIES += lib/libfrr.la
|
|
lib_libfrr_la_LDFLAGS = -version-info 0:0:0 -Xlinker -e_libfrr_version
|
|
lib_libfrr_la_LIBADD = $(LIBCAP) $(UNWIND_LIBS) $(LIBYANG_LIBS) $(LUA_LIB) $(UST_LIBS) $(LIBM)
|
|
|
|
lib_libfrr_la_SOURCES = \
|
|
lib/agg_table.c \
|
|
lib/atomlist.c \
|
|
lib/bfd.c \
|
|
lib/buffer.c \
|
|
lib/checksum.c \
|
|
lib/command.c \
|
|
lib/command_graph.c \
|
|
lib/command_lex.l \
|
|
lib/command_match.c \
|
|
lib/command_parse.y \
|
|
lib/csv.c \
|
|
lib/debug.c \
|
|
lib/defaults.c \
|
|
lib/distribute.c \
|
|
lib/ferr.c \
|
|
lib/filter.c \
|
|
lib/filter_cli.c \
|
|
lib/filter_nb.c \
|
|
lib/frrcu.c \
|
|
lib/frrlua.c \
|
|
lib/frrscript.c \
|
|
lib/frr_pthread.c \
|
|
lib/frrstr.c \
|
|
lib/getopt.c \
|
|
lib/getopt1.c \
|
|
lib/grammar_sandbox.c \
|
|
lib/graph.c \
|
|
lib/hash.c \
|
|
lib/hook.c \
|
|
lib/id_alloc.c \
|
|
lib/if.c \
|
|
lib/if_rmap.c \
|
|
lib/imsg-buffer.c \
|
|
lib/imsg.c \
|
|
lib/jhash.c \
|
|
lib/json.c \
|
|
lib/keychain.c \
|
|
lib/ldp_sync.c \
|
|
lib/lib_errors.c \
|
|
lib/lib_vty.c \
|
|
lib/libfrr.c \
|
|
lib/libfrr_trace.c \
|
|
lib/linklist.c \
|
|
lib/link_state.c \
|
|
lib/log.c \
|
|
lib/log_filter.c \
|
|
lib/log_vty.c \
|
|
lib/md5.c \
|
|
lib/memory.c \
|
|
lib/mlag.c \
|
|
lib/module.c \
|
|
lib/mpls.c \
|
|
lib/srv6.c \
|
|
lib/network.c \
|
|
lib/nexthop.c \
|
|
lib/netns_linux.c \
|
|
lib/netns_other.c \
|
|
lib/nexthop_group.c \
|
|
lib/northbound.c \
|
|
lib/northbound_cli.c \
|
|
lib/northbound_db.c \
|
|
lib/ntop.c \
|
|
lib/openbsd-tree.c \
|
|
lib/pid_output.c \
|
|
lib/plist.c \
|
|
lib/prefix.c \
|
|
lib/privs.c \
|
|
lib/ptm_lib.c \
|
|
lib/pullwr.c \
|
|
lib/qobj.c \
|
|
lib/ringbuf.c \
|
|
lib/routemap.c \
|
|
lib/routemap_cli.c \
|
|
lib/routemap_northbound.c \
|
|
lib/sbuf.c \
|
|
lib/seqlock.c \
|
|
lib/sha256.c \
|
|
lib/sigevent.c \
|
|
lib/skiplist.c \
|
|
lib/sockopt.c \
|
|
lib/sockunion.c \
|
|
lib/spf_backoff.c \
|
|
lib/srcdest_table.c \
|
|
lib/stream.c \
|
|
lib/strlcat.c \
|
|
lib/strlcpy.c \
|
|
lib/systemd.c \
|
|
lib/table.c \
|
|
lib/termtable.c \
|
|
lib/thread.c \
|
|
lib/typerb.c \
|
|
lib/typesafe.c \
|
|
lib/vector.c \
|
|
lib/vrf.c \
|
|
lib/vty.c \
|
|
lib/wheel.c \
|
|
lib/workqueue.c \
|
|
lib/xref.c \
|
|
lib/yang.c \
|
|
lib/yang_translator.c \
|
|
lib/yang_wrappers.c \
|
|
lib/zclient.c \
|
|
lib/zlog.c \
|
|
lib/zlog_targets.c \
|
|
lib/printf/printf-pos.c \
|
|
lib/printf/vfprintf.c \
|
|
lib/printf/glue.c \
|
|
lib/routing_nb.c \
|
|
lib/routing_nb_config.c \
|
|
# end
|
|
|
|
nodist_lib_libfrr_la_SOURCES = \
|
|
yang/frr-filter.yang.c \
|
|
yang/frr-interface.yang.c \
|
|
yang/frr-route-map.yang.c \
|
|
yang/frr-route-types.yang.c \
|
|
yang/frr-vrf.yang.c \
|
|
yang/frr-routing.yang.c \
|
|
yang/frr-nexthop.yang.c \
|
|
yang/ietf/ietf-routing-types.yang.c \
|
|
yang/ietf/ietf-interfaces.yang.c \
|
|
yang/ietf/ietf-bgp-types.yang.c \
|
|
yang/frr-module-translator.yang.c \
|
|
yang/frr-nexthop.yang.c \
|
|
# end
|
|
|
|
vtysh_scan += \
|
|
lib/distribute.c \
|
|
lib/filter.c \
|
|
lib/filter_cli.c \
|
|
lib/if.c \
|
|
lib/if_rmap.c \
|
|
lib/keychain.c \
|
|
lib/lib_vty.c \
|
|
lib/nexthop_group.c \
|
|
lib/plist.c \
|
|
lib/routemap.c \
|
|
lib/routemap_cli.c \
|
|
lib/vrf.c \
|
|
lib/vty.c \
|
|
# end
|
|
# can be loaded as DSO - always include for vtysh
|
|
vtysh_scan += lib/agentx.c
|
|
|
|
if SQLITE3
|
|
lib_libfrr_la_LIBADD += $(SQLITE3_LIBS)
|
|
lib_libfrr_la_SOURCES += lib/db.c
|
|
endif
|
|
|
|
clippy_scan += \
|
|
lib/if.c \
|
|
lib/filter_cli.c \
|
|
lib/log_vty.c \
|
|
lib/nexthop_group.c \
|
|
lib/northbound_cli.c \
|
|
lib/plist.c \
|
|
lib/routemap_cli.c \
|
|
lib/vty.c \
|
|
# end
|
|
|
|
pkginclude_HEADERS += \
|
|
lib/agg_table.h \
|
|
lib/atomlist.h \
|
|
lib/bfd.h \
|
|
lib/bitfield.h \
|
|
lib/buffer.h \
|
|
lib/checksum.h \
|
|
lib/mlag.h \
|
|
lib/command.h \
|
|
lib/command_graph.h \
|
|
lib/command_match.h \
|
|
lib/compiler.h \
|
|
lib/csv.h \
|
|
lib/db.h \
|
|
lib/debug.h \
|
|
lib/defaults.h \
|
|
lib/distribute.h \
|
|
lib/ferr.h \
|
|
lib/filter.h \
|
|
lib/freebsd-queue.h \
|
|
lib/frrlua.h \
|
|
lib/frrscript.h \
|
|
lib/frr_pthread.h \
|
|
lib/frratomic.h \
|
|
lib/frrcu.h \
|
|
lib/frrstr.h \
|
|
lib/getopt.h \
|
|
lib/graph.h \
|
|
lib/hash.h \
|
|
lib/hook.h \
|
|
lib/iana_afi.h \
|
|
lib/id_alloc.h \
|
|
lib/if.h \
|
|
lib/if_rmap.h \
|
|
lib/imsg.h \
|
|
lib/ipaddr.h \
|
|
lib/jhash.h \
|
|
lib/json.h \
|
|
lib/keychain.h \
|
|
lib/ldp_sync.h \
|
|
lib/lib_errors.h \
|
|
lib/lib_vty.h \
|
|
lib/libfrr.h \
|
|
lib/libfrr_trace.h \
|
|
lib/libospf.h \
|
|
lib/linklist.h \
|
|
lib/link_state.h \
|
|
lib/log.h \
|
|
lib/log_vty.h \
|
|
lib/md5.h \
|
|
lib/memory.h \
|
|
lib/module.h \
|
|
lib/monotime.h \
|
|
lib/mpls.h \
|
|
lib/srv6.h \
|
|
lib/network.h \
|
|
lib/nexthop.h \
|
|
lib/nexthop_group.h \
|
|
lib/nexthop_group_private.h \
|
|
lib/northbound.h \
|
|
lib/northbound_cli.h \
|
|
lib/northbound_db.h \
|
|
lib/ns.h \
|
|
lib/openbsd-queue.h \
|
|
lib/openbsd-tree.h \
|
|
lib/plist.h \
|
|
lib/prefix.h \
|
|
lib/printfrr.h \
|
|
lib/privs.h \
|
|
lib/ptm_lib.h \
|
|
lib/pullwr.h \
|
|
lib/pw.h \
|
|
lib/qobj.h \
|
|
lib/queue.h \
|
|
lib/ringbuf.h \
|
|
lib/routemap.h \
|
|
lib/sbuf.h \
|
|
lib/seqlock.h \
|
|
lib/sha256.h \
|
|
lib/sigevent.h \
|
|
lib/skiplist.h \
|
|
lib/smux.h \
|
|
lib/sockopt.h \
|
|
lib/sockunion.h \
|
|
lib/spf_backoff.h \
|
|
lib/srcdest_table.h \
|
|
lib/srte.h \
|
|
lib/stream.h \
|
|
lib/systemd.h \
|
|
lib/table.h \
|
|
lib/termtable.h \
|
|
lib/thread.h \
|
|
lib/trace.h \
|
|
lib/typerb.h \
|
|
lib/typesafe.h \
|
|
lib/vector.h \
|
|
lib/vlan.h \
|
|
lib/vrf.h \
|
|
lib/vrf_int.h \
|
|
lib/vty.h \
|
|
lib/vxlan.h \
|
|
lib/wheel.h \
|
|
lib/workqueue.h \
|
|
lib/xref.h \
|
|
lib/yang.h \
|
|
lib/yang_translator.h \
|
|
lib/yang_wrappers.h \
|
|
lib/zassert.h \
|
|
lib/zclient.h \
|
|
lib/zebra.h \
|
|
lib/zlog.h \
|
|
lib/zlog_targets.h \
|
|
lib/pbr.h \
|
|
lib/routing_nb.h \
|
|
# end
|
|
|
|
|
|
nodist_pkginclude_HEADERS += \
|
|
lib/route_types.h \
|
|
lib/version.h \
|
|
# end
|
|
|
|
noinst_HEADERS += \
|
|
lib/clippy.h \
|
|
lib/plist_int.h \
|
|
lib/printf/printfcommon.h \
|
|
lib/printf/printflocal.h \
|
|
#end
|
|
|
|
# General note about module and module helper library (libfrrsnmp, libfrrzmq)
|
|
# linking: If we're linking libfrr statically into daemons, we *must* remove
|
|
# libfrr from modules because modules will always link it in dynamically and
|
|
# thus 2 copies of libfrr will be loaded... hilarity ensues.
|
|
#
|
|
# Not linking libfrr into modules should generally work fine because the
|
|
# executable refers to libfrr either way and the dynamic linker should make
|
|
# libfrr available to modules. If some OS platform has a dynamic linker that
|
|
# doesn't do that, libfrr needs to be readded to modules, but _only_ _if_
|
|
# it's not linked into daemons statically.
|
|
|
|
#
|
|
# SNMP support
|
|
#
|
|
if SNMP
|
|
lib_LTLIBRARIES += lib/libfrrsnmp.la
|
|
endif
|
|
|
|
lib_libfrrsnmp_la_CFLAGS = $(WERROR) $(SNMP_CFLAGS) -std=gnu99
|
|
lib_libfrrsnmp_la_LDFLAGS = -version-info 0:0:0
|
|
lib_libfrrsnmp_la_LIBADD = $(SNMP_LIBS)
|
|
lib_libfrrsnmp_la_SOURCES = \
|
|
lib/agentx.c \
|
|
lib/snmp.c \
|
|
# end
|
|
|
|
#
|
|
# c-ares support
|
|
#
|
|
if CARES
|
|
lib_LTLIBRARIES += lib/libfrrcares.la
|
|
pkginclude_HEADERS += lib/resolver.h
|
|
endif
|
|
|
|
lib_libfrrcares_la_CFLAGS = $(WERROR) $(CARES_CFLAGS)
|
|
lib_libfrrcares_la_LDFLAGS = -version-info 0:0:0
|
|
lib_libfrrcares_la_LIBADD = $(CARES_LIBS)
|
|
lib_libfrrcares_la_SOURCES = \
|
|
lib/resolver.c \
|
|
#end
|
|
|
|
#
|
|
# ZeroMQ support
|
|
#
|
|
if ZEROMQ
|
|
lib_LTLIBRARIES += lib/libfrrzmq.la
|
|
pkginclude_HEADERS += lib/frr_zmq.h
|
|
endif
|
|
|
|
lib_libfrrzmq_la_CFLAGS = $(WERROR) $(ZEROMQ_CFLAGS)
|
|
lib_libfrrzmq_la_LDFLAGS = -version-info 0:0:0
|
|
lib_libfrrzmq_la_LIBADD = $(ZEROMQ_LIBS)
|
|
lib_libfrrzmq_la_SOURCES = \
|
|
lib/frr_zmq.c \
|
|
#end
|
|
|
|
#
|
|
# Tail-f's ConfD support
|
|
#
|
|
if CONFD
|
|
module_LTLIBRARIES += lib/confd.la
|
|
endif
|
|
|
|
lib_confd_la_CFLAGS = $(WERROR) $(CONFD_CFLAGS)
|
|
lib_confd_la_LDFLAGS = -avoid-version -module -shared -export-dynamic
|
|
lib_confd_la_LIBADD = lib/libfrr.la $(CONFD_LIBS)
|
|
lib_confd_la_SOURCES = lib/northbound_confd.c
|
|
|
|
#
|
|
# Sysrepo support
|
|
#
|
|
if SYSREPO
|
|
module_LTLIBRARIES += lib/sysrepo.la
|
|
endif
|
|
|
|
lib_sysrepo_la_CFLAGS = $(WERROR) $(SYSREPO_CFLAGS)
|
|
lib_sysrepo_la_LDFLAGS = -avoid-version -module -shared -export-dynamic
|
|
lib_sysrepo_la_LIBADD = lib/libfrr.la $(SYSREPO_LIBS)
|
|
lib_sysrepo_la_SOURCES = lib/northbound_sysrepo.c
|
|
|
|
#
|
|
# gRPC northbound plugin
|
|
#
|
|
if GRPC
|
|
module_LTLIBRARIES += lib/grpc.la
|
|
endif
|
|
|
|
lib_grpc_la_CXXFLAGS = $(WERROR) $(GRPC_CFLAGS)
|
|
lib_grpc_la_LDFLAGS = -avoid-version -module -shared -export-dynamic
|
|
lib_grpc_la_LIBADD = lib/libfrr.la grpc/libfrrgrpc_pb.la $(GRPC_LIBS)
|
|
lib_grpc_la_SOURCES = lib/northbound_grpc.cpp
|
|
|
|
#
|
|
# CLI utilities
|
|
#
|
|
noinst_PROGRAMS += \
|
|
lib/grammar_sandbox \
|
|
# end
|
|
|
|
if BUILD_CLIPPY
|
|
noinst_PROGRAMS += lib/clippy
|
|
else
|
|
if HOSTTOOLS_CLIPPY
|
|
$(CLIPPY):
|
|
@$(MAKE) -C $(top_builddir)/hosttools lib/route_types.h lib/clippy
|
|
endif
|
|
endif
|
|
|
|
lib_grammar_sandbox_SOURCES = \
|
|
lib/grammar_sandbox_main.c
|
|
lib_grammar_sandbox_LDADD = \
|
|
lib/libfrr.la
|
|
|
|
lib_clippy_CPPFLAGS = $(AM_CPPFLAGS) -D_GNU_SOURCE -DBUILDING_CLIPPY
|
|
lib_clippy_CFLAGS = $(PYTHON_CFLAGS)
|
|
lib_clippy_LDADD = $(PYTHON_LIBS) $(UST_LIBS) -lelf
|
|
lib_clippy_LDFLAGS = -export-dynamic
|
|
lib_clippy_SOURCES = \
|
|
lib/jhash.c \
|
|
lib/clippy.c \
|
|
lib/command_graph.c \
|
|
lib/command_lex.l \
|
|
lib/command_parse.y \
|
|
lib/command_py.c \
|
|
lib/defun_lex.l \
|
|
lib/elf_py.c \
|
|
lib/graph.c \
|
|
lib/libfrr_trace.c \
|
|
lib/memory.c \
|
|
lib/typesafe.c \
|
|
lib/vector.c \
|
|
# end
|
|
|
|
# (global) clippy rules for all directories
|
|
|
|
AM_V_CLIPPY = $(am__v_CLIPPY_$(V))
|
|
am__v_CLIPPY_ = $(am__v_CLIPPY_$(AM_DEFAULT_VERBOSITY))
|
|
am__v_CLIPPY_0 = @echo " CLIPPY " $@;
|
|
am__v_CLIPPY_1 =
|
|
|
|
CLIPPY_DEPS = $(CLIPPY) $(top_srcdir)/python/clidef.py
|
|
|
|
SUFFIXES += _clippy.c
|
|
.c_clippy.c:
|
|
$(AM_V_CLIPPY) $(CLIPPY) $(top_srcdir)/python/clidef.py -o $@ $<
|
|
|
|
# xrelfo, the ELF xref extractor
|
|
|
|
AM_V_XRELFO = $(am__v_XRELFO_$(V))
|
|
am__v_XRELFO_ = $(am__v_XRELFO_$(AM_DEFAULT_VERBOSITY))
|
|
am__v_XRELFO_0 = @echo " XRELFO " $@;
|
|
am__v_XRELFO_1 =
|
|
|
|
if DEV_BUILD
|
|
XRELFO_FLAGS = -Wlog-format -Wlog-args
|
|
else
|
|
XRELFO_FLAGS =
|
|
endif
|
|
|
|
SUFFIXES += .xref
|
|
%.xref: % $(CLIPPY)
|
|
$(AM_V_XRELFO) $(CLIPPY) $(top_srcdir)/python/xrelfo.py $(XRELFO_FLAGS) -o $@ $<
|
|
|
|
# dependencies added in python/makefile.py
|
|
frr.xref:
|
|
$(AM_V_XRELFO) $(CLIPPY) $(top_srcdir)/python/xrelfo.py -o $@ $^
|
|
all-am: frr.xref
|
|
|
|
clean-xref:
|
|
-rm -rf $(xrefs) frr.xref
|
|
clean-local: clean-xref
|
|
|
|
## automake's "ylwrap" is a great piece of GNU software... not.
|
|
.l.c:
|
|
$(AM_V_LEX)$(am__skiplex) $(LEXCOMPILE) $<
|
|
.y.c:
|
|
$(AM_V_YACC)$(am__skipyacc) $(YACCCOMPILE) $<
|
|
|
|
#
|
|
# generated sources & extra foo
|
|
#
|
|
EXTRA_DIST += \
|
|
lib/command_lex.h \
|
|
lib/command_parse.h \
|
|
lib/gitversion.pl \
|
|
lib/route_types.pl \
|
|
lib/route_types.txt \
|
|
# end
|
|
|
|
BUILT_SOURCES += \
|
|
lib/gitversion.h \
|
|
lib/route_types.h \
|
|
# end
|
|
|
|
## force route_types.h
|
|
$(lib_clippy_OBJECTS): lib/route_types.h
|
|
$(lib_libfrr_la_OBJECTS): lib/route_types.h
|
|
|
|
AM_YFLAGS = -d -Dapi.prefix=@BISON_OPENBRACE@cmd_yy@BISON_CLOSEBRACE@ @BISON_VERBOSE@
|
|
|
|
lib/command_lex.h: lib/command_lex.c
|
|
@if test ! -f $@; then rm -f "lib/command_lex.c"; else :; fi
|
|
@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) "lib/command_lex.c"; else :; fi
|
|
lib/command_lex.lo: lib/command_parse.h
|
|
lib/command_parse.lo: lib/command_lex.h
|
|
lib/clippy-command_lex.$(OBJEXT): lib/command_parse.h
|
|
lib/clippy-command_parse.$(OBJEXT): lib/command_lex.h
|
|
lib/lib_clippy-command_lex.$(OBJEXT): lib/command_parse.h
|
|
lib/lib_clippy-command_parse.$(OBJEXT): lib/command_lex.h
|
|
|
|
rt_enabled =
|
|
|
|
if BABELD
|
|
rt_enabled += --enabled babeld
|
|
endif
|
|
if BFDD
|
|
rt_enabled += --enabled bfdd
|
|
endif
|
|
if BGPD
|
|
rt_enabled += --enabled bgpd
|
|
if ENABLE_BGP_VNC
|
|
rt_enabled += --enabled bgpd-vnc
|
|
endif
|
|
endif
|
|
if EIGRPD
|
|
rt_enabled += --enabled eigrpd
|
|
endif
|
|
if ISISD
|
|
rt_enabled += --enabled isisd
|
|
endif
|
|
if FABRICD
|
|
rt_enabled += --enabled fabricd
|
|
endif
|
|
if LDPD
|
|
rt_enabled += --enabled ldpd
|
|
endif
|
|
if NHRPD
|
|
rt_enabled += --enabled nhrpd
|
|
endif
|
|
if OSPFD
|
|
rt_enabled += --enabled ospfd
|
|
endif
|
|
if OSPF6D
|
|
rt_enabled += --enabled ospf6d
|
|
endif
|
|
if PBRD
|
|
rt_enabled += --enabled pbrd
|
|
endif
|
|
if PIMD
|
|
rt_enabled += --enabled pimd
|
|
endif
|
|
if RIPD
|
|
rt_enabled += --enabled ripd
|
|
endif
|
|
if RIPNGD
|
|
rt_enabled += --enabled ripngd
|
|
endif
|
|
if SHARPD
|
|
rt_enabled += --enabled sharpd
|
|
endif
|
|
if ZEBRA
|
|
rt_enabled += --enabled zebra
|
|
endif
|
|
|
|
lib/route_types.h: $(top_srcdir)/lib/route_types.txt $(top_srcdir)/lib/route_types.pl
|
|
$(PERL) $(top_srcdir)/lib/route_types.pl $(rt_enabled) < $(top_srcdir)/lib/route_types.txt > $@
|
|
DISTCLEANFILES += lib/route_types.h
|
|
|
|
if GIT_VERSION
|
|
# bit of a trick here to always have up-to-date git stamps without triggering
|
|
# unneccessary rebuilds. .PHONY causes the .tmp file to be rebuilt always,
|
|
# but if we use that on gitversion.h it'll ripple through the .c file deps.
|
|
# (even if gitversion.h's file timestamp doesn't change, make will think it
|
|
# did, because of .PHONY...)
|
|
|
|
PHONY_GITVERSION=lib/gitversion.h.tmp
|
|
.SILENT: lib/gitversion.h lib/gitversion.h.tmp
|
|
GITH=lib/gitversion.h
|
|
lib/gitversion.h.tmp: $(top_srcdir)/.git
|
|
$(PERL) $(top_srcdir)/lib/gitversion.pl $(top_srcdir) > ${GITH}.tmp
|
|
lib/gitversion.h: lib/gitversion.h.tmp
|
|
{ test -f ${GITH} && diff -s -q ${GITH}.tmp ${GITH}; } || cp ${GITH}.tmp ${GITH}
|
|
|
|
else
|
|
PHONY_GITVERSION=lib/gitversion.h
|
|
lib/gitversion.h:
|
|
true
|
|
endif
|
|
.PHONY: $(PHONY_GITVERSION)
|