[geany/geany] 34088f: Drop Waf build system support

Enrico Tröger git-noreply at xxxxx
Sun Mar 13 12:36:42 UTC 2016


Branch:      refs/heads/master
Author:      Enrico Tröger <enrico.troeger at uvena.de>
Committer:   Enrico Tröger <enrico.troeger at uvena.de>
Date:        Sun, 13 Dec 2015 13:36:12 UTC
Commit:      34088fbbb8535539e588520756aa418934b80941
             https://github.com/geany/geany/commit/34088fbbb8535539e588520756aa418934b80941

Log Message:
-----------
Drop Waf build system support

See #768.


Modified Paths:
--------------
    .gitignore
    HACKING
    Makefile.am
    doc/geany.txt
    doc/making-a-release
    geany.spec.in
    scripts/wafinit.sh
    waf
    wscript

Modified: .gitignore
7 lines changed, 0 insertions(+), 7 deletions(-)
===================================================================
@@ -10,7 +10,6 @@
 deps.mak
 .deps/
 .libs/
-.lock-waf_*
 Makefile
 Makefile.in
 .dirstamp
@@ -20,7 +19,6 @@ Makefile.in
 #-----------------------------------------------------------------------
 /aclocal.m4
 /autom4te.cache
-/_build_
 /build-aux/
 /build-stamp
 /codenames
@@ -48,8 +46,6 @@ Makefile.in
 /intltool-*
 /libtool
 /localwin32.mk
-/.lock-wscript
-/.lock-wafbuild
 /ltmain.sh
 /m4/lt*.m4
 /m4/intltool.m4
