2018-10-25 14:40:31 -07:00
project ( 'efl' , [ 'c' , 'cpp' ] ,
2020-04-29 03:14:20 -07:00
version : '1.24.99' ,
default_options : [ 'buildtype=plain' , 'cpp_std=c++11' ] ,
2018-11-07 10:01:48 -08:00
meson_version : '>=0.47'
2018-08-12 06:26:29 -07:00
)
2018-11-16 09:37:22 -08:00
if host_machine . system ( ) == 'darwin'
2018-08-12 06:26:29 -07:00
add_languages ( 'objc' )
endif
pkgconfig = import ( 'pkgconfig' )
test_env = environment ( )
test_env . set ( 'EFL_RUN_IN_TREE' , '1' )
2020-05-26 06:54:57 -07:00
if get_option ( 'b_sanitize' ) == 'address'
test_env . set ( 'ASAN_OPTIONS' , 'detect_leaks=0' )
endif
2018-08-12 06:26:29 -07:00
version_arr = meson . project_version ( ) . split ( '.' )
version_major = version_arr [ 0 ]
version_minor = version_arr [ 1 ]
version_micro = version_arr [ 2 ]
version_name = 'v-' + version_major + '.' + version_minor
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
#prepare a special linker args flag for binaries on macos
bin_linker_args = [ ]
2018-11-16 09:37:22 -08:00
if host_machine . system ( ) == 'darwin'
2018-08-12 06:26:29 -07:00
bin_linker_args = [ '-pagezero_size' , '10000' , '-image_base' , '100000000' ]
endif
2018-12-04 11:38:07 -08:00
windows = [ 'windows' , 'cygwin' ]
#bsd for meson 0.46 and 0.47
2019-05-26 16:59:56 -07:00
bsd = [ 'bsd' , 'freebsd' , 'dragonfly' , 'netbsd' , 'openbsd' ]
2018-12-04 11:38:07 -08:00
linux = [ 'linux' ]
osx = [ 'darwin' ]
sys_linux = linux . contains ( host_machine . system ( ) )
sys_bsd = bsd . contains ( host_machine . system ( ) )
sys_windows = windows . contains ( host_machine . system ( ) )
sys_osx = osx . contains ( host_machine . system ( ) )
2018-08-12 06:26:29 -07:00
module_files = [ ]
evas_loader_map = [ ]
#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' )
2018-10-19 06:47:44 -07:00
local_bindings = join_paths ( 'src' , 'bindings' )
2018-08-12 06:26:29 -07:00
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' )
local_scripts = join_paths ( 'src' , 'scripts' )
2018-12-07 07:30:48 -08:00
dev_cflags = [ ]
dev_cflags_try = [
'-fvisibility=hidden' ,
'-Wall' ,
2020-05-12 00:21:52 -07:00
'-Wfloat-compare' ,
2020-05-12 07:56:01 -07:00
'-Wpointer-arith' ,
2019-01-03 06:59:43 -08:00
'-Wunused-parameter' ,
2018-12-07 07:30:48 -08:00
'-Wsign-compare' ,
'-Wno-missing-field-initializers' ,
]
foreach cf : dev_cflags_try
if cc . has_argument ( cf ) == true
dev_cflags + = cf
endif
endforeach
add_global_arguments ( dev_cflags , language : 'c' )
2018-12-17 05:26:47 -08:00
add_global_arguments ( dev_cflags , language : 'cpp' )
2018-12-07 07:30:48 -08:00
2018-10-19 06:47:44 -07:00
foreach lang : [ 'c' , 'objc' , 'cpp' ]
add_global_arguments ( '-DHAVE_CONFIG_H=1' , language : lang )
add_global_arguments ( '-D_GNU_SOURCE=1' , language : lang )
add_global_arguments ( '-DEFL_BETA_API_SUPPORT=1' , language : lang )
add_global_arguments ( '-DNEED_RUN_IN_TREE=1' , language : lang )
add_global_arguments ( '-DELM_INTERNAL_API_ARGESFSDFEFC=1' , language : lang )
2018-12-04 11:38:07 -08:00
if sys_windows == true
2019-05-08 07:14:45 -07:00
add_global_arguments ( '-D_POSIX_C_SOURCE=200809L' , language : lang )
2020-05-18 07:53:22 -07:00
add_global_arguments ( '-DDLL_EXPORT=1' , language : lang )
2019-01-02 01:34:23 -08:00
if ( get_option ( 'windows-version' ) == 'vista' )
add_global_arguments ( '-DWINVER=0x060' , language : lang )
add_global_arguments ( '-D_WIN32_WINNT=0x0600' , language : lang )
elif ( get_option ( 'windows-version' ) == 'win7' )
add_global_arguments ( '-DWINVER=0x0601' , language : lang )
add_global_arguments ( '-D_WIN32_WINNT=0x0601' , language : lang )
elif ( get_option ( 'windows-version' ) == 'win8' )
add_global_arguments ( '-DWINVER=0x0602' , language : lang )
add_global_arguments ( '-D_WIN32_WINNT=0x0602' , language : lang )
elif ( get_option ( 'windows-version' ) == 'win81' )
add_global_arguments ( '-DWINVER=0x0603' , language : lang )
add_global_arguments ( '-D_WIN32_WINNT=0x0603' , language : lang )
elif ( get_option ( 'windows-version' ) == 'win10' )
add_global_arguments ( '-DWINVER=0x0A00' , language : lang )
add_global_arguments ( '-D_WIN32_WINNT=0x0A00' , language : lang )
else
error ( 'Version of targetted Windows incorrect' )
endif
2019-03-21 03:26:15 -07:00
add_global_arguments ( '-D__USE_MINGW_ANSI_STDIO' , language : lang )
2018-12-04 11:38:07 -08:00
endif
2018-10-19 06:47:44 -07:00
endforeach
2018-08-12 06:26:29 -07:00
config_h = configuration_data ( )
config_h . set_quoted ( 'MODULE_ARCH' , version_name )
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_SRC_DIR' , meson . source_root ( ) )
config_h . set_quoted ( 'PACKAGE_BUILD_DIR' , meson . current_build_dir ( ) )
config_h . set_quoted ( 'PACKAGE_SYSCONF_DIR' , dir_sysconf )
config_h . set_quoted ( 'BINDIR' , dir_bin )
config_h . set10 ( 'EFL_HAVE_THREADS' , true )
2018-11-09 04:32:03 -08:00
config_h . set10 ( 'SLOPPY_SPEC' , true )
2018-08-12 06:26:29 -07:00
2018-11-07 07:57:37 -08:00
## have to get compiler again for this to work
code = '' ' #define _GNU_SOURCE 1
#include <unistd.h>
#include <stdio.h>
extern char * * environ ;
void func ( void ) { printf ( " % p \ n " , environ ) ; }
'' '
2018-11-16 08:32:01 -08:00
if cc . compiles ( code , args : '-lc' , name : 'environ check' ) == true
2018-11-07 07:57:37 -08:00
config_h . set10 ( 'HAVE_ENVIRON' , true )
endif
2018-11-07 10:01:48 -08:00
cpu_sse3 = false
cpu_neon = false
cpu_neon_intrinsics = false
2018-11-16 09:37:22 -08:00
native_arch_opt_c_args = [ ]
2018-11-11 01:15:14 -08:00
2018-11-16 09:37:22 -08:00
if host_machine . endian ( ) == 'big'
2018-11-11 01:15:14 -08:00
config_h . set10 ( 'WORDS_BIGENDIAN' , true )
endif
2018-11-16 07:49:53 -08:00
if get_option ( 'native-arch-optimization' )
2018-11-16 09:37:22 -08:00
if host_machine . cpu_family ( ) == 'x86' or host_machine . cpu_family ( ) == 'x86_64'
cpu_sse3 = true
2018-11-16 07:49:53 -08:00
config_h . set10 ( 'BUILD_MMX' , true )
config_h . set10 ( 'BUILD_SSE3' , true )
2018-11-16 09:37:22 -08:00
native_arch_opt_c_args = [ '-msse3' ]
message ( 'x86 build - MMX + SSE3 enabled' )
elif host_machine . cpu_family ( ) == 'arm'
2018-11-16 07:49:53 -08:00
cpu_neon = true
config_h . set10 ( 'BUILD_NEON' , true )
2018-11-16 09:37:22 -08:00
add_global_arguments ( '-mfpu=neon' , language : 'c' )
2018-11-16 07:49:53 -08:00
add_global_arguments ( '-ftree-vectorize' , language : 'c' )
2018-11-16 09:37:22 -08:00
message ( 'ARM build - NEON enabled' )
elif host_machine . cpu_family ( ) == 'aarch64'
2018-11-16 07:49:53 -08:00
cpu_neon = true
cpu_neon_intrinsics = true
2018-11-16 09:37:22 -08:00
config_h . set10 ( 'BUILD_NEON' , true )
config_h . set10 ( 'BUILD_NEON_INTRINSICS' , true )
add_global_arguments ( '-ftree-vectorize' , language : 'c' )
native_arch_opt_c_args = [ '-ftree-vectorize' ]
2018-11-16 07:49:53 -08:00
message ( 'ARM64 build - NEON + intrinsics enabled' )
2018-11-16 09:37:22 -08:00
elif host_machine . cpu_family ( ) == 'ppc' or host_machine . cpu_family ( ) == 'ppc64'
2018-11-16 07:49:53 -08:00
config_h . set10 ( 'BUILD_ALTIVEC' , true )
2018-12-09 13:31:30 -08:00
add_global_arguments ( '-ftree-vectorize' , language : 'c' )
2018-11-16 09:37:22 -08:00
add_global_arguments ( '-maltivec' , language : 'c' )
2018-11-16 07:49:53 -08:00
message ( 'PPC/POWER build - ALTIVEC enabled' )
2018-11-07 10:01:48 -08:00
endif
endif
2018-11-07 07:57:37 -08:00
2018-08-12 06:26:29 -07:00
config_dir = [ include_directories ( '.' ) ]
eolian_include_directories = [ ]
2018-10-04 09:29:56 -07:00
if sys_linux == true or sys_bsd == true
2018-08-12 06:26:29 -07:00
sys_lib_extension = 'so'
sys_exe_extension = ''
sys_mod_extension = 'so'
2018-10-04 09:29:56 -07:00
elif sys_windows == true
2018-08-12 06:26:29 -07:00
sys_lib_extension = 'dll'
sys_exe_extension = 'exe'
sys_mod_extension = 'dll'
2018-10-04 09:29:56 -07:00
elif sys_osx == true
2018-08-12 06:26:29 -07:00
sys_lib_extension = 'dylib'
sys_exe_extension = ''
2020-04-06 02:50:34 -07:00
sys_mod_extension = 'so'
2019-02-12 12:34:27 -08:00
config_h . set ( 'environ' , '(*_NSGetEnviron())' )
2018-08-12 06:26:29 -07:00
else
2018-11-16 09:37:22 -08:00
error ( 'System ' + host_machine . system ( ) + ' not known' )
2018-08-12 06:26:29 -07:00
endif
2019-12-03 10:50:38 -08:00
if host_os == 'freebsd' or host_os == 'dragonfly'
# This is necessary. We MUST use OpenSSL in base as bringing in
# from ports can cause major issues (2 copies of the same library).
crypto = declare_dependency ( link_args : [ '-lssl' , '-lcrypto' ] )
config_h . set ( 'HAVE_OPENSSL' , '1' )
elif ( get_option ( 'crypto' ) == 'gnutls' )
2018-08-12 06:26:29 -07:00
# gcrypt does not want to provide a pkg config file so we try the lib
crypto = [ dependency ( 'gnutls' ) , cc . find_library ( 'gcrypt' ) ]
config_h . set ( 'HAVE_GNUTLS' , '1' )
elif ( get_option ( 'crypto' ) == 'openssl' )
crypto = dependency ( 'openssl' )
config_h . set ( 'HAVE_OPENSSL' , '1' )
endif
2019-06-27 01:26:55 -07:00
if get_option ( 'crypto' ) != ''
config_h . set ( 'HAVE_CIPHER' , '1' )
config_h . set ( 'HAVE_SIGNATURE' , '1' )
endif
2018-08-12 06:26:29 -07:00
config_h . set_quoted ( 'SHARED_LIB_SUFFIX' , '.' + sys_lib_extension )
config_h . set_quoted ( 'MOD_SUFFIX' , '.' + sys_mod_extension )
2019-08-27 04:40:33 -07:00
if sys_exe_extension == ''
config_h . set_quoted ( 'EXE_SUFFIX' , '' )
else
config_h . set_quoted ( 'EXE_SUFFIX' , '.' + sys_exe_extension )
endif
2018-08-12 06:26:29 -07:00
2019-01-10 04:13:21 -08:00
if get_option ( 'tslib' ) == true
config_h . set ( 'HAVE_TSLIB' , '1' )
endif
2018-08-12 06:26:29 -07:00
subdir ( 'header_checks' )
subdir ( 'po' )
if get_option ( 'wl' ) == true
subdir ( join_paths ( 'src' , 'wayland_protocol' ) )
endif
ecore_evas_wayland_engine_include_dir = [ ]
2019-10-05 10:35:00 -07:00
evas_static_list = [ ]
2019-12-24 20:33:53 -08:00
luaold_interpreters = [
[ 'lua' , [ '>=5.1.0' , '<5.3.0' ] ] ,
[ 'lua51' , [ '>=5.1.0' , '<5.2.0' ] ] ,
[ 'lua-5.1' , [ '>=5.1.0' , '<5.2.0' ] ] ,
[ 'lua5.1' , [ '>=5.1.0' , '<5.2.0' ] ] ,
[ 'lua52' , [ '>=5.2.0' , '<5.3.0' ] ] ,
[ 'lua-5.2' , [ '>=5.2.0' , '<5.3.0' ] ] ,
[ 'lua5.2' , [ '>=5.2.0' , '<5.3.0' ] ] ,
]
lua_pc_name = ''
if get_option ( 'lua-interpreter' ) == 'lua'
2020-05-11 08:17:47 -07:00
config_h . set ( 'ENABLE_LUA_OLD' , '1' )
2019-12-24 20:33:53 -08:00
foreach l : luaold_interpreters
lua = dependency ( l [ 0 ] , version : l [ 1 ] , required : false )
lua_pc_name = l [ 0 ]
if lua . found ( ) == true
break
endif
endforeach
else
lua = dependency ( get_option ( 'lua-interpreter' ) )
lua_pc_name = 'luajit'
endif
if sys_osx == true and get_option ( 'lua-interpreter' ) == 'luajit'
# luajit on macro is broken, this means we need to generate our own dependency with our arguments, a library later still needs to link to luajit for the pagesize argument thingy
lua = declare_dependency (
include_directories : include_directories ( lua . get_pkgconfig_variable ( 'includedir' ) ) ,
link_args : [ '-L' + lua . get_pkgconfig_variable ( 'libdir' ) , '-l' + lua . get_pkgconfig_variable ( 'libname' ) ]
)
endif
2018-08-12 06:26:29 -07:00
subprojects = [
2020-05-07 10:05:54 -07:00
# name | option | mod | lib | bin | bench | tests | examples | true if build in efl-one | pkg-config options | name of static libs
2020-05-10 05:43:28 -07:00
[ 'evil' , [ ] , false , true , false , false , false , false , true , [ ] , [ ] ] ,
[ 'eina' , [ ] , false , true , true , true , true , true , true , [ ] , [ ] ] ,
2020-05-07 10:05:54 -07:00
[ 'eolian' , [ ] , false , true , true , false , true , false , false , [ 'eina' ] , [ ] ] ,
2020-05-10 05:43:28 -07:00
[ 'eo' , [ ] , false , true , false , true , true , false , true , [ 'eina' ] , [ ] ] ,
[ 'efl' , [ ] , false , true , false , false , true , false , true , [ 'eo' ] , [ ] ] ,
[ 'emile' , [ ] , false , true , false , false , true , true , true , [ 'eina' , 'efl' ] , [ 'lz4' , 'rg_etc' ] ] ,
[ 'eet' , [ ] , false , true , true , false , true , true , true , [ 'eina' , 'emile' , 'efl' ] , [ ] ] ,
[ 'ecore' , [ ] , false , true , false , false , false , false , true , [ 'eina' , 'eo' , 'efl' ] , [ 'buildsystem' ] ] ,
[ 'eldbus' , [ ] , false , true , true , false , true , true , true , [ 'eina' , 'eo' , 'efl' ] , [ ] ] ,
[ 'ecore' , [ ] , true , false , false , false , true , true , true , [ 'eina' , 'eo' , 'efl' ] , [ ] ] , #ecores modules depend on eldbus
[ 'ecore_audio' , [ 'audio' ] , false , true , false , false , false , false , true , [ 'eina' , 'eo' ] , [ ] ] ,
2020-05-07 10:05:54 -07:00
[ 'ecore_avahi' , [ 'avahi' ] , false , true , false , false , false , true , false , [ 'eina' , 'ecore' ] , [ ] ] ,
2020-05-10 05:43:28 -07:00
[ 'ecore_con' , [ ] , false , true , true , false , true , false , true , [ 'eina' , 'eo' , 'efl' , 'ecore' ] , [ 'http-parser' ] ] ,
[ 'ecore_file' , [ ] , false , true , false , false , false , false , true , [ 'eina' ] , [ ] ] ,
[ 'eeze' , [ 'eeze' ] , true , true , true , false , true , false , true , [ 'eina' , 'efl' ] , [ ] ] ,
[ 'ecore_input' , [ ] , false , true , false , false , false , false , true , [ 'eina' , 'eo' ] , [ ] ] ,
[ 'ecore_x' , [ 'x11' ] , false , true , false , false , false , false , true , [ 'eina' , 'efl' ] , [ ] ] ,
[ 'ecore_fb' , [ 'fb' ] , false , true , false , false , false , false , true , [ 'eina' ] , [ ] ] ,
[ 'ecore_wl2' , [ 'wl' ] , true , true , false , false , true , false , true , [ 'eina' ] , [ 'libdrm' ] ] ,
[ 'ecore_sdl' , [ 'sdl' ] , false , true , false , false , false , false , true , [ 'eina' ] , [ ] ] ,
[ 'ecore_win32' , [ ] , false , true , false , false , false , false , true , [ 'eina' ] , [ ] ] ,
[ 'ecore_ipc' , [ ] , false , true , false , false , false , false , true , [ 'eina' ] , [ ] ] ,
[ 'ecore_buffer' , [ 'buffer' ] , true , true , true , false , false , false , true , [ 'eina' ] , [ ] ] ,
[ 'ector' , [ ] , false , true , false , false , true , false , true , [ 'eina' , 'efl' ] , [ 'draw' , 'triangulator' , 'freetype' ] ] ,
[ 'elput' , [ 'drm' ] , false , true , false , false , true , false , true , [ 'eina' , 'eldbus' ] , [ ] ] ,
[ 'ecore_drm2' , [ 'drm' ] , false , true , false , false , false , false , true , [ 'ecore' ] , [ 'libdrm' ] ] ,
[ 'ecore_cocoa' , [ 'cocoa' ] , false , true , false , false , false , false , true , [ 'eina' ] , [ ] ] ,
[ 'evas' , [ ] , true , true , false , false , true , true , true , [ 'eina' , 'efl' , 'eo' ] , [ 'vg_common' , 'libunibreak' ] ] ,
[ 'efreet' , [ ] , false , true , false , false , true , false , true , [ 'eina' , 'efl' , 'eo' ] , [ ] ] ,
[ 'ecore_input_evas' , [ ] , false , true , false , false , false , false , true , [ 'eina' , 'evas' ] , [ ] ] ,
[ 'ecore_evas' , [ ] , true , true , true , false , false , false , true , [ 'evas' , 'ector' ] , [ ] ] ,
[ 'ecore_imf' , [ ] , true , true , false , false , false , false , true , [ 'eina' ] , [ ] ] ,
[ 'embryo' , [ ] , false , true , true , false , false , false , true , [ 'eina' , 'efl' , 'eo' ] , [ ] ] ,
[ 'eio' , [ ] , false , true , false , false , true , true , true , [ 'eina' , 'eet' ] , [ ] ] ,
[ 'efreet' , [ ] , false , false , true , false , false , false , true , [ 'eina' , 'efl' , 'eo' ] , [ ] ] ,
[ 'ecore_imf_evas' , [ ] , false , true , false , false , false , false , true , [ 'eina' , 'efl' , 'eo' ] , [ ] ] ,
[ 'ephysics' , [ 'physics' ] , false , true , false , false , false , false , true , [ 'eina' , 'efl' , 'eo' ] , [ ] ] ,
[ 'edje' , [ ] , false , true , true , false , true , true , true , [ 'evas' , 'eo' , 'efl' , lua_pc_name ] , [ ] ] ,
[ 'emotion' , [ ] , true , true , false , false , true , true , true , [ 'eina' , 'efl' , 'eo' ] , [ ] ] ,
[ 'ethumb' , [ ] , true , true , true , false , false , false , true , [ 'eina' , 'efl' , 'eo' ] , [ ] ] ,
[ 'ethumb_client' , [ ] , false , true , true , false , false , true , true , [ 'eina' , 'efl' , 'eo' , 'ethumb' ] , [ ] ] ,
[ 'elementary' , [ ] , true , true , true , true , true , true , true , [ 'eina' , 'efl' , 'eo' , 'eet' , 'evas' , 'ecore' , 'ecore-evas' , 'ecore-file' , 'ecore-input' , 'edje' , 'ethumb-client' , 'emotion' , 'ecore-imf' , 'ecore-con' , 'eldbus' , 'efreet' , 'efreet-mime' , 'efreet-trash' , 'eio' ] , [ 'atspi' ] ] ,
2020-05-28 02:56:33 -07:00
[ 'efl_canvas_wl' , [ 'wl' ] , false , true , true , false , false , false , true , [ 'eina' , 'efl' , 'eo' , 'evas' , 'ecore' ] , [ ] ] ,
2020-05-07 10:05:54 -07:00
[ 'elua' , [ 'elua' ] , false , true , true , false , true , false , false , [ 'eina' , 'luajit' ] , [ ] ] ,
[ 'ecore_wayland' , [ 'wl-deprecated' ] , false , true , false , false , false , false , false , [ 'eina' ] , [ ] ] ,
[ 'ecore_drm' , [ 'drm-deprecated' ] , false , true , false , false , false , false , false , [ 'eina' ] , [ ] ] ,
[ 'exactness' , [ ] , false , false , true , false , false , false , false , [ 'eina, evas, eet' ] , [ ] ] ,
2018-08-12 06:26:29 -07:00
]
# We generate Efl_Config.h and config.h later, they will be available here
config_dir + = include_directories ( '.' )
#we have to do that first, eina modules are required by eina
#the other modules require theire package
subdir ( join_paths ( local_module , 'eina' ) )
2019-09-09 06:15:00 -07:00
#List of dependency objects that might be disabled due to configurations
#If they are enabled, the object gets overwritten by the library file.
ecore_audio = declare_dependency ( )
2018-08-12 06:26:29 -07:00
test_dirs = [ ]
example_dirs = [ ]
2020-05-10 05:43:28 -07:00
efl_one_parts = [ ]
efl_one_deps = [ ]
efl_one_eo_deps = [ ]
efl_one_include_dirs = [ ]
2020-05-27 05:38:32 -07:00
efl_one_sub_dirs = [ ]
2018-08-12 06:26:29 -07:00
tmp_empty = declare_dependency ( )
foreach package : subprojects
package_name = package [ 0 ]
package_version_name = '-' . join ( package_name . split ( '_' ) ) + '-' + version_major
automatic_pkgfile = true
if package [ 1 ] . length ( ) == 0 or get_option ( package [ 1 ] [ 0 ] )
2019-04-19 11:39:31 -07:00
config_h . set ( 'HAVE_' + package_name . to_upper ( ) . underscorify ( ) , '1' )
2018-08-12 06:26:29 -07:00
dir_package_include = join_paths ( dir_include , package_version_name )
dir_package_modules = join_paths ( dir_lib , package_name , 'modules' )
#ensure that we really dont copy the eo file targets from a previous library
2018-10-19 06:47:44 -07:00
#Those are the variables that can be used to reflect the libraries speical handlings
# -> at the end is used to indicate where to find this variable outside of this for loop
#public eo and eot files - which probebly have to be used later for bindings
pub_eo_files = [ ] # -> package_name + '_eo_files'
pub_eo_types_files = [ ] # -> package_name + '_eot_files'
#All subdirs where eo files that are listed in the pub_* variables can be found
#For every element != '' a variable called package_name + '_' + subir + '_eot_files' and package_name + '_' + subir + '_eo_files' must exist.
package_eo_subdirs = [ '' ] # -> package_name + '_eo_subdirs'
#All subdirs that should be included in order to include every requried header
package_header_subdirs = [ ] # -> package_name + '_include_subdirs'
#eo file targets, this list of targets can be used to ensure the files are created before accessed
2018-08-12 06:26:29 -07:00
pub_eo_file_target = [ ]
2018-10-19 06:47:44 -07:00
#private eo files target - never use this :)
2018-08-12 06:26:29 -07:00
priv_eo_file_target = [ ]
2018-10-31 02:22:09 -07:00
#use this variable to store custom variables in that should be placed in the .pc file
package_pc_variables = [ ]
2018-08-12 06:26:29 -07:00
2020-05-07 10:05:54 -07:00
foreach static_lib : package [ 10 ]
2018-08-12 06:26:29 -07:00
if get_variable ( static_lib , tmp_empty ) == tmp_empty
subdir ( join_paths ( 'src' , 'static_libs' , static_lib ) )
endif
endforeach
2020-05-18 08:18:54 -07:00
#package_c_args definition for lib and module
package_c_args = [
'-DPACKAGE_DATA_DIR="' + join_paths ( dir_data , package_name ) + '"' ,
'-DNEED_RUN_IN_TREE=1' ,
'-DEFL_BUILD=1' ,
]
2018-08-12 06:26:29 -07:00
if ( package [ 3 ] )
2018-10-19 06:47:44 -07:00
subdir ( join_paths ( local_lib , package_name ) )
set_variable ( package_name + '_eo_files' , pub_eo_files )
set_variable ( package_name + '_eot_files' , pub_eo_types_files )
set_variable ( package_name + '_header_subdirs' , package_header_subdirs )
set_variable ( package_name + '_eo_subdirs' , package_eo_subdirs )
2020-05-10 05:43:28 -07:00
if ( package [ 8 ] and get_option ( 'efl-one' ) )
src = get_variable ( package_name + '_src' )
external_deps = get_variable ( package_name + '_ext_deps' )
efl_one_include_dirs + = [ include_directories ( '.' ) , include_directories ( join_paths ( local_lib , package_name ) ) ]
foreach subdirs : package_eo_subdirs
efl_one_include_dirs + = include_directories ( join_paths ( local_lib , package_name ) )
endforeach
tmp = static_library ( 'efl_one_part_' + package_name ,
src , pub_eo_file_target , priv_eo_file_target ,
include_directories : efl_one_include_dirs ,
dependencies : external_deps + efl_one_eo_deps ,
c_args : package_c_args ,
)
# dependency for all the .eo file targets
efl_one_eo_deps + = declare_dependency (
2020-05-27 09:20:11 -07:00
sources : pub_eo_file_target + priv_eo_file_target , #this here *needs* to be public and private, because our binaries and modules do depend on internal headers
2020-05-10 05:43:28 -07:00
)
efl_one_deps + = external_deps
efl_one_parts + = tmp
endif
2018-08-12 06:26:29 -07:00
endif
2020-05-07 10:05:54 -07:00
#special case for eolian, this is never efl-one, but will be required in the library
if ( package_name == 'eolian' )
package_c_args = [
'-DPACKAGE_DATA_DIR="' + join_paths ( dir_data , package_name ) + '"' ,
'-DNEED_RUN_IN_TREE=1' ,
]
if ( package [ 4 ] )
subdir ( join_paths ( local_bin , package_name ) )
endif
2018-08-12 06:26:29 -07:00
endif
if ( package [ 6 ] )
test_dirs + = [ package_name ]
endif
if ( package [ 7 ] )
example_dirs + = [ package_name ]
endif
2019-04-19 11:39:31 -07:00
set_variable ( 'build_' + package_name . underscorify ( ) , true )
2018-08-12 06:26:29 -07:00
# generate automatic pc files for libraries
if automatic_pkgfile == true and package [ 3 ]
tmp_lib = get_variable ( package_name + '_lib' )
tmp_deps = get_variable ( package_name + '_deps' )
tmp_pub_deps = get_variable ( package_name + '_pub_deps' )
2018-10-19 06:47:44 -07:00
tmp_package_subdirs = [ ]
foreach subdir : package_header_subdirs
tmp_package_subdirs + = join_paths ( package_version_name , subdir )
endforeach
2020-05-27 05:38:32 -07:00
if ( package [ 8 ] and get_option ( 'efl-one' ) )
efl_one_sub_dirs + = [ package_version_name ] + tmp_package_subdirs
endif
2018-08-12 06:26:29 -07:00
pkgconfig . generate ( tmp_lib ,
name : '-' . join ( package_name . split ( '_' ) ) ,
2018-10-19 06:47:44 -07:00
subdirs : [ package_version_name ] + tmp_package_subdirs ,
2018-11-17 03:19:41 -08:00
version : version_major + '.' + version_minor + '.' + version_micro ,
2018-08-12 06:26:29 -07:00
libraries : tmp_pub_deps ,
2020-05-07 10:05:54 -07:00
requires : package [ 9 ] ,
2018-10-31 02:22:09 -07:00
variables : package_pc_variables
2018-08-12 06:26:29 -07:00
)
2018-10-03 09:06:33 -07:00
if package_name == 'ethumb_client'
pkgconfig . generate ( tmp_lib ,
name : package_name ,
2018-10-19 06:47:44 -07:00
subdirs : [ package_version_name ] + tmp_package_subdirs ,
2018-11-17 03:19:41 -08:00
version : version_major + '.' + version_minor + '.' + version_micro ,
2018-10-03 09:06:33 -07:00
libraries : tmp_pub_deps ,
2020-05-07 10:05:54 -07:00
requires : package [ 9 ] ,
2018-10-03 09:06:33 -07:00
)
endif
2018-08-12 06:26:29 -07:00
endif
else
message ( package_name + ' disabled!' )
endif
2020-05-07 10:05:54 -07:00
endforeach
if ( get_option ( 'efl-one' ) )
#building efl-one
efl_one_lib = shared_library ( 'efl-one' ,
link_whole : efl_one_parts ,
install : true ,
version : meson . project_version ( ) ,
)
efl_one = declare_dependency (
link_with : efl_one_lib ,
include_directories : efl_one_include_dirs ,
dependencies : [ thread_dep , intl ] + efl_one_eo_deps ,
version : meson . project_version ( )
)
pkgconfig . generate (
name : 'efl-one' ,
2020-05-27 05:38:32 -07:00
subdirs : efl_one_sub_dirs ,
2020-05-07 10:05:54 -07:00
description : 'Configureation for efl in one big fat .so' ,
2020-05-27 04:09:36 -07:00
libraries : [ efl_one ] + eina_pc_deps , #eina is a special case here which drags in m dl & threads
2020-05-07 10:05:54 -07:00
)
2018-08-12 06:26:29 -07:00
2020-05-07 10:05:54 -07:00
#overwrite all the dependencies of subprojects with efl-one, in order to link the modules and binaries to the correct .so
foreach package : subprojects
package_name = package [ 0 ]
if package [ 1 ] . length ( ) == 0 or get_option ( package [ 1 ] [ 0 ] )
if ( package [ 3 ] )
if ( package [ 8 ] and get_option ( 'efl-one' ) )
set_variable ( package_name , efl_one )
endif
endif
endif
endforeach
endif
#delayed build of bin, modules, and benchmarks
foreach package : subprojects
package_name = package [ 0 ]
if package [ 1 ] . length ( ) == 0 or get_option ( package [ 1 ] [ 0 ] )
2020-05-10 05:43:28 -07:00
dir_package_include = join_paths ( dir_include , package_version_name )
dir_package_modules = join_paths ( dir_lib , package_name , 'modules' )
package_c_args = [
'-DPACKAGE_DATA_DIR="' + join_paths ( dir_data , package_name ) + '"' ,
'-DNEED_RUN_IN_TREE=1' ,
'-DEFL_BUILD=1' ,
]
2020-05-07 10:05:54 -07:00
if ( package [ 2 ] )
subdir ( join_paths ( local_module , package_name ) )
endif
2020-05-10 05:43:28 -07:00
package_c_args = [
'-DPACKAGE_DATA_DIR="' + join_paths ( dir_data , package_name ) + '"' ,
'-DNEED_RUN_IN_TREE=1' ,
]
2020-05-07 10:05:54 -07:00
if ( package [ 4 ] and package_name != 'eolian' )
subdir ( join_paths ( local_bin , package_name ) )
endif
if ( package [ 5 ] )
subdir ( join_paths ( local_benchmark , package_name ) )
endif
endif
2018-08-12 06:26:29 -07:00
endforeach
2019-02-13 04:42:55 -08:00
#build this later, as the debug services are depending on ecore
2019-06-04 12:11:20 -07:00
subdir ( join_paths ( 'src' , 'bin' , 'efl' ) )
2018-08-12 06:26:29 -07:00
2019-06-04 12:11:20 -07:00
subdir ( join_paths ( 'src' , 'generic' , 'evas' ) )
subdir ( 'cmakeconfig' )
2019-10-01 05:57:04 -07:00
subdir ( join_paths ( 'src' , 'bindings' ) )
2019-06-04 12:11:20 -07:00
subdir ( join_paths ( 'src' , 'edje_external' ) )
subdir ( join_paths ( 'data' ) )
2018-08-12 06:26:29 -07:00
if get_option ( 'build-tests' )
check = dependency ( 'check' )
subdir ( join_paths ( 'src' , 'tests' ) )
foreach test : test_dirs
2020-05-10 05:43:28 -07:00
package_c_args = [
'-DPACKAGE_DATA_DIR="' + join_paths ( dir_data , test ) + '"' ,
'-DNEED_RUN_IN_TREE=1' ,
]
subdir ( join_paths ( local_tests , test ) )
2018-08-12 06:26:29 -07:00
endforeach
endif
if get_option ( 'build-examples' )
foreach example : example_dirs
2020-05-10 05:43:28 -07:00
package_c_args = [
'-DPACKAGE_DATA_DIR="' + join_paths ( dir_data , example ) + '"' ,
'-DNEED_RUN_IN_TREE=1' ,
]
subdir ( join_paths ( local_examples , example ) )
2018-08-12 06:26:29 -07:00
endforeach
endif
subdir ( join_paths ( local_scripts ) )
meson . add_install_script ( 'meson/meson_modules.sh' , module_files )
foreach evas_loader_map_inst : evas_loader_map
evas_loader_original = evas_loader_map_inst [ 0 ]
evas_loader_link_types = evas_loader_map_inst [ 1 ]
meson . add_install_script ( 'meson/evas_loader_conf.sh' , evas_loader_original , evas_loader_link_types )
endforeach
meson: add docs
Summary:
this here brings one new top level target which is doc. It is not build
by default, and does rerun everything on every call.
ninja doc will create previews and run the doxygen command. After this
is done, a tarbal of the html & man will be created, latex is not added
for now, due to the unability to compile the resulting .tex files.
Nothing of the documentation is installed for now, if this would be
enabled, then every single ninja install would regenerate the whole
documentation again, which is quite a lot, and quite a pain (and
sometimes crashes)
While porting this over, i encountered a problem with *convert* the bug
report is linked in the comment.
fix T7781
Depends on D8690
Reviewers: zmike, segfaultxavi, cedric
Reviewed By: segfaultxavi
Subscribers: #reviewers, #committers
Tags: #efl
Maniphest Tasks: T7781
Differential Revision: https://phab.enlightenment.org/D8561
2019-04-30 03:15:33 -07:00
doxygen = find_program ( 'doxygen' , required : false )
2019-06-04 12:11:20 -07:00
if doxygen . found ( )
meson: add docs
Summary:
this here brings one new top level target which is doc. It is not build
by default, and does rerun everything on every call.
ninja doc will create previews and run the doxygen command. After this
is done, a tarbal of the html & man will be created, latex is not added
for now, due to the unability to compile the resulting .tex files.
Nothing of the documentation is installed for now, if this would be
enabled, then every single ninja install would regenerate the whole
documentation again, which is quite a lot, and quite a pain (and
sometimes crashes)
While porting this over, i encountered a problem with *convert* the bug
report is linked in the comment.
fix T7781
Depends on D8690
Reviewers: zmike, segfaultxavi, cedric
Reviewed By: segfaultxavi
Subscribers: #reviewers, #committers
Tags: #efl
Maniphest Tasks: T7781
Differential Revision: https://phab.enlightenment.org/D8561
2019-04-30 03:15:33 -07:00
subdir ( 'doc' )
endif
2018-08-12 06:26:29 -07:00
#
# Configure files
#
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_LEGACY_DEF' , '#define EFL_API_LEGACY_DEF "FIXME NOT IMPLEMENTED"' )
configure_file (
output : 'config.h' ,
configuration : config_h
)
configure_file (
input : join_paths ( 'src' , 'lib' , 'efl' , 'Efl_Config.h.in' ) ,
output : 'Efl_Config.h' ,
install_dir : join_paths ( dir_include , 'efl-' + version_major ) ,
configuration : efl_config_h
)
configure_file (
input : 'elm_intro.h.in' ,
output : 'elm_intro.h' ,
configuration : config_h ,
install_dir : join_paths ( dir_include , 'elementary-' + version_major )
)
2018-10-31 07:46:21 -07:00
subdir ( join_paths ( 'systemd-services' ) )
subdir ( join_paths ( 'dbus-services' ) )
2018-11-02 05:28:28 -07:00
#output the three new efl-* .pc files
efl_20_pc_files = [
[ 'efl-ui' , [ 'elementary' ] ] ,
[ 'efl-core' , [ 'ecore' , 'efl' , 'emile' ] ] ,
[ 'efl-net' , [ 'ecore' , 'ecore-con' , 'emile' ] ] ,
]
foreach pc_file : efl_20_pc_files
name = pc_file [ 0 ]
libraries = pc_file [ 1 ]
pkgconfig . generate (
name : '-' . join ( name . split ( '_' ) ) ,
description : name + ' configutation file' ,
requires : libraries ,
)
endforeach