mirror_frr/lib/subdir.am
David Lamparter 2621bb8b8d lib/xref: record log message format args
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>
2021-02-23 16:56:58 +01:00

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)