[geany/geany] d9fbb8: Merge pull request #2761 from kugel-/meson
Thomas Martitz
git-noreply at geany.org
Thu Apr 7 20:32:22 UTC 2022
Branch: refs/heads/master
Author: Thomas Martitz <thomas.martitz at mailbox.org>
Committer: GitHub <noreply at github.com>
Date: Thu, 07 Apr 2022 20:32:22 UTC
Commit: d9fbb8dcb0ffaea8e0415ade1fac795972562801
https://github.com/geany/geany/commit/d9fbb8dcb0ffaea8e0415ade1fac795972562801
Log Message:
-----------
Merge pull request #2761 from kugel-/meson
Port to the meson build system. Meson generally provides much faster incremental builds and configuration.
This is still kind of beta. Meson builds might not work on all systems out there and I don't know if it's suitable for generating releases but it's a start.
Modified Paths:
--------------
.github/workflows/build.yml
.gitignore
Makefile.am
README
configure.ac
data/meson.build
doc/Doxyfile.in
doc/Makefile.am
doc/meson.build
icons/24x24/Makefile.am
icons/24x24/geany.png
icons/meson.build
meson.build
meson_options.txt
plugins/Makefile.am
plugins/classbuilder.c
plugins/demoplugin.c
plugins/export.c
plugins/filebrowser.c
plugins/htmlchars.c
plugins/meson.build
plugins/saveactions.c
plugins/splitwindow.c
po/meson.build
scripts/gen-signallist.sh
src/Makefile.am
src/libmain.c
src/templates.c
src/utils.c
tests/ctags/Makefile.am
tests/ctags/runner.sh
tests/meson.build
Modified: .github/workflows/build.yml
63 lines changed, 63 insertions(+), 0 deletions(-)
===================================================================
@@ -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 at 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 at 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
Modified: .gitignore
3 lines changed, 3 insertions(+), 0 deletions(-)
===================================================================
@@ -20,6 +20,9 @@ Makefile.in
/ABOUT-NLS
/aclocal.m4
/autom4te.cache
+/build/
+/builddir/
+/build-*/
/build-aux/
/build-stamp
/codenames
Modified: Makefile.am
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -15,6 +15,7 @@ WIN32_BUILD_FILES = \
EXTRA_DIST = \
autogen.sh \
scripts/gen-api-gtkdoc.py \
+ scripts/gen-signallist.sh \
geany.desktop.in \
geany.pc.in \
ChangeLog.pre-1-22 \
Modified: README
32 lines changed, 32 insertions(+), 0 deletions(-)
===================================================================
@@ -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
Modified: configure.ac
3 lines changed, 1 insertions(+), 2 deletions(-)
===================================================================
@@ -48,7 +48,7 @@ fi
AC_CHECK_HEADERS([fcntl.h glob.h stdlib.h sys/time.h errno.h limits.h])
# Checks for dependencies needed by ctags
-AC_CHECK_HEADERS([fnmatch.h direct.h io.h sys/dir.h])
+AC_CHECK_HEADERS([dirent.h fnmatch.h direct.h io.h sys/dir.h])
AC_DEFINE([HAVE_STDBOOL_H], [1], [whether or not to use <stdbool.h>.])
AC_CHECK_FUNC([regcomp],
[have_regcomp=yes],
@@ -184,7 +184,6 @@ AC_CONFIG_FILES([
doc/geany.1
geany.pc
geany.nsi
- doc/Doxyfile
tests/Makefile
tests/ctags/Makefile
])
Modified: data/meson.build
22 lines changed, 22 insertions(+), 0 deletions(-)
===================================================================
@@ -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'))
Modified: doc/Doxyfile.in
15 lines changed, 7 insertions(+), 8 deletions(-)
===================================================================
@@ -248,7 +248,7 @@ ALIASES = "signal=- @ref " \
"signaldesc=" \
"signals=@b Signals: " \
"endsignals= " \
- "gironly=@internal"
+ "gironly=@GIRONLY@"
# Apparently Doxygen doesn't seem to like \<type>only without a previous command, so create a no-op
ALIASES += "noop=\if FALSE \endif"
@@ -567,15 +567,15 @@ INLINE_INFO = NO
# name. If set to NO the members will appear in declaration order.
# The default value is: YES.
-SORT_MEMBER_DOCS = YES
+SORT_MEMBER_DOCS = @SORT@
# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
# descriptions of file, namespace and class members alphabetically by member
# name. If set to NO the members will appear in declaration order. Note that
# this will also influence the order of the classes in the class list.
# The default value is: NO.
-SORT_BRIEF_DOCS = YES
+SORT_BRIEF_DOCS = @SORT@
# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
# (brief and detailed) documentation of class members so that constructors and
@@ -848,8 +848,7 @@ RECURSIVE = NO
# Note that relative paths are relative to the directory from which doxygen is
# run.
-EXCLUDE = @top_srcdir@/doc/geany-gtkdoc.h \
- @top_srcdir@/doc/geany-sciwrappers-gtkdoc.h
+EXCLUDE = @top_srcdir@/src/callbacks.c
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
# directories that are symbolic links (a Unix file system feature) are excluded
@@ -1090,7 +1089,7 @@ IGNORE_PREFIX =
# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output
# The default value is: YES.
-GENERATE_HTML = YES
+GENERATE_HTML = @HTML@
# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
@@ -1881,7 +1880,7 @@ MAN_LINKS = NO
# captures the structure of the code including all documentation.
# The default value is: NO.
-GENERATE_XML = NO
+GENERATE_XML = @XML@
# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
@@ -2016,7 +2015,7 @@ SEARCH_INCLUDES = NO
# preprocessor.
# This tag requires that the tag SEARCH_INCLUDES is set to YES.
-INCLUDE_PATH = @top_builddir@/src/
+INCLUDE_PATH =
# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
# patterns (like *.h and *.hpp) to filter out the header-files in the
Modified: doc/Makefile.am
42 lines changed, 29 insertions(+), 13 deletions(-)
===================================================================
@@ -82,17 +82,31 @@ clean-pdf-local:
endif
+AT=@
+
# API Documentation
if WITH_DOXYGEN
+# $(AT) instead of @ so that configure doesn't mess up the rules already
+Doxyfile: Doxyfile.in
+ $(AM_V_GEN)$(SED) \
+ -e 's,$(AT)top_srcdir$(AT),$(top_srcdir),' \
+ -e 's,$(AT)top_builddir$(AT),$(top_builddir),' \
+ -e 's,$(AT)VERSION$(AT),$(VERSION),' \
+ -e 's,$(AT)GIRONLY$(AT), at internal,' \
+ -e 's,$(AT)HTML$(AT),YES,' \
+ -e 's,$(AT)XML$(AT),NO,' \
+ -e 's,$(AT)SORT$(AT),YES,' \
+ $< > $@ || ( $(RM) -f $@ ; exit 1 )
+
doxygen_sources = \
$(srcdir)/plugins.dox \
$(srcdir)/pluginsignals.c \
$(srcdir)/pluginsymbols.c \
$(srcdir)/stash-example.c \
$(srcdir)/stash-gui-example.c
-EXTRA_DIST += $(doxygen_sources)
+EXTRA_DIST += Doxyfile.in $(doxygen_sources)
doxygen_dependencies = \
$(doxygen_sources) \
@@ -114,18 +128,16 @@ clean-api-docs-local:
if ENABLE_GTKDOC_HEADER
-# set WARN_IF_UNDOCUMENTED because apparently doxygens warns for undocumented stuff
-# in headers (even though it's correctly documented in the corresponding .c file) only
-# for xml output
-Doxyfile-gi: Doxyfile
+Doxyfile-gi: Doxyfile.in
$(AM_V_GEN)$(SED) \
- -e 's,gironly=@internal,gironly=,' \
- -e 's,^\(GENERATE_HTML.*\)YES,\1NO,' \
- -e 's,^\(GENERATE_XML.*\)NO,\1YES,' \
- -e 's,^\(WARN_IF_UNDOCUMENTED.*\)YES,\1NO,' \
- -e 's,^\(SORT_MEMBER_DOCS.*\)YES,\1NO,' \
- -e 's,^\(SORT_BRIEF_DOCS.*\)YES,\1NO,' \
- $< > $@ || { $(RM) $@ && exit 1; }
+ -e 's,$(AT)top_srcdir$(AT),$(top_srcdir),' \
+ -e 's,$(AT)top_builddir$(AT),$(top_builddir),' \
+ -e 's,$(AT)VERSION$(AT),$(VERSION),' \
+ -e 's,$(AT)GIRONLY$(AT),,' \
+ -e 's,$(AT)HTML$(AT),NO,' \
+ -e 's,$(AT)XML$(AT),YES,' \
+ -e 's,$(AT)SORT$(AT),NO,' \
+ $< > $@ || ( $(RM) -f $@ ; exit 1 )
# we depend on Doxyfile.stamp not have this run in parallel with it to avoid
# concurrent Doxygen runs, which might overwrite each other's files
@@ -145,7 +157,9 @@ ALL_LOCAL_TARGETS += geany-gtkdoc.h geany-sciwrappers-gtkdoc.h
CLEAN_LOCAL_TARGETS += clean-gtkdoc-header-local
clean-gtkdoc-header-local:
- -rm -rf xml/ Doxyfile-gi Doxyfile-gi.stamp geany-gtkdoc.h geany-sciwrappers-gtkdoc.h
+ rm -rf xml/ \
+ Doxyfile Doxyfile.stamp Doxyfile-gi Doxyfile-gi.stamp \
+ geany-gtkdoc.h geany-sciwrappers-gtkdoc.h
endif
@@ -158,6 +172,7 @@ uninstall-local:
rm -f $(DOCDIR)/html/index.html
rm -f $(DOCDIR)/manual.txt
rm -f $(DOCDIR)/ScintillaLicense.txt
+ rm -f $(DOCDIR)/LexillaLicense.txt
# manually install some files under another name
install-data-local:
@@ -171,3 +186,4 @@ endif
$(mkinstalldirs) $(DOCDIR)
$(INSTALL_DATA) $(srcdir)/geany.txt $(DOCDIR)/manual.txt
$(INSTALL_DATA) $(top_srcdir)/scintilla/License.txt $(DOCDIR)/ScintillaLicense.txt
+ $(INSTALL_DATA) $(top_srcdir)/scintilla/lexilla/License.txt $(DOCDIR)/LexillaLicense.txt
Modified: doc/meson.build
138 lines changed, 138 insertions(+), 0 deletions(-)
===================================================================
@@ -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- at 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
Modified: icons/24x24/Makefile.am
7 lines changed, 6 insertions(+), 1 deletions(-)
===================================================================
@@ -1,4 +1,9 @@
-icons_actionsdir = $(datadir)/icons/hicolor/24x24/actions
+iconsdir = $(datadir)/icons/hicolor/24x24
+icons_appsdir = $(iconsdir)/apps
+icons_actionsdir = $(iconsdir)/actions
+
+dist_icons_apps_DATA = \
+ geany.png
dist_icons_actions_DATA = \
geany-build.png \
Modified: icons/24x24/geany.png
0 lines changed, 0 insertions(+), 0 deletions(-)
===================================================================
No diff available, check online
Modified: icons/meson.build
46 lines changed, 46 insertions(+), 0 deletions(-)
===================================================================
@@ -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
Modified: meson.build
912 lines changed, 912 insertions(+), 0 deletions(-)
===================================================================
@@ -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_ at 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
Modified: meson_options.txt
8 lines changed, 8 insertions(+), 0 deletions(-)
===================================================================
@@ -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')
Modified: plugins/Makefile.am
7 lines changed, 3 insertions(+), 4 deletions(-)
===================================================================
@@ -43,7 +43,7 @@ saveactions_la_SOURCES = saveactions.c
filebrowser_la_SOURCES = filebrowser.c
splitwindow_la_SOURCES = splitwindow.c
-demoplugin_la_CFLAGS = -DG_LOG_DOMAIN=\""Demoplugin"\" -DLOCALEDIR=\""$(LOCALEDIR)"\"
+demoplugin_la_CFLAGS = -DG_LOG_DOMAIN=\""Demoplugin"\"
demoproxy_la_CFLAGS = -DG_LOG_DOMAIN=\""Demoproxy"\"
classbuilder_la_CFLAGS = -DG_LOG_DOMAIN=\""Classbuilder"\"
htmlchars_la_CFLAGS = -DG_LOG_DOMAIN=\""HTMLChars"\"
@@ -64,10 +64,9 @@ splitwindow_la_LIBADD = $(top_builddir)/src/libgeany.la $(GTK_LIBS)
endif # PLUGINS
if MINGW
-# FIXME: why is this define different than the non-MINGW one?
-AM_CPPFLAGS = -DGEANY_DATADIR=\"data\"
+AM_CPPFLAGS = -DGEANY_DATADIR=\"data\" -DGEANY_LOCALEDIR=\"\"
else
-AM_CPPFLAGS = -DDATADIR=\"$(datadir)\"
+AM_CPPFLAGS = -DGEANY_DATADIR=\"$(datadir)\" -DGEANY_LOCALEDIR=\""$(localedir)"\"
endif
AM_CPPFLAGS += \
Modified: plugins/classbuilder.c
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -31,7 +31,7 @@ GeanyData *geany_data;
PLUGIN_VERSION_CHECK(GEANY_API_VERSION)
-PLUGIN_SET_INFO(_("Class Builder"), _("Creates source files for new class types."), VERSION,
+PLUGIN_SET_INFO(_("Class Builder"), _("Creates source files for new class types."), PACKAGE_VERSION,
"Alexander Rodin, Ondrej Donek, the Geany developer team")
Modified: plugins/demoplugin.c
5 lines changed, 4 insertions(+), 1 deletions(-)
===================================================================
@@ -30,6 +30,9 @@
* - it will be loaded at next startup.
*/
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
#include "geanyplugin.h" /* plugin API, always comes first */
#include "Scintilla.h" /* for the SCNotification struct */
@@ -216,7 +219,7 @@ static void demo_cleanup(GeanyPlugin *plugin, gpointer data)
void geany_load_module(GeanyPlugin *plugin)
{
/* main_locale_init() must be called for your package before any localization can be done */
- main_locale_init(LOCALEDIR, GETTEXT_PACKAGE);
+ main_locale_init(GEANY_LOCALEDIR, GETTEXT_PACKAGE);
plugin->info->name = _("Demo");
plugin->info->description = _("Example plugin.");
plugin->info->version = "0.4";
Modified: plugins/export.c
8 lines changed, 4 insertions(+), 4 deletions(-)
===================================================================
@@ -33,8 +33,8 @@
GeanyData *geany_data;
PLUGIN_VERSION_CHECK(GEANY_API_VERSION)
-PLUGIN_SET_INFO(_("Export"), _("Exports the current file into different formats."), VERSION,
- _("The Geany developer team"))
+PLUGIN_SET_INFO(_("Export"), _("Exports the current file into different formats."),
+ PACKAGE_VERSION, _("The Geany developer team"))
static GtkWidget *main_menu_item = NULL;
@@ -50,7 +50,7 @@ static GtkWidget *main_menu_item = NULL;
<head>\n\
<title>{export_filename}</title>\n\
<meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\" />\n\
- <meta name=\"generator\" content=\"Geany " VERSION "\" />\n\
+ <meta name=\"generator\" content=\"Geany " PACKAGE_VERSION "\" />\n\
<meta name=\"date\" content=\"{export_date}\" />\n\
<style type=\"text/css\">\n\
{export_styles}\n\
@@ -65,7 +65,7 @@ static GtkWidget *main_menu_item = NULL;
</html>\n"
#define TEMPLATE_LATEX "\
-% {export_filename} (LaTeX code generated by Geany " VERSION " on {export_date})\n\
+% {export_filename} (LaTeX code generated by Geany " PACKAGE_VERSION " on {export_date})\n\
\\documentclass[a4paper]{article}\n\
\\usepackage[a4paper,margin=2cm]{geometry}\n\
\\usepackage[utf8]{inputenc}\n\
Modified: plugins/filebrowser.c
4 lines changed, 2 insertions(+), 2 deletions(-)
===================================================================
@@ -46,8 +46,8 @@ GeanyData *geany_data;
PLUGIN_VERSION_CHECK(GEANY_API_VERSION)
-PLUGIN_SET_INFO(_("File Browser"), _("Adds a file browser tab to the sidebar."), VERSION,
- _("The Geany developer team"))
+PLUGIN_SET_INFO(_("File Browser"), _("Adds a file browser tab to the sidebar."),
+ PACKAGE_VERSION, _("The Geany developer team"))
/* Keybinding(s) */
Modified: plugins/htmlchars.c
4 lines changed, 2 insertions(+), 2 deletions(-)
===================================================================
@@ -35,8 +35,8 @@ GeanyData *geany_data;
PLUGIN_VERSION_CHECK(GEANY_API_VERSION)
-PLUGIN_SET_INFO(_("HTML Characters"), _("Inserts HTML character entities like '&'."), VERSION,
- _("The Geany developer team"))
+PLUGIN_SET_INFO(_("HTML Characters"), _("Inserts HTML character entities like '&'."),
+ PACKAGE_VERSION, _("The Geany developer team"))
/* Keybinding(s) */
Modified: plugins/meson.build
28 lines changed, 28 insertions(+), 0 deletions(-)
===================================================================
@@ -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
Modified: plugins/saveactions.c
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -40,7 +40,7 @@ GeanyData *geany_data;
PLUGIN_VERSION_CHECK(GEANY_API_VERSION)
PLUGIN_SET_INFO(_("Save Actions"), _("This plugin provides different actions related to saving of files."),
- VERSION, _("The Geany developer team"))
+ PACKAGE_VERSION, _("The Geany developer team"))
enum
Modified: plugins/splitwindow.c
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -31,7 +31,7 @@
PLUGIN_VERSION_CHECK(GEANY_API_VERSION)
PLUGIN_SET_INFO(_("Split Window"), _("Splits the editor view into two windows."),
- VERSION, _("The Geany developer team"))
+ PACKAGE_VERSION, _("The Geany developer team"))
GeanyData *geany_data;
Modified: po/meson.build
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1 @@
+i18n.gettext(meson.project_name(), preset: 'glib', install: true)
Modified: scripts/gen-signallist.sh
8 lines changed, 8 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+set -e
+
+HEADER="/* This file is auto-generated, do not edit. */"
+TEXT=$(sed -n 's/^.*handler="\([^"]\{1,\}\)".*$/ITEM(\1)/p' "$1" | sort | uniq)
+
+printf "%s\n%s\n" "$HEADER" "$TEXT" > "$2"
Modified: src/Makefile.am
6 lines changed, 1 insertions(+), 5 deletions(-)
===================================================================
@@ -179,11 +179,7 @@ callbacks.c: signallist.i
glade_file=$(top_srcdir)/data/geany.glade
signallist.i: $(glade_file) Makefile
- $(AM_V_GEN)( \
- echo '/* This file is auto-generated, do not edit. */' && \
- $(SED) -n 's/^.*handler="\([^"]\{1,\}\)".*$$/ITEM(\1)/p' "$(glade_file)" \
- | $(SORT) | $(UNIQ) \
- ) > $@ || { $(RM) $@ && exit 1; }
+ $(AM_V_GEN)$(top_srcdir)/scripts/gen-signallist.sh $(glade_file) $@
CLEANFILES += signallist.i
Modified: src/libmain.c
4 lines changed, 2 insertions(+), 2 deletions(-)
===================================================================
@@ -304,10 +304,10 @@ static void main_init(void)
const gchar *main_get_version_string(void)
{
- static gchar full[] = VERSION " (git >= " REVISION ")";
+ static gchar full[] = PACKAGE_VERSION " (git >= " REVISION ")";
if (utils_str_equal(REVISION, "-1"))
- return VERSION;
+ return PACKAGE_VERSION;
else
return full;
}
Modified: src/templates.c
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -533,7 +533,7 @@ static void replace_static_values(GString *text)
utils_string_replace_all(text, "{mail}", template_prefs.mail);
utils_string_replace_all(text, "{company}", template_prefs.company);
utils_string_replace_all(text, "{untitled}", GEANY_STRING_UNTITLED);
- utils_string_replace_all(text, "{geanyversion}", "Geany " VERSION);
+ utils_string_replace_all(text, "{geanyversion}", PACKAGE_STRING);
}
Modified: src/utils.c
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -1930,7 +1930,7 @@ gchar *utils_get_help_url(const gchar *suffix)
if (! g_file_test(uri + skip, G_FILE_TEST_IS_REGULAR))
{ /* fall back to online documentation if it is not found on the hard disk */
g_free(uri);
- uri = g_strconcat(GEANY_HOMEPAGE, "manual/", VERSION, "/index.html", NULL);
+ uri = g_strconcat(GEANY_HOMEPAGE, "manual/", PACKAGE_VERSION, "/index.html", NULL);
}
if (suffix != NULL)
Modified: tests/ctags/Makefile.am
6 lines changed, 4 insertions(+), 2 deletions(-)
===================================================================
@@ -343,6 +343,8 @@ test_results = $(test_sources:=.tags)
TEST_EXTENSIONS = .tags
TAGS_LOG_COMPILER = $(srcdir)/runner.sh
+AM_TAGS_LOG_FLAGS = $(top_builddir)/src/geany$(EXEEXT)
+AM_TESTS_ENVIRONMENT = top_srcdir=$(top_srcdir) top_builddir=$(top_builddir)
TESTS = $(test_results)
EXTRA_DIST = $(test_sources) $(test_results)
@@ -353,6 +355,6 @@ check_processing_order_sources = \
EXTRA_DIST += $(check_processing_order_sources)
.PHONY: check-processing-order
check-processing-order: $(check_processing_order_sources)
- srcdir="$(srcdir)" top_builddir="$(top_builddir)" \
- $(srcdir)/runner.sh --result $(check_processing_order_sources:%=$(srcdir)/%)
+ $(AM_TESTS_ENVIRONMENT) \
+ $(srcdir)/runner.sh $(top_builddir)/src/geany$(EXEEXT) --result $(check_processing_order_sources:%=$(srcdir)/%)
check-local: check-processing-order
Modified: tests/ctags/runner.sh
10 lines changed, 5 insertions(+), 5 deletions(-)
===================================================================
@@ -1,10 +1,9 @@
-#!/bin/sh
+#!/bin/bash
# error out on undefined variable expansion, useful for debugging
set -u
-# FIXME: get this from automake so we have $(EXEEXT)
-GEANY="${top_builddir:-../..}/src/geany"
+GEANY="$1"
TMPDIR=$(mktemp -d) || exit 99
CONFDIR="$TMPDIR/config/"
@@ -14,9 +13,10 @@ trap 'rm -rf "$TMPDIR"' EXIT
# related configuration files
mkdir -p "$CONFDIR" || exit 99
mkdir -p "$CONFDIR/filedefs/" || exit 99
-cp "${srcdir:-.}"/../../data/filetype_extensions.conf "$CONFDIR" || exit 99
-cp "${srcdir:-.}"/../../data/filedefs/filetypes.* "$CONFDIR/filedefs/" || exit 99
+cp "${top_srcdir:-../..}"/data/filetype_extensions.conf "$CONFDIR" || exit 99
+cp "${top_srcdir:-../..}"/data/filedefs/filetypes.* "$CONFDIR/filedefs/" || exit 99
+shift
if [ "$1" = "--result" ]; then
# --result $result $source...
[ $# -gt 2 ] || exit 99
Modified: tests/meson.build
354 lines changed, 354 insertions(+), 0 deletions(-)
===================================================================
@@ -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))
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Commits
mailing list