Port to the meson build system.

Benefits are blazing fast builds and more user friendly configuration.
This is promised by meson and I would agree in the case of Geany.

Autotools is supported and still the default.

Meson builds might have rough edges but should generally work OK.
Time will tell if it superseeds autotools builds completely.
This commit is contained in:
Thomas Martitz 2022-02-05 00:12:28 +01:00
parent dcc0f2959b
commit 53a3eff360
10 changed files with 1604 additions and 0 deletions

View File

@ -102,7 +102,70 @@ jobs:
- name: ccache statistics
run: ccache --show-stats
if: ${{ env.DEBUG == '1' }}
linux-meson:
name: Linux Meson Build
runs-on: ubuntu-20.04
strategy:
fail-fast: false
env:
CC: ccache gcc
CXX: ccache g++
steps:
- uses: actions/checkout@v2
# create and use a timestamp for the cache key: GH Actions will never update a cache
# only use an existing cache item or create a new one. To use an existing cache *and*
# push back the the updated cache after build, we use a always new cache key (to force
# the creation of the cache item at the end) in combination with "restore-keys" as fallback
- name: Prepare ccache timestamp
id: ccache_cache_timestamp
run: echo "::set-output name=timestamp::$(date +%Y-%m-%d-%H-%M)"
- name: Configure ccache
uses: actions/cache@v2
with:
path: ${{ env.CCACHE_DIR }}
key: ${{ runner.os }}-${{ github.job }}-ccache-${{ steps.ccache_cache_timestamp.outputs.timestamp }}
restore-keys: ${{ runner.os }}-${{ github.job }}-ccache-
- name: Show environment
run: env | sort
if: ${{ env.DEBUG == '1' }}
- name: Install dependencies
run: |
sudo apt-get update -qq
sudo apt-get install --assume-yes --no-install-recommends \
ccache \
gettext autopoint \
libtool \
libgtk-3-dev \
doxygen \
python3-docutils \
python3-lxml \
rst2pdf \
meson
- name: Configuration
run: |
meson _build
- name: Build
run: |
ninja -C _build
- name: Run Tests
run: |
ninja -C _build test
# distcheck not applicable, meson exports the source tree per git-archive
- name: ccache statistics
run: ccache --show-stats
if: ${{ env.DEBUG == '1' }}
mingw:
name: Mingw Build

32
README
View File

