This is an automated email from the git hooks/post-receive script. sebastic pushed a commit to branch master in repository mapnik.
commit 852ec99b205d51db2feed6e5375a869399276688 Author: Bas Couwenberg <sebas...@xs4all.nl> Date: Wed Nov 29 20:50:45 2017 +0100 New upstream version 3.0.17+ds --- .travis.yml | 10 +++- CHANGELOG.md | 9 +++ README.md | 2 +- SConstruct | 69 ++++++++++++---------- bootstrap.sh | 17 +++--- circle.yml | 1 + demo/viewer/build.py | 2 +- include/mapnik/version.hpp | 2 +- plugins/input/csv/build.py | 2 +- plugins/input/geojson/build.py | 2 +- plugins/input/pgraster/build.py | 2 +- plugins/input/postgis/build.py | 2 +- plugins/input/topojson/build.py | 2 +- scripts/check_glibcxx.sh | 36 +++++++++++ src/build.py | 21 ++++--- src/font_engine_freetype.cpp | 1 + .../mapnik/version.hpp => src/glibc_workaround.cpp | 34 +++++++---- src/text/renderer.cpp | 17 +++--- utils/mapnik-config/build.py | 6 +- 19 files changed, 154 insertions(+), 83 deletions(-) diff --git a/.travis.yml b/.travis.yml index d2065e4..38793fd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,7 +33,7 @@ matrix: - os: linux sudo: false compiler: ": clang" - env: JOBS=8 CXX="ccache clang++-3.9 -Qunused-arguments" CC="clang-3.9" TRIGGER=true + env: JOBS=8 CXX="ccache clang++-3.9 -Qunused-arguments" CC="clang-3.9" ENABLE_GLIBC_WORKAROUND=true TRIGGER=true addons: apt: sources: [ 'ubuntu-toolchain-r-test'] @@ -95,7 +95,7 @@ before_script: script: - export SCONSFLAGS='--debug=time' - - configure BENCHMARK=${BENCH} + - configure BENCHMARK=${BENCH} ENABLE_GLIBC_WORKAROUND=${ENABLE_GLIBC_WORKAROUND:-false} - cat config.log # we limit the `make` to 40 min # to ensure that slow builds still upload their @@ -108,4 +108,8 @@ script: # we allow visual failures with g++ for now: https://github.com/mapnik/mapnik/issues/3567 - if [[ ${RESULT} != 0 ]] && [[ ${CXX} =~ 'clang++' ]]; then false; fi; - enabled ${COVERAGE} coverage - - enabled ${BENCH} make bench \ No newline at end of file + - enabled ${BENCH} make bench + - ./scripts/check_glibcxx.sh + +after_success: + - enabled ${TRIGGER} trigger_downstream diff --git a/CHANGELOG.md b/CHANGELOG.md index 8cc955f..d0be79b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,15 @@ Developers: Please commit along with changes. For a complete change history, see the git log. +## 3.0.17 + +Released: November 29, 2017 + +(Packaged from ebdd96c61) + + - Use `Scons 3` as an internal build sytsem + support both Python 2 and 3. + - Added glibcxx workaround to support libstdc++-4.8 + ## 3.0.16 Released: November 16, 2017 diff --git a/README.md b/README.md index b58be71..8f4dd2e 100644 --- a/README.md +++ b/README.md @@ -28,4 +28,4 @@ Please note that this project is released with a [Contributor Code of Conduct](h # License -Mapnik software is free and is released under the LGPL ([GNU Lesser General Public License](http://www.gnu.org/licenses/lgpl.html)). Please see [COPYING](https://github.com/mapnik/mapnik/blob/master/COPYING) for more information. +Mapnik software is free and is released under the LGPL v2.1 ([GNU Lesser General Public License, version 2.1](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html)). Please see [COPYING](https://github.com/mapnik/mapnik/blob/master/COPYING) for more information. diff --git a/SConstruct b/SConstruct index a3f725c..4a6641d 100644 --- a/SConstruct +++ b/SConstruct @@ -1,6 +1,6 @@ # This file is part of Mapnik (c++ mapping toolkit) # -# Copyright (C) 2015 Artem Pavlenko +# Copyright (C) 2017 Artem Pavlenko # # Mapnik is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -16,6 +16,7 @@ # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +from __future__ import print_function # support python2 import os import sys @@ -136,7 +137,7 @@ env = Environment(ENV=os.environ) init_environment(env) def fix_path(path): - return os.path.abspath(path) + return str(os.path.abspath(path)) def color_print(color,text,newline=True): # 1 - red @@ -145,15 +146,15 @@ def color_print(color,text,newline=True): # 4 - blue text = "\033[9%sm%s\033[0m" % (color,text) if not newline: - print text, + print (text, end='') else: - print text + print (text) def regular_print(color,text,newline=True): if not newline: - print text, + print (text, end='') else: - print text + print (text) def call(cmd, silent=False): stdin, stderr = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE).communicate() @@ -244,7 +245,7 @@ def sort_paths(items,priority): path_types['other'].append(i) # build up new list based on priority list for path in priority: - if path_types.has_key(path): + if path in path_types: dirs = path_types[path] new.extend(dirs) path_types.pop(path) @@ -308,6 +309,7 @@ opts.AddVariables( BoolVariable('USE_CONFIG', "Use SCons user '%s' file (will also write variables after successful configuration)", 'True'), BoolVariable('NO_ATEXIT', 'Will prevent Singletons from being deleted atexit of main thread', 'False'), BoolVariable('NO_DLCLOSE', 'Will prevent plugins from being unloaded', 'False'), + BoolVariable('ENABLE_GLIBC_WORKAROUND', "Workaround known GLIBC symbol exports to allow building against libstdc++-4.8 without binaries needing throw_out_of_range_fmt", 'False'), # http://www.scons.org/wiki/GoFastButton # http://stackoverflow.com/questions/1318863/how-to-optimize-an-scons-script BoolVariable('FAST', "Make SCons faster at the cost of less precise dependency tracking", 'False'), @@ -509,7 +511,7 @@ elif HELP_REQUESTED: # https://github.com/mapnik/mapnik/issues/2112 if not os.path.exists(SCONS_LOCAL_LOG) and not os.path.exists(SCONS_CONFIGURE_CACHE) \ and ('-c' in command_line_args or '--clean' in command_line_args): - print 'all good: nothing to clean, but you might want to run "make distclean"' + print ('all good: nothing to clean, but you might want to run "make distclean"') Exit(0) # initially populate environment with defaults and any possible custom arguments @@ -519,7 +521,7 @@ opts.Update(env) if not force_configure: if os.path.exists(SCONS_CONFIGURE_CACHE): try: - pickled_environment = open(SCONS_CONFIGURE_CACHE, 'r') + pickled_environment = open(SCONS_CONFIGURE_CACHE, 'rb') pickled_values = pickle.load(pickled_environment) for key, value in pickled_values.items(): env[key] = value @@ -551,7 +553,7 @@ elif preconfigured: color_print(4,'Using previous successful configuration...') color_print(4,'Re-configure by running "python scons/scons.py configure".') -if env.has_key('COLOR_PRINT') and env['COLOR_PRINT'] == False: +if 'COLOR_PRINT' in env and env['COLOR_PRINT'] == False: color_print = regular_print if sys.platform == "win32": @@ -620,9 +622,9 @@ def parse_config(context, config, checks='--libs --cflags'): else: env.ParseConfig(cmd) parsed = True - except OSError, e: + except OSError as e: ret = False - print ' (xml2-config not found!)' + print (' (xml2-config not found!)') if not parsed: if config in ('GDAL_CONFIG'): # optional deps... @@ -645,7 +647,7 @@ def get_pkg_lib(context, config, lib): parsed = False if ret: try: - value = call(cmd,silent=True) + value = call(cmd,silent=True).decode("utf8") if ' ' in value: parts = value.split(' ') if len(parts) > 1: @@ -656,9 +658,9 @@ def get_pkg_lib(context, config, lib): else: # osx 1.8 install gives '-framework GDAL' libname = 'gdal' - except Exception, e: + except Exception as e: ret = False - print ' unable to determine library name:'# %s' % str(e) + print (' unable to determine library name:# {0!s}'.format(e)) return None context.Result( libname ) return libname @@ -670,8 +672,8 @@ def parse_pg_config(context, config): context.Message( 'Checking for %s... ' % tool) ret = context.TryAction(env[config])[0] if ret: - lib_path = call('%s --libdir' % env[config]) - inc_path = call('%s --includedir' % env[config]) + lib_path = call('%s --libdir' % env[config]).decode("utf8") + inc_path = call('%s --includedir' % env[config]).decode("utf8") env.AppendUnique(CPPPATH = fix_path(inc_path)) env.AppendUnique(LIBPATH = fix_path(lib_path)) lpq = env['PLUGINS']['postgis']['lib'] @@ -806,7 +808,7 @@ int main() return ret def CheckIcuData(context, silent=False): - + if not silent: context.Message('Checking for ICU data directory...') ret = context.TryRun(""" @@ -833,7 +835,7 @@ int main() { return ret[1].strip() def CheckGdalData(context, silent=False): - + if not silent: context.Message('Checking for GDAL data directory...') ret = context.TryRun(""" @@ -856,7 +858,7 @@ int main() { return ret[1].strip() def CheckProjData(context, silent=False): - + if not silent: context.Message('Checking for PROJ_LIB directory...') ret = context.TryRun(""" @@ -1234,7 +1236,7 @@ if not preconfigured: if os.path.exists(conf): opts.files.append(conf) color_print(4,"SCons CONFIG found: '%s', variables will be inherited..." % conf) - optfile = file(conf) + optfile = open(conf, 'r') #print optfile.read().replace("\n", " ").replace("'","").replace(" = ","=") optfile.close() @@ -1401,7 +1403,7 @@ if not preconfigured: temp_env.ParseConfig('%s --libs' % env['FREETYPE_CONFIG']) if 'bz2' in temp_env['LIBS']: env['EXTRA_FREETYPE_LIBS'].append('bz2') - except OSError,e: + except OSError as e: pass # libxml2 should be optional but is currently not @@ -1702,7 +1704,7 @@ if not preconfigured: if not lib in env['LIBS']: env["SQLITE_LINKFLAGS"].append(lib) env.Append(LIBS=lib) - except OSError,e: + except OSError as e: for lib in ["sqlite3","dl","pthread"]: if not lib in env['LIBS']: env["SQLITE_LINKFLAGS"].append("lib") @@ -1785,7 +1787,7 @@ if not preconfigured: env['HAS_CAIRO'] = False env['SKIPPED_DEPS'].append('cairo') else: - print 'Checking for cairo lib and include paths... ', + print ('Checking for cairo lib and include paths... ', end='') cmd = 'pkg-config --libs --cflags cairo' if env['RUNTIME_LINK'] == 'static': cmd += ' --static' @@ -1802,8 +1804,8 @@ if not preconfigured: if not inc in env['CPPPATH']: env["CAIRO_CPPPATHS"].append(inc) env['HAS_CAIRO'] = True - print 'yes' - except OSError,e: + print ('yes') + except OSError as e: color_print(1,'no') env['SKIPPED_DEPS'].append('cairo') color_print(1,'pkg-config reported: %s' % e) @@ -1872,6 +1874,9 @@ if not preconfigured: if env['NO_DLCLOSE'] or env['COVERAGE']: env.Append(CPPDEFINES = '-DMAPNIK_NO_DLCLOSE') + if env['ENABLE_GLIBC_WORKAROUND']: + env.Append(CPPDEFINES = '-DMAPNIK_ENABLE_GLIBC_WORKAROUND') + # Mac OSX (Darwin) special settings if env['PLATFORM'] == 'Darwin': pthread = '' @@ -1955,7 +1960,7 @@ if not preconfigured: # finish config stage and pickle results env = conf.Finish() - env_cache = open(SCONS_CONFIGURE_CACHE, 'w') + env_cache = open(SCONS_CONFIGURE_CACHE, 'wb') pickle_dict = {} for i in pickle_store: pickle_dict[i] = env.get(i) @@ -1966,20 +1971,20 @@ if not preconfigured: # with a non-root configure following a root install # that also triggered a re-configure try: - os.chmod(SCONS_CONFIGURE_CACHE,0666) + os.chmod(SCONS_CONFIGURE_CACHE,0o666) except: pass try: - os.chmod(SCONS_LOCAL_CONFIG,0666) + os.chmod(SCONS_LOCAL_CONFIG,0o666) except: pass try: - os.chmod('.sconsign.dblite',0666) + os.chmod('.sconsign.dblite',0o666) except: pass try: - os.chmod(SCONS_LOCAL_LOG,0666) + os.chmod(SCONS_LOCAL_LOG,0o666) except: pass try: for item in glob('%s/*' % SCONF_TEMP_DIR): - os.chmod(item,0666) + os.chmod(item, 0o666) except: pass if 'configure' in command_line_args: diff --git a/bootstrap.sh b/bootstrap.sh index 030c0dc..c591b11 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -11,7 +11,7 @@ todo - shrink icu data ' -MASON_VERSION="v0.11.1" +MASON_VERSION="v0.17.0" function setup_mason() { if [[ ! -d ./.mason ]]; then @@ -45,6 +45,7 @@ function install() { } ICU_VERSION="57.1" +BOOST_VERSION="1.65.1" function install_mason_deps() { install ccache 3.3.1 @@ -64,15 +65,15 @@ function install_mason_deps() { # here by default helps make mapnik-vector-tile builds easier install webp 0.6.0 libwebp install libgdal 2.1.3 libgdal - install boost 1.63.0 - install boost_libsystem 1.63.0 - install boost_libfilesystem 1.63.0 - install boost_libprogram_options 1.63.0 - install boost_libregex_icu57 1.63.0 + install boost ${BOOST_VERSION} + install boost_libsystem ${BOOST_VERSION} + install boost_libfilesystem ${BOOST_VERSION} + install boost_libprogram_options ${BOOST_VERSION} + install boost_libregex_icu57 ${BOOST_VERSION} # technically boost thread and python are not a core dep, but installing # here by default helps make python-mapnik builds easier - install boost_libthread 1.63.0 - install boost_libpython 1.63.0 + install boost_libthread ${BOOST_VERSION} + install boost_libpython ${BOOST_VERSION} install freetype 2.7.1 libfreetype install harfbuzz 1.4.4-ft libharfbuzz } diff --git a/circle.yml b/circle.yml index 5624c66..02c4147 100644 --- a/circle.yml +++ b/circle.yml @@ -32,6 +32,7 @@ database: - ./.mason/mason link clang++ ${LLVM_VERSION} - ./configure CC="$(pwd)/mason_packages/.link/bin/clang" CXX="$(pwd)/mason_packages/.link/bin/ccache $(pwd)/mason_packages/.link/bin/clang++ -Qunused-arguments" - make + - nm src/libmapnik* | grep "GLIBCXX_3.4.2[0-9]" || true override: - psql -c 'create database template_postgis;' - psql -c 'create extension postgis;' -d template_postgis diff --git a/demo/viewer/build.py b/demo/viewer/build.py index cbd35f7..7c52093 100644 --- a/demo/viewer/build.py +++ b/demo/viewer/build.py @@ -43,5 +43,5 @@ ini = ini_template % locals() open('viewer.ini','w').write(ini) try: - os.chmod('viewer.ini',0666) + os.chmod('viewer.ini',0o666) except: pass diff --git a/include/mapnik/version.hpp b/include/mapnik/version.hpp index d891d46..244c05d 100644 --- a/include/mapnik/version.hpp +++ b/include/mapnik/version.hpp @@ -27,7 +27,7 @@ #define MAPNIK_MAJOR_VERSION 3 #define MAPNIK_MINOR_VERSION 0 -#define MAPNIK_PATCH_VERSION 16 +#define MAPNIK_PATCH_VERSION 17 #define MAPNIK_VERSION (MAPNIK_MAJOR_VERSION*100000) + (MAPNIK_MINOR_VERSION*100) + (MAPNIK_PATCH_VERSION) diff --git a/plugins/input/csv/build.py b/plugins/input/csv/build.py index 91675a1..f5e030d 100644 --- a/plugins/input/csv/build.py +++ b/plugins/input/csv/build.py @@ -29,7 +29,7 @@ if env.get('BOOST_LIB_VERSION_FROM_HEADER'): can_build = True if not can_build: - print 'WARNING: skipping building the optional CSV datasource plugin which requires boost >= 1.56' + print ('WARNING: skipping building the optional CSV datasource plugin which requires boost >= 1.56') else: Import ('plugin_base') diff --git a/plugins/input/geojson/build.py b/plugins/input/geojson/build.py index a5d738f..d0f8d29 100644 --- a/plugins/input/geojson/build.py +++ b/plugins/input/geojson/build.py @@ -29,7 +29,7 @@ if env.get('BOOST_LIB_VERSION_FROM_HEADER'): can_build = True if not can_build: - print 'WARNING: skipping building the optional geojson datasource plugin which requires boost >= 1.56' + print ('WARNING: skipping building the optional geojson datasource plugin which requires boost >= 1.56') else: Import ('plugin_base') diff --git a/plugins/input/pgraster/build.py b/plugins/input/pgraster/build.py index 7d120e4..2549300 100644 --- a/plugins/input/pgraster/build.py +++ b/plugins/input/pgraster/build.py @@ -43,7 +43,7 @@ if env['RUNTIME_LINK'] == 'static': cmd = 'pkg-config libpq --libs --static' try: plugin_env.ParseConfig(cmd) - except OSError, e: + except OSError as e: plugin_env.Append(LIBS='pq') else: plugin_env.Append(LIBS='pq') diff --git a/plugins/input/postgis/build.py b/plugins/input/postgis/build.py index 409f88b..c4aabf6 100644 --- a/plugins/input/postgis/build.py +++ b/plugins/input/postgis/build.py @@ -42,7 +42,7 @@ if env['RUNTIME_LINK'] == 'static': cmd = 'pkg-config libpq --libs --static' try: plugin_env.ParseConfig(cmd) - except OSError, e: + except OSError as e: plugin_env.Append(LIBS='pq') else: plugin_env.Append(LIBS='pq') diff --git a/plugins/input/topojson/build.py b/plugins/input/topojson/build.py index 3a49320..6df31a3 100644 --- a/plugins/input/topojson/build.py +++ b/plugins/input/topojson/build.py @@ -29,7 +29,7 @@ if env.get('BOOST_LIB_VERSION_FROM_HEADER'): can_build = True if not can_build: - print 'WARNING: skipping building the optional topojson datasource plugin which requires boost >= 1.56' + print ('WARNING: skipping building the optional topojson datasource plugin which requires boost >= 1.56') else: Import ('plugin_base') diff --git a/scripts/check_glibcxx.sh b/scripts/check_glibcxx.sh new file mode 100755 index 0000000..ae29893 --- /dev/null +++ b/scripts/check_glibcxx.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +set -eu +set -o pipefail +shopt -s nullglob + +: ' + +Ensure no GLIBCXX_3.4.2x symbols are present in the binary +if ENABLE_GLIBC_WORKAROUND is set. + +If symbols >= 3.4.20 then it means the binaries would not run on ubuntu trusty without upgrading libstdc++ + +' + +FINAL_RETURN_CODE=0 + +function check() { + local RESULT=0 + nm ${1} | grep "GLIBCXX_3.4.2[0-9]" > /tmp/out.txt || RESULT=$? + if [[ ${RESULT} != 0 ]]; then + echo "Success: GLIBCXX_3.4.2[0-9] symbols not present in binary (as expected)" + else + echo "$(cat /tmp/out.txt | c++filt)" + if [[ ${ENABLE_GLIBC_WORKAROUND:-false} == true ]]; then + FINAL_RETURN_CODE=1 + fi + fi +} + +for i in src/libmapnik*; do + echo "checking $i" + check $i +done + +exit ${FINAL_RETURN_CODE} diff --git a/src/build.py b/src/build.py index 6dd0f24..c5889dc 100644 --- a/src/build.py +++ b/src/build.py @@ -35,7 +35,7 @@ def call(cmd, silent=True): if not stderr: return stdin.strip() elif not silent: - print stderr + print (stderr) def ldconfig(*args,**kwargs): call('ldconfig') @@ -282,17 +282,17 @@ if env['PLUGIN_LINKING'] == 'static': lib_env.Append(CPPDEFINES = DEF) if DEF not in libmapnik_defines: libmapnik_defines.append(DEF) - if plugin_env.has_key('SOURCES') and plugin_env['SOURCES']: + if 'SOURCES' in plugin_env and plugin_env['SOURCES']: source += ['../plugins/input/%s/%s' % (plugin, src) for src in plugin_env['SOURCES']] - if plugin_env.has_key('CPPDEFINES') and plugin_env['CPPDEFINES']: + if 'CPPDEFINES' in plugin_env and plugin_env['CPPDEFINES']: lib_env.AppendUnique(CPPDEFINES=plugin_env['CPPDEFINES']) - if plugin_env.has_key('CXXFLAGS') and plugin_env['CXXFLAGS']: + if 'CXXFLAGS' in plugin_env and plugin_env['CXXFLAGS']: lib_env.AppendUnique(CXXFLAGS=plugin_env['CXXFLAGS']) - if plugin_env.has_key('LINKFLAGS') and plugin_env['LINKFLAGS']: + if 'LINKFLAGS' in plugin_env and plugin_env['LINKFLAGS']: lib_env.AppendUnique(LINKFLAGS=plugin_env['LINKFLAGS']) - if plugin_env.has_key('CPPPATH') and plugin_env['CPPPATH']: + if 'CPPPATH' in plugin_env and plugin_env['CPPPATH']: lib_env.AppendUnique(CPPPATH=copy(plugin_env['CPPPATH'])) - if plugin_env.has_key('LIBS') and plugin_env['LIBS']: + if 'LIBS' in plugin_env and plugin_env['LIBS']: lib_env.AppendUnique(LIBS=plugin_env['LIBS']) else: print("Notice: dependencies not met for plugin '%s', not building..." % plugin) @@ -307,6 +307,13 @@ cairo/process_markers_symbolizer.cpp cairo/process_group_symbolizer.cpp """) +if env['ENABLE_GLIBC_WORKAROUND']: + source += Split( + """ + glibc_workaround.cpp + """ + ) + if env['HAS_CAIRO']: lib_env.AppendUnique(LIBPATH=env['CAIRO_LIBPATHS']) lib_env.Append(CPPDEFINES = '-DHAVE_CAIRO') diff --git a/src/font_engine_freetype.cpp b/src/font_engine_freetype.cpp index 4d504a8..e8bb492 100644 --- a/src/font_engine_freetype.cpp +++ b/src/font_engine_freetype.cpp @@ -53,6 +53,7 @@ namespace mapnik { template class MAPNIK_DECL singleton<freetype_engine, CreateUsingNew>; + bool freetype_engine::is_font_file(std::string const& file_name) { // only accept files that will be matched by freetype2's `figurefiletype()` diff --git a/include/mapnik/version.hpp b/src/glibc_workaround.cpp similarity index 58% copy from include/mapnik/version.hpp copy to src/glibc_workaround.cpp index d891d46..27c97f4 100644 --- a/include/mapnik/version.hpp +++ b/src/glibc_workaround.cpp @@ -2,7 +2,7 @@ * * This file is part of Mapnik (c++ mapping toolkit) * - * Copyright (C) 2015 Artem Pavlenko + * Copyright (C) 2017 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -20,19 +20,29 @@ * *****************************************************************************/ -#ifndef MAPNIK_VERSION_HPP -#define MAPNIK_VERSION_HPP +#ifdef __linux__ -#include <mapnik/stringify_macro.hpp> +#ifdef MAPNIK_ENABLE_GLIBC_WORKAROUND -#define MAPNIK_MAJOR_VERSION 3 -#define MAPNIK_MINOR_VERSION 0 -#define MAPNIK_PATCH_VERSION 16 +#include <stdexcept> -#define MAPNIK_VERSION (MAPNIK_MAJOR_VERSION*100000) + (MAPNIK_MINOR_VERSION*100) + (MAPNIK_PATCH_VERSION) +// https://github.com/bitcoin/bitcoin/pull/4042 +// allows building against libstdc++-dev-4.9 while avoiding +// GLIBCXX_3.4.20 dep +// This is needed because libstdc++ itself uses this API - its not +// just an issue of your code using it, ughhh -#define MAPNIK_VERSION_STRING MAPNIK_STRINGIFY(MAPNIK_MAJOR_VERSION) "." \ - MAPNIK_STRINGIFY(MAPNIK_MINOR_VERSION) "." \ - MAPNIK_STRINGIFY(MAPNIK_PATCH_VERSION) +namespace std +{ -#endif // MAPNIK_VERSION_HPP +void __throw_out_of_range_fmt(const char *, ...) __attribute__((__noreturn__)); +void __throw_out_of_range_fmt(const char *err, ...) +{ + // Safe and over-simplified version. Ignore the format and print it as-is. + __throw_out_of_range(err); +} +} + +#endif // MAPNIK_ENABLE_GLIBC_WORKAROUND + +#endif // __linux__ diff --git a/src/text/renderer.cpp b/src/text/renderer.cpp index a549d6c..163d11c 100644 --- a/src/text/renderer.cpp +++ b/src/text/renderer.cpp @@ -178,16 +178,13 @@ void agg_text_renderer<T>::render(glyph_positions const& pos) if (!error) { FT_BitmapGlyph bit = reinterpret_cast<FT_BitmapGlyph>(g); - if (bit->bitmap.pixel_mode != FT_PIXEL_MODE_BGRA) - { - composite_bitmap(pixmap_, - &bit->bitmap, - halo_fill, - bit->left, - height - bit->top, - halo_opacity, - halo_comp_op_); - } + composite_bitmap(pixmap_, + &bit->bitmap, + halo_fill, + bit->left, + height - bit->top, + halo_opacity, + halo_comp_op_); } } else diff --git a/utils/mapnik-config/build.py b/utils/mapnik-config/build.py index cc34908..e96559f 100644 --- a/utils/mapnik-config/build.py +++ b/utils/mapnik-config/build.py @@ -43,7 +43,7 @@ def GetMapnikLibVersion(): return version_string if (GetMapnikLibVersion() != config_env['MAPNIK_VERSION_STRING']): - print 'Error: version.hpp mismatch (%s) to cached value (%s): please reconfigure mapnik' % (GetMapnikLibVersion(),config_env['MAPNIK_VERSION_STRING']) + print ('Error: version.hpp mismatch (%s) to cached value (%s): please reconfigure mapnik' % (GetMapnikLibVersion(),config_env['MAPNIK_VERSION_STRING'])) Exit(1) config_variables = '''#!/usr/bin/env bash @@ -77,7 +77,7 @@ def write_config(configuration,template,config_file): template = open(template,'r').read() open(config_file,'w').write(config_variables % configuration + template) try: - os.chmod(config_file,0755) + os.chmod(config_file, 0o755) except: pass @@ -183,7 +183,7 @@ if 'install' in COMMAND_LINE_TARGETS: env.Command(full_target, config_file, [ Copy("$TARGET","$SOURCE"), - Chmod("$TARGET", 0755), + Chmod("$TARGET", 0o755), ]) config_env['create_uninstall_target'](env,os.path.join(target_path,config_file)) -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/mapnik.git _______________________________________________ Pkg-grass-devel mailing list Pkg-grass-devel@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel