This is the first stage for porting efl to meson!

Right now this should work on osx, *bsd, and linux.

I plan to rebase the branch every friday, so if there are things you
want to push, please do this before friday noon (CET).

I would also like to only merge complete subsystems that are tested on
bsd linux and osx, so we dont break this thing before it works ... :)

Greetings,
   Marcel Hollerbach


On Wed, Dec 20, 2017 at 11:04:55AM -0800, Marcel Hollerbach wrote:
> bu5hm4n pushed a commit to branch feature/meson.
> 
> http://git.enlightenment.org/core/efl.git/commit/?id=b828aa49590182aa6f43e71c0fa34c9507e3154c
> 
> commit b828aa49590182aa6f43e71c0fa34c9507e3154c
> Author: Marcel Hollerbach <marcel-hollerb...@t-online.de>
> Date:   Wed Dec 20 19:57:23 2017 +0100
> 
>     meson: add inital eina support
>     
>     things that are working:
>     - tests
>     - benchmarks
>     - lib
>     - modules
>     - bin
>     
>     Due to the fact that eina depends on efl (why?!) efl is already there
>     just to generate the Efl_Config.h file.
> ---
>  header_checks/meson.build                    | 136 +++++++++++
>  meson.build                                  |  86 +++++++
>  meson_options.txt                            |  28 +++
>  src/benchmarks/eina/meson.build              |  41 ++++
>  src/bin/eina/eina_btlog/meson.build          |   5 +
>  src/bin/eina/eina_modinfo/meson.build        |   5 +
>  src/bin/eina/meson.build                     |   2 +
>  src/examples/eina/meson.build                |  47 ++++
>  src/examples/meson.build                     |   1 +
>  src/lib/efl/meson.build                      |  22 ++
>  src/lib/eina/meson.build                     | 348 
> +++++++++++++++++++++++++++
>  src/modules/eina/meson.build                 |   9 +
>  src/modules/eina/mp/chained_pool/meson.build |   3 +
>  src/modules/eina/mp/one_big/meson.build      |   3 +
>  src/modules/eina/mp/pass_through/meson.build |   3 +
>  src/tests/eina/meson.build                   |  69 ++++++
>  src/tests/meson.build                        |   2 +
>  17 files changed, 810 insertions(+)
> 
> diff --git a/header_checks/meson.build b/header_checks/meson.build
> new file mode 100644
> index 0000000000..d9c6a83216
> --- /dev/null
> +++ b/header_checks/meson.build
> @@ -0,0 +1,136 @@
> +header_checks = [
> +  'alloca.h',
> +  'asm/hwcap.h',
> +  'bsd/string.h',
> +  'dirent.h',
> +  'execinfo.h',
> +  'mcheck.h',
> +  'netinet/in.h',
> +  'stdlib.h',
> +  'sys/auxv.h',
> +  'sys/inotify.h',
> +  'sys/ioctl.h',
> +  'sys/mman.h',
> +  'sys/types.h',
> +  'sys/socket.h',
> +  'arpa/inet.h',
> +  'sys/epoll.h',
> +  'sys/un.h',
> +  'dirent.h']
> +
> +function_checks = [
> +# function name | headers that are needed | libraries to include | Defines 
> that are needed
> +  ['alloca', ['alloca.h']],
> +  ['backtrace', ['execinfo.h']],
> +  ['backtrace_symbols', ['execinfo.h']],
> +  ['clock_gettime', ['time.h']],
> +  ['dirfd', ['dirent.h sys/types.h']],
> +  ['fchmod', ['sys/stat.h']],
> +  ['fcntl', ['fcntl.h']],
> +  ['fork', ['unistd.h']],
> +  ['fpathconf', ['unistd.h']],
> +  ['geteuid', ['unistd.h']],
> +  ['getpagesize', ['unistd.h']],
> +  ['getpwent', ['sys/types.h', 'pwd.h']],
> +  ['getuid', ['unistd.h']],
> +  ['getxattr', ['sys/types.h', 'sys/xattr.h']],
> +  ['iconv_t', ['iconv.h']],
> +  ['listxattr', ['sys/types.h', 'sys/xattr.h']],
> +  ['mallinfo', ['malloc.h']],
> +  ['malloc_info', ['malloc.h']],
> +  ['malloc_usable_size', ['malloc.h']],
> +  ['mkdirat', ['sys/stat.h']],
> +  ['mmap', ['sys/mman.h']],
> +  ['mtrace', ['mcheck.h']],
> +  ['prctl', ['sys/prctl.h']],
> +  ['realpath', ['stdlib.h']],
> +  ['setxattr', ['sys/types.h', 'sys/xattr.h']],
> +  ['siglongjmp', ['setjmp.h']],
> +  ['strerror_r', ['string.h']],
> +#FIXME strlcpy is detected by meson but drops at compilation time
> +#  ['strlcpy', ['string.h']],
> +  ['siginfo_t', ['signal.h']],
> +  ['strerror_r', ['string.h']],
> +#from here on we specify the dependencies
> +  ['dlopen', ['dlfcn.h'],                               ['dl']],
> +  ['dlsym', ['dlfcn.h'],                                ['dl']],
> +  ['lround', ['math.h'],                                ['m']],
> +  ['shm_open', ['sys/mman.h', 'sys/stat.h', 'fcntl.h'], ['rt']],
> +#from here on we specify arguments
> +  ['splice', ['fcntl.h'],                               [],      
> '-D_GNU_SOURCE=1'],
> +  ['sched_getcpu', ['sched.h'],                         [],      
> '-D_GNU_SOURCE=1'],
> +  ['dladdr', ['dlfcn.h'],                               ['dl'],  
> '-D_GNU_SOURCE=1']
> +]
> +
> +strerror_r_char_p = cc.compiles('''#define _GNU_SOURCE
> +                  #include <string.h>
> +                  int func (void)
> +                    {
> +                       char error_string[256];
> +                       char *ptr = strerror_r (-2, error_string, 256);
> +                       char c = *strerror_r (-2, error_string, 256);
> +                       return c != 0 && ptr != (void*) 0L;
> +                    }
> +                 ''',
> +                 name : 'strerror_r() returns char *')
> +
> +if strerror_r_char_p
> +  config_h.set('STRERROR_R_CHAR_P', '1')
> +endif
> +
> +#for later use, a bunch of librarie findings
> +m = cc.find_library('m')
> +#just keep this here as required false, if it is not inplace the library rt 
> will just be linked as NOP
> +dl = cc.find_library('dl', required: false)
> +rt = cc.find_library('rt', required: false)
> +
> +thread_dep = dependency('threads')
> +
> +#check for the headers
> +foreach header : header_checks
> +  if cc.has_header(header)
> +    config_h.set10('HAVE_'+header.underscorify().to_upper(), true)
> +  endif
> +endforeach
> +
> +foreach function : function_checks
> +  function_name = function[0]
> +  headers_to_search = function[1]
> +  dependencies = []
> +  args = []
> +
> +  # if there is a library, make sure they exist
> +  if function.length() > 2
> +    foreach library : function[2]
> +      lib = cc.find_library(library, required : false)
> +      if lib.found() == true
> +        dependencies += lib
> +      endif
> +    endforeach
> +  endif
> +
> +  #check if there are args
> +  if function.length() > 3
> +    args = function[3]
> +  endif
> +
> +  # Only check the header if the dependencies are ready
> +  foreach header : headers_to_search
> +    if cc.has_header_symbol(header, function_name,
> +        dependencies : dependencies,
> +        args : args)
> +      config_h.set10('HAVE_'+function_name.to_upper(), true)
> +    endif
> +  endforeach
> +endforeach
> +
> +# The next checks are manually for now due to the fact that some names are 
> not within the default pattern
> +if (cc.has_header_symbol('sys/stat.h', 'fstatat'))
> +  config_h.set10('HAVE_ATFILE_SOURCE', true)
> +endif
> +
> +config_h.set('VMAJ', version_major)
> +config_h.set('VMIN', version_minor)
> +config_h.set('VMIC', version_micro)
> +config_h.set('VREV', '0')
> +config_h.set_quoted('SHARED_LIB_SUFFIX', '.so')
> diff --git a/meson.build b/meson.build
> new file mode 100644
> index 0000000000..a566a5381d
> --- /dev/null
> +++ b/meson.build
> @@ -0,0 +1,86 @@
> +project('efl', ['c','cpp'], version: '1.20.99')
> +
> +pkgconfig = import('pkgconfig')
> +
> +version_arr = meson.project_version().split('.')
> +
> +version_major = version_arr[0]
> +version_minor = version_arr[1]
> +version_micro = version_arr[2]
> +
> +cc = meson.get_compiler('c')
> +host_os = host_machine.system()
> +
> +if host_os == 'linux'
> +  if cc.has_header_symbol('features.h', '__UCLIBC__')
> +    host_os = 'linux-uclibc'
> +  elif cc.has_header_symbol('features.h', '__dietlibc__')
> +    host_os = 'linux-dietlibc'
> +  else
> +    host_os = 'linux-gnu'
> +  endif
> +endif
> +
> +module_arch = '@0@-@1@-@2@'.format(host_os, host_machine.cpu_family(), 
> meson.project_version())
> +
> +#install paths
> +dir_prefix    = get_option('prefix')
> +dir_sysconf   = join_paths(dir_prefix, get_option('sysconfdir'))
> +dir_bin       = join_paths(dir_prefix, get_option('bindir'))
> +dir_data      = join_paths(dir_prefix, get_option('datadir'))
> +dir_include   = join_paths(dir_prefix, get_option('includedir'))
> +dir_lib       = join_paths(dir_prefix, get_option('libdir'))
> +
> +#local paths
> +local_lib = join_paths('src', 'lib')
> +local_bin = join_paths('src', 'bin')
> +local_module = join_paths('src', 'modules')
> +local_tests = join_paths('src', 'tests')
> +local_benchmark = join_paths('src', 'benchmarks')
> +local_examples = join_paths('src', 'examples')
> +
> +add_global_arguments('-DHAVE_CONFIG_H=1', language: 'c')
> +add_global_arguments('-D_GNU_SOURCE=1', language: 'c')
> +add_global_arguments('-DEFL_EO_API_SUPPORT=1', language: 'c')
> +add_global_arguments('-DEFL_BETA_API_SUPPORT=1', language: 'c')
> +
> +config_h = configuration_data()
> +config_h.set_quoted('MODULE_ARCH', module_arch)
> +config_h.set_quoted('PACKAGE', meson.project_name())
> +config_h.set_quoted('PACKAGE_VERSION', meson.project_version())
> +config_h.set_quoted('VERSION', meson.project_version())
> +config_h.set_quoted('LOCALE_DIR', join_paths([dir_prefix, 'share/locale']))
> +config_h.set_quoted('PACKAGE_URL', 'https://www.enlightenment.org')
> +config_h.set_quoted('PACKAGE_TARNAME', meson.project_name())
> +config_h.set_quoted('PACKAGE_BUGREPORT', 
> 'enlightenment-devel@lists.sourceforge.net')
> +config_h.set_quoted('PACKAGE_STRING', meson.project_name() + ' ' + 
> meson.project_version())
> +config_h.set_quoted('PACKAGE_NAME', meson.project_name())
> +config_h.set_quoted('PACKAGE_BIN_DIR', dir_bin)
> +config_h.set_quoted('PACKAGE_LIB_DIR', dir_lib)
> +config_h.set_quoted('PACKAGE_BUILD_DIR', meson.current_source_dir())
> +config_h.set_quoted('PACKAGE_DATA_DIR', join_paths(dir_data, 
> meson.project_name()))
> +config_h.set_quoted('PACKAGE_SYSCONF_DIR', dir_sysconf)
> +config_h.set_quoted('BINDIR', dir_bin)
> +config_h.set_quoted('DATADIR', dir_data)
> +config_h.set10('EFL_HAVE_THREADS', true)
> +
> +config_dir = [include_directories('.')]
> +
> +subdir('header_checks')
> +
> +subdir(join_paths(local_lib, 'efl'))
> +
> +subdir(join_paths(local_module, 'eina'))
> +subdir(join_paths(local_lib, 'eina'))
> +subdir(join_paths(local_bin, 'eina'))
> +subdir(join_paths(local_benchmark, 'eina'))
> +
> +if get_option('build-tests')
> +  subdir(join_paths(local_tests))
> +endif
> +
> +if get_option('build-examples')
> +  subdir(join_paths(local_examples))
> +endif
> +
> +configure_file(output: 'config.h', install: false, configuration: config_h)
> diff --git a/meson_options.txt b/meson_options.txt
> new file mode 100644
> index 0000000000..f9985b7d64
> --- /dev/null
> +++ b/meson_options.txt
> @@ -0,0 +1,28 @@
> +option('build-id',
> +  type : 'string',
> +  value : 'none',
> +  description : 'The build id to attach to the efl build')
> +
> +option('eina-magic-debug',
> +  type : 'boolean',
> +  value : true,
> +  description : 'magic debug of eina structure'
> +)
> +
> +option('debug-threads',
> +  type : 'boolean',
> +  value : false,
> +  description : 'thread debugging'
> +)
> +
> +option('build-examples',
> +  type : 'boolean',
> +  value : true,
> +  description : 'build examples'
> +)
> +
> +option('build-tests',
> +  type : 'boolean',
> +  value : true,
> +  description : 'build examples'
> +)
> diff --git a/src/benchmarks/eina/meson.build b/src/benchmarks/eina/meson.build
> new file mode 100644
> index 0000000000..aa9081cef2
> --- /dev/null
> +++ b/src/benchmarks/eina/meson.build
> @@ -0,0 +1,41 @@
> +eina_bench_src = files(
> +'eina_bench.c',
> +'eina_bench_sort.c',
> +'eina_bench_hash.c',
> +'eina_bench_crc_hash.c',
> +'eina_bench_stringshare.c',
> +'eina_bench_convert.c',
> +'eina_bench_mempool.c',
> +'eina_bench_stringshare_e17.c',
> +'eina_bench_array.c',
> +'eina_bench_rectangle_pool.c',
> +'ecore_list.c',
> +'ecore_strings.c',
> +'ecore_hash.c',
> +'ecore_sheap.c',
> +'evas_hash.c',
> +'evas_list.c',
> +'evas_mempool.c',
> +'evas_object_list.c',
> +'evas_stringshare.c',
> +'eina_bench_quad.c',
> +'eina_bench.h',
> +'Ecore_Data.h',
> +'Evas_Data.h',
> +'evas_mempool.h')
> +
> +city = shared_library('city',
> +    sources : ['city.cc','city.h'],
> +)
> +
> +eina_bench = executable('eina_bench',
> +     sources : eina_bench_src,
> +     dependencies : eina,
> +    c_args : ['-fPIC','-DCITYHASH_BENCH', '-DEINA_ENABLE_BENCH_E17'],
> +     include_directories : config_dir,
> +     link_with : city,
> +)
> +
> +benchmark('eina_bench', eina_bench,
> +     timeout : 20*60
> +)
> \ No newline at end of file
> diff --git a/src/bin/eina/eina_btlog/meson.build 
> b/src/bin/eina/eina_btlog/meson.build
> new file mode 100644
> index 0000000000..3d56f9cfbf
> --- /dev/null
> +++ b/src/bin/eina/eina_btlog/meson.build
> @@ -0,0 +1,5 @@
> +executable('eina_btlog',
> +  'eina_btlog.c',
> +  dependencies: eina,
> +  install: true,
> +)
> diff --git a/src/bin/eina/eina_modinfo/meson.build 
> b/src/bin/eina/eina_modinfo/meson.build
> new file mode 100644
> index 0000000000..a57dc6fc42
> --- /dev/null
> +++ b/src/bin/eina/eina_modinfo/meson.build
> @@ -0,0 +1,5 @@
> +executable('eina_modinfo',
> +  'eina_modinfo.c',
> +  dependencies: eina,
> +  install: true,
> +)
> diff --git a/src/bin/eina/meson.build b/src/bin/eina/meson.build
> new file mode 100644
> index 0000000000..7c5f64b950
> --- /dev/null
> +++ b/src/bin/eina/meson.build
> @@ -0,0 +1,2 @@
> +subdir('eina_btlog')
> +subdir('eina_modinfo')
> diff --git a/src/examples/eina/meson.build b/src/examples/eina/meson.build
> new file mode 100644
> index 0000000000..78aa46a290
> --- /dev/null
> +++ b/src/examples/eina/meson.build
> @@ -0,0 +1,47 @@
> +examples = [
> +'eina_accessor_01',
> +'eina_array_01',
> +'eina_array_02',
> +'eina_error_01',
> +'eina_file_01',
> +'eina_file_02',
> +'eina_hash_01',
> +'eina_hash_02',
> +'eina_hash_03',
> +'eina_hash_04',
> +'eina_hash_05',
> +'eina_hash_06',
> +'eina_hash_07',
> +'eina_hash_08',
> +'eina_iterator_01',
> +'eina_list_01',
> +'eina_list_02',
> +'eina_list_03',
> +'eina_list_04',
> +'eina_log_01',
> +'eina_log_02',
> +'eina_log_03',
> +'eina_inlist_01',
> +'eina_inlist_02',
> +'eina_inlist_03',
> +'eina_str_01',
> +'eina_strbuf_01',
> +'eina_stringshare_01',
> +'eina_tmpstr_01',
> +#that examples is using ecore evas ... WTF
> +#'eina_tiler_01',
> +'eina_simple_xml_parser_01',
> +'eina_value_01',
> +'eina_value_02',
> +'eina_value_03',
> +'eina_inarray_01',
> +'eina_inarray_02',
> +'eina_inarray_03',
> +'eina_magic_01',
> +'eina_xattr_01',
> +'eina_xattr_02'
> +]
> +
> +foreach example : examples
> +  executable(example, example + '.c', dependencies: eina)
> +endforeach
> diff --git a/src/examples/meson.build b/src/examples/meson.build
> new file mode 100644
> index 0000000000..39eb335298
> --- /dev/null
> +++ b/src/examples/meson.build
> @@ -0,0 +1 @@
> +subdir('eina')
> diff --git a/src/lib/efl/meson.build b/src/lib/efl/meson.build
> new file mode 100644
> index 0000000000..f6462f4b4a
> --- /dev/null
> +++ b/src/lib/efl/meson.build
> @@ -0,0 +1,22 @@
> +#FIXME
> +#weird to have here ... but oooooh well and its not correct aaarg
> +efl_config_h = configuration_data()
> +efl_config_h.set('EFL_VERSION_MAJOR', version_major)
> +efl_config_h.set('EFL_VERSION_MINOR', version_minor)
> +efl_config_h.set('EFL_VERSION_MICRO', version_micro)
> +efl_config_h.set('EFL_BUILD_ID', get_option('build-id'))
> +
> +#FIXME placeholder
> +efl_config_h.set('EFL_API_EO_DEF', '#define EFL_API_EO_DEF "FIXME NOT 
> IMPLEMENTED"')
> +efl_config_h.set('EFL_API_LEGACY_DEF', '#define EFL_API_LEGACY_DEF "FIXME 
> NOT IMPLEMENTED"')
> +
> +efl_config_file = configure_file(
> +  input: '../efl/Efl_Config.h.in',
> +  output: 'Efl_Config.h',
> +  configuration: efl_config_h)
> +
> +install_headers(efl_config_file)
> +
> +config_dir += include_directories('.')
> +
> +#end FIXME
> diff --git a/src/lib/eina/meson.build b/src/lib/eina/meson.build
> new file mode 100644
> index 0000000000..c7ec72afac
> --- /dev/null
> +++ b/src/lib/eina/meson.build
> @@ -0,0 +1,348 @@
> +eina_deps = []
> +
> +public_sub_headers = [
> +'eina_promise.h',
> +'eina_safety_checks.h',
> +'eina_error.h',
> +'eina_debug.h',
> +'eina_debug_private.h',
> +'eina_log.h',
> +'eina_inline_log.x',
> +'eina_fp.h',
> +'eina_inline_f32p32.x',
> +'eina_inline_f16p16.x',
> +'eina_inline_f8p24.x',
> +'eina_inline_fp.x',
> +'eina_hash.h',
> +'eina_inline_hash.x',
> +'eina_lalloc.h',
> +'eina_clist.h',
> +'eina_inline_clist.x',
> +'eina_inarray.h',
> +'eina_inlist.h',
> +'eina_inline_inlist.x',
> +'eina_list.h',
> +'eina_file.h',
> +'eina_inline_file.x',
> +'eina_mempool.h',
> +'eina_module.h',
> +'eina_rectangle.h',
> +'eina_types.h',
> +'eina_array.h',
> +'eina_counter.h',
> +'eina_inline_array.x',
> +'eina_magic.h',
> +'eina_stringshare.h',
> +'eina_binshare.h',
> +'eina_binbuf.h',
> +'eina_ustringshare.h',
> +'eina_inline_stringshare.x',
> +'eina_inline_ustringshare.x',
> +'eina_inline_list.x',
> +'eina_accessor.h',
> +'eina_convert.h',
> +'eina_rbtree.h',
> +'eina_benchmark.h',
> +'eina_inline_rbtree.x',
> +'eina_inline_mempool.x',
> +'eina_inline_rectangle.x',
> +'eina_inline_trash.x',
> +'eina_thread.h',
> +'eina_trash.h',
> +'eina_iterator.h',
> +'eina_main.h',
> +'eina_cpu.h',
> +'eina_inline_cpu.x',
> +'eina_sched.h',
> +'eina_tiler.h',
> +'eina_hamster.h',
> +'eina_matrixsparse.h',
> +'eina_inline_tiler.x',
> +'eina_str.h',
> +'eina_inline_str.x',
> +'eina_strbuf.h',
> +'eina_ustrbuf.h',
> +'eina_unicode.h',
> +'eina_quadtree.h',
> +'eina_simple_xml_parser.h',
> +'eina_lock.h',
> +'eina_prefix.h',
> +'eina_refcount.h',
> +'eina_mmap.h',
> +'eina_xattr.h',
> +'eina_value.h',
> +'eina_inline_value.x',
> +'eina_value_util.h',
> +'eina_inline_value_util.x',
> +'eina_inline_lock_barrier.x',
> +'eina_inline_lock_posix.x',
> +'eina_tmpstr.h',
> +'eina_alloca.h',
> +'eina_cow.h',
> +'eina_inline_unicode.x',
> +'eina_thread_queue.h',
> +'eina_matrix.h',
> +'eina_quad.h',
> +'eina_crc.h',
> +'eina_inline_crc.x',
> +'eina_evlog.h',
> +'eina_util.h',
> +'eina_inline_util.x',
> +'eina_quaternion.h',
> +'eina_vector.h',
> +'eina_inline_vector.x',
> +'eina_bezier.h',
> +'eina_safepointer.h',
> +'eina_inline_safepointer.x',
> +'eina_slice.h',
> +'eina_inline_slice.x',
> +'eina_inline_modinfo.x',
> +'eina_freeq.h',
> +'eina_slstr.h']
> +
> +public_headers = [
> +  'Eina.h'
> +]
> +
> +sources = [
> +'eina_abi.c',
> +'eina_accessor.c',
> +'eina_array.c',
> +'eina_benchmark.c',
> +'eina_binbuf.c',
> +'eina_binshare.c',
> +'eina_convert.c',
> +'eina_counter.c',
> +'eina_cow.c',
> +'eina_cpu.c',
> +'eina_crc.c',
> +'eina_debug.c',
> +'eina_debug_bt.c',
> +'eina_debug_bt_file.c',
> +'eina_debug_chunk.c',
> +'eina_debug_thread.c',
> +'eina_debug_cpu.c',
> +'eina_debug_timer.c',
> +'eina_error.c',
> +'eina_evlog.c',
> +'eina_file_common.h',
> +'eina_file_common.c',
> +'eina_fp.c',
> +'eina_hamster.c',
> +'eina_hash.c',
> +'eina_inarray.c',
> +'eina_inlist.c',
> +'eina_iterator.c',
> +'eina_lalloc.c',
> +'eina_list.c',
> +'eina_lock.c',
> +'eina_log.c',
> +'eina_magic.c',
> +'eina_main.c',
> +'eina_matrix.c',
> +'eina_matrixsparse.c',
> +'eina_mempool.c',
> +'eina_mmap.c',
> +'eina_module.c',
> +'eina_prefix.c',
> +'eina_promise.c',
> +'eina_promise_private.h',
> +'eina_quad.c',
> +'eina_quadtree.c',
> +'eina_rbtree.c',
> +'eina_rectangle.c',
> +'eina_safety_checks.c',
> +'eina_sched.c',
> +'eina_share_common.c',
> +'eina_simple_xml_parser.c',
> +'eina_str.c',
> +'eina_strbuf.c',
> +'eina_strbuf_common.c',
> +'eina_stringshare.c',
> +'eina_thread.c',
> +'eina_thread_queue.c',
> +'eina_tiler.c',
> +'eina_tmpstr.c',
> +'eina_unicode.c',
> +'eina_ustrbuf.c',
> +'eina_ustringshare.c',
> +'eina_util.c',
> +'eina_value.c',
> +'eina_value_util.c',
> +'eina_xattr.c',
> +'eina_private.h',
> +'eina_share_common.h',
> +'eina_strbuf_common.h',
> +'eina_quaternion.c',
> +'eina_bezier.c',
> +'eina_safepointer.c',
> +'eina_freeq.c',
> +'eina_slstr.c']
> +
> +if target_machine.system() == 'cygwin'
> +  sources += 'eina_file_win32.c'
> +else
> +  sources += 'eina_file.c'
> +endif
> +
> +eina_config = configuration_data()
> +
> +if get_option('buildtype') == 'plain'
> +     with_max_log_level=-1
> +     stringshare_usage=false
> +     use_valgrind=true
> +     debug_malloc=false
> +     debug_threads=false
> +     default_mempool=false
> +     want_cow_magic=false
> +elif get_option('buildtype') == 'debug'
> +     with_max_log_level=-1
> +     stringshare_usage=true
> +     use_valgrind=true
> +     debug_malloc=true
> +     debug_threads=true
> +     default_mempool=true
> +     want_cow_magic=true
> +elif get_option('buildtype') == 'release'
> +     with_max_log_level=3
> +     stringshare_usage=false
> +     use_valgrind=false
> +     debug_malloc=false
> +     debug_threads=false
> +     default_mempool=false
> +     want_cow_magic=false
> +endif
> +
> +if with_max_log_level != -1
> +   config_h.set('EINA_LOG_LEVEL_MAXIMUM', with_max_log_level)
> +endif
> +
> +if stringshare_usage
> +   config_h.set('EINA_STRINGSHARE_USAGE', 1)
> +endif
> +
> +if use_valgrind
> +   valgrind = dependency('valgrind', required: false)
> +   if valgrind.found() == false
> +     config_h.set('NVALGRIND', 1)
> +   else
> +     config_h.set('HAVE_VALGRIND', 1)
> +   endif
> +   eina_deps += valgrind
> +else
> +   config_h.set('NVALGRIND', 1)
> +endif
> +
> +if debug_malloc
> +   config_h.set('EINA_DEBUG_MALLOC', 1)
> +endif
> +
> +if want_cow_magic
> +   config_h.set('EINA_COW_MAGIC_ON', 1)
> +endif
> +
> +if get_option('eina-magic-debug')
> +   eina_config.set('EINA_MAGIC_DEBUG', '1')
> +endif
> +
> +if default_mempool
> +   eina_config.set('EINA_DEFAULT_MEMPOOL', '1')
> +endif
> +
> +eina_config.set('EINA_SAFETY_CHECKS', '1')
> +eina_config.set('EINA_HAVE_THREADS', '1')
> +
> +if cc.has_header_symbol('pthread.h', 'pthread_attr_setaffinity_np')
> +   eina_config.set('EINA_HAVE_PTHREAD_AFFINITY', '1')
> +endif
> +
> +if cc.has_header_symbol('pthread.h', 'pthread_barrier_init')
> +   eina_config.set('EINA_HAVE_PTHREAD_BARRIER', '1')
> +endif
> +
> +if cc.has_header_symbol('pthread.h', 'pthread_setname_np')
> +   eina_config.set('EINA_HAVE_PTHREAD_SETNAME', '1')
> +endif
> +
> +# FIXME the author of eina_debug probebly never ran with 
> EINA_HAVE_DEBUG_THREADS
> +# however eina debug decides to init that lock and never frees it. which 
> means
> +# the code in eina_main.c will not work in the way it currently is there.
> +
> +#if debug_threads or get_option('debug-threads')
> +#   eina_config.set('EINA_HAVE_DEBUG_THREADS', '1')
> +#endif
> +
> +eina_config.set('EINA_SIZEOF_WCHAR_T', cc.sizeof('wchar_t'))
> +
> +eina_config.set('EINA_SIZEOF_UINTPTR_T', cc.sizeof('uintptr_t'))
> +
> +if cc.has_header('dirent.h')
> +   eina_config.set('EINA_CONFIGURE_HAVE_DIRENT_H', '1')
> +endif
> +
> +eina_config.set('EINA_ENABLE_LOG', '1')
> +
> +if cc.has_header_symbol('alloca.h', 'alloca')
> +   eina_config.set('EINA_HAVE_ALLOCA_H', '1')
> +endif
> +
> +if cc.has_header('byteswap.h')
> +   eina_config.set('EINA_HAVE_BYTESWAP_H', '1')
> +endif
> +
> +if cc.has_header_symbol('byteswap.h', 'bswap_16')
> +   eina_config.set('EINA_CONFIGURE_HAVE_BSWAP16', '1')
> +endif
> +
> +if cc.has_header_symbol('byteswap.h', 'bswap_32')
> +   eina_config.set('EINA_CONFIGURE_HAVE_BSWAP32', '1')
> +endif
> +
> +if cc.has_header_symbol('byteswap.h', 'bswap_64')
> +   eina_config.set('EINA_CONFIGURE_HAVE_BSWAP64', '1')
> +endif
> +
> +if cc.has_header_symbol('pthread.h', 'pthread_spin_init')
> +   eina_config.set('EINA_HAVE_POSIX_SPINLOCK', '1')
> +endif
> +
> +if target_machine.system() == 'darwin'
> +   if cc.has_header_symbol('libkern/OSAtomic.h', 'OSSpinLockTry')
> +     eina_config.set('EINA_CONFIGURE_HAVE_OSX_SPINLOCK', 1)
> +   endif
> +   if cc.has_header_symbol('semaphore.h', 'semaphore_create')
> +     eina_config.set('EINA_CONFIGURE_HAVE_OSX_SEMAPHORE', 1)
> +   endif
> +
> +endif
> +
> +eina_config_file = configure_file(
> +  output: 'eina_config.h',
> +  configuration: eina_config,
> +  install: true)
> +
> +public_headers += eina_config_file
> +
> +unwind = dependency('libunwind-generic', required: false)
> +if unwind.found()
> +   config_h.set('HAVE_UNWIND', 1)
> +   eina_deps += unwind
> +endif
> +
> +#for the case that the iconv library is not part of libc but rather libiconv 
> or smth. like that
> +iconv = dependency('iconv', required: false)
> +execinfo = cc.find_library('execinfo', required: false)
> +
> +eina_lib = shared_library('eina', sources,
> +                   include_directories : config_dir,
> +                   dependencies: [m, rt, dl, execinfo, iconv, eina_deps, 
> thread_dep, eina_mem_pools],
> +                   install: true)
> +
> +eina = declare_dependency(
> +  include_directories: [include_directories('.')] + config_dir,
> +  dependencies : [thread_dep],
> +  link_with: eina_lib,
> +)
> +
> +install_headers(public_headers)
> +install_headers(public_sub_headers, subdir : 'eina')
> diff --git a/src/modules/eina/meson.build b/src/modules/eina/meson.build
> new file mode 100644
> index 0000000000..17396a198c
> --- /dev/null
> +++ b/src/modules/eina/meson.build
> @@ -0,0 +1,9 @@
> +eina_mp_sources = []
> +
> +subdir(join_paths('mp', 'chained_pool'))
> +subdir(join_paths('mp', 'one_big'))
> +subdir(join_paths('mp', 'pass_through'))
> +
> +eina_mem_pools = declare_dependency(
> +  sources: eina_mp_sources
> +)
> diff --git a/src/modules/eina/mp/chained_pool/meson.build 
> b/src/modules/eina/mp/chained_pool/meson.build
> new file mode 100644
> index 0000000000..d4b222c6f2
> --- /dev/null
> +++ b/src/modules/eina/mp/chained_pool/meson.build
> @@ -0,0 +1,3 @@
> +config_h.set10('EINA_BUILD_CHAINED_POOL', true)
> +config_h.set10('EINA_STATIC_BUILD_CHAINED_POOL', true)
> +eina_mp_sources += files('eina_chained_mempool.c')
> diff --git a/src/modules/eina/mp/one_big/meson.build 
> b/src/modules/eina/mp/one_big/meson.build
> new file mode 100644
> index 0000000000..fabe80352c
> --- /dev/null
> +++ b/src/modules/eina/mp/one_big/meson.build
> @@ -0,0 +1,3 @@
> +config_h.set10('EINA_BUILD_ONE_BIG', true)
> +config_h.set10('EINA_STATIC_BUILD_ONE_BIG', true)
> +eina_mp_sources += files('eina_one_big.c')
> diff --git a/src/modules/eina/mp/pass_through/meson.build 
> b/src/modules/eina/mp/pass_through/meson.build
> new file mode 100644
> index 0000000000..a60ab6204b
> --- /dev/null
> +++ b/src/modules/eina/mp/pass_through/meson.build
> @@ -0,0 +1,3 @@
> +config_h.set10('EINA_BUILD_PASS_THROUGH', true)
> +config_h.set10('EINA_STATIC_BUILD_PASS_THROUGH', true)
> +eina_mp_sources += files('eina_pass_through.c')
> diff --git a/src/tests/eina/meson.build b/src/tests/eina/meson.build
> new file mode 100644
> index 0000000000..cbad7e9580
> --- /dev/null
> +++ b/src/tests/eina/meson.build
> @@ -0,0 +1,69 @@
> +eina_test_src = files(
> +'eina_suite.c',
> +'eina_suite.h',
> +'eina_test_abi.c',
> +'eina_test_fp.c',
> +'eina_test_ustringshare.c',
> +'eina_test_ustr.c',
> +'eina_test_binshare.c',
> +'eina_test_binbuf.c',
> +'eina_test_inarray.c',
> +'eina_test_array.c',
> +'eina_test_clist.c',
> +'eina_test_error.c',
> +'eina_test_sched.c',
> +'eina_test_log.c',
> +'eina_test_magic.c',
> +'eina_test_inlist.c',
> +'eina_test_main.c',
> +'eina_test_counter.c',
> +'eina_test_lalloc.c',
> +'eina_test_hash.c',
> +'eina_test_iterator.c',
> +'eina_test_accessor.c',
> +'eina_test_module.c',
> +'eina_test_convert.c',
> +'eina_test_rbtree.c',
> +'eina_test_file.c',
> +'eina_test_benchmark.c',
> +'eina_test_mempool.c',
> +'eina_test_rectangle.c',
> +'eina_test_list.c',
> +'eina_test_matrixsparse.c',
> +'eina_test_tiler.c',
> +'eina_test_strbuf.c',
> +'eina_test_str.c',
> +'eina_test_quadtree.c',
> +'eina_test_simple_xml_parser.c',
> +'eina_test_value.c',
> +'eina_test_cow.c',
> +'eina_test_barrier.c',
> +'eina_test_tmpstr.c',
> +'eina_test_trash.c',
> +'eina_test_lock.c',
> +'eina_test_xattr.c',
> +'eina_test_crc.c',
> +'eina_test_quad.c',
> +'eina_test_matrix.c',
> +'eina_test_quaternion.c',
> +'eina_test_vector.c',
> +'eina_test_bezier.c',
> +'eina_test_safepointer.c',
> +'eina_test_slice.c',
> +'eina_test_freeq.c',
> +'eina_test_slstr.c')
> +
> +
> +eina_test_exe = executable('eina_suite',
> +  include_directories : config_dir,
> +  sources : eina_test_src,
> +  dependencies: [m, check, eina],
> +  c_args : [
> +  '-DTESTS_WD="`pwd`"',
> +  '-DTESTS_BUILD_DIR="'+meson.current_build_dir()+'"',
> +  '-DTESTS_SRC_DIR="'+meson.current_source_dir()+'"']
> +)
> +
> +test('eina', eina_test_exe,
> +     timeout : 5*60,
> +)
> diff --git a/src/tests/meson.build b/src/tests/meson.build
> new file mode 100644
> index 0000000000..856d351fa4
> --- /dev/null
> +++ b/src/tests/meson.build
> @@ -0,0 +1,2 @@
> +check = dependency('check')
> +subdir('eina')
> 
> -- 
> 
> 

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to