meson: redo evas building

Summary:
before recent times we had to support static and shared building based
on the options of the user, which forced us to complicate our build with
the evas_goal hack. the evas_goal hack more or less was the idea of
"faking" the evas build in the evas directory, finish all the .eo
generation there, then build the modules and make all the static files
ready. Then build everything in evas_goal.

Now, that we just build everything the same always, we can simply build
it in the evas way (removing the evas_goal hack FINALLY), as the same modules
are build statically and shared.
This also gives us the possibility to build the shared image loaders
*again* the the modules directory, which unbreaks peoples build scripts
who packaged loader files seperatly.

Reviewers: zmike, raster, cedric, stefan_schmidt

Reviewed By: zmike

Subscribers: #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D10548
This commit is contained in:
Marcel Hollerbach 2019-10-29 12:54:55 -04:00 committed by Mike Blumenkrantz
parent 795c37b2a4
commit 28f630ba41
13 changed files with 210 additions and 303 deletions

View File

@ -249,13 +249,6 @@ ecore_evas_wayland_engine_include_dir = []
evas_static_list = []
evas_lib = ['evas' ,[], false, true, false, false, true, true, ['eina', 'efl', 'eo'], ['vg_common', 'libunibreak']]
evas_img_modules = ['evas' ,[], true, false, false, false, false, false, ['eina', 'efl', 'eo'], ['vg_common', 'libunibreak']]
evas_engines = [join_paths('evas', 'engines'),[], true, false, false, false, false, false, [], []]
evas_goal = ['evas_goal' ,[], false, true, false, false, false, false, ['eina', 'efl', 'eo'], []]
evas_settings = [ evas_lib, evas_img_modules, evas_goal, evas_engines ]
subprojects = [
# name | option | mod | lib | bin | bench | tests | examples | pkg-config options | name of static libs
['evil' ,[] , false, true, false, false, false, false, [], []],
@ -284,7 +277,8 @@ subprojects = [
['ector' ,[] , false, true, false, false, true, false, ['eina', 'efl'], ['draw', 'triangulator', 'freetype']],
['elput' ,['drm'] , false, true, false, false, true, false, ['eina', 'eldbus'], []],
['ecore_drm2' ,['drm'] , false, true, false, false, false, false, ['ecore'], ['libdrm']],
['ecore_cocoa' ,['cocoa'] , false, true, false, false, false, false, ['eina'], []]] + evas_settings +[
['ecore_cocoa' ,['cocoa'] , false, true, false, false, false, false, ['eina'], []],
['evas' ,[] , true, true, false, false, true, true, ['eina', 'efl', 'eo'], ['vg_common', 'libunibreak']],
['ecore_input_evas' ,[] , false, true, false, false, false, false, ['eina', 'evas'], []],
['ecore_evas' ,[] , true, true, true, false, false, false, ['evas', 'ector'], []],
['ecore_imf' ,[] , true, true, false, false, false, false, ['eina'], []],

View File

@ -599,27 +599,12 @@ evas_module_find_type(Evas_Module_Type type, const char *name)
{
if (run_in_tree == 1)
{
// special cases due to compleixty of meson build and
// putting these in odd places in the tree - do special
// name lookups for build in tree module lookups
if (type == EVAS_MODULE_TYPE_IMAGE_LOADER)
{
snprintf(buffer, sizeof(buffer),
PACKAGE_BUILD_DIR"/src/lib/evas_goal/libshared_loader_%s"MOD_SUFFIX, name);
}
else if (type == EVAS_MODULE_TYPE_IMAGE_SAVER)
{
snprintf(buffer, sizeof(buffer),
PACKAGE_BUILD_DIR"/src/lib/evas_goal/libshared_saver_%s"MOD_SUFFIX, name);
}
else
{
char subsystem[PATH_MAX];
char subsystem[PATH_MAX];
snprintf(subsystem, sizeof(subsystem), "evas/%s", type_str);
bs_mod_get(buffer, sizeof(buffer), subsystem, name);
}
if (!evas_file_path_exists(buffer)) buffer[0] = '\0';
snprintf(subsystem, sizeof(subsystem), "evas/%s", type_str);
bs_mod_get(buffer, sizeof(buffer), subsystem, name);
if (!evas_file_path_exists(buffer))
buffer[0] = '\0';
}
}
#endif

View File

@ -1,16 +1,53 @@
# README
#
# Evas build is a bit more complex.
# the final shared library is build in src/lib/evas_goal/meson.build.
#
# The content of lib/evas is build as static_library as
# are all the engines loaders and savers.
#
# All those stages are defining dependencies with theire source code
# as 'source :', later everything is build as libevas.so.
#
# For now loaders and savers are ALWAYS build statically.
#
png = dependency('libpng')
tiff = dependency('libtiff-4', required: get_option('evas-loaders-disabler').contains('tiff') == false)
giflib = cc.find_library('gif')
webp = dependency('libwebp', required: get_option('evas-loaders-disabler').contains('webp') == false)
evas_image_loaders_file = [
['bmp', 'shared', []],
['eet', 'static', [eet]],
['generic', 'shared', [rt]],
['gif', 'shared', [giflib]],
['ico', 'shared', []],
['jpeg', 'static', [jpeg]],
['pmaps', 'shared', []],
['png', 'static', [png]],
['psd', 'shared', []],
['tga', 'shared', []],
['tgv', 'shared', [rg_etc, lz4]],
['tiff', 'shared', [tiff]],
['wbmp', 'shared', []],
['webp', 'shared', [webp]],
['xpm', 'shared', []]
]
evas_image_savers_file = [
['eet', 'static', [eet]],
['jpeg', 'static', [jpeg]],
['png', 'static', [png]],
['tgv', 'shared', [rg_etc, lz4]],
['tiff', 'shared', [tiff]],
['webp', 'shared', [webp]],
]
json = dependency('rlottie', required: get_option('evas-loaders-disabler').contains('json') == false)
evas_vg_loaders_file = [
['eet', [eet]],
['json', [json]],
['svg', []],
]
evas_vg_savers_file = ['eet', 'svg']
evas_model_savers_file = ['eet', 'obj', 'ply']
evas_model_loaders_file = ['eet', 'md2', 'obj', 'ply']
rel_evas_modules = join_paths('..', '..', '..', 'modules', 'evas', 'engines', 'software_generic')
evas_deps = [eo, eet, eina, efl, emile, ector, ecore, buildsystem, intl]
@ -168,13 +205,8 @@ if get_option('opengl') != 'none'
endif
endif
evas_pre = declare_dependency(
include_directories: evas_include_directories + [vg_common_inc_dir] + [include_directories(join_paths('..', '..', 'modules', 'evas', 'engines', 'buffer'))],
sources : pub_eo_file_target + priv_eo_file_target,
dependencies: [eina, eo, ector, emile, evas_deps, m],
)
evas_link = [ ]
evas_pub_deps = [eina, ecore, ector, emile]
if cpu_sse3 == true or cpu_neon == true and cpu_neon_intrinsics == false
evas_opt = static_library('evas_opt',
@ -189,11 +221,106 @@ if cpu_sse3 == true or cpu_neon == true and cpu_neon_intrinsics == false
evas_link += [ evas_opt ]
endif
evas_pre_lib_dep = declare_dependency(
include_directories: evas_include_directories + [vg_common_inc_dir],
sources : [evas_src, pub_eo_file_target],
link_with: evas_link,
dependencies: [evas_deps, m, draw, valgrind, libunibreak]
foreach loader_inst : evas_image_loaders_file
loader = loader_inst[0]
loader_type = loader_inst[1]
loader_deps = loader_inst[2]
if get_option('evas-loaders-disabler').contains(loader) == false
if loader_type == 'static'
config_h.set('BUILD_LOADER_'+loader.to_upper(), '1')
file = join_paths(meson.source_root(), 'src', 'modules', 'evas', 'image_loaders', loader, 'evas_image_load_'+loader+'.c')
config_h.set('EVAS_STATIC_BUILD_'+loader.to_upper(), '1')
evas_static_list += [declare_dependency(
sources: file,
dependencies: loader_deps,
)]
endif
else
message('Image loader '+loader+' disabled')
endif
endforeach
foreach loader_inst : evas_image_savers_file
loader = loader_inst[0]
loader_type = loader_inst[1]
loader_deps = loader_inst[2]
if get_option('evas-loaders-disabler').contains(loader) == false
if loader_type == 'static'
config_h.set('BUILD_LOADER_'+loader.to_upper(), '1')
file = join_paths(meson.source_root(), 'src', 'modules', 'evas', 'image_savers', loader, 'evas_image_save_'+loader+'.c')
config_h.set('EVAS_STATIC_BUILD_'+loader.to_upper(), '1')
evas_static_list += [declare_dependency(
sources: file,
dependencies: loader_deps,
)]
endif
else
message('Image saver '+loader+' disabled')
endif
endforeach
foreach loader_inst : evas_vg_loaders_file
loader = loader_inst[0]
loader_deps = loader_inst[1]
if (get_option('evas-loaders-disabler').contains(loader) == false)
file = join_paths(meson.source_root(), 'src', 'modules', 'evas', 'vg_loaders', loader, 'evas_vg_load_'+loader+'.c')
evas_static_list += [declare_dependency(
sources: file,
dependencies: loader_deps,
)]
config_h.set('EVAS_STATIC_BUILD_VG_'+loader.to_upper(), '1')
endif
endforeach
foreach loader : evas_vg_savers_file
if (get_option('evas-loaders-disabler').contains(loader) == false)
file = join_paths(meson.source_root(), 'src', 'modules', 'evas', 'vg_savers', loader, 'evas_vg_save_'+loader+'.c')
evas_static_list += [declare_dependency(
sources: file,
dependencies: [eo, ector, emile, freetype, eet],
)]
config_h.set('EVAS_STATIC_BUILD_VG_'+loader.to_upper(), '1')
endif
endforeach
foreach loader : evas_model_loaders_file
file = join_paths(meson.source_root(), 'src', 'modules', 'evas', 'model_loaders', loader, 'evas_model_load_'+loader+'.c')
evas_static_list += [declare_dependency(
sources: file,
)]
endforeach
foreach loader : evas_model_savers_file
file = join_paths(meson.source_root(), 'src', 'modules', 'evas', 'model_savers', loader, 'evas_model_save_'+loader+'.c')
evas_static_list += [declare_dependency(
sources: file,
)]
endforeach
evas_lib = library('evas',
include_directories: evas_include_directories + [vg_common_inc_dir],
sources : [evas_src, pub_eo_file_target, priv_eo_file_target],
dependencies: [evas_deps, m, draw, valgrind, libunibreak, evas_static_list],
link_with: evas_link,
install: true,
c_args : '-DPACKAGE_DATA_DIR="'+join_paths(dir_data, 'evas')+'"',
version : meson.project_version()
)
evas = declare_dependency(
link_with : [evas_lib],
sources: pub_eo_file_target,
dependencies : [m] + evas_pub_deps + evas_deps,
include_directories: evas_include_directories + [vg_common_inc_dir] + [include_directories(join_paths('..', '..', 'modules', 'evas', 'engines', 'buffer'))],
)
evas_bin = declare_dependency(
link_with : [evas_lib],
dependencies : [eina, ecore, ector, emile, lua],
include_directories : evas_include_directories
)
if get_option('install-eo-files')
@ -206,7 +333,6 @@ install_headers(evas_header_src,
install_dir : dir_package_include,
)
automatic_pkgfile = false
pub_eo_files = []
package_eo_subdirs += ['canvas', 'gesture']
package_header_subdirs += ['canvas', 'gesture']

View File

@ -1,179 +0,0 @@
#fixed dependencies by efl
png = dependency('libpng')
tiff = dependency('libtiff-4', required: get_option('evas-loaders-disabler').contains('tiff') == false)
giflib = cc.find_library('gif')
webp = dependency('libwebp', required: get_option('evas-loaders-disabler').contains('webp') == false)
evas_loader_saver_mod_bmp = ['bmp', 'shared', []]
evas_loader_saver_mod_eet = ['eet', 'static', [eet]]
evas_loader_saver_mod_generic = ['generic', 'shared', [rt]]
evas_loader_saver_mod_gif = ['gif', 'shared', [giflib]]
evas_loader_saver_mod_ico = ['ico', 'shared', []]
evas_loader_saver_mod_jpeg = ['jpeg', 'static', [jpeg]]
evas_loader_saver_mod_pmaps = ['pmaps', 'shared', []]
evas_loader_saver_mod_png = ['png', 'static', [png]]
evas_loader_saver_mod_psd = ['psd', 'shared', []]
evas_loader_saver_mod_tga = ['tga', 'shared', []]
evas_loader_saver_mod_tgv = ['tgv', 'shared', [rg_etc, lz4]]
evas_loader_saver_mod_tiff = ['tiff', 'shared', [tiff]]
evas_loader_saver_mod_wbmp = ['wbmp', 'shared', []]
evas_loader_saver_mod_webp = ['webp', 'shared', [webp]]
evas_loader_saver_mod_xpm = ['xpm', 'shared', []]
evas_image_loaders_file = [
evas_loader_saver_mod_bmp,
evas_loader_saver_mod_eet,
evas_loader_saver_mod_generic,
evas_loader_saver_mod_gif,
evas_loader_saver_mod_ico,
evas_loader_saver_mod_jpeg,
evas_loader_saver_mod_pmaps,
evas_loader_saver_mod_png,
evas_loader_saver_mod_psd,
evas_loader_saver_mod_tga,
evas_loader_saver_mod_tgv,
evas_loader_saver_mod_tiff,
evas_loader_saver_mod_wbmp,
evas_loader_saver_mod_webp,
evas_loader_saver_mod_xpm
]
evas_image_savers_file = [
evas_loader_saver_mod_eet,
evas_loader_saver_mod_jpeg,
evas_loader_saver_mod_png,
evas_loader_saver_mod_tgv,
evas_loader_saver_mod_tiff,
evas_loader_saver_mod_webp
]
foreach loader_inst : evas_image_loaders_file
loader = loader_inst[0]
loader_type = loader_inst[1]
loader_deps = loader_inst[2]
if get_option('evas-loaders-disabler').contains(loader) == false
if loader_type == 'static'
config_h.set('BUILD_LOADER_'+loader.to_upper(), '1')
file = join_paths(meson.source_root(), 'src', 'modules', 'evas', 'image_loaders', loader, 'evas_image_load_'+loader+'.c')
config_h.set('EVAS_STATIC_BUILD_'+loader.to_upper(), '1')
tmp = static_library('image_loader_'+loader, file,
include_directories : config_dir,
dependencies : [evas_pre] + loader_deps
)
evas_static_list += [declare_dependency(
sources: file,
dependencies: loader_deps,
)]
endif
else
message('Image loader '+loader+' disabled')
endif
endforeach
foreach loader_inst : evas_image_savers_file
loader = loader_inst[0]
loader_type = loader_inst[1]
loader_deps = loader_inst[2]
if get_option('evas-loaders-disabler').contains(loader) == false
if loader_type == 'static'
config_h.set('BUILD_LOADER_'+loader.to_upper(), '1')
file = join_paths(meson.source_root(), 'src', 'modules', 'evas', 'image_savers', loader, 'evas_image_save_'+loader+'.c')
config_h.set('EVAS_STATIC_BUILD_'+loader.to_upper(), '1')
tmp = static_library('image_saver_'+loader, file,
include_directories : config_dir,
dependencies : [evas_pre] + loader_deps
)
evas_static_list += [declare_dependency(
sources: file,
dependencies: loader_deps,
)]
endif
else
message('Image saver '+loader+' disabled')
endif
endforeach
evas_lib = library('evas',
'empty.c',
#all the source code is coming from evas_pre_lib_dep
dependencies: [evas_pre_lib_dep, evas_static_list],
install: true,
c_args : '-DPACKAGE_DATA_DIR="'+join_paths(dir_data, 'evas')+'"',
version : meson.project_version()
)
evas_pub_deps = [eina, ecore, ector, emile, evas_pre]
evas = declare_dependency(
link_with : [evas_lib],
dependencies : evas_pub_deps,
include_directories : evas_include_directories
)
evas_bin = declare_dependency(
link_with : [evas_lib],
dependencies : [eina, ecore, ector, emile, lua],
include_directories : evas_include_directories
)
tmp_package_subdirs = []
automatic_pkgfile = false
foreach subdir : evas_header_subdirs
tmp_package_subdirs += join_paths('evas-'+version_major, subdir)
endforeach
pkgconfig.generate(evas_lib,
name : 'evas',
subdirs : ['evas-'+version_major] + tmp_package_subdirs,
version : version_major + '.' + version_minor + '.' + version_micro,
libraries : [eina, ecore, ector, emile, lua],
)
foreach loader_inst : evas_image_loaders_file
loader = loader_inst[0]
loader_type = loader_inst[1]
loader_deps = loader_inst[2]
if get_option('evas-loaders-disabler').contains(loader) == false
if loader_type == 'shared'
config_h.set('BUILD_LOADER_'+loader.to_upper(), '1')
file = join_paths(meson.source_root(), 'src', 'modules', 'evas', 'image_loaders', loader, 'evas_image_load_'+loader+'.c')
evas_package_modules = join_paths(dir_lib, 'evas', 'modules')
mod_install_dir = join_paths(evas_package_modules, 'image_loaders', loader, version_name)
shared_module('shared_loader_'+loader, file,
include_directories : config_dir,
dependencies : [eina, evas] + loader_deps,
install : true,
install_dir : mod_install_dir,
name_suffix : sys_mod_extension
)
module_files += join_paths(mod_install_dir, 'libshared_loader_'+loader + '.' + sys_mod_extension)
endif
else
message('Image loader '+loader+' disabled')
endif
endforeach
foreach loader_inst : evas_image_savers_file
loader = loader_inst[0]
loader_type = loader_inst[1]
loader_deps = loader_inst[2]
if get_option('evas-loaders-disabler').contains(loader) == false
if loader_type == 'shared'
config_h.set('BUILD_LOADER_'+loader.to_upper(), '1')
file = join_paths(meson.source_root(), 'src', 'modules', 'evas', 'image_savers', loader, 'evas_image_save_'+loader+'.c')
evas_package_modules = join_paths(dir_lib, 'evas', 'modules')
mod_install_dir = join_paths(evas_package_modules, 'image_savers', loader, version_name)
shared_module('shared_saver_'+loader, file,
include_directories : config_dir,
dependencies : [eina, evas] + loader_deps,
install : true,
install_dir : mod_install_dir,
name_suffix : sys_mod_extension
)
module_files += join_paths(mod_install_dir, 'libshared_saver_'+loader + '.' + sys_mod_extension)
endif
else
message('Image saver '+loader+' disabled')
endif
endforeach

View File

@ -0,0 +1,23 @@
foreach loader_inst : evas_image_loaders_file
loader = loader_inst[0]
loader_type = loader_inst[1]
loader_deps = loader_inst[2]
if get_option('evas-loaders-disabler').contains(loader) == false
if loader_type == 'shared'
config_h.set('BUILD_LOADER_'+loader.to_upper(), '1')
file = join_paths(meson.source_root(), 'src', 'modules', 'evas', 'image_loaders', loader, 'evas_image_load_'+loader+'.c')
evas_package_modules = join_paths(dir_lib, 'evas', 'modules')
mod_install_dir = join_paths(evas_package_modules, 'image_loaders', loader, version_name)
shared_module('shared_loader_'+loader, file,
include_directories : config_dir,
dependencies : [eina, evas] + loader_deps,
install : true,
install_dir : mod_install_dir,
name_suffix : sys_mod_extension
)
module_files += join_paths(mod_install_dir, 'libshared_loader_'+loader + '.' + sys_mod_extension)
endif
else
message('Image loader '+loader+' disabled')
endif
endforeach

View File

@ -0,0 +1,23 @@
foreach loader_inst : evas_image_savers_file
loader = loader_inst[0]
loader_type = loader_inst[1]
loader_deps = loader_inst[2]
if get_option('evas-loaders-disabler').contains(loader) == false
if loader_type == 'shared'
config_h.set('BUILD_LOADER_'+loader.to_upper(), '1')
file = join_paths(meson.source_root(), 'src', 'modules', 'evas', 'image_savers', loader, 'evas_image_save_'+loader+'.c')
evas_package_modules = join_paths(dir_lib, 'evas', 'modules')
mod_install_dir = join_paths(evas_package_modules, 'image_savers', loader, version_name)
shared_module('shared_saver_'+loader, file,
include_directories : config_dir,
dependencies : [eina, evas] + loader_deps,
install : true,
install_dir : mod_install_dir,
name_suffix : sys_mod_extension
)
module_files += join_paths(mod_install_dir, 'libshared_saver_'+loader + '.' + sys_mod_extension)
endif
else
message('Image saver '+loader+' disabled')
endif
endforeach

View File

@ -1,7 +1,9 @@
#fixed dependencies by efl
json = dependency('rlottie', required: get_option('evas-loaders-disabler').contains('json') == false)
subdir('image_savers')
subdir('image_loaders')
subdir('model_savers')
subdir('model_loaders')
subdir('vg_savers')
subdir('vg_loaders')
subdir('engines')

View File

@ -1,16 +1 @@
evas_model_loaders_file = ['eet', 'md2', 'obj', 'ply']
foreach loader : evas_model_loaders_file
file = join_paths(loader, 'evas_model_load_'+loader+'.c')
tmp = static_library('model_loader_'+loader, file,
include_directories : config_dir,
dependencies : [evas_pre]
)
evas_static_list += [declare_dependency(
include_directories: include_directories('.'),
sources: file,
dependencies: evas_pre,
)]
endforeach
#all the loaders here are build statically, the build instructions are in src/lib/evas/meson.build

View File

@ -1,16 +1 @@
evas_model_savers_file = ['eet', 'obj', 'ply']
foreach loader : evas_model_savers_file
file = join_paths(loader, 'evas_model_save_'+loader+'.c')
tmp = static_library('model_saver_'+loader, file,
include_directories : config_dir,
dependencies : evas_pre
)
evas_static_list += [declare_dependency(
include_directories: include_directories('.'),
sources: file,
dependencies: evas_pre,
)]
endforeach
#all the loaders here are build statically, the build instructions are in src/lib/evas/meson.build

View File

@ -1,26 +1 @@
evas_vg_loaders_file = [
['eet', [eet]],
['json', [json]],
['svg', []],
]
foreach loader_inst : evas_vg_loaders_file
loader = loader_inst[0]
loader_deps = loader_inst[1]
if (get_option('evas-loaders-disabler').contains(loader) == false)
file = join_paths(loader, 'evas_vg_load_'+loader+'.c')
static_library('vg_loader_'+loader, file,
include_directories : config_dir,
dependencies : [evas_pre] + loader_deps
)
evas_static_list += [declare_dependency(
sources: file,
dependencies: loader_deps,
)]
config_h.set('EVAS_STATIC_BUILD_VG_'+loader.to_upper(), '1')
endif
endforeach
#all the loaders here are build statically, the build instructions are in src/lib/evas/meson.build

View File

@ -1,17 +1 @@
evas_vg_savers_file = ['eet', 'svg']
foreach loader : evas_vg_savers_file
file = join_paths(loader, 'evas_vg_save_'+loader+'.c')
if (get_option('evas-loaders-disabler').contains(loader) == false)
tmp = static_library('vg_saver_'+loader, file,
include_directories : config_dir,
dependencies: [eo, ector, emile, freetype, eet, evas_pre],
)
evas_static_list += [declare_dependency(
sources: file,
dependencies: [eo, ector, emile, freetype, eet, evas_pre],
)]
config_h.set('EVAS_STATIC_BUILD_VG_'+loader.to_upper(), '1')
endif
endforeach
#all the loaders here are build statically, the build instructions are in src/lib/evas/meson.build

View File

@ -12,6 +12,10 @@ bs_mod_get(char *path, size_t maxlen, const char *subsystem, const char *mod_nam
// this causes the module to link to itself, instead of the library
if (!strcmp(subsystem, "ethumb"))
snprintf(path, maxlen, PACKAGE_BUILD_DIR"/src/modules/%s/%s/lib%s_el"MOD_SUFFIX, subsystem, mod_name, mod_name);
else if (!strcmp(subsystem, "evas/image_loaders"))
snprintf(path, maxlen, PACKAGE_BUILD_DIR"/src/modules/%s/libshared_loader_%s"MOD_SUFFIX, subsystem, mod_name);
else if (!strcmp(subsystem, "evas/image_savers"))
snprintf(path, maxlen, PACKAGE_BUILD_DIR"/src/modules/%s/libshared_saver_%s"MOD_SUFFIX, subsystem, mod_name);
else
snprintf(path, maxlen, PACKAGE_BUILD_DIR"/src/modules/%s/%s/lib%s"MOD_SUFFIX, subsystem, mod_name, mod_name);