@@ -63,9 +59,6 @@ Makefile.in
 /stamp-h.in
 /*.tar.*
 /TODO.*
-# extracted Waf directory (without dot on Windows)
-/.waf-*
-/waf-*
 
 #-----------------------------------------------------------------------
 # /po/


Modified: HACKING
9 lines changed, 3 insertions(+), 6 deletions(-)
===================================================================
@@ -171,9 +171,9 @@ Geany requires GTK >= 2.24 and GLib >= 2.28. API symbols from newer
 GTK/GLib versions should be avoided or made optional to keep the source
 code building on older systems.
 
-It is recommended to use the 2.24 API documentation of the GTK 
-libs (including GLib, GDK and Pango) has the advantages 
-that you don't get confused by any newer API additions and you 
+It is recommended to use the 2.24 API documentation of the GTK
+libs (including GLib, GDK and Pango) has the advantages
+that you don't get confused by any newer API additions and you
 don't have to take care about whether you can use them or not.
 
 Coding
@@ -484,7 +484,6 @@ Adding a source file foo.[hc] in src/ or plugins/
 -------------------------------------------------
 * Add foo.c, foo.h to SRCS in path/Makefile.am.
 * Add foo.o to OBJS in path/makefile.win32.
-* Add path/foo.c to geany_sources in wscript.
 * Add path/foo.c to po/POTFILES.in (for string translation).
 
 Adding a filetype
@@ -548,7 +547,6 @@ When adding a lexer, update:
 
 * scintilla/Makefile.am
 * scintilla/makefile.win32
-* wscript
 * scintilla/src/Catalogue.cxx - add a LINK_LEXER command *manually*
 
 For syntax highlighting, you will need to edit highlighting.c and
@@ -637,7 +635,6 @@ Method
 ``````
 * Add foo.c to SRCS in Makefile.am.
 * Add foo.o to OBJS in makefile.win32.
-* Add path/foo.c to geany_sources in wscript.
 * Add Foo to parsers.h
 * Add TM_PARSER_FOO to tagmanager/src/tm_parser.h.  The list here must follow
   exactly the order in parsers.h.


Modified: Makefile.am
2 lines changed, 0 insertions(+), 2 deletions(-)
===================================================================
@@ -15,8 +15,6 @@ WIN32_BUILD_FILES = \
 
 EXTRA_DIST = \
 	autogen.sh \
-	wscript \
-	waf \
 	geany.desktop.in \
 	geany.pc.in \
 	geany.spec \


Modified: doc/geany.txt
67 lines changed, 1 insertions(+), 66 deletions(-)
===================================================================
@@ -132,8 +132,7 @@ of these tools are recommended.
 Autotools based build system
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-The Autotools based build system is very mature and has been well tested.
-To use it, you just need the Make tool, preferably GNU Make.
+To compile Geany yourself, you just need the Make tool, preferably GNU Make.
 
 Then run the following commands::
 
@@ -148,65 +147,6 @@ Or via sudo::
 
     % sudo make install
 
-Waf based build system
-^^^^^^^^^^^^^^^^^^^^^^
-
-The Waf build system is still quite young and under heavy development but already in a
-usable state. In contrast to the Autotools system, Waf needs Python. So before using Waf, you need
-to install Python on your system.
-The advantage of the Waf build system over the Autotools based build system is that the whole
-build process might be a bit faster. Especially when you use the Waf
-cache feature for repetitive builds (e.g. when changing only a few source files
-to test something) will become much faster since Waf will cache and re-use the
-unchanged built files and only compile the changed code again. See `Waf Cache`_ for details.
-To build Geany with Waf as run::
-
-    $ ./waf configure
-    $ ./waf build
-
-Then as root::
-
-    % ./waf install
-
-Waf cache
-`````````
-
-The Waf build system has a nice and interesting feature which can help  to avoid
-a lot of unnecessary rebuilding of unchanged code. This often happens when developing new features
-or trying to debug something in Geany.
-Waf is able to store and retrieve the object files from a cache. This cache is declared
-using the environment variable ``WAFCACHE``.
-A possible location of the cache directory could be ``~/.cache/waf``. In order to make use of
-this, you first need to create this directory::
-
-    $ mkdir -p ~/.cache/waf
-
-then add the environment variable to your shell configuration (the following example is for
-Bash and should be adjusted to your used shell)::
-
-    export WAFCACHE=/home/username/.cache/waf
-
-Remember to replace ``username`` with your actual username.
-
-More information about the Waf cache feature are available at
-http://code.google.com/p/waf/wiki/CacheObjectFiles.
-
-Cleaning the cache
-******************
-You should be careful about the size of the cache directory as it may
-grow rapidly over time.
-Waf doesn't do any cleaning or other house-keeping of the cache yet, so you need to keep it
-clean by yourself.
-An easy way to keep it clean is to run the following command regularly to remove old
-cached files::
-
-    $ find /home/username/.cache/waf -mtime +14 -exec rm {} \;
-
-This will delete all files in the cache directory which are older than 14 days.
-
-For details about the ``find`` command and its options, check its manual page.
-
-
 Custom installation
 ^^^^^^^^^^^^^^^^^^^
 The configure script supports several common options, for a detailed
@@ -214,11 +154,6 @@ list, type::
 
     $ ./configure --help
 
-or::
-
-    $ ./waf --help
-
-(depending on which build system you use).
 
 You may also want to read the INSTALL file for advanced installation
 options.


Modified: doc/making-a-release
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -9,7 +9,7 @@ to filter commits by a particular developer name.
 
 Ensure version numbers are all updated in:
 	configure.ac geany_private.rc geany.exe.manifest
-	win32-config.h wscript doc/geany.txt
+	win32-config.h doc/geany.txt
 Ensure release date is updated in:
 	NEWS doc/geany.txt doc/geany.1.in
 Check GEANY_CODENAME is set in src/geany.h.


Modified: geany.spec.in
4 lines changed, 0 insertions(+), 4 deletions(-)
===================================================================
@@ -62,10 +62,6 @@ Geany plug-ins. You do not need to install this package to use Geany.
 
 %prep
 %setup -q
-# remove waf since this isn't needed for the build, we're building the package
-# with autotools
-rm -f waf
-rm -f wscript
 
 %build
 %configure


Modified: scripts/wafinit.sh
72 lines changed, 0 insertions(+), 72 deletions(-)
===================================================================
@@ -1,72 +0,0 @@
-#! /bin/sh
-#
-# This script creates a "configure" script and a Makefile to imitate autotools
-# but Waf is actually used to build
-
-WAF="./waf"
-
-# Makefile
-cat > Makefile << EOF
-
-.PHONY: build configure
-
-all: build
-
-build:
-	@$WAF build
-
-install:
-	@if test -n "\$(DESTDIR)"; then \\
-		./waf install --destdir="\$(DESTDIR)"; \\
-	else \\
-		./waf install; \\
-	fi;
-
-uninstall:
-	@if test -n "\$(DESTDIR)"; then \\
-		$WAF uninstall --destdir="\$(DESTDIR)"; \\
-	else \\
-		$WAF uninstall; \\
-	fi;
-
-clean:
-	@$WAF clean
-
-distclean:
-	@$WAF distclean
-	@-rm -f Makefile
-
-htmldoc:
-	@$WAF --htmldoc
-
-apidoc:
-	@$WAF --apidoc
-
-configure:
-	@$WAF configure
-
-EOF
-
-template="
-all: build
-
-build:
-	cd .. && $WAF build
-
-"
-
-echo "$template" > src/Makefile
-echo "$template" > tagmanager/Makefile
-echo "$template" > scintilla/Makefile
-echo "$template" > plugins/Makefile
-
-
-# configure
-cat > configure << EOF
-#!/bin/sh
-
-$WAF configure \$@
-
-EOF
-
-chmod 755 configure


Modified: waf
0 lines changed, 0 insertions(+), 0 deletions(-)
===================================================================
No diff available, check online


Modified: wscript
981 lines changed, 0 insertions(+), 981 deletions(-)
===================================================================
@@ -1,981 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# WAF build script - this file is part of Geany, a fast and lightweight IDE
-#
-# Copyright 2008-2012 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
-# Copyright 2008-2012 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-"""
-This is a WAF build script (http://code.google.com/p/waf/).
-It can be used as an alternative build system to autotools
-for Geany. It does not (yet) cover all of the autotools tests and
-configure options but all important things are working.
-"make dist" should be done with autotools, most other targets and
-functions should work better (regarding performance and flexibility)
-or at least equally.
-
-Missing features: --enable-binreloc, make targets: dist, pdf (in doc/)
-Known issues: Dependency handling is buggy, e.g. if src/document.h is
-              changed, depending source files are not rebuilt (maybe Waf bug).
-
-The code of this file itself loosely follows PEP 8 with some exceptions
-(line width 100 characters and some other minor things).
-
-Requires WAF 1.6.1 and Python 2.5 (or later).
-"""
-
-
-import sys
-import os
-import tempfile
-from waflib import Logs, Options, Scripting, Utils
-from waflib.Build import BuildContext
-from waflib.Configure import ConfigurationContext
-from waflib.Errors import ConfigurationError, WafError
-from waflib.TaskGen import feature, before_method
-from waflib.Tools.compiler_c import c_compiler
-from waflib.Tools.compiler_cxx import cxx_compiler
-
-
-APPNAME = 'geany'
-VERSION = '1.26'
-LINGUAS_FILE = os.path.join('po', 'LINGUAS')
-MINIMUM_GTK_VERSION = '2.24.0'
-MINIMUM_GTK3_VERSION = '3.0.0'
-MINIMUM_GLIB_VERSION = '2.28.0'
-
-GEANY_LIB_VERSION = '0.0.0'
-
-top = '.'
-out = '_build_'
-
-mio_sources = set(['tagmanager/mio/mio.c'])
-
-ctags_sources = set([
-    'tagmanager/ctags/abaqus.c',
-    'tagmanager/ctags/args.c',
-    'tagmanager/ctags/abc.c',
-    'tagmanager/ctags/actionscript.c',
-    'tagmanager/ctags/asciidoc.c',
-    'tagmanager/ctags/asm.c',
-    'tagmanager/ctags/basic.c',
-    'tagmanager/ctags/c.c',
-    'tagmanager/ctags/cobol.c',
-    'tagmanager/ctags/conf.c',
-    'tagmanager/ctags/css.c',
-    'tagmanager/ctags/ctags.c',
-    'tagmanager/ctags/diff.c',
-    'tagmanager/ctags/docbook.c',
-    'tagmanager/ctags/erlang.c',
-    'tagmanager/ctags/entry.c',
-    'tagmanager/ctags/fortran.c',
-    'tagmanager/ctags/get.c',
-    'tagmanager/ctags/go.c',
-    'tagmanager/ctags/haskell.c',
-    'tagmanager/ctags/haxe.c',
-    'tagmanager/ctags/html.c',
-    'tagmanager/ctags/js.c',
-    'tagmanager/ctags/json.c',
-    'tagmanager/ctags/keyword.c',
-    'tagmanager/ctags/latex.c',
-    'tagmanager/ctags/lregex.c',
-    'tagmanager/ctags/lua.c',
-    'tagmanager/ctags/make.c',
-    'tagmanager/ctags/markdown.c',
-    'tagmanager/ctags/matlab.c',
-    'tagmanager/ctags/nsis.c',
-    'tagmanager/ctags/nestlevel.c',
-    'tagmanager/ctags/objc.c',
-    'tagmanager/ctags/options.c',
-    'tagmanager/ctags/parse.c',
-    'tagmanager/ctags/pascal.c',
-    'tagmanager/ctags/r.c',
-    'tagmanager/ctags/perl.c',
-    'tagmanager/ctags/php.c',
-    'tagmanager/ctags/powershell.c',
-    'tagmanager/ctags/python.c',
-    'tagmanager/ctags/read.c',
-    'tagmanager/ctags/rest.c',
-    'tagmanager/ctags/ruby.c',
-    'tagmanager/ctags/rust.c',
-    'tagmanager/ctags/sh.c',
-    'tagmanager/ctags/sort.c',
-    'tagmanager/ctags/sql.c',
-    'tagmanager/ctags/strlist.c',
-    'tagmanager/ctags/txt2tags.c',
-    'tagmanager/ctags/tcl.c',
-    'tagmanager/ctags/vhdl.c',
-    'tagmanager/ctags/verilog.c',
-    'tagmanager/ctags/vstring.c'])
-
-tagmanager_sources = set([
-    'tagmanager/src/tm_source_file.c',
-    'tagmanager/src/tm_tag.c',
-    'tagmanager/src/tm_workspace.c'])
-
-scintilla_sources = set(['scintilla/gtk/scintilla-marshal.c'])
-
-geany_sources = set([
-    'src/about.c', 'src/build.c', 'src/callbacks.c', 'src/dialogs.c', 'src/document.c',
-    'src/editor.c', 'src/encodings.c', 'src/filetypes.c', 'src/geanyentryaction.c',
-    'src/geanymenubuttonaction.c', 'src/geanyobject.c', 'src/geanywraplabel.c',
-    'src/highlighting.c', 'src/keybindings.c',
-    'src/keyfile.c', 'src/log.c', 'src/libmain.c', 'src/msgwindow.c', 'src/navqueue.c', 'src/notebook.c', 'src/osx.c',
-    'src/plugins.c', 'src/pluginutils.c', 'src/prefix.c', 'src/prefs.c', 'src/printing.c', 'src/project.c',
-    'src/sciwrappers.c', 'src/search.c', 'src/socket.c', 'src/spawn.c', 'src/stash.c',
-    'src/symbols.c',
-    'src/templates.c', 'src/toolbar.c', 'src/tools.c', 'src/sidebar.c',
-    'src/ui_utils.c', 'src/utils.c'])
-
-geany_bin_sources = set(['src/main.c'])
-
-geany_icons = {
-    'hicolor/16x16/apps':       ['16x16/classviewer-class.png',
-                                 '16x16/classviewer-macro.png',
-                                 '16x16/classviewer-member.png',
-                                 '16x16/classviewer-method.png',
-                                 '16x16/classviewer-namespace.png',
-                                 '16x16/classviewer-other.png',
-                                 '16x16/classviewer-struct.png',
-                                 '16x16/classviewer-var.png',
-                                 '16x16/geany.png'],
-    'hicolor/16x16/actions':    ['16x16/geany-build.png',
-                                 '16x16/geany-close-all.png',
-                                 '16x16/geany-save-all.png'],
-    'hicolor/24x24/actions':    ['24x24/geany-build.png',
-                                 '24x24/geany-close-all.png',
-                                 '24x24/geany-save-all.png'],
-    'hicolor/32x32/actions':    ['32x32/geany-build.png',
-                                 '32x32/geany-close-all.png',
-                                 '32x32/geany-save-all.png'],
-    'hicolor/32x32/apps':       ['32x32/geany.png'],
-    'hicolor/48x48/actions':    ['48x48/geany-build.png',
-                                 '48x48/geany-close-all.png',
-                                 '48x48/geany-save-all.png'],
-    'hicolor/48x48/apps':       ['48x48/geany.png'],
-    'hicolor/scalable/apps':    ['scalable/geany.svg'],
-    'hicolor/scalable/actions': ['scalable/geany-build.svg',
-                                 'scalable/geany-close-all.svg',
-                                 'scalable/geany-save-all.svg'],
-    'Tango/16x16/actions':      ['tango/16x16/geany-save-all.png'],
-    'Tango/24x24/actions':      ['tango/24x24/geany-save-all.png'],
-    'Tango/32x32/actions':      ['tango/32x32/geany-save-all.png'],
-    'Tango/48x48/actions':      ['tango/48x48/geany-save-all.png'],
-    'Tango/scalable/actions':   ['tango/scalable/geany-save-all.svg']
-}
-geany_icons_indexes = {
-    'hicolor':  ['index.theme'],
-    'Tango':    ['tango/index.theme']
-}
-
-
-def configure(conf):
-
-    conf.check_waf_version(mini='1.6.1')
-
-    conf.load('compiler_c')
-    _check_c99(conf)
-    is_win32 = _target_is_win32(conf)
-
-    visibility_hidden_supported = conf.check_cc(cflags=['-Werror', '-fvisibility=hidden'], mandatory=False)
-    conf.check_cc(header_name='fcntl.h', mandatory=False)
-    conf.check_cc(header_name='fnmatch.h', mandatory=False)
-    conf.check_cc(header_name='glob.h', mandatory=False)
-    conf.check_cc(header_name='sys/time.h', mandatory=False)
-    conf.check_cc(header_name='sys/types.h', mandatory=False)
-    conf.check_cc(header_name='sys/stat.h', mandatory=False)
-    conf.define('HAVE_STDLIB_H', 1)  # are there systems without stdlib.h?
-    conf.define('STDC_HEADERS', 1)  # an optimistic guess ;-)
-    _add_to_env_and_define(conf, 'HAVE_REGCOMP', 1)  # needed for CTags
-
-    conf.check_cc(function_name='fgetpos', header_name='stdio.h', mandatory=False)
-    conf.check_cc(function_name='fnmatch', header_name='fnmatch.h', mandatory=False)
-    conf.check_cc(function_name='ftruncate', header_name='unistd.h', mandatory=False)
-    conf.check_cc(function_name='mkstemp', header_name='stdlib.h', mandatory=False)
-    conf.check_cc(function_name='strstr', header_name='string.h')
-
-    conf.check_cc(function_name='pow', header_name='math.h', lib='m', uselib_store='M')
-
-    # check sunOS socket support
-    if Options.platform == 'sunos':
-        conf.check_cc(function_name='socket', lib='socket',
-                      header_name='sys/socket.h', uselib_store='SUNOS_SOCKET', mandatory=True)
-
-    # check for cxx after the header and function checks have been done to ensure they are
-    # checked with cc not cxx
-    conf.load('compiler_cxx')
-    if is_win32:
-        conf.load('winres')
-    _load_intltool_if_available(conf)
-
-    # GTK / GIO version check
-    gtk_package_name = 'gtk+-3.0' if conf.options.use_gtk3 else 'gtk+-2.0'
-    minimum_gtk_version = MINIMUM_GTK3_VERSION if conf.options.use_gtk3 else MINIMUM_GTK_VERSION
-    conf.check_cfg(package=gtk_package_name, atleast_version=minimum_gtk_version, uselib_store='GTK',
-        mandatory=True, args='--cflags --libs')
-    conf.check_cfg(package='glib-2.0', atleast_version=MINIMUM_GLIB_VERSION, uselib_store='GLIB',
-        mandatory=True, args='--cflags --libs')
-    conf.check_cfg(package='gmodule-2.0', uselib_store='GMODULE',
-        mandatory=True, args='--cflags --libs')
-    conf.check_cfg(package='gio-2.0', uselib_store='GIO', args='--cflags --libs', mandatory=True)
-    gtk_version = conf.check_cfg(modversion=gtk_package_name, uselib_store='GTK') or 'Unknown'
-    conf.check_cfg(package='gthread-2.0', uselib_store='GTHREAD', args='--cflags --libs')
-    if conf.options.enable_mac_integration:
-        pkgname = 'gtk-mac-integration-gtk3' if conf.options.use_gtk3 else 'gtk-mac-integration-gtk2'
-        conf.check_cfg(package=pkgname, uselib_store='MAC_INTEGRATION',
-            mandatory=True, args='--cflags --libs')
-    # remember GTK version for the build step
-    conf.env['gtk_package_name'] = gtk_package_name
-    conf.env['gtk_version'] = gtk_version
-    conf.env['minimum_gtk_version'] = minimum_gtk_version
-    conf.env['use_gtk3'] = conf.options.use_gtk3
-
-    revision = _get_git_rev(conf)
-
-    # rst2html for the HTML manual
-    if not conf.options.no_html_doc and revision is not None:
-        try:
-            conf.env['RST2HTML'] = _find_rst2html(conf)
-        except WafError:
-            error_msg = '''Documentation enabled but rst2html not found.
-You can explicitly disable building of the HTML manual with --disable-html-docs,
-but you then may not have a local copy of the HTML manual.'''
-            raise WafError(error_msg)
-
-    # Windows specials
-    if is_win32:
-        if conf.env['PREFIX'].lower() == tempfile.gettempdir().lower():
-            # overwrite default prefix on Windows (tempfile.gettempdir() is the Waf default)
-            new_prefix = os.path.join(str(conf.root), '%s-%s' % (APPNAME, VERSION))
-            _add_to_env_and_define(conf, 'PREFIX', new_prefix, quote=True)
-            _add_to_env_and_define(conf, 'BINDIR', os.path.join(new_prefix, 'bin'), quote=True)
-        _add_to_env_and_define(conf, 'DOCDIR', os.path.join(conf.env['PREFIX'], 'doc'), quote=True)
-        _add_to_env_and_define(conf, 'LIBDIR', '%s/lib' % conf.env['PREFIX'], quote=True)
-        conf.define('LOCALEDIR', os.path.join('share' 'locale'), quote=True)
-        # overwrite LOCALEDIR to install message catalogues properly
-        conf.env['LOCALEDIR'] = os.path.join(conf.env['PREFIX'], 'share', 'locale')
-        # DATADIR is defined in objidl.h, so we remove it from config.h but keep it in env
-        conf.undefine('DATADIR')
-        conf.env['DATADIR'] = os.path.join(conf.env['PREFIX'], 'data')
-        conf.env.append_value('LINKFLAGS_cprogram', [
-            '-mwindows',
-            '-static-libgcc',
-            '-static-libstdc++'])
-        conf.env.append_value('LIB_WIN32', ['wsock32', 'uuid', 'ole32', 'comdlg32'])
-    else:
-        conf.env['cshlib_PATTERN'] = '%s.so'
-        # DATADIR and LOCALEDIR are defined by the intltool tool
-        # but they are not added to the environment, so we need to
-        _add_define_to_env(conf, 'DATADIR')
-        _add_define_to_env(conf, 'LOCALEDIR')
-        docdir = os.path.join(conf.env['DATADIR'], 'doc', 'geany')
-        libdir = os.path.join(conf.env['PREFIX'], 'lib')
-        mandir = os.path.join(conf.env['DATADIR'], 'man')
-        _define_from_opt(conf, 'DOCDIR', conf.options.docdir, docdir)
-        _define_from_opt(conf, 'LIBDIR', conf.options.libdir, libdir)
-        _define_from_opt(conf, 'MANDIR', conf.options.mandir, mandir)
-
-    conf.define('ENABLE_NLS', 1)
-    conf.define('GEANY_LOCALEDIR', '' if is_win32 else conf.env['LOCALEDIR'], quote=True)
-    conf.define('GEANY_DATADIR', 'data' if is_win32 else conf.env['DATADIR'], quote=True)
-    conf.define('GEANY_DOCDIR', conf.env['DOCDIR'], quote=True)
-    conf.define('GEANY_LIBDIR', '' if is_win32 else conf.env['LIBDIR'], quote=True)
-    conf.define('GEANY_PREFIX', '' if is_win32 else conf.env['PREFIX'], quote=True)
-    conf.define('PACKAGE', APPNAME, quote=True)
-    conf.define('VERSION', VERSION, quote=True)
-    conf.define('REVISION', revision or '-1', quote=True)
-
-    conf.define('GETTEXT_PACKAGE', APPNAME, quote=True)
-
-    # no VTE on Windows
-    if is_win32:
-        conf.options.no_vte = True
-
-    _define_from_opt(conf, 'HAVE_PLUGINS', not conf.options.no_plugins, None)
-    _define_from_opt(conf, 'HAVE_SOCKET', not conf.options.no_socket, None)
-    _define_from_opt(conf, 'HAVE_VTE', not conf.options.no_vte, None)
-
-    conf.write_config_header('config.h', remove=False)
-
-    # GEANY_EXPORT_SYMBOL and GEANY_API_SYMBOL
-    if is_win32:
-        geanyexport_cflags = []
-        geanyexport_defines = ['GEANY_EXPORT_SYMBOL=__declspec(dllexport)']
-    elif visibility_hidden_supported:
-        geanyexport_cflags = ['-fvisibility=hidden']
-        geanyexport_defines = ['GEANY_EXPORT_SYMBOL=__attribute__((visibility("default")))']
-    else:  # unknown, define to nothing
-        geanyexport_cflags = []
-        geanyexport_defines = ['GEANY_EXPORT_SYMBOL=']
-    geanyexport_defines.append('GEANY_API_SYMBOL=GEANY_EXPORT_SYMBOL')
-    conf.env['DEFINES_geanyexport'] = geanyexport_defines
-    conf.env['CFLAGS_geanyexport'] = geanyexport_cflags
-    conf.env['CXXFLAGS_geanyexport'] = geanyexport_cflags
-
-    # some more compiler flags
-    conf.env.append_value('CFLAGS', ['-DHAVE_CONFIG_H'])
-    if conf.env['CC_NAME'] == 'gcc' and '-O' not in ''.join(conf.env['CFLAGS']):
-        conf.env.append_value('CFLAGS', ['-O2'])
-    if revision is not None:
-        conf.env.append_value('CFLAGS', ['-g', '-DGEANY_DEBUG'])
-    # Scintilla flags
-    conf.env.append_value('CFLAGS', ['-DGTK'])
-    conf.env.append_value('CXXFLAGS',
-        ['-DNDEBUG', '-DGTK', '-DSCI_LEXER', '-DG_THREADS_IMPL_NONE'])
-    if conf.env['CXX_NAME'] == 'gcc' and '-O' not in ''.join(conf.env['CXXFLAGS']):
-        conf.env.append_value('CXXFLAGS', ['-O2'])
-    if revision is not None:
-        conf.env.append_value('CXXFLAGS', ['-g'])
-
-    # summary
-    Logs.pprint('BLUE', 'Summary:')
-    conf.msg('Install Geany ' + VERSION + ' in', conf.env['PREFIX'])
-    conf.msg('Using GTK version', gtk_version)
-    conf.msg('Build with plugin support', conf.options.no_plugins and 'no' or 'yes')
-    conf.msg('Use virtual terminal support', conf.options.no_vte and 'no' or 'yes')
-    if revision is not None:
-        conf.msg('Compiling Git revision', revision)
-    # deprecation warning
-    _show_deprecation_warning(conf)
-
-
-def _show_deprecation_warning(ctx):
-    Logs.pprint(
-        'RED',
-        'The Waf build system is deprecated and will be removed in the removed in Geany 1.27. '
-        'Please use the Autotools build system.')
-
-
-def options(opt):
-    # Disable MSVC detection on win32: building Geany with MSVC is currently not supported
-    # If anyone wants to add support for building with MSVC, this hack should be removed.
-    c_compiler['win32'] = ['gcc']
-    cxx_compiler['win32'] = ['g++']
-
-    opt.load('compiler_cc')
-    opt.load('compiler_cxx')
-    opt.load('intltool')
-
-    # Option
-    opt.add_option('--no-scm', action='store_true', default=False,
-        help='Disable SCM detection [default: No]', dest='no_scm')
-    # Features
-    opt.add_option('--disable-plugins', action='store_true', default=False,
-        help='compile without plugin support [default: No]', dest='no_plugins')
-    opt.add_option('--disable-socket', action='store_true', default=False,
-        help='compile without support to detect a running instance [[default: No]',
-        dest='no_socket')
-    opt.add_option('--disable-vte', action='store_true', default=False,
-        help='compile without support for an embedded virtual terminal [[default: No]',
-        dest='no_vte')
-    opt.add_option('--enable-gtk3', action='store_true', default=False,
-        help='compile with GTK3 support (experimental) [[default: No]',
-        dest='use_gtk3')
-    opt.add_option('--enable-mac-integration', action='store_true', default=False,
-        help='use gtk-mac-integration to enable improved OS X integration [[default: No]',
-        dest='enable_mac_integration')
-    opt.add_option('--disable-html-docs', action='store_true', default=False,
-        help='do not generate HTML documentation using rst2html [[default: No]',
-        dest='no_html_doc')
-    # Paths
-    opt.add_option('--mandir', type='string', default='',
-        help='man documentation', dest='mandir')
-    opt.add_option('--docdir', type='string', default='',
-        help='documentation root', dest='docdir')
-    opt.add_option('--libdir', type='string', default='',
-        help='object code libraries', dest='libdir')
-
-
-def build(bld):
-    is_win32 = _target_is_win32(bld)
-    bld.add_post_fun(_show_deprecation_warning)
-
-    if bld.cmd == 'clean':
-        _remove_linguas_file()
-    if bld.cmd in ('install', 'uninstall'):
-        bld.add_post_fun(_post_install)
-
-    def build_plugin(plugin_name, install=True, uselib_add=[]):
-        if install:
-            instpath = '${LIBDIR}/geany'
-        else:
-            instpath = None
-
-        bld(
-            features                = ['c', 'cshlib'],
-            source                  = 'plugins/%s.c' % plugin_name,
-            includes                = ['.', 'src/', 'scintilla/include', 'tagmanager/src'],
-            defines                 = 'G_LOG_DOMAIN="%s"' % plugin_name,
-            target                  = plugin_name,
-            uselib                  = ['GTK', 'GLIB', 'GMODULE', 'C99'] + uselib_add,
-            use                     = ['geany'],
-            install_path            = instpath)
-
-    # CTags
-    bld.objects(
-        features        = ['c'],
-        source          = ctags_sources,
-        name            = 'ctags',
-        target          = 'ctags',
-        includes        = ['.', 'tagmanager', 'tagmanager/ctags'],
-        defines         = 'G_LOG_DOMAIN="CTags"',
-        uselib          = ['cshlib', 'GLIB', 'geanyexport', 'C99'])
-
-    # Tagmanager
-    bld.objects(
-        features        = ['c'],
-        source          = tagmanager_sources,
-        name            = 'tagmanager',
-        target          = 'tagmanager',
-        includes        = ['.', 'tagmanager', 'tagmanager/ctags'],
-        defines         = ['GEANY_PRIVATE', 'G_LOG_DOMAIN="Tagmanager"'],
-        uselib          = ['cshlib', 'GTK', 'GLIB', 'geanyexport', 'C99'])
-
-    # MIO
-    bld.objects(
-        features        = ['c'],
-        source          = mio_sources,
-        name            = 'mio',
-        target          = 'mio',
-        includes        = ['.', 'tagmanager/mio/'],
-        defines         = 'G_LOG_DOMAIN="MIO"',
-        uselib          = ['cshlib', 'GTK', 'GLIB', 'geanyexport'])
-
-    # Scintilla
-    files = bld.srcnode.ant_glob('scintilla/**/*.cxx', src=True, dir=False)
-    scintilla_sources.update([file.path_from(bld.srcnode) for file in files])
-    bld.objects(
-        features        = ['c', 'cxx'],
-        name            = 'scintilla',
-        target          = 'scintilla',
-        source          = scintilla_sources,
-        includes        = ['.', 'scintilla/include', 'scintilla/src', 'scintilla/lexlib'],
-        uselib          = ['cshlib', 'cxxshlib', 'GTK', 'GLIB', 'GMODULE', 'M', 'geanyexport'])
-
-    # Geany
-    if bld.env['HAVE_VTE'] == 1:
-        geany_sources.add('src/vte.c')
-    if is_win32:
-        geany_sources.add('src/win32.c')
-        geany_bin_sources.add('geany_private.rc')
-
-    def gen_signallist(task):
-        from xml.etree import ElementTree
-
-        def find_handlers(xml_filename):
-            tree = ElementTree.parse(xml_filename)
-            signals = tree.getroot().findall(".//signal")
-            return [sig.attrib["handler"] for sig in signals]
-
-        handlers = []
-        for node in task.inputs:
-            handlers += find_handlers(node.abspath())
-        handlers = sorted(set(handlers))
-
-        for node in task.outputs:
-            node.write("/* This file is auto-generated, do not edit. */\n" +
-                       ''.join(["ITEM(%s)\n" % h for h in handlers]))
-
-    # signallist.i
-    bld(
-        source  = 'data/geany.glade',
-        target  = bld.path.get_bld().make_node('src/signallist.i'),
-        name    = 'signallist.i',
-        rule    = gen_signallist)
-
-    base_uselibs = ['GTK', 'GLIB', 'GMODULE', 'GIO', 'GTHREAD', 'WIN32', 'MAC_INTEGRATION', 'SUNOS_SOCKET', 'M', 'C99']
-
-    # libgeany
-    bld.shlib(
-        features        = ['c', 'cxx'],
-        name            = 'geany',
-        target          = 'geany',
-        source          = geany_sources,
-        includes        = ['.', 'scintilla/include', 'tagmanager/src', 'src'],
-        defines         = ['G_LOG_DOMAIN="Geany"', 'GEANY_PRIVATE'],
-        uselib          = base_uselibs + ['geanyexport'],
-        use             = ['scintilla', 'ctags', 'tagmanager', 'mio'],
-        linkflags       = bld.env['LINKFLAGS_cprogram'],
-        vnum            = GEANY_LIB_VERSION,
-        install_path    = '${PREFIX}/bin' if is_win32 else '${LIBDIR}')
-
-    # geany executable
-    t = bld.program(
-        features        = ['c', 'cxx'],
-        name            = 'geany_bin',
-        target          = 'geany',
-        source          = geany_bin_sources,
-        includes        = ['.', 'scintilla/include', 'tagmanager/src'],
-        defines         = ['G_LOG_DOMAIN="Geany"', 'GEANY_PRIVATE'],
-        uselib          = base_uselibs + ['geanyexport'],
-        use             = ['geany'])
-    if not is_win32:
-        # http://www.freehackers.org/~tnagy/testdoc/single.html#common_c
-        t.rpath = bld.env['LIBDIR']
-
-    # Plugins
-    if bld.env['HAVE_PLUGINS'] == 1:
-        build_plugin('classbuilder')
-        build_plugin('demoplugin', False)
-        build_plugin('export', uselib_add=['M'])
-        build_plugin('filebrowser')
-        build_plugin('htmlchars')
-        build_plugin('saveactions')
-        build_plugin('splitwindow')
-
-    # Translations
-    if bld.env['INTLTOOL']:
-        bld(
-            features        = ['linguas', 'intltool_po'],
-            podir           = 'po',
-            install_path    = '${LOCALEDIR}',
-            appname         = 'geany')
-
-    # HTML documentation (build if it is not part of the tree already, as it is required for install)
-    html_doc_filename = os.path.join(bld.out_dir, 'doc', 'geany.html')
-    if bld.env['RST2HTML']:
-        rst2html = bld.env['RST2HTML']
-        bld(
-            source  = ['doc/geany.txt'],
-            deps    = ['doc/geany.css'],
-            target  = bld.path.get_bld().make_node('doc/geany.html'),
-            name    = 'geany.html',
-            cwd     = os.path.join(bld.path.abspath(), 'doc'),
-            rule    = '%s  -stg --stylesheet=geany.css geany.txt %s' % (rst2html, html_doc_filename))
-
-    # geany.pc
-    if is_win32:
-        # replace backward slashes by forward slashes as they could be interepreted as escape
-        # characters
-        geany_pc_prefix = bld.env['PREFIX'].replace('\\', '/')
-    else:
-        geany_pc_prefix = bld.env['PREFIX']
-    bld(
-        source          = 'geany.pc.in',
-        dct             = {'VERSION': VERSION,
-                           'DEPENDENCIES': '%s >= %s glib-2.0 >= %s' % \
-                                (bld.env['gtk_package_name'],
-                                 bld.env['minimum_gtk_version'],
-                                 MINIMUM_GLIB_VERSION),
-                           'prefix': geany_pc_prefix,
-                           'exec_prefix': '${prefix}',
-                           'libdir': '${exec_prefix}/lib',
-                           'includedir': '${prefix}/include',
-                           'datarootdir': '${prefix}/share',
-                           'datadir': '${datarootdir}',
-                           'localedir': '${datarootdir}/locale'})
-
-    # geany.nsi
-    bld(
-        features        = 'subst',
-        source          = 'geany.nsi.in',
-        target          = 'geany.nsi',
-        dct             = {'VERSION': VERSION,
-                           'GTK_VERSION': bld.env['gtk_version']},
-        install_path    = None)
-
-    if not is_win32:
-        # geany.desktop
-        if bld.env['INTLTOOL']:
-            bld(
-                features        = 'intltool_in',
-                source          = 'geany.desktop.in',
-                flags           = ['-d', '-q', '-u', '-c'],
-                install_path    = '${DATADIR}/applications')
-
-        # geany.1
-        bld(
-            features        = 'subst',
-            source          = 'doc/geany.1.in',
-            target          = 'geany.1',
-            dct             = {'VERSION': VERSION,
-                                'GEANY_DATA_DIR': bld.env['DATADIR'] + '/geany'},
-            install_path    = '${MANDIR}/man1')
-
-        # geany.spec
-        bld(
-            features        = 'subst',
-            source          = 'geany.spec.in',
-            target          = 'geany.spec',
-            install_path    = None,
-            dct             = {'VERSION': VERSION})
-
-        # Doxyfile
-        bld(
-            features        = 'subst',
-            source          = 'doc/Doxyfile.in',
-            target          = 'doc/Doxyfile',
-            install_path    = None,
-            dct             = {'VERSION': VERSION,
-                               'top_builddir': bld.out_dir,
-                               'top_srcdir': bld.top_dir,})
-
-    # disable build/install phase interleaving
-    bld.add_group()
-
-    ###
-    # Install files
-    ###
-    # Headers
-    bld.install_files('${PREFIX}/include/geany', '''
-        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/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
-        src/gtkcompat.h
-        plugins/geanyplugin.h
-        plugins/geanyfunctions.h
-        ''')
-    bld.install_files('${PREFIX}/include/geany/scintilla', '''
-        scintilla/include/SciLexer.h scintilla/include/Scintilla.h
-        scintilla/include/Scintilla.iface scintilla/include/ScintillaWidget.h
-        scintilla/include/Sci_Position.h ''')
-    bld.install_files('${PREFIX}/include/geany/tagmanager', '''
-        tagmanager/src/tm_source_file.h
-        tagmanager/src/tm_tag.h
-        tagmanager/src/tm_tagmanager.h
-        tagmanager/src/tm_workspace.h ''')
-    # Docs
-    base_dir = '${PREFIX}' if is_win32 else '${DOCDIR}'
-    ext = '.txt' if is_win32 else ''
-    for filename in 'AUTHORS ChangeLog COPYING README NEWS THANKS TODO'.split():
-        basename = _uc_first(filename, bld)
-        destination_filename = '%s%s' % (basename, ext)
-        destination = os.path.join(base_dir, destination_filename)
-        bld.install_as(destination, filename)
-
-    # install HTML documentation only if it exists, i.e. it was built before
-    # local_html_doc_filename supports installing HTML doc from in-tree geany.html if it exists
-    local_html_doc_filename = os.path.join(bld.path.abspath(), 'doc', 'geany.html')
-    if os.path.exists(html_doc_filename) or os.path.exists(local_html_doc_filename):
-        html_dir = '' if is_win32 else 'html/'
-        html_name = 'Manual.html' if is_win32 else 'index.html'
-        start_dir = bld.path.find_dir('doc/images')
-        bld.install_files('${DOCDIR}/%simages' % html_dir, start_dir.ant_glob('*.png'), cwd=start_dir)
-        bld.install_as('${DOCDIR}/%s%s' % (html_dir, html_name), 'doc/geany.html')
-
-    bld.install_as('${DOCDIR}/%s' % _uc_first('manual.txt', bld), 'doc/geany.txt')
-    bld.install_as('${DOCDIR}/ScintillaLicense.txt', 'scintilla/License.txt')
-    if is_win32:
-        bld.install_as('${DOCDIR}/ReadMe.I18n.txt', 'README.I18N')
-        bld.install_as('${DOCDIR}/Hacking.txt', 'HACKING')
-    # Data
-    data_dir = '' if is_win32 else 'geany'
-    start_dir = bld.path.find_dir('data')
-    bld.install_as('${DATADIR}/%s/GPL-2' % data_dir, 'COPYING')
-    bld.install_files('${DATADIR}/%s' % data_dir, start_dir.ant_glob('filetype*'), cwd=start_dir)
-    bld.install_files('${DATADIR}/%s' % data_dir, start_dir.ant_glob('*.tags'), cwd=start_dir)
-    bld.install_files('${DATADIR}/%s' % data_dir, 'data/geany.glade')
-    bld.install_files('${DATADIR}/%s' % data_dir, 'data/snippets.conf')
-    bld.install_files('${DATADIR}/%s' % data_dir, 'data/ui_toolbar.xml')
-    if bld.env['use_gtk3']:
-        bld.install_files('${DATADIR}/%s' % data_dir, 'data/geany.css')
-    else:
-        bld.install_files('${DATADIR}/%s' % data_dir, 'data/geany.gtkrc')
-
-    start_dir = bld.path.find_dir('data/colorschemes')
-    template_dest = '${DATADIR}/%s/colorschemes' % data_dir
-    bld.install_files(template_dest, start_dir.ant_glob('*'), cwd=start_dir)
-    start_dir = bld.path.find_dir('data/templates')
-    template_dest = '${DATADIR}/%s/templates' % data_dir
-    bld.install_files(template_dest, start_dir.ant_glob('**/*'), cwd=start_dir, relative_trick=True)
-    # Icons
-    for dest, srcs in geany_icons.items():
-        dest_dir = os.path.join('${PREFIX}/share/icons' if is_win32 else '${DATADIR}/icons', dest)
-        bld.install_files(dest_dir, srcs, cwd=bld.path.find_dir('icons'))
-    # install theme indexes on Windows
-    if is_win32:
-        for dest, srcs in geany_icons_indexes.items():
-            bld.install_files(os.path.join('${PREFIX}/share/icons', dest), srcs, cwd=bld.path.find_dir('icons'))
-
-
-def distclean(ctx):
-    Scripting.distclean(ctx)
-    _remove_linguas_file()
-
-
-def _remove_linguas_file():
-    # remove LINGUAS file as well
-    try:
-        os.unlink(LINGUAS_FILE)
-    except OSError:
-        pass
-
-
- at feature('linguas')
- at before_method('apply_intltool_po')
-def write_linguas_file(self):
-    if os.path.exists(LINGUAS_FILE):
-        return
-    linguas = ''
-    if 'LINGUAS' in self.env:
-        files = self.env['LINGUAS']
-        for po_filename in files.split(' '):
-            if os.path.exists('po/%s.po' % po_filename):
-                linguas += '%s ' % po_filename
-    else:
-        files = os.listdir('%s/po' % self.path.abspath())
-        files.sort()
-        for filename in files:
-            if filename.endswith('.po'):
-                linguas += '%s ' % filename[:-3]
-    file_h = open(LINGUAS_FILE, 'w')
-    file_h.write('# This file is autogenerated. Do not edit.\n%s\n' % linguas)
-    file_h.close()
-
-
-def _post_install(ctx):
-    is_win32 = _target_is_win32(ctx)
-    if is_win32:
-        return
-    for d in 'hicolor', 'Tango':
-        theme_dir = Utils.subst_vars('${DATADIR}/icons/' + d, ctx.env)
-        icon_cache_updated = False
-        if not ctx.options.destdir:
-            ctx.exec_command('gtk-update-icon-cache -q -f -t %s' % theme_dir)
-            Logs.pprint('GREEN', 'GTK icon cache updated.')
-            icon_cache_updated = True
-        if not icon_cache_updated:
-            Logs.pprint('YELLOW', 'Icon cache not updated. After install, run this:')
-            Logs.pprint('YELLOW', 'gtk-update-icon-cache -q -f -t %s' % theme_dir)
-
-
-def updatepo(ctx):
-    """update the message catalogs for internationalization"""
-    potfile = '%s.pot' % APPNAME
-    os.chdir('%s/po' % top)
-    try:
-        try:
-            old_size = os.stat(potfile).st_size
-        except OSError:
-            old_size = 0
-        ctx.exec_command('intltool-update --pot -g %s' % APPNAME)
-        size_new = os.stat(potfile).st_size
-        if size_new != old_size:
-            Logs.pprint('CYAN', 'Updated POT file.')
-            Logs.pprint('CYAN', 'Updating translations')
-            ret = ctx.exec_command('intltool-update -r -g %s' % APPNAME)
-            if ret != 0:
-                Logs.pprint('RED', 'Updating translations failed')
-        else:
-            Logs.pprint('CYAN', 'POT file is up to date.')
-    except OSError:
-        Logs.pprint('RED', 'Failed to generate pot file.')
-
-
-def apidoc(ctx):
-    """generate API reference documentation"""
-    ctx = BuildContext()  # create our own context to have ctx.top_dir
-    basedir = ctx.top_dir
-    doxygen = _find_program(ctx, 'doxygen')
-    doxyfile = '%s/doc/Doxyfile' % ctx.out_dir
-    Logs.pprint('CYAN', 'Generating API documentation')
-    ret = ctx.exec_command('%s %s' % (doxygen, doxyfile))
-    if ret != 0:
-        raise WafError('Generating API documentation failed')
-
-
-def hackingdoc(ctx):
-    """generate HACKING documentation"""
-    ctx = BuildContext()  # create our own context to have ctx.top_dir
-    Logs.pprint('CYAN', 'Generating HACKING documentation')
-    cmd = _find_rst2html(ctx)
-    hacking_file = os.path.join(ctx.top_dir, 'HACKING')
-    hacking_html_file = os.path.join(ctx.top_dir, 'doc', 'hacking.html')
-    stylesheet = os.path.join(ctx.top_dir, 'doc', 'geany.css')
-    ret = ctx.exec_command('%s  -stg --stylesheet=%s %s %s' % (
-        cmd, stylesheet, hacking_file, hacking_html_file))
-    if ret != 0:
-        raise WafError('Generating HACKING documentation failed')
-
-
-def _find_program(ctx, cmd, **kw):
-    def noop(*args):
-        pass
-
-    if ctx is None or not isinstance(ctx, ConfigurationContext):
-        ctx = ConfigurationContext()
-        ctx.to_log = noop
-        ctx.msg = noop
-    return ctx.find_program(cmd, **kw)
-
-
-def _find_rst2html(ctx):
-    cmds = ['rst2html', 'rst2html2']
-    for command in cmds:
-        cmd = _find_program(ctx, command, mandatory=False, exts=',.py')
-        if cmd:
-            break
-    if not cmd:
-        raise WafError(
-            'rst2html.py could not be found. Please install the Python docutils package.')
-    return cmd
-
-
-def _add_define_to_env(conf, key):
-    value = conf.get_define(key)
-    # strip quotes
-    value = value.replace('"', '')
-    conf.env[key] = value
-
-
-def _add_to_env_and_define(conf, key, value, quote=False):
-    conf.define(key, value, quote)
-    conf.env[key] = value
-
-
-def _define_from_opt(conf, define_name, opt_value, default_value, quote=1):
-    value = default_value
-    if opt_value:
-        if isinstance(opt_value, bool):
-            opt_value = 1
-        value = opt_value
-
-    if value is not None:
-        _add_to_env_and_define(conf, define_name, value, quote)
-    else:
-        conf.undefine(define_name)
-
-
-def _get_git_rev(conf):
-    if conf.options.no_scm:
-        return
-
-    if not os.path.isdir('.git'):
-        return
-
-    try:
-        cmd = 'git rev-parse --short --revs-only HEAD'
-        revision = conf.cmd_and_log(cmd).strip()
-    except WafError:
-        return None
-    else:
-        return revision
-
-
-def _load_intltool_if_available(conf):
-    try:
-        conf.load('intltool')
-        if 'LINGUAS' in os.environ:
-            conf.env['LINGUAS'] = os.environ['LINGUAS']
-    except WafError:
-        # on Windows, we don't hard depend on intltool, on all other platforms raise an error
-        if not _target_is_win32(conf):
-            raise
-
-
-def _target_is_win32(ctx):
-    if 'is_win32' in ctx.env:
-        # cached
-        return ctx.env['is_win32']
-    is_win32 = None
-    if sys.platform == 'win32':
-        is_win32 = True
-    if is_win32 is None:
-        if ctx.env and 'CC' in ctx.env:
-            env_cc = ctx.env['CC']
-            if not isinstance(env_cc, str):
-                env_cc = ''.join(env_cc)
-            is_win32 = (env_cc.find('mingw') != -1)
-    if is_win32 is None:
-        is_win32 = False
-    # cache for future checks
-    ctx.env['is_win32'] = is_win32
-    return is_win32
-
-
-def _uc_first(string, ctx):
-    if _target_is_win32(ctx):
-        return string.title()
-    return string
-
-
-# Copied from Geany-Plugins
-def _check_c99(conf):
-    # FIXME: improve some checks?
-    # TODO: look at Autoconf's C99 checks?
-    fragment = '''
-    // single-line comments
-
-    #include <stdbool.h>
-
-    struct s { int a, b; };
-
-    // inlines
-    static inline void fun_inline(struct s param) {}
-
-    int main(void) {
-        _Bool b = false;
-
-        // variable declaration in for body
-        for (int i = 0; i < 2; i++);
-
-        // compound literals
-        fun_inline((struct s) { 1, 2 });
-
-        // mixed declarations and code
-        int mixed = 0;
-
-        // named initializers
-        struct s name_inited = {
-            .a = 42,
-            .b = 64
-        };
-
-        return (b || mixed || ! name_inited.a);
-    }
-    '''
-
-    exc = None
-    # list of flags is stolen from Autoconf 2.69
-    flags = ['', '-std=gnu99', '-std=c99', '-c99', '-AC99',
-             '-D_STDC_C99=', '-qlanglvl=extc99']
-    for flag in flags:
-        try:
-            desc = ['with flag %s' % flag, 'with no flags'][not flag]
-            conf.check_cc(fragment=fragment, uselib_store='C99', cflags=flag,
-                          msg="Checking for C99 support (%s)" % desc)
-            exc = None
-            break
-        except ConfigurationError as e:
-            exc = e
-    if exc:
-        raise exc
-    return True



--------------
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