New upstream version 18.08
[deb_dpdk.git] / examples / meson.build
index 2c6b3f8..4ee7a11 100644 (file)
@@ -7,27 +7,54 @@ if get_option('default_library') == 'static'
 endif
 
 execinfo = cc.find_library('execinfo', required: false)
-foreach example: get_option('examples').split(',')
+
+allow_skips = true # don't flag an error if we can't build an app
+
+if get_option('examples').to_lower() == 'all'
+       dirs = run_command('sh', '-c',
+               'cd $MESON_SOURCE_ROOT/$MESON_SUBDIR && for d in * ; do if [ -d $d ] ; then echo $d ; fi ; done')
+       examples = dirs.stdout().split()
+else
+       examples = get_option('examples').split(',')
+       allow_skips = false # error out if we can't build a requested app
+endif
+default_cflags = machine_args
+if cc.has_argument('-Wno-format-truncation')
+       default_cflags += '-Wno-format-truncation'
+endif
+foreach example: examples
        name = example
+       build = true
        sources = []
        allow_experimental_apis = false
-       cflags = machine_args
+       cflags = default_cflags
+
        ext_deps = [execinfo]
        includes = [include_directories(example)]
        deps = ['eal', 'mempool', 'net', 'mbuf', 'ethdev', 'cmdline']
        subdir(example)
 
-       dep_objs = ext_deps
-       foreach d:deps
-               dep_objs += [get_variable(get_option('default_library') + '_rte_' + d)]
-       endforeach
-       if allow_experimental_apis
-               cflags += '-DALLOW_EXPERIMENTAL_API'
+       if build
+               dep_objs = ext_deps
+               foreach d:deps
+                       var_name = get_option('default_library') + '_rte_' + d
+                       if not is_variable(var_name)
+                               error('Missing dependency "@0@" for example "@1@"'.format(d, name))
+                       endif
+                       dep_objs += [get_variable(var_name)]
+               endforeach
+               if allow_experimental_apis
+                       cflags += '-DALLOW_EXPERIMENTAL_API'
+               endif
+               executable('dpdk-' + name, sources,
+                       include_directories: includes,
+                       link_whole: driver_libs,
+                       link_args: dpdk_extra_ldflags,
+                       c_args: cflags,
+                       dependencies: dep_objs)
+       elif not allow_skips
+               error('Cannot build requested example "' + name + '"')
+       else
+               message('Skipping example "' + name + '"')
        endif
-       executable('dpdk-' + name, sources,
-               include_directories: includes,
-               link_whole: driver_libs,
-               link_args: dpdk_extra_ldflags,
-               c_args: cflags,
-               dependencies: dep_objs)
 endforeach