@ -78,6 +78,38 @@ and open the online version instead when requested.
Installing from a Git clone
+++++++++++++++++++++++++++
Using the Meson build system
++++++++++++++++++++++++++++
N.B. Meson support is still incomplete and a work-in-progress.
Meson requires to chose a separate build directory. Either create
one, or let meson do it:
`meson build` or `mkdir build; cd build; meson ..`
Either command will configure the build system. The system is probed
in many ways and system-dependant build files are created. This includes
location of dependencies and compiler and linker flags required for them.
To build Geany, follow with a `meson compile -C build`
To install Geany, follow the build with a `sudo meson install -C build`.
By default, meson will install Geany to `/usr/local`. A different
prefix can be selected at the initial command or via reconfiguration:
`meson --prefix /opt build` or `meson configure --prefix /opt build`
Geany has some selectable features that may reduce the required
build and runtime dependencies. See meson_optionts.txt for a full list.
To turn a feature off, use `-D<feature>=false` when configuring the build,
for example: `meson configure -Dvte=false build`
Using Autotools
+++++++++++++++
Install Autotools (*autopoint*, *automake*, *autoconf* and *libtool*),
*gettext*, and the GLib development files **before** running any of the
following commands, as well as *rst2html* from Docutils (see above for

22
data/meson.build Normal file
View File

@ -0,0 +1,22 @@
install_subdir('templates', install_dir: cdata.get('GEANY_DATA_DIR'))
install_subdir('tags', install_dir: cdata.get('GEANY_DATA_DIR'))
install_subdir('colorschemes', install_dir: cdata.get('GEANY_DATA_DIR'))
install_subdir('filedefs', install_dir: cdata.get('GEANY_DATA_DIR'), exclude_files: 'filetypes.python.in')
configure_file(input: 'filedefs/filetypes.python.in',
output: 'filetypes.python',
install: true,
install_dir: cdata.get('GEANY_DATA_DIR') + '/filedefs',
configuration: cdata)
misc = [
'filetype_extensions.conf',
'snippets.conf',
'ui_toolbar.xml',
'geany.glade',
'geany-3.0.css',
'geany-3.20.css',
'geany.css',
]
install_data(sources: misc, install_dir: cdata.get('GEANY_DATA_DIR'))

138
doc/meson.build Normal file
View File

@ -0,0 +1,138 @@
configure_file(
input: 'geany.1.in',
output: 'geany.1',
install: true,
install_dir: join_paths(join_paths(prefix, get_option('mandir'), 'man1')),
configuration: cdata
)
if rst2pdf.found()
custom_target('pdf-manual',
input: ['geany.txt'],
output: ['geany-@0@.pdf'.format(cdata.get('VERSION'))],
command: [rst2pdf, '@INPUT@', '-o', '@OUTPUT@'],
build_by_default: true
)
endif
tarball = run_command('test', '-f', 'geany.html', check: false)
if tarball.returncode() == 0 or rst2html.found()
install_data(
'images/build_menu_commands_dialog.png',
'images/find_dialog.png',
'images/find_in_files_dialog.png',
'images/main_window.png',
'images/pref_dialog_edit_completions.png',
'images/pref_dialog_edit_display.png',
'images/pref_dialog_edit_features.png',
'images/pref_dialog_edit_indentation.png',
'images/pref_dialog_files.png',
'images/pref_dialog_gen_misc.png',
'images/pref_dialog_gen_startup.png',
'images/pref_dialog_interface_interface.png',
'images/pref_dialog_interface_notebook.png',
'images/pref_dialog_interface_toolbar.png',
'images/pref_dialog_keys.png',
'images/pref_dialog_printing.png',
'images/pref_dialog_templ.png',
'images/pref_dialog_tools.png',
'images/pref_dialog_various.png',
'images/pref_dialog_vte.png',
'images/replace_dialog.png',
install_dir: join_paths(cdata.get('GEANY_DOC_DIR'), 'html', 'images')
)
if tarball.returncode() == 0
message('Building from tarball, installing prebuild html')
geany_html = files('geany.html')
else
cmd = [rst2html, '-stg', '--stylesheet=@INPUT0@', '@INPUT1@', '@OUTPUT@']
geany_html = custom_target('geany.html',
input: ['geany.css', 'geany.txt'],
output: ['geany.html'],
build_by_default: true,
command: cmd
)
custom_target('hacking.html',
input: ['geany.css', '../HACKING'],
output: ['hacking.html'],
build_by_default: true,
command: cmd
)
endif
# geany.html is installed as index.html
custom_target('index.html',
input: [geany_html],
output: ['index.html'],
command: [ln, '-f', '@INPUT@', '@OUTPUT@'],
install: true,
install_dir: join_paths(cdata.get('GEANY_DOC_DIR'), 'html')
)
endif
install_data('geany.txt',
rename: 'manual.txt',
install_dir: cdata.get('GEANY_DOC_DIR')
)
# Normally, doxygen is required for the gtkdoc headers
# but it can be disabled if really needed (e.g. if plugins are also disabled),
# packagers must not disable this!
if doxygen.found()
doxcfg = configuration_data()
doxcfg.merge_from(cdata)
doxcfg.set('GIRONLY', '@internal')
doxcfg.set('HTML', 'YES')
doxcfg.set('XML', 'NO')
doxcfg.set('SORT', 'YES')
doxgicfg = doxcfg
doxgicfg.set('GIRONLY', '')
doxgicfg.set('HTML', 'NO')
doxgicfg.set('XML', 'YES')
doxgicfg.set('SORT', 'NO')
dep_doxygen = files([
'plugins.dox',
'pluginsignals.c',
'pluginsymbols.c',
'stash-example.c',
'stash-gui-example.c'
])
if python.found()
doxyfile_gi = configure_file(
input: 'Doxyfile.in',
output: 'Doxyfile-gi',
configuration: doxgicfg
)
doxygen_gi = custom_target('doxygen-gi',
input: doxyfile_gi,
# stamp file due https://github.com/mesonbuild/meson/issues/2320
output: 'doxygen-gi.stamp',
command: [sh, '-c', 'doxygen "$1" && touch "$2"', 'sh', '@INPUT@', '@OUTPUT@'],
depends: libgeany,
depend_files: dep_doxygen
)
gtkdoc_py = find_program('../scripts/gen-api-gtkdoc.py')
custom_target('gtkdoc-headers',
output: ['geany-gtkdoc.h', 'geany-sciwrappers-gtkdoc.h'],
command: [gtkdoc_py, join_paths(meson.current_build_dir(), 'xml'), '-d', '.', '-o', '@OUTPUT0@', '--sci-output', '@OUTPUT1@'],
depends: doxygen_gi,
install: true,
install_dir: join_paths(get_option('includedir'), 'geany', 'gtkdoc')
)
endif
doxyfile = configure_file(
input: 'Doxyfile.in',
output: 'Doxyfile',
configuration: doxcfg
)
custom_target('doxygen',
input: doxyfile,
# stamp file due https://github.com/mesonbuild/meson/issues/2320
output: 'doxygen.stamp',
command: [sh, '-c', 'doxygen "$1" && touch "$2"', 'sh', '@INPUT@', '@OUTPUT@'],
depends: libgeany,
depend_files: dep_doxygen,
build_by_default: true
)
endif

46
icons/meson.build Normal file
View File

@ -0,0 +1,46 @@
icon_dirs = [ '16x16', '24x24', '32x32', '48x48', 'scalable' ]
# in all resolutions
app_icon = 'geany'
# in all resolutions
action_icons = [
'geany-build',
'geany-close-all',
'geany-save-all'
]
icons_dir = join_paths(get_option('datadir'), 'icons', 'hicolor')
tango_dir = join_paths(get_option('datadir'), 'icons', 'Tango')
foreach dir : icon_dirs
ext = dir == 'scalable' ? '.svg' : '.png'
install_data(join_paths(dir, app_icon+ext), install_dir: join_paths(icons_dir, dir, 'apps'))
foreach icon : action_icons
install_data(join_paths(dir, icon+ext), install_dir: join_paths(icons_dir, dir, 'actions'))
endforeach
install_data(join_paths('tango', dir, 'geany-save-all'+ext), install_dir: join_paths(tango_dir, dir, 'actions'))
endforeach
# classviewer icons only in 16x16
class_icons = [
'classviewer-class.png',
'classviewer-macro.png',
'classviewer-member.png',
'classviewer-method.png',
'classviewer-namespace.png',
'classviewer-other.png',
'classviewer-struct.png',
'classviewer-var.png'
]
foreach icon : class_icons
install_data(join_paths('16x16', icon), install_dir: join_paths(icons_dir, '16x16', 'apps'))
endforeach
if meson.version().version_compare('>=0.57.0')
gnome.post_install(gtk_update_icon_cache: true)
else
warning('You may need to run `gtk-update-icon-cache` yourself after installing')
warning('E.g. gtk-update-icon-cache -f -t ' + join_paths(prefix, icons_dir))
endif

912
meson.build Normal file
View File

@ -0,0 +1,912 @@
project('geany', 'c', 'cpp',
meson_version: '>= 0.53',
version: '1.38',
default_options : ['c_std=c11', 'cpp_std=c++17'])
gnome = import('gnome')
pymod = import('python')
cc = meson.get_compiler('c')
cxx = meson.get_compiler('cpp')
prefix = get_option('prefix')
deps_in = [
['glib-2.0', '2.32'],
['gmodule-2.0', '2.32'],
['gtk+-3.0', '3.0']
]
deps = []
deps_for_pc = ''
foreach dep : deps_in
deps += [dependency(dep[0], version: '>= ' + dep[1])]
deps_for_pc += ' ' + dep[0] + ' >= ' + dep[1]
endforeach
glib = deps[0]
# detect libc
glibc = false
if cc.has_header('gnu/libc-version.h')
glibc = true
endif
gnu_source = glibc
cdata = configuration_data()
check_headers = [
'alloca.h',
'asprintf.h',
'direct.h',
'dirent.h',
'dlfcn.h',
'errno.h',
'fcntl.h',
'fnmatch.h',
'glob.h',
'inttypes.h',
'io.h',
'langinfo.h',
'libintl.h',
'limits.h',
'locale.h',
'memory.h',
'stdbool.h',
'sys/dir.h',
'sys/stat.h',
'sys/time.h',
'sys/types.h',
'unistd.h',
'wchar.h',
'wctype.h',
]
check_functions = [
['alloca', '#include <alloca.h>'],
['asprintf', '#include <stdio.h>'],
['chsize', '#include <io.h>'],
['fnmatch', '#include <fnmatch.h>'],
['ftruncate', '#include <unistd.h>'],
['isblank', '#include <ctype.h>'],
['mbrtowc', '#include <wchar.h>'],
['memcpy', '#include <string.h>'],
['mkstemp', '#include <stdlib.h>'],
['realpath', '#include <limits.h>\n#include <stdlib.h>'],
['regcomp', '#include <regex.h>'],
['socket', '#include <sys/socket.h>'],
# man page says strings.h but we include only string.h and it works
['strcasecmp', '#include <string.h>'],
['strncasecmp', '#include <string.h>'],
['stricmp', '#include <string.h>'],
['strnicmp', '#include <string.h>'],
['strerror', '#include <string.h>'],
['strstr', '#include <string.h>'],
['tempnam', '#include <stdio.h>'],
['truncate', '#include <unistd.h>'],
['wcrtomb', '#include <wchar.h>'],
['wcscoll', '#include <wchar.h>'],
]
foreach h : check_headers
define = 'HAVE_' + h.underscorify().to_upper()
if cc.has_header(h)
cdata.set(define, 1)
else
cdata.set(define, false)
endif
endforeach
foreach f : check_functions
define = 'HAVE_' + f.get(0).underscorify().to_upper()
ccprefix = '\n'.join([gnu_source ? '#define _GNU_SOURCE' : '', f.get(1)])
if cc.has_function(f.get(0), prefix : ccprefix)
cdata.set(define, 1)
else
cdata.set(define, false)
endif
endforeach
# From configure.ac:
# non-functions checks for u-ctags. Not that we really need those as we don't
# use u-ctags's main, but the corresponding macros have to be defined to
# something, so simply perform the actual checks.
#AC_CHECK_DECLS([__environ],,,[[#include <unistd.h>]])
#AC_CHECK_DECLS([_NSGetEnviron],,,[[#include <crt_externs.h>]])
# In meson we cannot as easily test for declarations so defining as 0 is easiest
cdata.set('HAVE_DECL___ENVIRON', 0)
cdata.set('HAVE_DECL__NSGETENVIRON', 0)
cdata.set_quoted('PACKAGE', 'geany')
cdata.set_quoted('PACKAGE_BUGREPORT', 'https://github.com/geany/geany/issues')
cdata.set_quoted('PACKAGE_NAME','Geany')
cdata.set_quoted('PACKAGE_STRING', 'Geany ' + meson.project_version())
cdata.set_quoted('PACKAGE_VERSION', meson.project_version())
cdata.set('GETTEXT_PACKAGE', 'PACKAGE')
cdata.set('VERSION', meson.project_version())
cdata.set('ENABLE_NLS', 1)
if (host_machine.system() == 'windows')
cdata.set('HAVE_VTE', false)
else
cdata.set('HAVE_VTE', get_option('vte'))
endif
cdata.set('HAVE_PLUGINS', get_option('plugins'))
cdata.set('HAVE_SOCKET', get_option('socket'))
if (host_machine.system() == 'windows')
cdata.set('GEANY_DATA_DIR', join_paths(prefix, 'data'))
cdata.set('GEANY_DOC_DIR', join_paths(prefix))
else
cdata.set('GEANY_DATA_DIR', join_paths(prefix, get_option('datadir'), 'geany'))
cdata.set('GEANY_DOC_DIR', join_paths(prefix, get_option('datadir'), 'doc', 'geany'))
endif
cdata.set('top_srcdir', meson.source_root())
cdata.set('top_builddir', meson.build_root())
# for geany.pc (adapted from GTK+)
pcconf = cdata
pcconf.set('DEPENDENCIES', deps_for_pc)
pcconf.set('prefix', get_option('prefix'))
pcconf.set('libdir', join_paths('${exec_prefix}', get_option('libdir')))
pcconf.set('includedir', join_paths('${prefix}', get_option('includedir')))
pcconf.set('datarootdir', join_paths('${prefix}', get_option('datadir')))
# actually constant, just match autconf
pcconf.set('exec_prefix', '${prefix}')
pcconf.set('datadir', '${datarootdir}')
pcconf.set('localedir', join_paths('${datarootdir}', 'locale'))
# needed programs
sh = find_program('sh')
cp = find_program('cp')
ln = find_program('ln')
doxygen = find_program('doxygen', required: get_option('api-docs'))
python = pymod.find_installation('python3', modules: doxygen.found() and get_option('gtkdoc') ? ['lxml'] : [])
# These two are truly optional
rst2html = find_program('rst2html', required: get_option('html-docs'))
rst2pdf = find_program('rst2pdf', required: get_option('pdf-docs'))
git = find_program('git', required: false)
if git.found()
ret = run_command(git, 'rev-parse', '--short', '--revs-only', 'HEAD', check: true)
cdata.set_quoted('REVISION', ret.stdout().strip())
else
cdata.set_quoted('REVISION', '-1')
endif
python_command = get_option('python-command')
if python_command == '' or python_command == 'auto'
if target_machine.system() == 'windows'
python_command = 'py'
else
python_command = 'python'
endif
endif
cdata.set('PYTHON_COMMAND', python_command)
configure_file(
output : 'config.h',
configuration : cdata
)
configure_file(
input: 'geany.pc.in',
install: true,
install_dir: join_paths(prefix, get_option('libdir'), 'pkgconfig'),
output: 'geany.pc',
configuration: pcconf
)
# CFLAGS for basic stuff that only depends on libc
basic_cflags = [ '-DHAVE_CONFIG_H=1', '-O2' ]
if (gnu_source)
basic_cflags += '-D_GNU_SOURCE'
endif
# CFLAGS common between Geany and bundled plugins
def_cflags = basic_cflags + [
'-DGTK',
# we're using lots of deprecated stuff with gtk3 (often because there is no proper alternative!)
'-Wno-deprecated-declarations',
'-DGDK_DISABLE_DEPRECATION_WARNINGS',
'-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_32',
'-DGEANY_PREFIX="@0@"'.format(get_option('prefix')),
'-DGEANY_DOCDIR="@0@"'.format(join_paths(prefix, get_option('datadir'), 'doc'))
]
foreach d : [ 'includedir', 'libdir', 'libexecdir', 'datadir', 'localedir' ]
def_cflags += '-DGEANY_@0@="@1@"'.format(d.underscorify().to_upper(), join_paths(prefix, get_option(d)))
endforeach
# CFLAGS for everything else, i.e. most of Geany
geany_cflags = def_cflags
have_gcc4_visibility = cc.has_argument('-fvisibility=hidden')
geany_cflags += '-DGEANY_PRIVATE'
if target_machine.system() == 'windows'
geany_cflags += '-DGEANY_EXPORT_SYMBOL=__declspec(dllexport)'
elif have_gcc4_visibility
geany_cflags += '-fvisibility=hidden'
geany_cflags += '-DGEANY_EXPORT_SYMBOL=__attribute__((visibility("default")))'
endif
geany_cflags += '-DGEANY_API_SYMBOL=GEANY_EXPORT_SYMBOL'
sci_cflags = geany_cflags
sci_cflags += [ '-std=c++17', '-Wno-non-virtual-dtor', '-DNDEBUG', '-DSCI_LEXER', '-DNO_CXX11_REGEX' ]
iregex = include_directories('ctags/gnu_regex')
ifnmatch = include_directories('ctags/fnmatch')
ictags = include_directories('ctags/main', 'ctags/parsers', 'ctags/dsl')
itagmanager = include_directories('src/tagmanager')
iscintilla = include_directories('scintilla/include', 'scintilla/lexilla/include')
igeany = include_directories('src')
install_headers(
'scintilla/include/Scintilla.h',
'scintilla/include/Scintilla.iface',
'scintilla/include/ScintillaWidget.h',
'scintilla/include/Sci_Position.h',
'scintilla/lexilla/include/SciLexer.h',
subdir: 'geany/scintilla'
)
lexilla = static_library('lexilla',
'scintilla/lexilla/include/Lexilla.h',
'scintilla/lexilla/include/SciLexer.h',
'scintilla/lexilla/lexers/LexAbaqus.cxx',
'scintilla/lexilla/lexers/LexAda.cxx',
'scintilla/lexilla/lexers/LexAsciidoc.cxx',
'scintilla/lexilla/lexers/LexAsm.cxx',
'scintilla/lexilla/lexers/LexBash.cxx',
'scintilla/lexilla/lexers/LexBasic.cxx',
'scintilla/lexilla/lexers/LexBatch.cxx',
'scintilla/lexilla/lexers/LexCaml.cxx',
'scintilla/lexilla/lexers/LexCmake.cxx',
'scintilla/lexilla/lexers/LexCOBOL.cxx',
'scintilla/lexilla/lexers/LexCoffeeScript.cxx',
'scintilla/lexilla/lexers/LexCPP.cxx',
'scintilla/lexilla/lexers/LexCSS.cxx',
'scintilla/lexilla/lexers/LexD.cxx',
'scintilla/lexilla/lexers/LexDiff.cxx',
'scintilla/lexilla/lexers/LexErlang.cxx',
'scintilla/lexilla/lexers/LexForth.cxx',
'scintilla/lexilla/lexers/LexGDScript.cxx',
'scintilla/lexilla/lexers/LexFortran.cxx',
'scintilla/lexilla/lexers/LexHaskell.cxx',
'scintilla/lexilla/lexers/LexHTML.cxx',
'scintilla/lexilla/lexers/LexJulia.cxx',
'scintilla/lexilla/lexers/LexLaTeX.cxx',
'scintilla/lexilla/lexers/LexLisp.cxx',
'scintilla/lexilla/lexers/LexLua.cxx',
'scintilla/lexilla/lexers/LexMake.cxx',
'scintilla/lexilla/lexers/LexMarkdown.cxx',
'scintilla/lexilla/lexers/LexMatlab.cxx',
'scintilla/lexilla/lexers/LexNsis.cxx',
'scintilla/lexilla/lexers/LexNull.cxx',
'scintilla/lexilla/lexers/LexPascal.cxx',
'scintilla/lexilla/lexers/LexPerl.cxx',
'scintilla/lexilla/lexers/LexPO.cxx',
'scintilla/lexilla/lexers/LexPowerShell.cxx',
'scintilla/lexilla/lexers/LexProps.cxx',
'scintilla/lexilla/lexers/LexPython.cxx',
'scintilla/lexilla/lexers/LexR.cxx',
'scintilla/lexilla/lexers/LexRuby.cxx',
'scintilla/lexilla/lexers/LexRust.cxx',
'scintilla/lexilla/lexers/LexSmalltalk.cxx',
'scintilla/lexilla/lexers/LexSQL.cxx',
'scintilla/lexilla/lexers/LexTCL.cxx',
'scintilla/lexilla/lexers/LexTxt2tags.cxx',
'scintilla/lexilla/lexers/LexVerilog.cxx',
'scintilla/lexilla/lexers/LexVHDL.cxx',
'scintilla/lexilla/lexers/LexYAML.cxx',
'scintilla/lexilla/lexlib/Accessor.cxx',
'scintilla/lexilla/lexlib/Accessor.h',
'scintilla/lexilla/lexlib/CatalogueModules.h',
'scintilla/lexilla/lexlib/CharacterCategory.cxx',
'scintilla/lexilla/lexlib/CharacterCategory.h',
'scintilla/lexilla/lexlib/CharacterSet.cxx',
'scintilla/lexilla/lexlib/CharacterSet.h',
'scintilla/lexilla/lexlib/DefaultLexer.cxx',
'scintilla/lexilla/lexlib/DefaultLexer.h',
'scintilla/lexilla/lexlib/LexAccessor.cxx',
'scintilla/lexilla/lexlib/LexAccessor.h',
'scintilla/lexilla/lexlib/LexerBase.cxx',
'scintilla/lexilla/lexlib/LexerBase.h',
'scintilla/lexilla/lexlib/LexerModule.cxx',
'scintilla/lexilla/lexlib/LexerModule.h',
'scintilla/lexilla/lexlib/LexerNoExceptions.cxx',
'scintilla/lexilla/lexlib/LexerNoExceptions.h',
'scintilla/lexilla/lexlib/LexerSimple.cxx',
'scintilla/lexilla/lexlib/LexerSimple.h',
'scintilla/lexilla/lexlib/OptionSet.h',
'scintilla/lexilla/lexlib/PropSetSimple.cxx',
'scintilla/lexilla/lexlib/PropSetSimple.h',
'scintilla/lexilla/lexlib/SparseState.h',
'scintilla/lexilla/lexlib/StringCopy.h',
'scintilla/lexilla/lexlib/StyleContext.cxx',
'scintilla/lexilla/lexlib/StyleContext.h',
'scintilla/lexilla/lexlib/SubStyles.h',
'scintilla/lexilla/lexlib/WordList.cxx',
'scintilla/lexilla/lexlib/WordList.h',
'scintilla/lexilla/src/Lexilla.cxx',
cpp_args: sci_cflags,
dependencies: deps,
include_directories: [
iscintilla,
include_directories('scintilla/lexilla/lexlib', 'scintilla/lexilla/include')
]
)
dep_lexilla = declare_dependency(
link_with: lexilla,
include_directories: include_directories('scintilla/lexilla/include')
)
scintilla = static_library('scintilla',
'scintilla/gtk/Converter.h',
'scintilla/gtk/PlatGTK.cxx',
'scintilla/gtk/ScintillaGTKAccessible.cxx',
'scintilla/gtk/ScintillaGTKAccessible.h',
'scintilla/gtk/ScintillaGTK.cxx',
'scintilla/gtk/ScintillaGTK.h',
'scintilla/gtk/scintilla-marshal.c',
'scintilla/gtk/scintilla-marshal.h',
'scintilla/include/ILexer.h',
'scintilla/include/ILoader.h',
'scintilla/include/ScintillaCall.h',
'scintilla/include/Scintilla.h',
'scintilla/include/ScintillaMessages.h',
'scintilla/include/ScintillaStructures.h',
'scintilla/include/ScintillaTypes.h',
'scintilla/include/ScintillaWidget.h',
'scintilla/include/Sci_Position.h',
'scintilla/src/AutoComplete.cxx',
'scintilla/src/AutoComplete.h',
'scintilla/src/CallTip.cxx',
'scintilla/src/CallTip.h',
'scintilla/src/CaseConvert.cxx',
'scintilla/src/CaseConvert.h',
'scintilla/src/CaseFolder.cxx',
'scintilla/src/CaseFolder.h',
'scintilla/src/CellBuffer.cxx',
'scintilla/src/CellBuffer.h',
'scintilla/src/CharacterCategoryMap.cxx',
'scintilla/src/CharacterCategoryMap.h',
'scintilla/src/CharacterType.cxx',
'scintilla/src/CharacterType.h',
'scintilla/src/CharClassify.cxx',
'scintilla/src/CharClassify.h',
'scintilla/src/ContractionState.cxx',
'scintilla/src/ContractionState.h',
'scintilla/src/DBCS.cxx',
'scintilla/src/DBCS.h',
'scintilla/src/Debugging.h',
'scintilla/src/Decoration.cxx',
'scintilla/src/Decoration.h',
'scintilla/src/Document.cxx',
'scintilla/src/Document.h',
'scintilla/src/EditModel.cxx',
'scintilla/src/EditModel.h',
'scintilla/src/Editor.cxx',
'scintilla/src/Editor.h',
'scintilla/src/EditView.cxx',
'scintilla/src/EditView.h',
'scintilla/src/ElapsedPeriod.h',
'scintilla/src/FontQuality.h',
'scintilla/src/Geometry.cxx',
'scintilla/src/Geometry.h',
'scintilla/src/Indicator.cxx',
'scintilla/src/Indicator.h',
'scintilla/src/KeyMap.cxx',
'scintilla/src/KeyMap.h',
'scintilla/src/LineMarker.cxx',
'scintilla/src/LineMarker.h',
'scintilla/src/MarginView.cxx',
'scintilla/src/MarginView.h',
'scintilla/src/Partitioning.h',
'scintilla/src/PerLine.cxx',
'scintilla/src/PerLine.h',
'scintilla/src/Platform.h',
'scintilla/src/PositionCache.cxx',
'scintilla/src/PositionCache.h',
'scintilla/src/Position.h',
'scintilla/src/RESearch.cxx',
'scintilla/src/RESearch.h',
'scintilla/src/RunStyles.cxx',
'scintilla/src/RunStyles.h',
'scintilla/src/ScintillaBase.cxx',
'scintilla/src/ScintillaBase.h',
'scintilla/src/Selection.cxx',
'scintilla/src/Selection.h',
'scintilla/src/SparseVector.h',
'scintilla/src/SplitVector.h',
'scintilla/src/Style.cxx',
'scintilla/src/Style.h',
'scintilla/src/UniConversion.cxx',
'scintilla/src/UniConversion.h',
'scintilla/src/UniqueString.cxx',
'scintilla/src/UniqueString.h',
'scintilla/src/ViewStyle.cxx',
'scintilla/src/ViewStyle.h',
'scintilla/src/XPM.cxx',
'scintilla/src/XPM.h',
cpp_args: sci_cflags,
dependencies: deps + [ dep_lexilla ],
include_directories: [
iscintilla,
include_directories('scintilla/include', 'scintilla/src')
]
)
dep_scintilla = declare_dependency(
link_with: scintilla,
include_directories: include_directories('scintilla/include')
)
if cdata.get('HAVE_FNMATCH') == 1
dep_fnmatch = dependency('', required: false)
else
# use fnmatch bundled with ctags
fnmatch = static_library('fnmatch',
'ctags/fnmatch/fnmatch.c',
'ctags/fnmatch/fnmatch.h',
include_directories: [ifnmatch],
c_args: basic_cflags
)
dep_fnmatch = declare_dependency(link_with: [fnmatch], include_directories: [ifnmatch])
endif
if cdata.get('HAVE_REGCOMP') == 1
dep_regex = dependency('', required: false)
else
# use regcomp bundled with ctags
regex = static_library('regex',
'ctags/gnu_regex/regex.c',
'ctags/gnu_regex/regex.h',
dependencies: [dep_fnmatch],
c_args: basic_cflags + [ '-D__USE_GNU' ]
)
dep_regex = declare_dependency(link_with: [regex], include_directories: [iregex])
endif
ctags = static_library('ctags',
'ctags/dsl/es.c',
'ctags/dsl/es.h',
'ctags/dsl/optscript.c',
'ctags/dsl/optscript.h',
'ctags/main/args.c',
'ctags/main/args_p.h',
'ctags/main/colprint.c',
'ctags/main/colprint_p.h',
'ctags/main/CommonPrelude.c',
'ctags/main/ctags.h',
'ctags/main/debug.c',
'ctags/main/debug.h',
'ctags/main/dependency.c',
'ctags/main/dependency.h',
'ctags/main/dependency_p.h',
'ctags/main/e_msoft.h',
'ctags/main/entry.c',
'ctags/main/entry.h',
'ctags/main/entry_p.h',
'ctags/main/entry_private.c',
'ctags/main/error.c',
'ctags/main/error_p.h',
'ctags/main/field.c',
'ctags/main/field.h',
'ctags/main/field_p.h',
'ctags/main/flags.c',
'ctags/main/flags_p.h',
'ctags/main/fmt.c',
'ctags/main/fmt_p.h',
'ctags/main/gcc-attr.h',
'ctags/main/general.h',
'ctags/main/gvars.h',
'ctags/main/htable.c',
'ctags/main/htable.h',
'ctags/main/inline.h',
'ctags/main/interactive_p.h',
'ctags/main/keyword.c',
'ctags/main/keyword.h',
'ctags/main/keyword_p.h',
'ctags/main/kind.c',
'ctags/main/kind.h',
'ctags/main/kind_p.h',
'ctags/main/lregex.c',
'ctags/main/lregex-default.c',
'ctags/main/lregex.h',
'ctags/main/lregex_p.h',
'ctags/main/lxpath.c',
'ctags/main/lxpath.h',
'ctags/main/lxpath_p.h',
'ctags/main/main.c',
'ctags/main/main_p.h',
'ctags/main/mbcs.c',
'ctags/main/mbcs.h',
'ctags/main/mbcs_p.h',
'ctags/main/mio.c',
'ctags/main/mio.h',
'ctags/main/nestlevel.c',
'ctags/main/nestlevel.h',
'ctags/main/numarray.c',
'ctags/main/numarray.h',
'ctags/main/objpool.c',
'ctags/main/objpool.h',
'ctags/main/options.c',
'ctags/main/options.h',
'ctags/main/options_p.h',
'ctags/main/param.c',
'ctags/main/param.h',
'ctags/main/param_p.h',
'ctags/main/parse.c',
'ctags/main/parse.h',
'ctags/main/parse_p.h',
'ctags/main/parsers_p.h',
'ctags/main/portable-dirent_p.h',
'ctags/main/portable-scandir.c',
'ctags/main/promise.c',
'ctags/main/promise.h',
'ctags/main/promise_p.h',
'ctags/main/ptag.c',
'ctags/main/ptag_p.h',
'ctags/main/ptrarray.c',
'ctags/main/ptrarray.h',
'ctags/main/rbtree.c',
'ctags/main/rbtree.h',
'ctags/main/read.c',
'ctags/main/read.h',
'ctags/main/read_p.h',
'ctags/main/repoinfo.c',
'ctags/main/repoinfo.h',
'ctags/main/routines.c',
'ctags/main/routines.h',
'ctags/main/routines_p.h',
'ctags/main/script.c',
'ctags/main/script_p.h',
'ctags/main/seccomp.c',
'ctags/main/selectors.c',
'ctags/main/selectors.h',
'ctags/main/sort.c',
'ctags/main/sort_p.h',
'ctags/main/stats.c',
'ctags/main/stats_p.h',
'ctags/main/strlist.c',
'ctags/main/strlist.h',
'ctags/main/subparser.h',
'ctags/main/subparser_p.h',
'ctags/main/tokeninfo.c',
'ctags/main/tokeninfo.h',
'ctags/main/trace.c',
'ctags/main/trace.h',
'ctags/main/trashbox.c',
'ctags/main/trashbox.h',
'ctags/main/trashbox_p.h',
'ctags/main/types.h',
'ctags/main/unwindi.c',
'ctags/main/unwindi.h',
'ctags/main/vstring.c',
'ctags/main/vstring.h',
'ctags/main/writer.c',
'ctags/main/writer-ctags.c',
'ctags/main/writer-etags.c',
'ctags/main/writer-json.c',
'ctags/main/writer_p.h',
'ctags/main/writer-xref.c',
'ctags/main/xtag.c',
'ctags/main/xtag.h',
'ctags/main/xtag_p.h',
'ctags/parsers/abaqus.c',
'ctags/parsers/abc.c',
'ctags/parsers/asciidoc.c',
'ctags/parsers/asm.c',
'ctags/parsers/basic.c',
'ctags/parsers/bibtex.c',
'ctags/parsers/cobol.c',
'ctags/parsers/cpreprocessor.c',
'ctags/parsers/cpreprocessor.h',
'ctags/parsers/css.c',
'ctags/parsers/cxx/cxx.c',
'ctags/parsers/cxx/cxx_debug.c',
'ctags/parsers/cxx/cxx_debug.h',
'ctags/parsers/cxx/cxx_debug_type.c',
'ctags/parsers/cxx/cxx_keyword.c',
'ctags/parsers/cxx/cxx_keyword.h',
'ctags/parsers/cxx/cxx_parser_block.c',
'ctags/parsers/cxx/cxx_parser.c',
'ctags/parsers/cxx/cxx_parser_function.c',
'ctags/parsers/cxx/cxx_parser.h',
'ctags/parsers/cxx/cxx_parser_internal.h',
'ctags/parsers/cxx/cxx_parser_lambda.c',
'ctags/parsers/cxx/cxx_parser_namespace.c',
'ctags/parsers/cxx/cxx_parser_template.c',
'ctags/parsers/cxx/cxx_parser_tokenizer.c',
'ctags/parsers/cxx/cxx_parser_typedef.c',
'ctags/parsers/cxx/cxx_parser_using.c',
'ctags/parsers/cxx/cxx_parser_variable.c',
'ctags/parsers/cxx/cxx_qtmoc.c',
'ctags/parsers/cxx/cxx_scope.c',
'ctags/parsers/cxx/cxx_scope.h',
'ctags/parsers/cxx/cxx_subparser.c',
'ctags/parsers/cxx/cxx_subparser.h',
'ctags/parsers/cxx/cxx_subparser_internal.h',
'ctags/parsers/cxx/cxx_tag.c',
'ctags/parsers/cxx/cxx_tag.h',
'ctags/parsers/cxx/cxx_token.c',
'ctags/parsers/cxx/cxx_token_chain.c',
'ctags/parsers/cxx/cxx_token_chain.h',
'ctags/parsers/cxx/cxx_token.h',
'ctags/parsers/diff.c',
'ctags/parsers/erlang.c',
'ctags/parsers/flex.c',
'ctags/parsers/gdscript.c',
'ctags/parsers/geany_c.c',
'ctags/parsers/geany_docbook.c',
'ctags/parsers/geany_fortran.c',
'ctags/parsers/geany_lcpp.c',
'ctags/parsers/geany_lcpp.h',
'ctags/parsers/geany_markdown.c',
'ctags/parsers/geany_matlab.c',
'ctags/parsers/geany_tcl.c',
'ctags/parsers/geany_tex.c',
'ctags/parsers/geany_vhdl.c',
'ctags/parsers/go.c',
'ctags/parsers/haskell.c',
'ctags/parsers/haxe.c',
'ctags/parsers/html.c',
'ctags/parsers/iniconf.c',
'ctags/parsers/iniconf.h',
'ctags/parsers/jscript.c',
'ctags/parsers/json.c',
'ctags/parsers/julia.c',
'ctags/parsers/lua.c',
'ctags/parsers/make.c',
'ctags/parsers/make.h',
'ctags/parsers/nsis.c',
'ctags/parsers/objc.c',
'ctags/parsers/pascal.c',
'ctags/parsers/perl.c',
'ctags/parsers/perl.h',
'ctags/parsers/php.c',
'ctags/parsers/powershell.c',
'ctags/parsers/python.c',
'ctags/parsers/r.c',
'ctags/parsers/r.h',
'ctags/parsers/rst.c',
'ctags/parsers/ruby.c',
'ctags/parsers/rust.c',
'ctags/parsers/sh.c',
'ctags/parsers/sql.c',
'ctags/parsers/txt2tags.c',
'ctags/parsers/verilog.c',
c_args: geany_cflags + [ '-DG_LOG_DOMAIN="CTags"',
'-DEXTERNAL_PARSER_LIST_FILE="src/tagmanager/tm_parsers.h"' ],
dependencies: deps + [dep_fnmatch, dep_regex],
include_directories: [ictags]
)
dep_ctags = declare_dependency(link_with: [ctags], include_directories: [ictags])
install_headers(
'src/tagmanager/tm_source_file.h',
'src/tagmanager/tm_tag.h',
'src/tagmanager/tm_workspace.h',
'src/tagmanager/tm_parser.h',
subdir: 'geany/tagmanager'
)
tagmanager = static_library('tagmanager',
'src/tagmanager/tm_ctags.h',
'src/tagmanager/tm_ctags.c',
'src/tagmanager/tm_parser.h',
'src/tagmanager/tm_parser.c',
'src/tagmanager/tm_parsers.h',
'src/tagmanager/tm_source_file.h',
'src/tagmanager/tm_source_file.c',
'src/tagmanager/tm_tag.h',
'src/tagmanager/tm_tag.c',
'src/tagmanager/tm_workspace.h',
'src/tagmanager/tm_workspace.c',
c_args: geany_cflags + [ '-DG_LOG_DOMAIN="Tagmanager"' ],
dependencies: [dep_ctags, glib]
)
dep_tagmanager = declare_dependency(
link_with: tagmanager,
include_directories: [itagmanager]
)
# Generate signallist.i
gen_src = custom_target('gen-signallist',
input : [ 'data/geany.glade' ],
output : [ 'signallist.i' ],
command : [find_program('scripts/gen-signallist.sh'), '@INPUT@', '@OUTPUT@' ]
)
win_src = []
win_deps = []
if (host_machine.system() == 'windows')
win_src += [ 'src/win32.c', 'src/win32.h' ]
foreach lib : ['ole32', 'wsock32', 'comdlg32']
win_deps += cc.find_library(lib)
endforeach
endif
install_headers(
'plugins/geanyfunctions.h',
'plugins/geanyplugin.h',
'src/app.h',
'src/build.h',
'src/dialogs.h',
'src/document.h',
'src/editor.h',
'src/encodings.h',
'src/filetypes.h',
'src/geany.h',
'src/gtkcompat.h',
'src/highlighting.h',
'src/keybindings.h',
'src/main.h',
'src/msgwindow.h',
'src/navqueue.h',
'src/plugindata.h',
'src/pluginutils.h',
'src/prefs.h',
'src/project.h',
'src/sciwrappers.h',
'src/search.h',
'src/spawn.h',
'src/stash.h',
'src/support.h',
'src/symbols.h',
'src/templates.h',
'src/toolbar.h',
'src/ui_utils.h',
'src/utils.h',
subdir: 'geany'
)
libgeany = shared_library('geany',
'src/about.c',
'src/about.h',
'src/app.h',
'src/build.c',
'src/build.h',
'src/callbacks.c',
'src/callbacks.h',
'src/dialogs.c',
'src/dialogs.h',
'src/document.c',
'src/document.h',
'src/editor.c',
'src/editor.h',
'src/encodings.c',
'src/encodings.h',
'src/filetypes.c',
'src/filetypes.h',
'src/geanyentryaction.c',
'src/geanyentryaction.h',
'src/geanymenubuttonaction.c',
'src/geanymenubuttonaction.h',
'src/geanyobject.c',
'src/geanyobject.h',
'src/geanywraplabel.c',
'src/geanywraplabel.h',
'src/gtkcompat.h',
'src/highlighting.c',
'src/highlighting.h',
'src/highlightingmappings.h',
'src/keybindings.c',
'src/keybindings.h',
'src/keyfile.c',
'src/keyfile.h',
'src/log.c',
'src/log.h',
'src/libmain.c',
'src/main.h',
'src/geany.h',
'src/msgwindow.c',
'src/msgwindow.h',
'src/navqueue.c',
'src/navqueue.h',
'src/notebook.c',
'src/notebook.h',
'src/plugins.c',
'src/plugins.h',
'src/pluginutils.c',
'src/pluginutils.h',
'src/prefs.c',
'src/prefs.h',
'src/printing.c',
'src/printing.h',
'src/project.c',
'src/project.h',
'src/sciwrappers.c',
'src/sciwrappers.h',
'src/search.c',
'src/search.h',
'src/socket.c',
'src/socket.h',
'src/spawn.c',
'src/spawn.h',
'src/stash.c',
'src/stash.h',
'src/support.h',
'src/symbols.c',
'src/symbols.h',
'src/templates.c',
'src/templates.h',
'src/toolbar.c',
'src/toolbar.h',
'src/tools.c',
'src/tools.h',
'src/sidebar.c',
'src/sidebar.h',
'src/ui_utils.c',
'src/ui_utils.h',
'src/utils.c',
'src/utils.h',
gen_src,
win_src,
host_machine.system() == 'windows' ? ['src/win32.c', 'src/win32.h'] : [ 'src/vte.c', 'src/vte.h' ],
soversion: '0',
c_args: geany_cflags + [ '-DG_LOG_DOMAIN="Geany"' ],
include_directories: [iscintilla],
dependencies: [dep_tagmanager, dep_ctags, dep_scintilla] + deps + win_deps,
install: true
)
dep_libgeany = declare_dependency(
link_with: libgeany,
include_directories: [igeany]
)
executable('geany',
'src/main.c',
link_with: libgeany,
c_args: geany_cflags + [ '-DG_LOG_DOMAIN="Geany"' ],
dependencies: deps,
build_rpath: meson.build_root(),
install_rpath: '$ORIGIN/../' + get_option('libdir'),
install: true
)
i18n = import('i18n')
desktop_file = 'geany.desktop'
desktop_output_file = i18n.merge_file(
type: 'desktop',
input: desktop_file + '.in',
output: desktop_file,
po_dir: 'po',
install: true,
install_dir: join_paths(get_option('datadir'), 'applications')
)
subdir('po')
subdir('data')
subdir('doc')
subdir('icons')
subdir('plugins')
subdir('tests')
install_data('COPYING', rename: 'GPL-2')
install_data(
'scintilla/License.txt',
'scintilla/lexilla/License.txt',
rename: [
'ScintillaLicense.txt',
'LexillaLicense.txt'
],
install_dir: cdata.get('GEANY_DOC_DIR')
)
misc = [
'AUTHORS',
'COPYING',
'ChangeLog',
'NEWS',
'README',
'THANKS',
'TODO'
]
install_data(misc, install_dir: cdata.get('GEANY_DOC_DIR'))
if host_machine.system() == 'windows'
misc_rename = [
'Authors.txt',
'Changelog.txt',
'Copying.txt',
'Readme.txt',
'News.txt',
'Thanks.txt',
'Todo.txt'
]
install_data(misc, install_dir: prefix, rename: misc_rename)
endif

8
meson_options.txt Normal file
View File

@ -0,0 +1,8 @@
option('html-docs', type : 'feature', description : 'enable to generate HTML documentation using rst2html')
option('pdf-docs', type : 'feature', description : 'enable to generate PDF documentation using rst2pdf')
option('vte', type : 'boolean', description : 'enable if you want virtual terminal support')
option('plugins', type : 'boolean', description : 'enable if you want plugin support')
option('api-docs', type : 'feature', description : 'enable to generate API documentation using Doxygen')
option('gtkdoc', type : 'boolean', description : 'enable to generate gtk-doc compatible headers for the API')
option('python-command', type: 'string', description: 'the default Python command')
option('socket', type: 'boolean', description: 'enable if you want to detect a running instance')

28
plugins/meson.build Normal file
View File

@ -0,0 +1,28 @@
plugin_inc = [include_directories('..', '../src', '../src/tagmanager')]
plugin_inc += iscintilla
plugins = [
'Demoplugin',
'Demoproxy',
'Classbuilder',
'HTMLChars',
'Export',
'SaveActions',
'FileBrowser',
'SplitWindow'
]
foreach plugin : plugins
id = plugin.to_lower()
skip_install = id.startswith('demo')
shared_module(id,
id + '.c',
name_prefix: '', # "lib" seems to be the default prefix
link_with: libgeany,
include_directories: plugin_inc,
c_args: [def_cflags, '-DG_LOG_DOMAIN="'+plugin+'"'],
dependencies: [deps, dep_libgeany],
install_dir: join_paths(prefix, get_option('libdir'), 'geany'),
install: not skip_install
)
endforeach

1
po/meson.build Normal file
View File

@ -0,0 +1 @@
i18n.gettext(meson.project_name(), preset: 'glib', install: true)

354
tests/meson.build Normal file
View File

@ -0,0 +1,354 @@
test_deps = declare_dependency(compile_args: geany_cflags + [ '-DG_LOG_DOMAIN="Geany"' ],
dependencies: [deps, dep_libgeany])
ctags_tests = files([
'ctags/1795612.js.tags',
'ctags/1850914.js.tags',
'ctags/1878155.js.tags',
'ctags/1880687.js.tags',
'ctags/2023624.js.tags',
'ctags/3184782.sql.tags',
'ctags/3470609.js.tags',
'ctags/3526726.tex.tags',
'ctags/68hc11.asm.tags',
'ctags/actionscript/as-first-token.as.tags',
'ctags/actionscript/classes.as.tags',
'ctags/actionscript/const2.as.tags',
'ctags/actionscript/const.as.tags',
'ctags/actionscript/method-attributes.as.tags',
'ctags/actionscript/packages.as.tags',
'ctags/actionscript/sampler.as.tags',
'ctags/angle_bracket.cpp.tags',
'ctags/anonymous_functions.php.tags',
'ctags/arraylist.js.tags',
'ctags/array_ref_and_out.cs.tags',
'ctags/array_spec.f90.tags',
'ctags/array-spec.f90.tags',
'ctags/attributes.cs.tags',
'ctags/auto.f.tags',
'ctags/backslashes.c.tags',
'ctags/bit_field.c.tags',
'ctags/block.f90.tags',
'ctags/bracematch.js.tags',
'ctags/bug1020715.cpp.tags',
'ctags/bug1020715.c.tags',
'ctags/bug1086609.c.tags',
'ctags/bug1093123.cpp.tags',
'ctags/bug1111214-j-chan.v.tags',
'ctags/bug1111214.v.tags',
'ctags/bug1201689.c.tags',
'ctags/bug1447756.java.tags',
'ctags/bug1458930.c.tags',
'ctags/bug1466117.c.tags',
'ctags/bug1491666.c.tags',
'ctags/bug1515910.cs.tags',
'ctags/bug1548443.cpp.tags',
'ctags/bug1563476.cpp.tags',
'ctags/bug1570779.sql.tags',
'ctags/bug1575055.cpp.tags',
'ctags/bug1585745.cpp.tags',
'ctags/bug1611054.cs.tags',
'ctags/bug1691412.java.tags',
'ctags/bug1742588.rb.tags',
'ctags/bug1743330.v.tags',
'ctags/bug1764143.h.tags',
'ctags/bug1764148.py.tags',
'ctags/bug1770479.cpp.tags',
'ctags/bug1773926.cpp.tags',
'ctags/bug1777344.java.tags',
'ctags/bug1799340.cpp.tags',
'ctags/bug1799343-1.cpp.tags',
'ctags/bug1799343-2.cpp.tags',
'ctags/bug1800065.cs.tags',
'ctags/bug1809024.py.tags',
'ctags/bug1830343.cs.tags',
'ctags/bug1830344.cs.tags',
'ctags/bug1856363.py.tags',
'ctags/bug1906062.py.tags',
'ctags/bug1907083.cpp.tags',
'ctags/bug1924919.cpp.tags',
'ctags/bug1938565.sql.tags',
'ctags/bug1944150.sql.tags',
'ctags/bug1950327.js.tags',
'ctags/bug1988026.py.tags',
'ctags/bug1988027.py.tags',
'ctags/bug1988130.py.tags',
'ctags/bug2049723.java.tags',
'ctags/bug2075402.py.tags',
'ctags/bug2117073.java.tags',
'ctags/bug2374109.vhd.tags',
'ctags/bug2411878.cs.tags',
'ctags/bug2747828.v.tags',
'ctags/bug2777310.js.tags',
'ctags/bug2781264.rb.tags',
'ctags/bug2886870.tex.tags',
'ctags/bug2888482.js.tags',
'ctags/bug3036476.js.tags',
'ctags/bug3168705.py.tags',
'ctags/bug3571233.js.tags',
'ctags/bug507864.c.tags',
'ctags/bug538629.asm.tags',
'ctags/bug556645.c.tags',
'ctags/bug556646.c.tags',
'ctags/bug565813.f90.tags',
'ctags/bug612019.pas.tags',
'ctags/bug612621.pl.tags',
'ctags/bug620288.f.tags',
'ctags/bug639639.h.tags',
'ctags/bug639644.hpp.tags',
'ctags/bug665086.cpp.tags',
'ctags/bug670433.f90.tags',
'ctags/bug699171.py.tags',
'ctags/bug722501.sql.tags',
'ctags/bug726712.f90.tags',
'ctags/bug726875.f90.tags',
'ctags/bug734933.f90.tags',
'ctags/bug762027.v.tags',
'ctags/bug814263.java.tags',
'ctags/bug823000.sql.tags',
'ctags/bug842077.pl.tags',
'ctags/bug849591.cpp.tags',
'ctags/bug852368.cpp.tags',
'ctags/bug858165.f90.tags',
'ctags/bug872494.cpp.tags',
'ctags/bug877956.f90.tags',
'ctags/bug960316.v.tags',
'ctags/bug961001.v.tags',
'ctags/byte.f.tags',
'ctags/c-digraphs.c.tags',
'ctags/c-trigraphs.c.tags',
'ctags/case_sensitivity.php.tags',
'ctags/char-selector.f90.tags',
'ctags/classes.php.tags',
'ctags/cobol/helloworld.cbl.tags',
'ctags/cobol/helloworld2.cbl.tags',
'ctags/cobol/levels.cbl.tags',
'ctags/cobol/quoted-program-id.cbl.tags',
'ctags/cobol/simple.cbl.tags',
'ctags/common.f.tags',
'ctags/complex-return.js.tags',
'ctags/continuation.f90.tags',
'ctags/continuation.mak.tags',
'ctags/countall.sql.tags',
'ctags/cpp_destructor.cpp.tags',
'ctags/css-at-rules.css.tags',
'ctags/css-at-supports.css.tags',
'ctags/css-attribute-selectors.css.tags',
'ctags/css-comma-no-space.css.tags',
'ctags/css-namespace-selectors.css.tags',
'ctags/css-pseudo-classes.css.tags',
'ctags/css-simple.css.tags',
'ctags/css-singlequote-in-comment-issue2.css.tags',
'ctags/css-tag-types.css.tags',
'ctags/css-trivial.css.tags',
'ctags/cython_sample.pyx.tags',
'ctags/cython_sample2.pyx.tags',
'ctags/cxx11enum.cpp.tags',
'ctags/cxx11-final.cpp.tags',
'ctags/cxx11-noexcept.cpp.tags',
'ctags/cxx11-override.cpp.tags',
'ctags/cxx11-raw-strings.cpp.tags',
'ctags/cxx14-combined.cpp.tags',
'ctags/db-trig.sql.tags',
'ctags/debian_432872.f90.tags',
'ctags/directives.c.tags',
'ctags/dopbl2.f.tags',
'ctags/dotted-names.json.tags',
'ctags/enum.c.tags',
'ctags/enum.f90.tags',
'ctags/enum.java.tags',
'ctags/enumerators.f90.tags',
'ctags/events.cs.tags',
'ctags/extern_variable.h.tags',
'ctags/forall_module.f90.tags',
'ctags/format.pl.tags',
'ctags/fortran_associate.f90.tags',
'ctags/fortran_line_continuation.f90.tags',
'ctags/func_typedef.h.tags',
'ctags/geany.nsi.tags',
'ctags/general.cs.tags',
'ctags/hex2dec.sql.tags',
'ctags/implied_program.f.tags',
'ctags/indexer.cs.tags',
'ctags/infinite_loop.java.tags',
'ctags/ingres_procedures.sql.tags',
'ctags/initialization.f90.tags',
'ctags/interface_indexers.cs.tags',
'ctags/interface_properties.cs.tags',
'ctags/interfaces.f90.tags',
'ctags/internal.cs.tags',
'ctags/intro_orig.tex.tags',
'ctags/intro.tex.tags',
'ctags/invalid_name.f90.tags',
'ctags/java_enum.java.tags',
'ctags/js-broken-strings.js.tags',
'ctags/js-class-related-unterminated.js.tags',
'ctags/js-const.js.tags',
'ctags/js-implicit-semicolons.js.tags',
'ctags/js-let.js.tags',
'ctags/js-scope.js.tags',
'ctags/js-signature.js.tags',
'ctags/js-string-continuation.js.tags',
'ctags/js-sub-block-scope.js.tags',
'ctags/js-unknown-construct-nesting.js.tags',
'ctags/julia-corner_cases.jl.tags',
'ctags/jsFunc_tutorial.js.tags',
'ctags/keyword_abstract.cs.tags',
'ctags/keyword_catch_try.cs.tags',
'ctags/keyword_class.cs.tags',
'ctags/keyword_const.cs.tags',
'ctags/keyword_delegate.cs.tags',
'ctags/keyword_enum.cs.tags',
'ctags/keyword_event.cs.tags',
'ctags/keyword_explicit.cs.tags',
'ctags/keyword_extern.cs.tags',
'ctags/keyword_implicit.cs.tags',
'ctags/keyword_interface.cs.tags',
'ctags/keyword_namespace.cs.tags',
'ctags/keyword_names.f90.tags',
'ctags/keyword_out.cs.tags',
'ctags/keyword_override.cs.tags',
'ctags/keyword_params.cs.tags',
'ctags/keyword_private.cs.tags',
'ctags/keyword_protected.cs.tags',
'ctags/keyword_public.cs.tags',
'ctags/keyword_sealed.cs.tags',
'ctags/keyword_static.cs.tags',
'ctags/keyword_struct.cs.tags',
'ctags/keyword_virtual.cs.tags',
'ctags/keyword_volatile.cs.tags',
'ctags/labels.sql.tags',
'ctags/lanus.for.tags',
'ctags/line_directives.c.tags',
'ctags/local.c.tags',
'ctags/macros.c.tags',
'ctags/make-comment-in-rule.mak.tags',
'ctags/make-gnumake-pattern-rules.mak.tags',
'ctags/make-multi-target.mak.tags',
'ctags/make-parentheses.mak.tags',
'ctags/make-target-with-parentheses.mak.tags',
'ctags/make-variable-on-cmdline.mak.tags',
'ctags/masm.asm.tags',
'ctags/matlab_backtracking.m.tags',
'ctags/matlab_test.m.tags',
'ctags/maze.erl.tags',
'ctags/members.f90.tags',
'ctags/misc_types.f90.tags',
'ctags/misc_types.f.tags',
'ctags/mode.php.tags',
'ctags/moniker.x68.asm.tags',
'ctags/namelist.f.tags',
'ctags/namespace.cpp.tags',
'ctags/namespaces2.php.tags',
'ctags/namespaces.php.tags',
'ctags/no_terminator.js.tags',
'ctags/non-ascii-ident1.php.tags',
'ctags/numlib.f90.tags',
'ctags/objectivec_implementation.mm.tags',
'ctags/objectivec_interface.mm.tags',
'ctags/objectivec_property.mm.tags',
'ctags/objectivec_protocol.mm.tags',
'ctags/Package.pm.tags',
'ctags/php5_5_class_kw.php.tags',
'ctags/parenthesis-rvalue.js.tags',
'ctags/preprocessor.f90.tags',
'ctags/procedure_pointer_module.f90.tags',
'ctags/procpoint.f90.tags',
'ctags/property.cs.tags',
'ctags/prototype.h.tags',
'ctags/pure_elem.f95.tags',
'ctags/py_constructor_arglist.py.tags',
'ctags/py-skipped-string.py.tags',
'ctags/python-anonymous-nestlevel_ctags-bug-356.py.tags',
'ctags/python-comments.py.tags',
'ctags/qualified_types.f90.tags',
'ctags/random.sql.tags',
'ctags/readlob.sql.tags',
'ctags/readlong.sql.tags',
'ctags/recursive.f95.tags',
'ctags/refcurs.sql.tags',
'ctags/regexp.js.tags',
'ctags/return-hint.zep.tags',
'ctags/return-types.go.tags',
'ctags/ruby-block-call.rb.tags',
'ctags/ruby-doc.rb.tags',
'ctags/ruby-namespaced-class.rb.tags',
'ctags/ruby-scope-after-anonymous-class.rb.tags',
'ctags/ruby-sf-bug-364.rb.tags',
'ctags/rules.t2t.tags',
'ctags/sample.t2t.tags',
'ctags/secondary_fcn_name.js.tags',
'ctags/semicolon.f90.tags',
'ctags/shebang.js.tags',
'ctags/signature.cpp.tags',
'ctags/simple.abc.tags',
'ctags/simple.asciidoc.tags',
'ctags/simple.bas.tags',
'ctags/simple.conf.tags',
'ctags/simple.d.tags',
'ctags/simple.diff.tags',
'ctags/simple.docbook.tags',
'ctags/simple.hs.tags',
'ctags/simple.hx.tags',
'ctags/simple.html.tags',
'ctags/simple.inp.tags',
'ctags/simple.js.tags',
'ctags/simple.json.tags',
'ctags/simple.ksh.tags',
'ctags/simple.lua.tags',
'ctags/simple.mak.tags',
'ctags/simple.md.tags',
'ctags/simple.php.tags',
'ctags/simple.pl.tags',
'ctags/simple.ps1.tags',
'ctags/simple.py.tags',
'ctags/simple.rb.tags',
'ctags/simple.rst.tags',
'ctags/simple.sh.tags',
'ctags/simple.tcl.tags',
'ctags/simple.vala.tags',
'ctags/simple.zep.tags',
'ctags/size_t_wchar_t_alias.d.tags',
'ctags/size_t_wchar_t_typedef.c.tags',
'ctags/spurious_label_tags.c.tags',
'ctags/sql_single_quote.sql.tags',
'ctags/square_parens.f90.tags',
'ctags/state_machine.v.tags',
'ctags/static_array.c.tags',
'ctags/stdcall.f.tags',
'ctags/strings.php.tags',
'ctags/strings.rb.tags',
'ctags/structure.f.tags',
'ctags/tabindent.py.tags',
'ctags/test.erl.tags',
'ctags/test.go.tags',
'ctags/test.py.tags',
'ctags/test.vhd.tags',
'ctags/test_input.rs.tags',
'ctags/test_input2.rs.tags',
'ctags/titles.t2t.tags',
'ctags/traffic_signal.v.tags',
'ctags/traits.php.tags',
'ctags/ui5.controller.js.tags',
'ctags/union.f.tags',
'ctags/value.f.tags',
'ctags/var-and-return-type.cpp.tags',
'ctags/whitespaces.php.tags'
])
runner = find_program('ctags/runner.sh')
foreach t : ctags_tests
test('@0@'.format(t), runner,
args: [join_paths(meson.build_root(), 'geany'), t],
env: ['top_srcdir='+meson.source_root(), 'top_builddir=' + meson.build_root()])
endforeach
process_order_sources = files([
'ctags/process_order.c.tags',
'ctags/process_order_1.h',
'ctags/process_order_2.h'
])
test('ctags/processing-order', runner,
args: [join_paths(meson.build_root(), 'geany'), '--result', process_order_sources],
env: ['top_srcdir='+meson.source_root(), 'top_builddir='+meson.build_root()])
test('utils', executable('test_utils', 'test_utils.c', dependencies: test_deps))