diff --git a/README b/README index 797576c8..b4d0486e 100644 --- a/README +++ b/README @@ -29,6 +29,13 @@ Once you have met requirements, compiling and installing is simple: make make install +To build using meson: + + meson build + cd build + ninja + ninja install + Note: to make terminology work with input methods in general you need: export ECORE_IMF_MODULE="xim" diff --git a/data/backgrounds/meson.build b/data/backgrounds/meson.build new file mode 100644 index 00000000..2ad48b75 --- /dev/null +++ b/data/backgrounds/meson.build @@ -0,0 +1,4 @@ +files = ['mystic.png', 'texture_background.png'] +install_data(files, + install_dir: join_paths(get_option('datadir'), + 'terminology', 'backgrounds')) diff --git a/data/desktop/meson.build b/data/desktop/meson.build new file mode 100644 index 00000000..1eb40192 --- /dev/null +++ b/data/desktop/meson.build @@ -0,0 +1,2 @@ +install_data('terminology.desktop', + install_dir: join_paths(get_option('datadir'), 'applications')) diff --git a/data/fonts/meson.build b/data/fonts/meson.build new file mode 100644 index 00000000..9ff380dc --- /dev/null +++ b/data/fonts/meson.build @@ -0,0 +1,27 @@ +files = ['10x20.pcf', + '4x6.pcf', + '5x7.pcf', + '5x8.pcf', + '6x10.pcf', + '6x12.pcf', + '6x13.pcf', + '6x9.pcf', + '7x13.pcf', + '7x14.pcf', + '8x13.pcf', + '9x15.pcf', + '9x18.pcf', + 'nexus.pcf', + 'terminus-12.pcf', + 'terminus-14-bold.pcf', + 'terminus-14.pcf', + 'terminus-16-bold.pcf', + 'terminus-16.pcf', + 'terminus-18-bold.pcf', + 'terminus-18.pcf', + 'terminus-20-bold.pcf', + 'terminus-20.pcf', + 'TERMINUS.txt', + 'XFONT.txt'] +install_data(files, install_dir: join_paths(get_option('datadir'), + meson.project_name(), 'fonts')) diff --git a/data/icons/meson.build b/data/icons/meson.build new file mode 100644 index 00000000..98afff7e --- /dev/null +++ b/data/icons/meson.build @@ -0,0 +1,2 @@ +install_data('terminology.png', + install_dir: join_paths(get_option('datadir'), 'icons')) diff --git a/data/images/meson.build b/data/images/meson.build new file mode 100644 index 00000000..6af298f3 --- /dev/null +++ b/data/images/meson.build @@ -0,0 +1,3 @@ +install_data('terminology.png', + install_dir: join_paths(get_option('datadir'), + meson.project_name(), 'images')) diff --git a/data/meson.build b/data/meson.build new file mode 100644 index 00000000..8eec325f --- /dev/null +++ b/data/meson.build @@ -0,0 +1,6 @@ +subdir('desktop') +subdir('icons') +subdir('images') +subdir('fonts') +subdir('themes') +subdir('backgrounds') diff --git a/data/themes/meson.build b/data/themes/meson.build new file mode 100644 index 00000000..8721f0fb --- /dev/null +++ b/data/themes/meson.build @@ -0,0 +1,35 @@ +command = [edje_cc, + '-id', join_paths(meson.source_root(), 'data', 'themes', 'images'), + '-fd', join_paths(meson.source_root(), 'data', 'fonts'), + '-sd', join_paths(meson.source_root(), 'data', 'themes', 'sounds'), + '@INPUT@', + '@OUTPUT@'] + +edje_to_compile = [ + ['default', ['default_colors.in.edc']], + ['mild', ['default_colors.in.edc']], + ['black', ['default_colors.in.edc', 'mild.edc']], + ['solarized', ['default_colors.in.edc', 'default.edc']], + ['solarized_light', ['default_colors.in.edc', 'default.edc']], + ['mustang',['default_colors.in.edc', 'mild.edc']], + ['base16_ocean_dark', ['default_colors.in.edc']], + ['smyck', ['default_colors.in.edc', 'mild.edc']] +] + +edje_install_dir = join_paths(get_option('datadir'), + meson.project_name(), 'themes') + +foreach to_compile: edje_to_compile + out = to_compile[0] + '.edj' + in = to_compile[0] + '.edc' + edj_targets += [custom_target(out, + install:true, + install_dir: edje_install_dir, + depend_files: files(to_compile[1]), + command: command, + input: in, + output: out)] + edj_files += [join_paths(edje_install_dir, out)] +endforeach + +subdir('nyanology') diff --git a/data/themes/nyanology/meson.build b/data/themes/nyanology/meson.build new file mode 100644 index 00000000..2cd5aa61 --- /dev/null +++ b/data/themes/nyanology/meson.build @@ -0,0 +1,19 @@ +command = [edje_cc, + '-id', join_paths(meson.source_root(), 'data', 'themes', + 'nyanology', 'images'), + '-id', join_paths(meson.source_root(), 'data', 'themes', 'images'), + '-fd', join_paths(meson.source_root(), 'data', 'fonts'), + '-sd', join_paths(meson.source_root(), 'data', 'themes', 'sounds'), + '@INPUT@', + '@OUTPUT@'] + +edj_targets += [custom_target('nyanology.edj', + install:true, + depend_files: files(['about.edc', + 'nyancursor.edc']), + install_dir: edje_install_dir, + command: command, + input:'nyanology.edc', + output:'nyanology.edj')] + +edj_files += [join_paths(edje_install_dir, 'nyanology.edj')] diff --git a/man/meson.build b/man/meson.build new file mode 100644 index 00000000..b5c74255 --- /dev/null +++ b/man/meson.build @@ -0,0 +1 @@ +install_man('terminology.1') diff --git a/meson.build b/meson.build new file mode 100644 index 00000000..2e46e221 --- /dev/null +++ b/meson.build @@ -0,0 +1,158 @@ +project('terminology', 'c', + version: '1.0.99', + default_options: ['c_std=gnu99'], + license: 'BSD') + +spec_data = configuration_data() +spec_data.set('PACKAGE', meson.project_name()) +spec_data.set('VERSION', meson.project_version()) + +cc = meson.get_compiler('c') + +prefix = get_option('prefix') +add_global_arguments('-DHAVE_CONFIG_H=1', language: 'c') +config_data = configuration_data() +config_data.set('EFL_BETA_API_SUPPORT', 1) +config_data.set('EFL_EO_API_SUPPORT', 1) +config_data.set_quoted('PACKAGE_VERSION', meson.project_version()) +config_data.set_quoted('PACKAGE', meson.project_name()) +config_data.set_quoted('PACKAGE_BUGREPORT', + 'enlightenment-devel@lists.sourceforge.net') +config_data.set_quoted('PACKAGE_NAME', meson.project_name()) +config_data.set_quoted('PACKAGE_TARNAME', meson.project_name()) +config_data.set_quoted('PACKAGE_URL', + 'https://www.enlightenment.org/about-terminology') +config_data.set_quoted('PACKAGE_BIN_DIR', + join_paths(prefix, get_option('bindir'))) +config_data.set_quoted('PACKAGE_DATA_DIR', + join_paths(prefix, get_option('datadir'), + meson.project_name())) +config_data.set_quoted('PACKAGE_LIB_DIR', + join_paths(prefix, get_option('libdir'))) +config_data.set_quoted('LOCALEDIR', join_paths(prefix, get_option('localedir'))) +config_data.set('_GNU_SOURCE', 1) +config_data.set('__EXTENSIONS__', 1) +config_data.set('_POSIX_PTHREAD_SEMANTICS', 1) +config_data.set('_TANDEM_SOURCE', 1) +config_data.set('_ALL_SOURCE', 1) +config_data.set('_POSIX_SOURCE', 1) +config_data.set('_POSIX_1_SOURCE', 1) + +efl_version = '1.8.0' +efl_deps = ['edje', + 'elementary', + 'eina', + 'eet', + 'evas', + 'ecore', + 'ecore-evas', + 'ecore-file', + 'emotion', + 'ecore-input', + 'ecore-imf', + 'ecore-imf-evas', + 'ecore-ipc', + 'efreet', + 'ecore-con', + 'ethumb_client'] +terminology_dependencies = [] +edje_cc_path = '' +edj_targets = [] +edj_files = [] +use_translations = false +intl_lib = cc.find_library('intl', required: false) +if intl_lib.found() + config_data.set('HAVE_GETTEXT', 1) + config_data.set('ENABLE_NLS', 1) + terminology_dependencies += [intl_lib] + use_translations = true +else + gettext_code = ''' + #include + int main(int argc, char *argv[]) { + (void)ngettext("", "", 0); + return 0; + } + ''' + if cc.links(gettext_code) + config_data.set('HAVE_GETTEXT', 1) + config_data.set('ENABLE_NLS', 1) + use_translations = true + endif +endif + +foreach efl_dep: efl_deps + dep = dependency(efl_dep, version: '>=' + efl_version) + terminology_dependencies += [dep] + if efl_dep == 'edje' + edje_cc_path = dep.get_pkgconfig_variable('prefix') + '/bin/edje_cc' + endif +endforeach + +if cc.has_function('mkstemps') + config_data.set('HAVE_MKSTEMPS', 1) +endif + +url_head_code = '''#include +int main(int argc, char *argv[]) { ecore_con_url_head(NULL); return 0; } +''' + +elementary_teamwork_code = '''#include +int main(int argc, char *argv[]) { elm_win_teamwork_uri_show(NULL); return 0; } +''' + +found = 'Not found' + +if cc.links(url_head_code, dependencies: terminology_dependencies) + config_data.set('HAVE_ECORE_CON_URL_HEAD', 1) + found = 'Found' +endif + +message('Checking for ecore_con_url_head: ' + found) + +if cc.links(elementary_teamwork_code, dependencies: terminology_dependencies) + config_dat.set('HAVE_ELM_WIN_TEAMWORK', 1) + found = 'Found' +else + found = 'Not Found' +endif + +message('Checking for elm_win_teamwork_uri_show: ' + found) + +edje_cc = get_option('edje-cc') + +if edje_cc == '' + edje_cc = edje_cc_path +endif + +fuzzing = get_option('fuzzing') + +if fuzzing + config_data.set('ENABLE_FUZZING', 1) + message('Fuzzing is enabled') +else + message('Fuzzing is disbled') +endif + +message('edje_cc set to:' + edje_cc) + +configure_file(output: 'terminology_config.h', + configuration: config_data) + +configure_file(input: 'terminology.spec.in', + output: 'terminology.spec', + configuration: spec_data) + +configure_file(input: join_paths('pkgbuild', 'PKGBUILD.in'), + output: 'PKGBUILD', + configuration: spec_data) + +config_dir = include_directories('.') +subdir('data') +subdir('man') +if use_translations + subdir('po') +endif +subdir('src/bin') + +meson.add_install_script('meson_install_themes.sh', edj_files) diff --git a/meson_install_themes.sh b/meson_install_themes.sh new file mode 100755 index 00000000..7bc6905d --- /dev/null +++ b/meson_install_themes.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +for x in "$@" ; do + chmod 644 "$MESON_INSTALL_DESTDIR_PREFIX/$x" +done diff --git a/meson_options.txt b/meson_options.txt new file mode 100644 index 00000000..6b6b04a0 --- /dev/null +++ b/meson_options.txt @@ -0,0 +1,7 @@ +option('edje-cc', + type: 'string', + description: 'A path to a edje_cc. Defaults to system\'s edje_cc') +option('fuzzing', + type: 'boolean', + value: false, + description: 'Enable fuzzing on terminology. Binaries are not suited for production.') diff --git a/po/meson.build b/po/meson.build new file mode 100644 index 00000000..6cb74692 --- /dev/null +++ b/po/meson.build @@ -0,0 +1,29 @@ +i18n = import('i18n') +i18n.gettext('terminology', + languages: [ + 'ca', + 'de', + 'el', + 'eo', + 'es', + 'fi', + 'fr', + 'hi', + 'it', + 'ko', + 'ms', + 'sl', + 'sr', + 'tr', + 'vi' + ], + args: [ + '--keyword=_', + '--keyword=d_:1', + '--keyword=P_:1,2', + '--keyword=dP_:1,2', + '--keyword=N_', + '--keyword=NP_:1,2', + '--from-code=UTF-8', + '--foreign-user' + ]) diff --git a/src/bin/meson.build b/src/bin/meson.build new file mode 100644 index 00000000..3d20fd5d --- /dev/null +++ b/src/bin/meson.build @@ -0,0 +1,104 @@ +terminology_sources = ['private.h', + 'about.c', 'about.h', + 'col.c', 'col.h', + 'config.c', 'config.h', + 'controls.c', 'controls.h', + 'ipc.c', 'ipc.h', + 'keyin.c', 'keyin.h', + 'main.c', 'main.h', + 'media.c', 'media.h', + 'options.c', 'options.h', + 'options_font.c', 'options_font.h', + 'options_theme.c', 'options_theme.h', + 'options_themepv.c', 'options_themepv.h', + 'options_wallpaper.c', 'options_wallpaper.h', + 'options_colors.c', 'options_colors.h', + 'options_behavior.c', 'options_behavior.h', + 'options_keys.c', 'options_keys.h', + 'options_helpers.c', 'options_helpers.h', + 'options_video.c', 'options_video.h', + 'options_elm.c', 'options_elm.h', + 'sel.c', 'sel.h', + 'miniview.c', 'miniview.h', + 'termio.c', 'termio.h', + 'termcmd.c', 'termcmd.h', + 'term_container.h', + 'termiolink.c', 'termiolink.h', + 'termpty.c', 'termpty.h', + 'termptydbl.c', 'termptydbl.h', + 'termptyesc.c', 'termptyesc.h', + 'termptyops.c', 'termptyops.h', + 'termptygfx.c', 'termptygfx.h', + 'termptyext.c', 'termptyext.h', + 'termptysave.c', 'termptysave.h', + 'lz4/lz4.c', 'lz4/lz4.h', + 'md5/md5.c', 'md5/md5.h', + 'utf8.c', 'utf8.h', + 'win.c', 'win.h', + 'utils.c', 'utils.h', + 'extns.c', 'extns.h', + 'gravatar.c', 'gravatar.h', + 'tty_keys.h', + 'sb.c', 'sb.h'] + +tybg_sources = ['tycommon.c', 'tycommon.h', 'tybg.c'] +tyalpha_sources = ['tycommon.c', 'tycommon.h', 'tyalpha.c'] +typop_sources = ['tycommon.c', 'tycommon.h', 'typop.c'] +tyq_sources = ['tycommon.c', 'tycommon.h', 'tyq.c'] +tycat_sources = ['tycommon.c', 'tycommon.h', 'tycat.c', 'extns.c', 'extns.h'] +tyls_sources = ['extns.c', 'extns.h', 'tyls.c', 'tycommon.c', 'tycommon.h'] +tyfuzz_sources = ['termptyesc.c', 'termptyesc.h', + 'termptysave.c', 'termptysave.h', + 'termptyops.c', 'termptyops.h', + 'termptydbl.c', 'termptydbl.h', + 'termptyext.c', 'termptyext.h', + 'termptygfx.c', 'termptygfx.h', + 'termpty.c', 'termpty.h', + 'config.c', 'config.h', + 'col.c', 'col.h', + 'tyfuzz.c'] + +executable('terminology', + terminology_sources, + edj_targets, + install: true, + include_directories: config_dir, + dependencies: terminology_dependencies) +executable('tybg', + tybg_sources, + install: true, + include_directories: config_dir, + dependencies: terminology_dependencies) +executable('tyalpha', + tyalpha_sources, + install: true, + include_directories: config_dir, + dependencies: terminology_dependencies) +executable('typop', + typop_sources, + install: true, + include_directories: config_dir, + dependencies: terminology_dependencies) +executable('tyq', + tyq_sources, + install: true, + include_directories: config_dir, + dependencies: terminology_dependencies) +executable('tycat', + tycat_sources, + install: true, + include_directories: config_dir, + dependencies: terminology_dependencies) +executable('tyls', + tyls_sources, + install: true, + include_directories: config_dir, + dependencies: terminology_dependencies) + +if fuzzing + executable('tyfuzz', + tyfuzz_sources, + install: true, + include_directories: config_dir, + dependencies: terminology_dependencies) +endif