summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Davenport <qball@gmpclient.org>2017-05-28 10:17:12 +0200
committerDave Davenport <qball@gmpclient.org>2017-05-28 10:17:12 +0200
commitb82e1c7a78379ebafe95f444201df1beec78597a (patch)
tree8e7ec6cd06df288f57caa894d6e7cdf20cbbc44c
parent0fdb1068da5c0585a12667e960b9751355f6d76c (diff)
parent0afe4d237dd5ca92d08211fbf78975910cedbf0a (diff)
Merge remote-tracking branch 'origin/master' into barview
-rw-r--r--.gitmodules2
-rw-r--r--.travis.yml22
-rw-r--r--Makefile.am58
-rw-r--r--config/config.c1
-rw-r--r--doc/meson.build32
m---------libgwater0
-rw-r--r--libgwater-xcb-nolibtool.mk14
-rw-r--r--meson.build448
-rw-r--r--meson_options.txt5
-rw-r--r--source/theme.c1
m---------subprojects/libgwater0
-rwxr-xr-xtest/run_all_tests.sh44
-rwxr-xr-xtest/run_test.sh9
13 files changed, 563 insertions, 73 deletions
diff --git a/.gitmodules b/.gitmodules
index 2034529a..b0c4f823 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,3 @@
[submodule "libgwater"]
- path = libgwater
+ path = subprojects/libgwater
url = git://github.com/sardemff7/libgwater
diff --git a/.travis.yml b/.travis.yml
index 13ad9b0f..948d224b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -56,6 +56,10 @@ before_install:
# TODO: We install libxcb-ewmh-dev here, until it is whitelisted again in Travis
install:
- sudo apt-get install -y --force-yes libxkbcommon-dev libxkbcommon-x11-dev libxcb-ewmh-dev flex/trusty-backports libfl-dev/trusty-backports
+ - pip3 install meson
+ - wget https://github.com/ninja-build/ninja/releases/download/v1.7.2/ninja-linux.zip
+ - unzip ninja-linux.zip
+ - export PATH=$(pwd):$PATH
- git clone https://github.com/alobbs/doxy-coverage
- git clone --recursive https://github.com/Airblader/xcb-util-xrm.git
- cd xcb-util-xrm
@@ -72,22 +76,16 @@ install:
- cd -
before_script:
- - autoreconf -i
- - ./configure --enable-gcov --enable-drun
+ - meson build -Db_coverage=true
script:
- - make
- - make check
- - ./theme_parser_test
+ - ninja -C build
+ - ninja -C build test
- ulimit -c unlimited
- - make test-x
- - if [ -f core ]; then echo "bt" | gdb ./rofi core; fi
- - make test-x1
- - make coverage-cli
- - make distcheck
- - make doxy 2>&1 > doxygen.log
+ - ninja -C build test-x
+ - ninja -C build doc/html 2>&1 > doxygen.log
- test $(grep -c warning doxygen.log) -eq 0
- - ./doxy-coverage/doxy-coverage.py doc/html/xml/
+ - ./doxy-coverage/doxy-coverage.py build/doc/html/xml/
after_success:
- bash <(curl -s https://codecov.io/bash)
diff --git a/Makefile.am b/Makefile.am
index e76fc934..50afdddf 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,7 +1,7 @@
# Specify automake version.
AUTOMAKE_OPTIONS = 1.11.3
-ACLOCAL_AMFLAGS = -I libgwater ${ACLOCAL_FLAGS}
+ACLOCAL_AMFLAGS = -I subprojects/libgwater ${ACLOCAL_FLAGS}
AM_YFLAGS = -d
@@ -507,53 +507,9 @@ endif
.PHONY: test-x
test-x: $(bin_PROGRAMS)
- echo "Test 2"
- $(top_srcdir)/test/run_test.sh 200 $(top_srcdir)/test/run_errormsg_test.sh $(top_builddir)
- echo "Test 3"
- $(top_srcdir)/test/run_test.sh 201 $(top_srcdir)/test/run_switchdialog_test.sh $(top_builddir)
- echo "Test 4"
- $(top_srcdir)/test/run_test.sh 202 $(top_srcdir)/test/run_dmenu_test.sh $(top_builddir)
- echo "Test 5"
- $(top_srcdir)/test/run_test.sh 203 $(top_srcdir)/test/run_dmenu_custom_test.sh $(top_builddir)
- echo "Test 6"
- $(top_srcdir)/test/run_test.sh 204 $(top_srcdir)/test/run_run_test.sh $(top_builddir)
- echo "Test 7"
- $(top_srcdir)/test/run_test.sh 205 $(top_srcdir)/test/run_script_test.sh $(top_builddir)
- echo "Issue 256"
- $(top_srcdir)/test/run_test.sh 206 $(top_srcdir)/test/run_issue_256.sh $(top_builddir)
- echo "Issue 275"
- $(top_srcdir)/test/run_test.sh 207 $(top_srcdir)/test/run_issue_275.sh $(top_builddir)
- echo "Crash empty list"
- $(top_srcdir)/test/run_test.sh 208 $(top_srcdir)/test/run_dmenu_empty.sh $(top_builddir)
- echo "Test multiple select"
- $(top_srcdir)/test/run_test.sh 209 $(top_srcdir)/test/run_dmenu_issue_292.sh $(top_builddir)
- echo "Test screenshot"
- $(top_srcdir)/test/run_test.sh 210 $(top_srcdir)/test/run_screenshot_test.sh $(top_builddir)
- echo "Test xr dump"
- $(top_srcdir)/test/run_test.sh 212 $(top_srcdir)/test/xr_dump_test.sh $(top_builddir) $(top_srcdir)
- echo "Test drun"
- $(top_srcdir)/test/run_test.sh 213 $(top_srcdir)/test/run_drun_test.sh $(top_builddir)
- echo "Test combi"
- $(top_srcdir)/test/run_test.sh 214 $(top_srcdir)/test/run_combi_test.sh $(top_builddir)
- echo "Test dmenu regex"
- $(top_srcdir)/test/run_test.sh 215 $(top_srcdir)/test/run_regex_test.sh $(top_builddir)
- echo "Test dmenu glob"
- $(top_srcdir)/test/run_test.sh 216 $(top_srcdir)/test/run_glob_test.sh $(top_builddir)
- echo "Test issue 333"
- $(top_srcdir)/test/run_test.sh 217 $(top_srcdir)/test/run_issue333_test.sh $(top_builddir)
- echo "Test help output"
- $(top_srcdir)/test/run_test.sh 218 $(top_srcdir)/test/help_output_test.sh $(top_builddir) $(top_srcdir)
- echo "Test theme output"
- $(top_srcdir)/test/run_test.sh 219 $(top_srcdir)/test/default_theme_test.sh $(top_builddir) $(top_srcdir)
- echo "Test theme convert output"
- $(top_srcdir)/test/run_test.sh 220 $(top_srcdir)/test/convert_old_theme_test.sh $(top_builddir) $(top_srcdir)
-
-test-x1: $(bin_PROGRAMS)
- echo "Test dmenu-normal-window"
- $(top_srcdir)/test/run_test.sh 219 $(top_srcdir)/test/run_dmenu_normal_window_test.sh $(top_builddir)
- echo "Test window"
- $(top_srcdir)/test/run_test.sh 220 $(top_srcdir)/test/run_window_test.sh $(top_builddir) $(top_srcdir)
- echo "End tests"
+ MESON_SOURCE_ROOT="$(top_srcdir)" \
+ MESON_BUILD_ROOT="$(top_builddir)" \
+ $(top_srcdir)/test/run_all_tests.sh
.PHONY: indent
@@ -601,3 +557,9 @@ coverage-clean:
.PHONY: .FORCE
.FORCE:
+
+EXTRA_DIST += \
+ doc/meson.build \
+ subprojects/libgwater/xcb/meson.build \
+ meson_options.txt \
+ meson.build
diff --git a/config/config.c b/config/config.c
index 902aee45..0e72e894 100644
--- a/config/config.c
+++ b/config/config.c
@@ -25,6 +25,7 @@
*
*/
+#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <glib.h>
diff --git a/doc/meson.build b/doc/meson.build
new file mode 100644
index 00000000..9b5ee0e1
--- /dev/null
+++ b/doc/meson.build
@@ -0,0 +1,32 @@
+ronn = find_program('ronn', required: false)
+if ronn.found()
+ run_target('update-manpage',
+ command: [ ronn, files(
+ 'rofi-manpage.markdown',
+ 'rofi-theme-manpage.markdown',
+ )]
+ )
+endif
+
+doxy_conf = configuration_data()
+doxy_conf.set('PACKAGE', meson.project_name())
+doxy_conf.set('VERSION', meson.project_version())
+doxy_conf.set('abs_builddir', join_paths(meson.build_root(), meson.current_build_dir()))
+doxy_conf.set('abs_top_srcdir', meson.source_root())
+
+doxyfile = configure_file(
+ input: 'rofi.doxy.in',
+ output: 'rofi.doxy',
+ configuration: doxy_conf,
+ install: false,
+)
+
+doxygen = find_program('doxygen', required: false)
+if doxygen.found()
+ html_target = custom_target('doxy',
+ input: doxyfile,
+ output: 'html',
+ command: [doxygen, doxyfile],
+ install: false,
+ )
+endif
diff --git a/libgwater b/libgwater
deleted file mode 160000
-Subproject 173f2f5566636a1de559cc57f3154db70c3f2e9
diff --git a/libgwater-xcb-nolibtool.mk b/libgwater-xcb-nolibtool.mk
index e4e07eb7..d6403da9 100644
--- a/libgwater-xcb-nolibtool.mk
+++ b/libgwater-xcb-nolibtool.mk
@@ -1,20 +1,20 @@
noinst_LIBRARIES += \
- libgwater/libgwater-xcb.a
+ libgwater-xcb.a
-libgwater_libgwater_xcb_a_SOURCES = \
- libgwater/xcb/libgwater-xcb.c \
- libgwater/xcb/libgwater-xcb.h
+libgwater_xcb_a_SOURCES = \
+ subprojects/libgwater/xcb/libgwater-xcb.c \
+ subprojects/libgwater/xcb/libgwater-xcb.h
-libgwater_libgwater_xcb_a_CFLAGS = \
+libgwater_xcb_a_CFLAGS = \
$(AM_CFLAGS) \
$(GW_XCB_INTERNAL_CFLAGS)
GW_XCB_CFLAGS = \
- -I$(srcdir)/libgwater/xcb \
+ -I$(srcdir)/subprojects/libgwater/xcb \
$(GW_XCB_INTERNAL_CFLAGS)
GW_XCB_LIBS = \
- libgwater/libgwater-xcb.a \
+ libgwater-xcb.a \
$(GW_XCB_INTERNAL_LIBS)
diff --git a/meson.build b/meson.build
new file mode 100644
index 00000000..2059d960
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,448 @@
+project('rofi', 'c',
+ version: '1.3.1',
+ meson_version: '>=0.39.1',
+ license: [ 'MIT' ],
+ default_options: [
+ 'c_std=c99',
+ 'warning_level=3',
+ ],
+)
+
+c_compiler = meson.get_compiler('c')
+
+add_project_arguments(
+ '-fvisibility=hidden',
+ '-I@0@'.format(meson.build_root()),
+ '-I@0@'.format(join_paths(meson.source_root(), 'include')),
+ language: 'c'
+)
+
+flags = [
+ '-Wparentheses',
+ '-Winline',
+ '-Wunreachable-code',
+ '-Werror=missing-prototypes',
+]
+if get_option('enable-asan')
+ flags += [
+ '-fsanitize=address',
+ '-fno-omit-frame-pointer',
+ ]
+endif
+foreach f : flags
+ if c_compiler.has_argument(f)
+ add_project_arguments(f, language: 'c')
+ endif
+endforeach
+
+plugindir = join_paths(get_option('prefix'), get_option('libdir'), meson.project_name())
+themedir = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name(), 'themes')
+
+deps = [
+ dependency('glib-2.0', version: '>= 2.40'),
+ dependency('gio-unix-2.0'),
+ dependency('gmodule-2.0'),
+ dependency('cairo'),
+ dependency('pango'),
+ dependency('pangocairo'),
+ dependency('xkbcommon', version: '>= 0.5.0'),
+ c_compiler.find_library('m', required: false),
+]
+
+# XCB stuff
+deps += [
+ subproject('libgwater/xcb').get_variable('libgwater_xcb'),
+ dependency('xcb-aux'),
+ dependency('xcb-xkb'),
+ dependency('xkbcommon-x11'),
+ dependency('xcb-ewmh'),
+ dependency('xcb-icccm'),
+ dependency('xcb-xrm'),
+ dependency('xcb-randr'),
+ dependency('xcb-xinerama'),
+ dependency('cairo-xcb'),
+ dependency('libstartup-notification-1.0'),
+]
+
+check = dependency('check', version: '>= 0.11.0', required: get_option('enable-check'))
+
+header_conf = configuration_data()
+header_conf.set_quoted('PACKAGE_NAME', meson.project_name())
+header_conf.set_quoted('PACKAGE_VERSION', meson.project_version())
+header_conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
+header_conf.set_quoted('PACKAGE_BUGREPORT', 'https://github.com/DaveDavenport/rofi/')
+header_conf.set_quoted('PACKAGE_URL', 'https://reddit.com/r/qtools/')
+
+header_conf.set('THEME_CONVERTER', true)
+header_conf.set('_GNU_SOURCE', true)
+
+git = find_program('git', required: false)
+if git.found()
+ git_version = run_command(git, '--git-dir', join_paths(meson.source_root(), '.git'), 'describe', '--tags', '--always', '--dirty')
+ git_branch = run_command(git, '--git-dir', join_paths(meson.source_root(), '.git'), 'describe', '--tags', '--always', '--all')
+ if git_version.returncode() == 0 and git_branch.returncode() == 0
+ git_branch_parts = []
+ foreach b : git_branch.stdout().strip().split('/')
+ if b != 'heads'
+ git_branch_parts += b
+ endif
+ endforeach
+ header_conf.set_quoted('GIT_VERSION', '@0@ - @1@ (@2@)'.format(meson.project_version(), git_version.stdout().strip(), '/'.join(git_branch_parts)))
+ endif
+endif
+
+header_conf.set('ENABLE_DRUN', get_option('enable-drun'))
+header_conf.set('WINDOW_MODE', get_option('enable-window'))
+
+header_conf.set_quoted('MANPAGE_PATH', join_paths(get_option('prefix'), get_option('mandir')))
+header_conf.set_quoted('SYSCONFDIR', join_paths(get_option('prefix'), get_option('sysconfdir')))
+header_conf.set_quoted('PLUGIN_PATH', plugindir)
+header_conf.set_quoted('THEME_DIR', themedir)
+
+config_h = configure_file(output: 'config.h', configuration: header_conf)
+
+
+install_headers([
+ 'include/mode.h',
+ 'include/mode-private.h',
+ 'include/helper.h',
+ ],
+ subdir: meson.project_name(),
+)
+install_data(
+ 'script/rofi-sensible-terminal',
+ 'script/rofi-theme-selector',
+ install_dir: join_paths(get_option('prefix'), get_option('bindir'))
+)
+
+flex = generator(find_program('flex'),
+ output: '@BASENAME@.c',
+ arguments: [ '-o', '@OUTPUT@', '@INPUT@' ]
+)
+bison = generator(find_program('bison'),
+ output: [ '@BASENAME@.c', '@BASENAME@.h' ],
+ arguments: [ '-y', '@INPUT@', '--defines=@OUTPUT1@', '--output=@OUTPUT0@' ]
+)
+
+rofi_sources = files(
+ 'source/rofi.c',
+ 'source/view.c',
+ 'source/mode.c',
+ 'source/keyb.c',
+ 'config/config.c',
+ 'source/helper.c',
+ 'source/timings.c',
+ 'source/history.c',
+ 'source/theme.c',
+ 'source/css-colors.c',
+ 'source/widgets/box.c',
+ 'source/widgets/container.c',
+ 'source/widgets/widget.c',
+ 'source/widgets/textbox.c',
+ 'source/widgets/listview.c',
+ 'source/widgets/scrollbar.c',
+ 'source/xrmoptions.c',
+ 'source/x11-helper.c',
+ 'source/dialogs/run.c',
+ 'source/dialogs/ssh.c',
+ 'source/dialogs/drun.c',
+ 'source/dialogs/dmenu.c',
+ 'source/dialogs/combi.c',
+ 'source/dialogs/window.c',
+ 'source/dialogs/script.c',
+ 'source/dialogs/help-keys.c',
+ 'include/xcb.h',
+ 'include/xcb-internal.h',
+ 'include/rofi.h',
+ 'include/mode.h',
+ 'include/mode-private.h',
+ 'include/settings.h',
+ 'include/keyb.h',
+ 'include/view.h',
+ 'include/view-internal.h',
+ 'include/helper.h',
+ 'include/helper-theme.h',
+ 'include/timings.h',
+ 'include/history.h',
+ 'include/theme.h',
+ 'include/css-colors.h',
+ 'include/default-theme.h',
+ 'include/widgets/box.h',
+ 'include/widgets/container.h',
+ 'include/widgets/widget.h',
+ 'include/widgets/widget-internal.h',
+ 'include/widgets/textbox.h',
+ 'include/widgets/listview.h',
+ 'include/widgets/scrollbar.h',
+ 'include/xrmoptions.h',
+ 'include/x11-helper.h',
+ 'include/dialogs/ssh.h',
+ 'include/dialogs/run.h',
+ 'include/dialogs/drun.h',
+ 'include/dialogs/dmenu.h',
+ 'include/dialogs/combi.h',
+ 'include/dialogs/script.h',
+ 'include/dialogs/window.h',
+ 'include/dialogs/dialogs.h',
+ 'include/dialogs/help-keys.h',
+ 'include/xkb.h',
+ 'include/xkb-internal.h',
+)
+theme_lexer_sources = files('lexer/theme-lexer.l')
+theme_parser_sources = files('lexer/theme-parser.y')
+
+theme_lexer = flex.process(theme_lexer_sources)
+theme_parser = bison.process(theme_parser_sources)
+rofi = executable('rofi', rofi_sources + [
+ theme_lexer,
+ theme_parser,
+ ],
+ dependencies: deps,
+ install: true,
+)
+
+subdir('doc')
+install_man(
+ 'doc/rofi.1',
+ 'doc/rofi-sensible-terminal.1',
+)
+
+install_data(
+ 'themes/Adapta-Nokto.rasi',
+ 'themes/Arc.rasi',
+ 'themes/DarkBlue.rasi',
+ 'themes/Indego.rasi',
+ 'themes/Monokai.rasi',
+ 'themes/Paper.rasi',
+ 'themes/android_notification.rasi',
+ 'themes/arthur.rasi',
+ 'themes/blue.rasi',
+ 'themes/c64.rasi',
+ 'themes/glue_pro_blue.rasi',
+ 'themes/gruvbox-dark-hard.rasi',
+ 'themes/gruvbox-dark-soft.rasi',
+ 'themes/gruvbox-dark.rasi',
+ 'themes/gruvbox-light-hard.rasi',
+ 'themes/gruvbox-light-soft.rasi',
+ 'themes/gruvbox-light.rasi',
+ 'themes/lb.rasi',
+ 'themes/paper-float.rasi',
+ 'themes/purple.rasi',
+ 'themes/sidebar.rasi',
+ 'themes/solarized.rasi',
+ 'themes/solarized_alternate.rasi',
+ install_dir: themedir
+)
+
+
+
+test('history test', executable('history.test', [
+ 'test/history-test.c',
+ ],
+ objects: rofi.extract_objects([
+ 'source/history.c',
+ 'config/config.c',
+ ]),
+ dependencies: deps,
+))
+
+test('helper_pidfile test', executable('helper_pidfile.test', [
+ 'test/helper-pidfile.c',
+ ],
+ objects: rofi.extract_objects([
+ 'config/config.c',
+ 'source/helper.c',
+ 'source/xrmoptions.c',
+ 'source/x11-helper.c',
+ ]),
+ dependencies: deps,
+))
+
+test('helper_tokenize test', executable('helper_tokenize.test', [
+ 'test/helper-tokenize.c',
+ ],
+ objects: rofi.extract_objects([
+ 'config/config.c',
+ 'source/helper.c',
+ 'source/xrmoptions.c',
+ 'source/x11-helper.c',
+ ]),
+ dependencies: deps,
+))
+
+test('widget test', executable('widget.test', [
+ 'test/widget-test.c',
+ theme_parser,
+ theme_lexer,
+ ],
+ objects: rofi.extract_objects([
+ 'source/widgets/widget.c',
+ 'source/widgets/textbox.c',
+ 'source/theme.c',
+ 'source/css-colors.c',
+ 'source/helper.c',
+ 'source/x11-helper.c',
+ 'config/config.c',
+ ]),
+ dependencies: deps,
+))
+
+test('box test', executable('box.test', [
+ 'test/box-test.c',
+ theme_parser,
+ theme_lexer,
+ ],
+ objects: rofi.extract_objects([
+ 'source/widgets/widget.c',
+ 'source/widgets/box.c',
+ 'source/theme.c',
+ 'source/css-colors.c',
+ 'config/config.c',
+ ]),
+ dependencies: deps,
+))
+
+test('scrollbar test', executable('scrollbar.test', [
+ 'test/scrollbar-test.c',
+ theme_parser,
+ theme_lexer,
+ ],
+ objects: rofi.extract_objects([
+ 'source/widgets/widget.c',
+ 'source/widgets/scrollbar.c',
+ 'source/theme.c',
+ 'source/css-colors.c',
+ 'config/config.c',
+ ]),
+ dependencies: deps,
+))
+
+test('textbox test', executable('textbox.test', [
+ 'test/textbox-test.c',
+ theme_parser,
+ theme_lexer,
+ ],
+ objects: rofi.extract_objects([
+ 'source/widgets/widget.c',
+ 'source/widgets/textbox.c',
+ 'source/theme.c',
+ 'source/css-colors.c',
+ 'source/helper.c',
+ 'source/x11-helper.c',
+ 'config/config.c',
+ ]),
+ dependencies: deps,
+))
+
+test('helper test', executable('helper.test', [
+ 'test/helper-test.c',
+ ],
+ objects: rofi.extract_objects([
+ 'config/config.c',
+ 'source/helper.c',
+ 'source/xrmoptions.c',
+ 'source/x11-helper.c',
+ ]),
+ dependencies: deps,
+))
+
+test('helper_expand test', executable('helper_expand.test', [
+ 'test/helper-expand.c',
+ ],
+ objects: rofi.extract_objects([
+ 'config/config.c',
+ 'source/helper.c',
+ 'source/xrmoptions.c',
+ 'source/x11-helper.c',
+ ]),
+ dependencies: deps,
+))
+
+test('helper_config_cmdline_parser test', executable('helper_config_cmdline_parser.test', [
+ 'test/helper-config-cmdline-parser.c',
+ ],
+ objects: rofi.extract_objects([
+ 'config/config.c',
+ 'source/helper.c',
+ 'source/xrmoptions.c',
+ 'source/x11-helper.c',
+ ]),
+ dependencies: deps,
+))
+
+if check.found()
+ deps+= [ check ]
+
+ test('theme_parser test', executable('theme_parser.test', [
+ 'test/theme-parser-test.c',
+ theme_lexer,
+ theme_parser,
+ ],
+ objects: rofi.extract_objects([
+ 'config/config.c',
+ 'source/helper.c',
+ 'source/xrmoptions.c',
+ 'source/x11-helper.c',
+ 'source/theme.c',
+ 'source/css-colors.c',
+ ]),
+ dependencies: deps,
+ ))
+
+ test('mode test', executable('mode.test', [
+ 'test/mode-test.c',
+ ],
+ objects: rofi.extract_objects([
+ 'config/config.c',
+ 'source/dialogs/help-keys.c',
+ 'source/helper.c',
+ 'source/mode.c',
+ 'source/xrmoptions.c',
+ 'source/keyb.c',
+ ]),
+ dependencies: deps,
+ ))
+endif
+
+
+run_target('test-x', command: [ 'test/run_all_tests.sh' ])
+
+uncrustify = find_program('uncrustify', required: false)
+if uncrustify.found()
+ run_target('indent',
+ command: [
+ uncrustify,
+ '-c', join_paths(meson.source_root(), 'data', 'uncrustify.cfg'),
+ rofi_sources
+ ],
+ )
+endif
+
+rofi_sources += theme_lexer_sources
+rofi_sources += theme_parser_sources
+
+cppcheck = find_program('cppcheck', required: false)
+if cppcheck.found()
+ run_target('cppcheck',
+ command: [
+ cppcheck,
+ '--std=@0@'.format(get_option('c_std')),
+ '--platform=unix64',
+ '--enable=all',
+ '-Uerror_dialog',
+ '--inconclusive',
+ '-I@0@'.format(join_paths(meson.source_root(), 'include')),
+ rofi_sources
+ ],
+ )
+endif
+
+ohcount = find_program('ohcount', required: false)
+if ohcount.found()
+ run_target('ohcount',
+ command: [
+ ohcount,
+ rofi_sources
+ ],
+ )
+endif
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 00000000..d4b612ec
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,5 @@
+option('enable-drun', type: 'boolean', value: true, description: 'Desktop file mode')
+option('enable-window', type: 'boolean', value: true, description: 'Window switcher mode')
+option('enable-timings', type: 'boolean', value: true, description: 'Timimngs output')
+option('enable-asan', type: 'boolean', value: false, description: 'Address sanitizer')
+option('enable-check', type: 'boolean', value: true, description: 'Build and run libcheck-based tests')
diff --git a/source/theme.c b/source/theme.c
index 363691f1..cebe29e3 100644
--- a/source/theme.c
+++ b/source/theme.c
@@ -27,6 +27,7 @@
#define G_LOG_DOMAIN "Theme"
+#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
diff --git a/subprojects/libgwater b/subprojects/libgwater
new file mode 160000
+Subproject 60e5e71e09e573bd5c7839ce4a892747ea23252
diff --git a/test/run_all_tests.sh b/test/run_all_tests.sh
new file mode 100755
index 00000000..6b039c65
--- /dev/null
+++ b/test/run_all_tests.sh
@@ -0,0 +1,44 @@
+#!/usr/bin/env bash
+
+tests=(
+ run_errormsg_test
+ run_switchdialog_test
+ run_dmenu_test
+ run_dmenu_custom_test
+ run_run_test
+ run_script_test
+ run_issue_256
+ run_issue_275
+ run_dmenu_empty
+ run_dmenu_issue_292
+ run_screenshot_test
+ xr_dump_test
+ run_drun_test
+ run_combi_test
+ run_regex_test
+ run_glob_test
+ run_issue333_test
+ help_output_test
+ default_theme_test
+ convert_old_theme_test
+ run_dmenu_normal_window_test
+ run_window_test
+)
+
+cd ${MESON_BUILD_ROOT}
+mkdir -p test-x-logs
+rm -f core
+
+display=200
+for test in "${tests[@]}"; do
+ echo "Test ${test}"
+ ${MESON_SOURCE_ROOT}/test/run_test.sh ${display} ${MESON_SOURCE_ROOT}/test/${test}.sh ${MESON_BUILD_ROOT} ${MESON_SOURCE_ROOT}
+ ret=$?
+ if [[ -f core ]]; then
+ echo "bt" | gdb ./rofi core
+ exit ${ret}
+ elif [[ ${ret} != 0 ]]; then
+ exit ${ret}
+ fi
+ display=$(( ${display} + 1 ))
+done
diff --git a/test/run_test.sh b/test/run_test.sh
index ecee0ed0..a41de6a8 100755
--- a/test/run_test.sh
+++ b/test/run_test.sh
@@ -6,10 +6,10 @@ function create_fake_x ( )
{
export DISPLAY=":$1"
echo "Starting fake X: ${DISPLAY}"
- Xvfb +extension XINERAMA +xinerama -screen 0 1280x1024x24 -screen 1 800x600x24 ${DISPLAY} &
+ Xvfb +extension XINERAMA +xinerama -screen 0 1280x1024x24 -screen 1 800x600x24 ${DISPLAY} &>test-x-logs/xserver-:$1.log &
XPID=$!
sleep 1;
- timeout -k 30s 30s fluxbox &
+ timeout -k 30s 30s fluxbox &>test-x-logs/fluxbox-:$1.log &
FPID=$!
sleep 1
}
@@ -28,14 +28,13 @@ function destroy_fake_x ( )
fi
}
-if [ -n "$3" ]
+if [ -n "$3" ]
then
export PATH=$3:$PATH
fi
create_fake_x "$1"
-echo "$DISPLAY"
-$2 $4
+"$2" "$4"
RES=$?
destroy_fake_x