When trying to build bird with bfd support disabled (e.g. ./configure 
--with-protocols=bgp,static), it fails since the bgp configuration code expects 
bfd to be around.

This patch makes the bfd option in the bgp protocol unavailable using some 
preprocessor logic if we are building without bfd.

I'm currently trying to port bird to mac os x and the bfd module continues to 
cause trouble. Disabling it would therefore be useful.

Sorry, with the first patch I accidentally managed to include the patch file 
itself. Here is a clean one.
---
 conf/Makefile      | 4 +++-
 nest/config.Y      | 2 ++
 proto/bgp/config.Y | 3 ++-
 3 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/conf/Makefile b/conf/Makefile
index 19db9c2c..0fa6749a 100644
--- a/conf/Makefile
+++ b/conf/Makefile
@@ -14,8 +14,10 @@ $(o)cf-parse.y: $(s)gen_parser.m4
 $(o)keywords.h: $(s)gen_keywords.m4
 $(o)commands.h: $(s)gen_commands.m4
 
+enabled_protocols_m4_defines = $(foreach protocol,$(protocols),-D 
PROTOCOL_$(protocol)_ENABLED)
+
 $(conf-y-targets): $(s)confbase.Y $(s)flowspec.Y
-       $(M4) $(M4FLAGS) -P $(if $(word 2,$(filter %.m4,$^)),$(error "Too many 
M4 scripts for one target"),$(filter %.m4,$^)) $(filter %.Y,$^) >$@
+       $(M4) $(M4FLAGS) -P $(enabled_protocols_m4_defines) $(if $(word 
2,$(filter %.m4,$^)),$(error "Too many M4 scripts for one target"),$(filter 
%.m4,$^)) $(filter %.Y,$^) >$@
 
 $(o)cf-parse.tab.h: $(o)cf-parse.tab.c
 
diff --git a/nest/config.Y b/nest/config.Y
index 62b28072..a560a12f 100644
--- a/nest/config.Y
+++ b/nest/config.Y
@@ -603,6 +603,7 @@ password_item_end:
 
 
 /* BFD options */
+m4_ifdef([[PROTOCOL_bfd_ENABLED]],[[
 
 bfd_item:
    INTERVAL expr_us { this_bfd_opts->min_rx_int = this_bfd_opts->min_tx_int = 
$2; }
@@ -647,6 +648,7 @@ bfd_opts_end:
 bfd_opts:
    bfd_opts_start '{' bfd_items '}' bfd_opts_end
  ;
+]])
 
 
 /* Core commands */
diff --git a/proto/bgp/config.Y b/proto/bgp/config.Y
index 4ce06488..f15cbad3 100644
--- a/proto/bgp/config.Y
+++ b/proto/bgp/config.Y
@@ -220,11 +220,12 @@ bgp_proto:
  | bgp_proto CHECK LINK bool ';' { BGP_CFG->check_link = $4; }
  | bgp_proto BFD bool ';' { if ($3) init_bfd_opts(&BGP_CFG->bfd); else 
BGP_CFG->bfd = NULL; }
  | bgp_proto BFD GRACEFUL ';' { init_bfd_opts(&BGP_CFG->bfd); 
BGP_CFG->bfd->mode = BGP_BFD_GRACEFUL; }
- | bgp_proto BFD { open_bfd_opts(&BGP_CFG->bfd); } bfd_opts { 
close_bfd_opts(); } ';'
  | bgp_proto ENFORCE FIRST AS bool ';' { BGP_CFG->enforce_first_as = $5; }
  | bgp_proto LOCAL ROLE bgp_role_name ';' { BGP_CFG->local_role = $4; }
  | bgp_proto REQUIRE ROLES bool ';' { BGP_CFG->require_roles = $4; }
  | bgp_proto DISABLE RX bool ';' { BGP_CFG->disable_rx = $4; }
+ /* Since BFD is optional, only add the BFD option when building with BFD 
enabled */
+ m4_ifdef([[PROTOCOL_bfd_ENABLED]],[[ | bgp_proto BFD { 
open_bfd_opts(&BGP_CFG->bfd); } bfd_opts { close_bfd_opts(); } ';']])
  ;
 
 bgp_afi:
-- 
2.39.3 (Apple Git-146)

Reply via email to