# Toplevel includes
dep_pdns = declare_dependency(include_directories: include_directories('.', 'pdns'))
+# Feature detection and system configuration
subdir('meson' / 'config') # Config
subdir('meson' / 'version') # Generate version define
subdir('meson' / 'compiler-setup') # Common compiler setup
subdir('meson' / 'platform') # Platform detection
subdir('meson' / 'timet-size') # Check the size of time_t
subdir('meson' / 'timet-sign') # Check the sign of time_t
-subdir('meson' / 'flex') # Find flex and create generator
-subdir('meson' / 'bison') # Find bison and create generator
subdir('meson' / 'ragel') # Find ragel and create generator
subdir('meson' / 'atomics') # Check atomics support
subdir('meson' / 'pthread-headers') # Check pthread headers
+++ /dev/null
-bison = find_program('bison', required: true)
-
-summary('Bison', bison.found(), bool_yn: true, section: 'Programs')
-summary('Bison Path', bison.full_path(), section: 'Programs')
-summary('Bison Version', bison.version(), section: 'Programs')
-
-bison_generator = generator(
- bison,
- output: '@BASENAME@.cc',
- arguments: ['-d', '--verbose', '--debug', '--output=@OUTPUT@', '@INPUT@'],
-)
+++ /dev/null
-flex = find_program('flex', required: true)
-
-summary('Flex', flex.found(), bool_yn: true, section: 'Programs')
-summary('Flex Path', flex.full_path(), section: 'Programs')
-summary('Flex Version', flex.version(), section: 'Programs')
-
-flex_generator = generator(
- flex,
- output: '@BASENAME@.c',
- arguments: ['--case-insensitive', '--outfile=@OUTPUT@', '@INPUT@'],
-)
+fs = import('fs')
+
+libpdns_bindlexer_cc = 'bindlexer.c'
+if not fs.is_file(libpdns_bindlexer_cc)
+ flex = find_program('flex', required: true)
+
+ summary('Flex', flex.found(), bool_yn: true, section: 'BIND Parser')
+ summary('Flex Path', flex.full_path(), section: 'BIND Parser')
+ summary('Flex Version', flex.version(), section: 'BIND Parser')
+
+ flex_generator = generator(
+ flex,
+ output: '@BASENAME@.c',
+ arguments: ['--case-insensitive', '--outfile=@OUTPUT@', '@INPUT@'],
+ )
+
+ libpdns_bindlexer_cc = flex_generator.process('bindlexer.l')
+endif
+libpdns_bindlexer_cc = declare_dependency(
+ sources: [libpdns_bindlexer_cc],
+)
+
+libpdns_bindparser_cc = 'bindparser.cc'
+if not fs.is_file(libpdns_bindparser_cc) and not fs.is_file('bindparser.hh')
+ bison = find_program('bison', required: false)
+ if not bison.found()
+ bison = find_program('yacc', required: true)
+ endif
+
+ summary('Bison/YACC', bison.found(), bool_yn: true, section: 'BIND Parser')
+ summary('Bison/YACC Path', bison.full_path(), section: 'BIND Parser')
+ summary('Bison/YACC Version', bison.version(), section: 'BIND Parser')
+
+ bison_generator = generator(
+ bison,
+ output: ['@BASENAME@.cc', '@BASENAME@.hh', '@BASENAME@.output'],
+ arguments: ['-d', '--verbose', '--debug', '--output=@OUTPUT0@', '@INPUT@'],
+ )
+
+ libpdns_bindparser_cc = bison_generator.process('bindparser.yy')
+endif
+libpdns_bindparser_cc = declare_dependency(
+ sources: [libpdns_bindparser_cc],
+)
+
libpdns_bind_parser = declare_dependency(
link_with: static_library(
'pdns-bind-parser',
'zoneparser-tng.cc',
- flex_generator.process('bindlexer.l'),
- bison_generator.process('bindparser.yy'),
extra_files: [
'zoneparser-tng.hh',
],
cpp_args: '-Wno-redundant-decls',
- dependencies: deps,
+ dependencies: [
+ deps,
+ libpdns_bindlexer_cc,
+ libpdns_bindparser_cc,
+ ],
)
)