project('libfuse3', 'c', version: '3.1.0', meson_version: '>= 0.38', default_options: [ 'buildtype=plain' ]) # # Feature detection # cfg = configuration_data() cc = meson.get_compiler('c') # Default includes when checking for presence of functions and # struct members include_default = ' #include #include #include #include #include #include #include ' args_default = [ '-D_GNU_SOURCE' ] cfg.set_quoted('PACKAGE_VERSION', meson.project_version()) # Test for presence of some functions test_funcs = [ 'fork', 'fstatat', 'openat', 'readlinkat', 'pipe2', 'splice', 'vmsplice', 'posix_fallocate', 'fdatasync', 'utimensat' ] foreach func : test_funcs cfg.set('HAVE_' + func.to_upper(), cc.has_function(func, prefix: include_default, args: args_default)) endforeach cfg.set('HAVE_SETXATTR', cc.has_function('setxattr', prefix: '#include ')) cfg.set('HAVE_ICONV', cc.has_function('iconv', prefix: '#include ')) # Test if structs have specific member cfg.set('HAVE_STRUCT_STAT_ST_ATIM', cc.has_member('struct stat', 'st_atim', prefix: include_default, args: args_default)) cfg.set('HAVE_STRUCT_STAT_ST_ATIMESPEC', cc.has_member('struct stat', 'st_atimespec', prefix: include_default, args: args_default)) # Write the test results into config.h (stored in build directory) configure_file(output: 'config.h', configuration : cfg) # # Compiler configuration # add_global_arguments('-D_REENTRANT', '-DHAVE_CONFIG_H', '-Wall', '-Wextra', '-Wno-sign-compare', '-Wstrict-prototypes', '-Wmissing-declarations', '-Wwrite-strings', '-O2', '-g', '-fno-strict-aliasing', language: 'c') # Some (stupid) GCC versions warn about unused return values even when they are # casted to void. This makes -Wunused-result pretty useless, since there is no # way to suppress the warning when we really *want* to ignore the value. code = ''' __attribute__((warn_unused_result)) int get_4() { return 4; } int main(void) { (void) get_4(); return 0; }''' if not cc.compiles(code, args: [ '-O0', '-Werror=unused-result' ]) message('Compiler warns about unused result even when casting to void') add_global_arguments('-Wno-unused-result', language: 'c') endif # '.' will refer to current build directory, which contains config.h include_dirs = include_directories('include', 'lib', '.') # Common dependencies thread_dep = dependency('threads') # # Read build files from sub-directories # subdirs = [ 'lib', 'include', 'util', 'example', 'doc', 'test' ] foreach n : subdirs subdir(n) endforeach