Compare commits
2 commits
master
...
singleton_
Author | SHA1 | Date | |
---|---|---|---|
|
2044fa25c6 | ||
|
e1a09e48c4 |
2306 changed files with 3741 additions and 476623 deletions
103
.github/actions/run_tests/action.yml
vendored
103
.github/actions/run_tests/action.yml
vendored
|
@ -1,85 +1,90 @@
|
||||||
name: Run tests with coverage
|
name: "Run tests with coverage"
|
||||||
description: Runs all mapnik tests with coverage
|
description: "Runs all mapnik tests with coverage"
|
||||||
inputs:
|
inputs:
|
||||||
cmake-preset:
|
cmake-preset:
|
||||||
description: The used CMake preset
|
description: "the used cmake preset"
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
runs:
|
runs:
|
||||||
using: composite
|
using: "composite"
|
||||||
steps:
|
steps:
|
||||||
- name: Set PROJ_LIB
|
- name: Set proj enviroment
|
||||||
shell: bash
|
shell: "pwsh"
|
||||||
run: |
|
run: |
|
||||||
cmake --preset ${{ inputs.cmake-preset }} -N -L | grep -o "PROJ_LIB=.*" >> ${GITHUB_ENV}
|
$out = cmake --preset ${{ inputs.cmake-preset }} -N -L
|
||||||
|
$proj_lib = $out -match "PROJ_LIB=*"
|
||||||
- name: Set TEST_WRAPPER (Windows)
|
echo ("PROJ_LIB=" + $proj_lib.Substring(11)) >> $env:GITHUB_ENV
|
||||||
if: runner.os == 'Windows'
|
|
||||||
shell: bash
|
|
||||||
run: |-
|
|
||||||
echo "TEST_WRAPPER=OpenCppCoverage \
|
|
||||||
--cover_children \
|
|
||||||
--export_type binary \
|
|
||||||
--modules '*.input' \
|
|
||||||
--modules '*libmapnik*' \
|
|
||||||
--modules 'mapnik*.exe' \
|
|
||||||
--quiet \
|
|
||||||
--sources '${{ github.workspace }}' \
|
|
||||||
--" >> ${GITHUB_ENV}
|
|
||||||
|
|
||||||
- name: Test
|
- name: Test
|
||||||
shell: bash
|
shell: "bash"
|
||||||
env:
|
env:
|
||||||
UPDATE: 1
|
UPDATE: "1"
|
||||||
run: |
|
run: |
|
||||||
${TEST_WRAPPER:-} ctest --preset ${{ inputs.cmake-preset }}
|
if [ "$RUNNER_OS" == "Windows" ]; then
|
||||||
|
OpenCppCoverage --modules *libmapnik* --modules mapnik*.exe --modules *.input --sources ${{ github.workspace }} --export_type binary --cover_children -- ctest --preset ${{ inputs.cmake-preset }}
|
||||||
|
else
|
||||||
|
ctest --preset ${{ inputs.cmake-preset }}
|
||||||
|
fi
|
||||||
|
|
||||||
- name: Test visuals
|
- name: Test visuals (windows)
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
working-directory: build/out
|
working-directory: build/out
|
||||||
shell: bash
|
shell: "pwsh"
|
||||||
|
if: runner.os == 'Windows'
|
||||||
|
run: OpenCppCoverage --modules *libmapnik* --modules mapnik*.exe --modules *.input --sources ${{ github.workspace }} --export_type binary --input_coverage=${{ github.workspace }}/ctest.cov --cover_children -- .\mapnik-test-visual.exe -j (Get-CimInstance -ClassName Win32_ComputerSystem).NumberOfLogicalProcessors --output-dir ./visual-test-result
|
||||||
|
|
||||||
|
- name: Test visuals (linux & mac)
|
||||||
|
continue-on-error: true
|
||||||
|
working-directory: build/out
|
||||||
|
shell: "bash"
|
||||||
|
if: runner.os != 'Windows'
|
||||||
run: |
|
run: |
|
||||||
${TEST_WRAPPER:-} ./mapnik-test-visual -j ${CTEST_PARALLEL_LEVEL} --output-dir visual-test-result
|
if [ "$RUNNER_OS" == "Linux" ]; then
|
||||||
|
./mapnik-test-visual -j $(nproc) --output-dir ./visual-test-result
|
||||||
|
else
|
||||||
|
./mapnik-test-visual -j $(sysctl -n hw.logicalcpu) --output-dir ./visual-test-result
|
||||||
|
fi
|
||||||
|
|
||||||
- name: Pack visual test results
|
- name: Pack visual test results
|
||||||
working-directory: build/out
|
working-directory: build/out
|
||||||
shell: bash
|
shell: "pwsh"
|
||||||
|
run: tar cfvz visual-test-results.tar.gz ./visual-test-result
|
||||||
|
|
||||||
|
- name: Generate run guid
|
||||||
|
id: run-guid
|
||||||
|
shell: "pwsh"
|
||||||
run: |
|
run: |
|
||||||
tar -vzcf visual-test-results.tar.gz visual-test-result
|
$guid = New-Guid
|
||||||
|
echo ("GUID=" + $guid.toString()) >> $env:GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Upload visual test results
|
- name: Upload visual test results
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: ${{ inputs.cmake-preset }}-visual-tests-${{ github.sha }}
|
name: ${{ inputs.cmake-preset }}-visual-tests-${{ steps.run-guid.outputs.GUID }}
|
||||||
path: build/out/visual-test-results.tar.gz
|
path: build/out/visual-test-results.tar.gz
|
||||||
|
|
||||||
- name: Run Benchmarks (Linux & macOS)
|
- name: Run Benchmarks
|
||||||
working-directory: build/out
|
working-directory: build/out
|
||||||
if: runner.os != 'Windows'
|
if: runner.os != 'Windows'
|
||||||
shell: bash
|
shell: "pwsh"
|
||||||
run: |
|
run: ./run_benchmarks
|
||||||
./run_benchmarks
|
|
||||||
|
|
||||||
- name: Collect coverage (Linux & macOS)
|
- name: Collect coverage (linux & macos)
|
||||||
working-directory: build
|
working-directory: build
|
||||||
if: runner.os != 'Windows'
|
if: runner.os != 'Windows'
|
||||||
shell: bash
|
shell: "bash"
|
||||||
run: |
|
run: |
|
||||||
if [ "${RUNNER_OS}" == "macOS" ]; then
|
lcov --directory . --capture --output-file coverage.info
|
||||||
LCOV_EXTRA_OPTIONS="--ignore-errors count,gcov,inconsistent,range,unused --keep-going"
|
lcov --remove coverage.info '/usr/*' '*/vcpkg_installed/*' '/.cache/*' '*/test/*' --output-file coverage.info
|
||||||
fi
|
lcov --list coverage.info
|
||||||
lcov ${LCOV_EXTRA_OPTIONS:-} --directory . --capture --output-file coverage.info
|
|
||||||
lcov ${LCOV_EXTRA_OPTIONS:-} --remove coverage.info '/usr/*' '*/vcpkg_installed/*' '/.cache/*' '*/test/*' --output-file coverage.info
|
|
||||||
lcov ${LCOV_EXTRA_OPTIONS:-} --list coverage.info
|
|
||||||
|
|
||||||
- name: Upload coverage to Codecov (Linux & macOS)
|
- name: Upload coverage to Codecov (linux & macos)
|
||||||
if: runner.os != 'Windows'
|
if: runner.os != 'Windows'
|
||||||
uses: codecov/codecov-action@v4
|
uses: codecov/codecov-action@v3
|
||||||
with:
|
with:
|
||||||
files: build/coverage.info
|
files: build/coverage.info
|
||||||
|
|
||||||
- name: Upload coverage to Codecov (Windows)
|
- name: Upload coverage to Codecov (windows)
|
||||||
if: runner.os == 'Windows'
|
if: runner.os == 'Windows'
|
||||||
uses: codecov/codecov-action@v4
|
uses: codecov/codecov-action@v3
|
||||||
with:
|
with:
|
||||||
files: ctest.cov,build/out/mapnik-test-visual.cov
|
files: build/out/mapnik-test-visual.cov
|
||||||
|
|
50
.github/actions/setup_vcpkg/action.yml
vendored
Normal file
50
.github/actions/setup_vcpkg/action.yml
vendored
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
name: "Setup vcpkg"
|
||||||
|
description: "Sets up vcpkg"
|
||||||
|
inputs:
|
||||||
|
vcpkg-sha:
|
||||||
|
description: "vcpkg git sha to use"
|
||||||
|
required: true
|
||||||
|
nuget-source:
|
||||||
|
description: "The nuget json"
|
||||||
|
required: true
|
||||||
|
nuget-username:
|
||||||
|
description: "The username for the nuget repository"
|
||||||
|
required: true
|
||||||
|
nuget-pat:
|
||||||
|
description: "The PAT for the nuget repository"
|
||||||
|
required: true
|
||||||
|
mono:
|
||||||
|
description: "mono exec"
|
||||||
|
required: true
|
||||||
|
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: "composite"
|
||||||
|
steps:
|
||||||
|
- name: checkout vcpkg
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
repository: "microsoft/vcpkg"
|
||||||
|
ref: ${{ inputs.vcpkg-sha }}
|
||||||
|
path: vcpkg
|
||||||
|
|
||||||
|
- name: "Setup vcpkg"
|
||||||
|
shell: bash
|
||||||
|
run: ./vcpkg/bootstrap-vcpkg.sh
|
||||||
|
|
||||||
|
- name: "Setup NuGet Credentials"
|
||||||
|
shell: "bash"
|
||||||
|
run: >
|
||||||
|
${{ inputs.mono }} `./vcpkg/vcpkg fetch nuget | tail -n 1`
|
||||||
|
sources add
|
||||||
|
-source "${{ inputs.nuget-source }}"
|
||||||
|
-storepasswordincleartext
|
||||||
|
-name "GitHub"
|
||||||
|
-username "${{ inputs.nuget-username }}"
|
||||||
|
-password "${{ inputs.nuget-pat }}"
|
||||||
|
|
||||||
|
- name: "Setup NuGet apikey"
|
||||||
|
shell: "bash"
|
||||||
|
run: >
|
||||||
|
${{ inputs.mono }} `./vcpkg/vcpkg fetch nuget | tail -n 1`
|
||||||
|
setapikey "${{ inputs.nuget-pat }}" -Source "${{ inputs.nuget-source }}"
|
144
.github/workflows/build_and_test.yml
vendored
144
.github/workflows/build_and_test.yml
vendored
|
@ -9,126 +9,84 @@ on:
|
||||||
- "no-ci-*"
|
- "no-ci-*"
|
||||||
|
|
||||||
env:
|
env:
|
||||||
VCPKG_BINARY_SOURCES: clear;x-gha,readwrite
|
VCPKG_BINARY_SOURCES: "clear;nuget,GitHub,readwrite"
|
||||||
VCPKG_RELEASE: 2024.06.15
|
VCPKG_NUGET_REPOSITORY: https://github.com/mathisloge/vcpkg-nuget.git
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
checkSource:
|
checkSource:
|
||||||
name: Check Source Code
|
name: Check Source Code
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v4
|
||||||
with:
|
with:
|
||||||
python-version: "3.10"
|
python-version: '3.10'
|
||||||
- uses: pre-commit/action@v3.0.1
|
- uses: pre-commit/action@v3.0.0
|
||||||
|
|
||||||
buildAndTest:
|
buildAndTest:
|
||||||
name: >-
|
name: Build and Test
|
||||||
Build & Test
|
|
||||||
(${{ matrix.os }})
|
|
||||||
(C++ ${{ matrix.cxx-standard }})
|
|
||||||
${{ startsWith(matrix.os, 'macos-') && (matrix.os == 'macos-14' && '(ARM64)' || '(AMD64)') || '' }}
|
|
||||||
needs: checkSource
|
needs: checkSource
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os:
|
os: [macos-latest, windows-latest, ubuntu-latest]
|
||||||
- macos-14
|
memory-mapped: ["OFF", "ON"]
|
||||||
- ubuntu-22.04
|
static-build: ["OFF", "ON"]
|
||||||
- windows-2022
|
include:
|
||||||
cxx-standard:
|
- os: ubuntu-latest
|
||||||
- 17
|
mono: mono
|
||||||
|
- os: macos-latest
|
||||||
|
mono: mono
|
||||||
|
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Mapnik
|
- name: "Install required system packages"
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
|
|
||||||
- name: Checkout vcpkg
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
path: vcpkg
|
|
||||||
ref: ${{ env.VCPKG_RELEASE }}
|
|
||||||
repository: microsoft/vcpkg
|
|
||||||
|
|
||||||
- name: Export GitHub Actions cache environment variables
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
|
|
||||||
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
|
|
||||||
|
|
||||||
- name: Install required system packages
|
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
if [ "${RUNNER_OS}" == "Linux" ]; then
|
if [ "$RUNNER_OS" == "Windows" ]; then
|
||||||
sudo apt-get update
|
choco install ninja OpenCppCoverage
|
||||||
sudo apt-get -y install \
|
|
||||||
autoconf \
|
|
||||||
autoconf-archive \
|
|
||||||
automake \
|
|
||||||
gperf \
|
|
||||||
lcov \
|
|
||||||
libxxf86vm-dev \
|
|
||||||
ninja-build \
|
|
||||||
postgresql-client
|
|
||||||
elif [ "${RUNNER_OS}" == "macOS" ]; then
|
|
||||||
brew install \
|
|
||||||
autoconf \
|
|
||||||
autoconf-archive \
|
|
||||||
automake \
|
|
||||||
lcov \
|
|
||||||
libtool \
|
|
||||||
ninja \
|
|
||||||
vcpkg
|
|
||||||
elif [ "${RUNNER_OS}" == "Windows" ]; then
|
|
||||||
choco install \
|
|
||||||
ninja \
|
|
||||||
OpenCppCoverage
|
|
||||||
echo "C:\Program Files\OpenCppCoverage" >> ${GITHUB_PATH}
|
echo "C:\Program Files\OpenCppCoverage" >> ${GITHUB_PATH}
|
||||||
|
elif [ "$RUNNER_OS" == "Linux" ]; then
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install -y gperf libxxf86vm-dev ninja-build postgresql-client lcov autoconf-archive
|
||||||
|
else
|
||||||
|
brew install automake ninja lcov autoconf-archive
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Enable Developer Command Prompt (Windows)
|
- uses: ilammy/msvc-dev-cmd@v1
|
||||||
uses: ilammy/msvc-dev-cmd@v1
|
|
||||||
if: runner.os == 'Windows'
|
if: runner.os == 'Windows'
|
||||||
|
|
||||||
- name: Set CMAKE_BUILD_PARALLEL_LEVEL, CTEST_PARALLEL_LEVEL & PRESET
|
- name: checkout mapnik
|
||||||
shell: bash
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: "recursive"
|
||||||
|
|
||||||
|
- name: setup vcpkg
|
||||||
|
uses: ./.github/actions/setup_vcpkg
|
||||||
|
with:
|
||||||
|
vcpkg-sha: 71d3fa60b67540e9bf5fde2bf2188f579ff09433
|
||||||
|
nuget-source: https://nuget.pkg.github.com/mapnik/index.json
|
||||||
|
nuget-username: ${{ github.actor }}
|
||||||
|
nuget-pat: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
mono: ${{ matrix.mono }}
|
||||||
|
|
||||||
|
- id: lc_platform
|
||||||
|
uses: ASzc/change-string-case-action@v5
|
||||||
|
with:
|
||||||
|
string: ${{ runner.os }}
|
||||||
|
|
||||||
|
- name: set lower case runner os
|
||||||
|
shell: "bash"
|
||||||
run: |
|
run: |
|
||||||
PRESET=$(echo "${RUNNER_OS}" | perl -ne "print lc")-ci
|
echo "PRESET=${{ steps.lc_platform.outputs.lowercase }}-ci" >>${GITHUB_ENV}
|
||||||
if [ "${RUNNER_OS}" == "Linux" ]; then
|
|
||||||
echo "CMAKE_BUILD_PARALLEL_LEVEL=$(nproc)" >> ${GITHUB_ENV}
|
|
||||||
echo "CTEST_PARALLEL_LEVEL=$(nproc)" >> ${GITHUB_ENV}
|
|
||||||
elif [ "${RUNNER_OS}" == "macOS" ]; then
|
|
||||||
echo "CMAKE_BUILD_PARALLEL_LEVEL=$(sysctl -n hw.logicalcpu)" >> ${GITHUB_ENV}
|
|
||||||
echo "CTEST_PARALLEL_LEVEL=$(sysctl -n hw.logicalcpu)" >> ${GITHUB_ENV}
|
|
||||||
PRESET=${PRESET}-${{ matrix.os == 'macos-14' && 'arm64' || 'x64' }}
|
|
||||||
elif [ "${RUNNER_OS}" == "Windows" ]; then
|
|
||||||
echo "CMAKE_BUILD_PARALLEL_LEVEL=$(pwsh -Command '(Get-CimInstance -ClassName Win32_ComputerSystem).NumberOfLogicalProcessors')" >> ${GITHUB_ENV}
|
|
||||||
echo "CTEST_PARALLEL_LEVEL=$(pwsh -Command '(Get-CimInstance -ClassName Win32_ComputerSystem).NumberOfLogicalProcessors')" >> ${GITHUB_ENV}
|
|
||||||
fi
|
|
||||||
echo "PRESET=${PRESET}" >> ${GITHUB_ENV}
|
|
||||||
|
|
||||||
- name: Configure CMake
|
- name: Configure CMake
|
||||||
shell: bash
|
run: cmake -DUSE_MEMORY_MAPPED_FILE=${{ matrix.memory-mapped }} -DBUILD_SHARED_LIBS=${{ matrix.static-build }} --preset ${{ env.PRESET }}
|
||||||
run: |
|
|
||||||
cmake \
|
|
||||||
-DBUILD_SHARED_LIBS:BOOL=ON \
|
|
||||||
-DCMAKE_CXX_STANDARD:STRING=${{ matrix.cxx-standard }} \
|
|
||||||
-DUSE_MEMORY_MAPPED_FILE:BOOL=ON \
|
|
||||||
-LA \
|
|
||||||
--preset ${PRESET}
|
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
shell: bash
|
run: cmake --build --preset ${{ env.PRESET }}
|
||||||
run: |
|
|
||||||
cmake \
|
|
||||||
--build \
|
|
||||||
--preset ${PRESET}
|
|
||||||
|
|
||||||
- name: Run Tests
|
- name: Run Tests
|
||||||
uses: ./.github/actions/run_tests
|
uses: ./.github/actions/run_tests
|
||||||
|
|
8
.github/workflows/release_linux.yml
vendored
8
.github/workflows/release_linux.yml
vendored
|
@ -16,7 +16,7 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
- name: checkout mapnik
|
- name: checkout mapnik
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
submodules: "recursive"
|
submodules: "recursive"
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ jobs:
|
||||||
libboost-regex-dev
|
libboost-regex-dev
|
||||||
|
|
||||||
- name: Configure CMake
|
- name: Configure CMake
|
||||||
run: cmake -LA --preset ${{ env.PRESET }}
|
run: cmake --preset ${{ env.PRESET }}
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: cmake --build --preset ${{ env.PRESET }}
|
run: cmake --build --preset ${{ env.PRESET }}
|
||||||
|
@ -49,7 +49,7 @@ jobs:
|
||||||
run: cmake --build --preset ${{ env.PRESET }} --target package
|
run: cmake --build --preset ${{ env.PRESET }} --target package
|
||||||
|
|
||||||
- name: Upload mapnik debian package
|
- name: Upload mapnik debian package
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: ${{ env.PRESET }}-deb
|
name: ${{ env.PRESET }}-deb
|
||||||
path: build/mapnik-*.deb
|
path: build/${{ env.PRESET }}/mapnik-*.deb
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# See https://pre-commit.com/hooks.html for more hooks
|
# See https://pre-commit.com/hooks.html for more hooks
|
||||||
repos:
|
repos:
|
||||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
rev: v4.6.0
|
rev: v4.3.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: trailing-whitespace
|
- id: trailing-whitespace
|
||||||
files: ^.*\.cmake|CMakeLists\.txt$
|
files: ^.*\.cmake|CMakeLists\.txt$
|
||||||
|
@ -10,7 +10,7 @@ repos:
|
||||||
files: ^.*\.cmake|CMakeLists\.txt$
|
files: ^.*\.cmake|CMakeLists\.txt$
|
||||||
|
|
||||||
- repo: https://github.com/pre-commit/mirrors-clang-format
|
- repo: https://github.com/pre-commit/mirrors-clang-format
|
||||||
rev: v18.1.3
|
rev: v14.0.6
|
||||||
hooks:
|
hooks:
|
||||||
- id: clang-format
|
- id: clang-format
|
||||||
types_or: [c++, c]
|
types_or: [c++, c]
|
||||||
|
|
98
.travis.yml
Normal file
98
.travis.yml
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
language: cpp
|
||||||
|
|
||||||
|
git:
|
||||||
|
depth: 10
|
||||||
|
submodules: false
|
||||||
|
|
||||||
|
env:
|
||||||
|
global:
|
||||||
|
- CCACHE_TEMPDIR=/tmp/.ccache-temp
|
||||||
|
- CCACHE_COMPRESS=1
|
||||||
|
- PREFIX=/tmp/mapnik
|
||||||
|
- PYTHON=python3
|
||||||
|
cache:
|
||||||
|
directories:
|
||||||
|
- $HOME/.ccache
|
||||||
|
|
||||||
|
dist: xenial
|
||||||
|
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- os: linux
|
||||||
|
name: Linux clang
|
||||||
|
env: >-
|
||||||
|
CXX="ccache clang++ -Qunused-arguments"
|
||||||
|
CC="clang"
|
||||||
|
addons:
|
||||||
|
postgresql: "9.5"
|
||||||
|
apt:
|
||||||
|
sources: [ 'ubuntu-toolchain-r-test' ]
|
||||||
|
packages: [ 'xutils-dev', 'libstdc++-6-dev', 'postgresql-9.5-postgis-2.4' ]
|
||||||
|
- os: linux
|
||||||
|
name: Linux clang + coverage
|
||||||
|
env: >-
|
||||||
|
CXX="ccache clang++ -Qunused-arguments"
|
||||||
|
CC="clang"
|
||||||
|
COVERAGE=true
|
||||||
|
QUIET=true
|
||||||
|
before_install:
|
||||||
|
- export LLVM_COV="llvm-cov"
|
||||||
|
addons:
|
||||||
|
postgresql: "9.5"
|
||||||
|
apt:
|
||||||
|
sources: [ 'ubuntu-toolchain-r-test' ]
|
||||||
|
packages: [ 'xutils-dev', 'libstdc++-6-dev','postgresql-9.5-postgis-2.4' ]
|
||||||
|
- os: osx
|
||||||
|
name: OSX clang
|
||||||
|
#https://docs.travis-ci.com/user/reference/osx#macos-version
|
||||||
|
osx_image: xcode12.2
|
||||||
|
env: >-
|
||||||
|
CXX="ccache clang++ -Qunused-arguments"
|
||||||
|
before_install:
|
||||||
|
|
||||||
|
install:
|
||||||
|
- source scripts/travis-common.sh
|
||||||
|
# workaround travis rvm bug
|
||||||
|
# http://superuser.com/questions/1044130/why-am-i-having-how-can-i-fix-this-error-shell-session-update-command-not-f
|
||||||
|
- on 'osx' rvm get head || true
|
||||||
|
- export PATH=${PREFIX}/bin:$(pwd)/mason_packages/.link/bin:${PATH}
|
||||||
|
- export COVERAGE=${COVERAGE:-false}
|
||||||
|
- export BENCH=${BENCH:-false}
|
||||||
|
- on 'osx' export DATA_PATH=$(brew --prefix)/var/postgres
|
||||||
|
- on 'osx' rm -rf ${DATA_PATH}
|
||||||
|
- on 'osx' initdb ${DATA_PATH} -E utf8
|
||||||
|
- on 'osx' pg_ctl -w start -l postgres.log --pgdata ${DATA_PATH};
|
||||||
|
- on 'osx' cat postgres.log;
|
||||||
|
- on 'osx' createuser -s postgres
|
||||||
|
- psql -c 'create database template_postgis;' -U postgres
|
||||||
|
- psql -c 'create extension postgis;' -d template_postgis -U postgres
|
||||||
|
- enabled ${COVERAGE} curl -S -f https://codecov.io/bash -o codecov
|
||||||
|
- enabled ${COVERAGE} chmod +x codecov
|
||||||
|
|
||||||
|
before_script:
|
||||||
|
- export JOBS=${JOBS:-4}
|
||||||
|
- export HEAVY_JOBS=${HEAVY_JOBS:-2}
|
||||||
|
- export SCONSFLAGS='--debug=time'
|
||||||
|
- source bootstrap.sh
|
||||||
|
- ccache --version
|
||||||
|
- ccache -p || true
|
||||||
|
- ccache --show-stats || true
|
||||||
|
- commit_message_parse
|
||||||
|
|
||||||
|
script:
|
||||||
|
- git_submodule_update --init deps/
|
||||||
|
- on 'osx' brew unlink $(brew list --formula)
|
||||||
|
- on 'osx' brew link git postgresql postgis
|
||||||
|
- configure BENCHMARK=${BENCH} ENABLE_GLIBC_WORKAROUND=${ENABLE_GLIBC_WORKAROUND:-false} QUIET=${QUIET:-false}
|
||||||
|
#- cat config.log => comment out to reduce log size limit on travis-ci
|
||||||
|
# we limit the `make` to 40 min
|
||||||
|
# to ensure that slow builds still upload their
|
||||||
|
# ccache results and therefore should be faster
|
||||||
|
# (and might work) for the next build
|
||||||
|
- DEADLINE=$(( $(date +%s) + 40 * 60 ))
|
||||||
|
- scripts/travis-command-wrapper.py -s "date" -i 120 --deadline="$DEADLINE" make
|
||||||
|
- test_ok && git_submodule_update --init --depth=50 test/
|
||||||
|
- test_ok && make test
|
||||||
|
- test_ok && enabled ${COVERAGE} coverage
|
||||||
|
- test_ok && enabled ${BENCH} make bench
|
||||||
|
- ./scripts/check_glibcxx.sh
|
30
CHANGELOG.md
30
CHANGELOG.md
|
@ -6,38 +6,12 @@ Developers: Please commit along with changes.
|
||||||
|
|
||||||
For a complete change history, see the git log.
|
For a complete change history, see the git log.
|
||||||
|
|
||||||
## Mapnik 4.0.3
|
|
||||||
|
|
||||||
Released October 30th, 2024
|
## UNRELEASED
|
||||||
|
|
||||||
(Packaged from [05389e3c7](https://github.com/mapnik/mapnik/commit/05389e3c7))
|
|
||||||
|
|
||||||
- Remove 'final' specifier from invalid_featureset implementation
|
|
||||||
(issues with dynamic_cast<> when building using Apple clang version 16.0.0 on darwin-arm64)
|
|
||||||
- Rename invalid_featureset to empty_featureset
|
|
||||||
- Upgrade to SCons v4.8.1
|
|
||||||
- Fix unit tests e.g #endif statement (via @bgardner-noggin)
|
|
||||||
|
|
||||||
## Mapnik 4.0.2
|
|
||||||
|
|
||||||
Released August 21st, 2024
|
|
||||||
|
|
||||||
- CMake build - set `SOVERSION` to `${MAPNIK_MAJOR_VERSION}.${MAPNIK_MINOR_VERSION}`
|
|
||||||
- Upgraded SCons build system to v4.8.0
|
|
||||||
|
|
||||||
## Mapnik 4.0.1
|
|
||||||
|
|
||||||
- Use CMAKE_INSTALL_LIBDIR for libdir in pkg-config files
|
|
||||||
- Support gcc 14
|
|
||||||
- Improved accuracy of bounding box re-projections. Automatic spliting at (0, 0) and merging results.
|
|
||||||
- Fixes missing features when using WGS 84 / Arctic Polar Stereographic (`epsg:4326 <-> epsg:3995`)
|
|
||||||
- Added `area_of_use` method to `mapnik::projection`
|
|
||||||
|
|
||||||
## Mapnik 4.0.0
|
|
||||||
|
|
||||||
#### Notice
|
#### Notice
|
||||||
|
|
||||||
- Mapnik now requires C++17 compliant compiler (`-std=c++17`)
|
- Mapnik now requires C++14 compliant compiler (`-std=c++14`)
|
||||||
- Mapnik now supports CMake as a build system. See [#4191](https://github.com/mapnik/mapnik/pull/4191) and the [docs](https://github.com/mapnik/mapnik/blob/master/docs/cmake-usage.md) for more info.
|
- Mapnik now supports CMake as a build system. See [#4191](https://github.com/mapnik/mapnik/pull/4191) and the [docs](https://github.com/mapnik/mapnik/blob/master/docs/cmake-usage.md) for more info.
|
||||||
|
|
||||||
#### Breaking Changes
|
#### Breaking Changes
|
||||||
|
|
|
@ -49,7 +49,6 @@ mapnik_option(USE_PROJ "adds proj support" ON)
|
||||||
mapnik_option(USE_GRID_RENDERER "adds grid renderer" ON)
|
mapnik_option(USE_GRID_RENDERER "adds grid renderer" ON)
|
||||||
mapnik_option(USE_SVG_RENDERER "adds svg renderer" ON)
|
mapnik_option(USE_SVG_RENDERER "adds svg renderer" ON)
|
||||||
mapnik_option(USE_BIGINT "uses 64 bit instead of 32" ON)
|
mapnik_option(USE_BIGINT "uses 64 bit instead of 32" ON)
|
||||||
mapnik_option(USE_BOOST_FILESYSTEM "use boost::filesytem even if `std::filesystem` is available (since c++17)" OFF)
|
|
||||||
mapnik_option(USE_MEMORY_MAPPED_FILE "uses file cache" ON)
|
mapnik_option(USE_MEMORY_MAPPED_FILE "uses file cache" ON)
|
||||||
mapnik_option(USE_MULTITHREADED "enables the multithreaded features (threadsafe)" ON)
|
mapnik_option(USE_MULTITHREADED "enables the multithreaded features (threadsafe)" ON)
|
||||||
mapnik_option(USE_NO_ATEXIT "disable atexit" OFF)
|
mapnik_option(USE_NO_ATEXIT "disable atexit" OFF)
|
||||||
|
@ -126,7 +125,7 @@ set(MAPNIK_OPTIONAL_LIBS_INCLUDE "")
|
||||||
#############################
|
#############################
|
||||||
#############################
|
#############################
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 17 CACHE STRING "Sets the c++ standard. c++17 is minimum.")
|
set(CMAKE_CXX_STANDARD 14 CACHE STRING "Sets the c++ standard. c++14 is minimum.")
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON) # require the specified CMAKE_CXX_STANDARD
|
set(CMAKE_CXX_STANDARD_REQUIRED ON) # require the specified CMAKE_CXX_STANDARD
|
||||||
set(CMAKE_CXX_EXTENSIONS OFF CACHE STRING "Enables the compiler specific extensions.") # Fallsback to -std=c++<ver> if off
|
set(CMAKE_CXX_EXTENSIONS OFF CACHE STRING "Enables the compiler specific extensions.") # Fallsback to -std=c++<ver> if off
|
||||||
message(STATUS "Using c++${CMAKE_CXX_STANDARD}")
|
message(STATUS "Using c++${CMAKE_CXX_STANDARD}")
|
||||||
|
@ -142,10 +141,7 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${MAPNIK_OUTPUT_DIR}")
|
||||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${MAPNIK_OUTPUT_DIR}/lib")
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${MAPNIK_OUTPUT_DIR}/lib")
|
||||||
|
|
||||||
# needs to be before the first call of find_boost.
|
# needs to be before the first call of find_boost.
|
||||||
if(CMAKE_CXX_STANDARD VERSION_LESS 17)
|
list(APPEND MAPNIK_COMPILE_DEFS BOOST_SPIRIT_X3_HIDE_CXX17_WARNING)
|
||||||
list(APPEND MAPNIK_COMPILE_DEFS BOOST_SPIRIT_X3_HIDE_CXX17_WARNING)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(USE_MULTITHREADED)
|
if(USE_MULTITHREADED)
|
||||||
set(Boost_USE_MULTITHREADED ON)
|
set(Boost_USE_MULTITHREADED ON)
|
||||||
list(APPEND MAPNIK_COMPILE_DEFS MAPNIK_THREADSAFE)
|
list(APPEND MAPNIK_COMPILE_DEFS MAPNIK_THREADSAFE)
|
||||||
|
@ -158,14 +154,7 @@ mapnik_find_package(PkgConfig REQUIRED)
|
||||||
mapnik_find_threads()
|
mapnik_find_threads()
|
||||||
mapnik_find_package(ICU REQUIRED COMPONENTS uc i18n data)
|
mapnik_find_package(ICU REQUIRED COMPONENTS uc i18n data)
|
||||||
|
|
||||||
mapnik_find_package(Boost ${BOOST_MIN_VERSION} REQUIRED COMPONENTS regex)
|
mapnik_find_package(Boost ${BOOST_MIN_VERSION} REQUIRED COMPONENTS filesystem system regex)
|
||||||
if(CMAKE_CXX_STANDARD VERSION_LESS 17)
|
|
||||||
set(USE_BOOST_FILESYSTEM ON CACHE BOOL "Use boost::filesystem" FORCE)
|
|
||||||
endif()
|
|
||||||
if(USE_BOOST_FILESYSTEM)
|
|
||||||
mapnik_find_package(Boost ${BOOST_MIN_VERSION} REQUIRED COMPONENTS filesystem system)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
list(APPEND MAPNIK_COMPILE_DEFS BOOST_REGEX_HAS_ICU)
|
list(APPEND MAPNIK_COMPILE_DEFS BOOST_REGEX_HAS_ICU)
|
||||||
if(USE_BOOST_REGEX_ICU_WORKAROUND)
|
if(USE_BOOST_REGEX_ICU_WORKAROUND)
|
||||||
message(STATUS "using boost regex workaround")
|
message(STATUS "using boost regex workaround")
|
||||||
|
@ -268,11 +257,6 @@ if(USE_BIGINT)
|
||||||
list(APPEND MAPNIK_COMPILE_DEFS BIGINT)
|
list(APPEND MAPNIK_COMPILE_DEFS BIGINT)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(USE_BOOST_FILESYSTEM)
|
|
||||||
list(APPEND MAPNIK_COMPILE_DEFS USE_BOOST_FILESYSTEM)
|
|
||||||
list(APPEND MAPNIK_OPTIONAL_LIBS Boost::filesystem)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(USE_MEMORY_MAPPED_FILE)
|
if(USE_MEMORY_MAPPED_FILE)
|
||||||
list(APPEND MAPNIK_COMPILE_DEFS MAPNIK_MEMORY_MAPPED_FILE)
|
list(APPEND MAPNIK_COMPILE_DEFS MAPNIK_MEMORY_MAPPED_FILE)
|
||||||
endif()
|
endif()
|
||||||
|
@ -410,10 +394,10 @@ target_link_libraries(core INTERFACE
|
||||||
ICU::i18n
|
ICU::i18n
|
||||||
Boost::headers
|
Boost::headers
|
||||||
Boost::regex
|
Boost::regex
|
||||||
|
Boost::filesystem
|
||||||
Freetype::Freetype
|
Freetype::Freetype
|
||||||
${MAPNIK_OPTIONAL_LIBS}
|
${MAPNIK_OPTIONAL_LIBS}
|
||||||
)
|
)
|
||||||
|
|
||||||
target_compile_definitions(core INTERFACE ${MAPNIK_COMPILE_DEFS})
|
target_compile_definitions(core INTERFACE ${MAPNIK_COMPILE_DEFS})
|
||||||
|
|
||||||
mapnik_install(core)
|
mapnik_install(core)
|
||||||
|
@ -448,8 +432,8 @@ feature_summary(FILENAME "${CMAKE_CURRENT_BINARY_DIR}/packages.log" WHAT PACKAGE
|
||||||
include(MapnikExport)
|
include(MapnikExport)
|
||||||
include(MapnikExportPkgConfig)
|
include(MapnikExportPkgConfig)
|
||||||
|
|
||||||
install(DIRECTORY include/mapnik/ DESTINATION "${MAPNIK_INCLUDE_DIR}/mapnik")
|
install(DIRECTORY include/ DESTINATION "${MAPNIK_INCLUDE_DIR}")
|
||||||
install(DIRECTORY deps/agg/include/ DESTINATION "${MAPNIK_INCLUDE_DIR}/mapnik/agg")
|
install(DIRECTORY deps/agg/include/ DESTINATION "${MAPNIK_INCLUDE_DIR}")
|
||||||
install(DIRECTORY deps/mapnik DESTINATION "${MAPNIK_INCLUDE_DIR}")
|
install(DIRECTORY deps/mapnik DESTINATION "${MAPNIK_INCLUDE_DIR}")
|
||||||
file(GLOB TTF_FONT_FILES "fonts/*/*/*.ttf")
|
file(GLOB TTF_FONT_FILES "fonts/*/*/*.ttf")
|
||||||
install(FILES ${TTF_FONT_FILES} DESTINATION "${FONTS_INSTALL_DIR}")
|
install(FILES ${TTF_FONT_FILES} DESTINATION "${FONTS_INSTALL_DIR}")
|
||||||
|
|
|
@ -228,23 +228,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "macos-ci-arm64",
|
"name": "macos-ci",
|
||||||
"description": "used by the ci pipeline",
|
|
||||||
"inherits": [
|
|
||||||
"use-ninja",
|
|
||||||
"release-with-debug-build",
|
|
||||||
"default-build-dir",
|
|
||||||
"ci-options"
|
|
||||||
],
|
|
||||||
"cacheVariables": {
|
|
||||||
"CMAKE_CXX_FLAGS": "-fprofile-arcs -ftest-coverage"
|
|
||||||
},
|
|
||||||
"environment": {
|
|
||||||
"PROJ_LIB": "${sourceDir}/build/vcpkg_installed/arm64-osx/share/proj"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "macos-ci-x64",
|
|
||||||
"description": "used by the ci pipeline",
|
"description": "used by the ci pipeline",
|
||||||
"inherits": [
|
"inherits": [
|
||||||
"use-ninja",
|
"use-ninja",
|
||||||
|
@ -298,12 +282,8 @@
|
||||||
"configurePreset": "linux-ci-release"
|
"configurePreset": "linux-ci-release"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "macos-ci-arm64",
|
"name": "macos-ci",
|
||||||
"configurePreset": "macos-ci-arm64"
|
"configurePreset": "macos-ci"
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "macos-ci-x64",
|
|
||||||
"configurePreset": "macos-ci-x64"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"testPresets": [
|
"testPresets": [
|
||||||
|
@ -333,15 +313,8 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "macos-ci-arm64",
|
"name": "macos-ci",
|
||||||
"configurePreset": "macos-ci-arm64",
|
"configurePreset": "macos-ci",
|
||||||
"inherits": [
|
|
||||||
"test-default"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "macos-ci-x64",
|
|
||||||
"configurePreset": "macos-ci-x64",
|
|
||||||
"inherits": [
|
"inherits": [
|
||||||
"test-default"
|
"test-default"
|
||||||
]
|
]
|
||||||
|
|
12
INSTALL.md
12
INSTALL.md
|
@ -42,8 +42,8 @@ To use a Python interpreter that is not named `python` for your build, do
|
||||||
something like the following instead:
|
something like the following instead:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ PYTHON=python3 ./configure
|
$ PYTHON=python2 ./configure
|
||||||
$ make PYTHON=python3
|
$ make PYTHON=python2
|
||||||
```
|
```
|
||||||
|
|
||||||
NOTE: the above will not work on windows, rather see https://github.com/mapnik/mapnik/wiki/WindowsInstallation
|
NOTE: the above will not work on windows, rather see https://github.com/mapnik/mapnik/wiki/WindowsInstallation
|
||||||
|
@ -71,15 +71,15 @@ For troubleshooting help see https://github.com/mapnik/mapnik/wiki/InstallationT
|
||||||
|
|
||||||
Build system dependencies are:
|
Build system dependencies are:
|
||||||
|
|
||||||
* C++ compiler supporting `-std=c++17` (like >= g++ 9 or >= clang++ 5)
|
* C++ compiler supporting `-std=c++14` (like >= g++ 4.8 or >= clang++ 3.4)
|
||||||
* \>= 2 GB RAM (> 5 GB for g++)
|
* >= 2 GB RAM (> 5 GB for g++)
|
||||||
* Python 3
|
* Python 2.4-2.7
|
||||||
* Scons (a copy is bundled) or CMake >= 3.15 see [docs/cmake-usage.md](./docs/cmake-usage.md)
|
* Scons (a copy is bundled) or CMake >= 3.15 see [docs/cmake-usage.md](./docs/cmake-usage.md)
|
||||||
|
|
||||||
Mapnik Core depends on:
|
Mapnik Core depends on:
|
||||||
|
|
||||||
* Boost
|
* Boost
|
||||||
- \>= 1.73 is required
|
- >= 1.73 is required
|
||||||
- These libraries are used:
|
- These libraries are used:
|
||||||
- filesystem
|
- filesystem
|
||||||
- system
|
- system
|
||||||
|
|
90
SConstruct
90
SConstruct
|
@ -1,6 +1,6 @@
|
||||||
# This file is part of Mapnik (c++ mapping toolkit)
|
# This file is part of Mapnik (c++ mapping toolkit)
|
||||||
#
|
#
|
||||||
# Copyright (C) 2024 Artem Pavlenko
|
# Copyright (C) 2021 Artem Pavlenko
|
||||||
#
|
#
|
||||||
# Mapnik is free software; you can redistribute it and/or
|
# Mapnik is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU Lesser General Public
|
# modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -22,7 +22,7 @@ import re
|
||||||
import platform
|
import platform
|
||||||
from glob import glob
|
from glob import glob
|
||||||
from copy import copy
|
from copy import copy
|
||||||
from subprocess import run, Popen, PIPE
|
from subprocess import Popen, PIPE
|
||||||
from SCons.SConf import SetCacheMode
|
from SCons.SConf import SetCacheMode
|
||||||
import pickle
|
import pickle
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ ICU_LIBS_DEFAULT='/usr/'
|
||||||
|
|
||||||
DEFAULT_CC = "cc"
|
DEFAULT_CC = "cc"
|
||||||
DEFAULT_CXX = "c++"
|
DEFAULT_CXX = "c++"
|
||||||
DEFAULT_CXX_STD = "17"
|
DEFAULT_CXX_STD = "14"
|
||||||
DEFAULT_CXX_CXXFLAGS = " -DU_USING_ICU_NAMESPACE=0"
|
DEFAULT_CXX_CXXFLAGS = " -DU_USING_ICU_NAMESPACE=0"
|
||||||
DEFAULT_CXX_LINKFLAGS = ""
|
DEFAULT_CXX_LINKFLAGS = ""
|
||||||
if sys.platform == 'darwin':
|
if sys.platform == 'darwin':
|
||||||
|
@ -410,8 +410,8 @@ opts.AddVariables(
|
||||||
PathVariable('WEBP_INCLUDES', 'Search path for libwebp include files', '/usr/include', PathVariable.PathAccept),
|
PathVariable('WEBP_INCLUDES', 'Search path for libwebp include files', '/usr/include', PathVariable.PathAccept),
|
||||||
PathVariable('WEBP_LIBS','Search path for libwebp library files','/usr/' + LIBDIR_SCHEMA_DEFAULT, PathVariable.PathAccept),
|
PathVariable('WEBP_LIBS','Search path for libwebp library files','/usr/' + LIBDIR_SCHEMA_DEFAULT, PathVariable.PathAccept),
|
||||||
BoolVariable('PROJ', 'Build Mapnik with proj support to enable transformations between many different projections', 'True'),
|
BoolVariable('PROJ', 'Build Mapnik with proj support to enable transformations between many different projections', 'True'),
|
||||||
PathVariable('PROJ_INCLUDES', 'Search path for libproj include files', '/usr/include', PathVariable.PathAccept),
|
PathVariable('PROJ_INCLUDES', 'Search path for PROJ.4 include files', '/usr/include', PathVariable.PathAccept),
|
||||||
PathVariable('PROJ_LIBS', 'Search path for libproj library files', '/usr/' + LIBDIR_SCHEMA_DEFAULT, PathVariable.PathAccept),
|
PathVariable('PROJ_LIBS', 'Search path for PROJ.4 library files', '/usr/' + LIBDIR_SCHEMA_DEFAULT, PathVariable.PathAccept),
|
||||||
('PG_INCLUDES', 'Search path for libpq (postgres client) include files', ''),
|
('PG_INCLUDES', 'Search path for libpq (postgres client) include files', ''),
|
||||||
('PG_LIBS', 'Search path for libpq (postgres client) library files', ''),
|
('PG_LIBS', 'Search path for libpq (postgres client) library files', ''),
|
||||||
('FREETYPE_INCLUDES', 'Search path for Freetype include files', ''),
|
('FREETYPE_INCLUDES', 'Search path for Freetype include files', ''),
|
||||||
|
@ -467,9 +467,8 @@ opts.AddVariables(
|
||||||
BoolVariable('MAPNIK_RENDER', 'Compile and install a utility to render a map to an image', 'True'),
|
BoolVariable('MAPNIK_RENDER', 'Compile and install a utility to render a map to an image', 'True'),
|
||||||
BoolVariable('COLOR_PRINT', 'Print build status information in color', 'True'),
|
BoolVariable('COLOR_PRINT', 'Print build status information in color', 'True'),
|
||||||
BoolVariable('BIGINT', 'Compile support for 64-bit integers in mapnik::value', 'True'),
|
BoolVariable('BIGINT', 'Compile support for 64-bit integers in mapnik::value', 'True'),
|
||||||
BoolVariable('USE_BOOST_FILESYSTEM','Use boost::filesytem even if `std::filesystem` is available (since c++17)', 'False'),
|
|
||||||
BoolVariable('QUIET', 'Reduce build verbosity', 'False'),
|
BoolVariable('QUIET', 'Reduce build verbosity', 'False'),
|
||||||
)
|
)
|
||||||
|
|
||||||
# variables to pickle after successful configure step
|
# variables to pickle after successful configure step
|
||||||
# these include all scons core variables as well as custom
|
# these include all scons core variables as well as custom
|
||||||
|
@ -536,7 +535,6 @@ pickle_store = [# Scons internal variables
|
||||||
'SQLITE_LINKFLAGS',
|
'SQLITE_LINKFLAGS',
|
||||||
'BOOST_LIB_VERSION_FROM_HEADER',
|
'BOOST_LIB_VERSION_FROM_HEADER',
|
||||||
'BIGINT',
|
'BIGINT',
|
||||||
'USE_BOOST_FILESYSTEM',
|
|
||||||
'HOST',
|
'HOST',
|
||||||
'QUERIED_GDAL_DATA',
|
'QUERIED_GDAL_DATA',
|
||||||
'QUERIED_ICU_DATA',
|
'QUERIED_ICU_DATA',
|
||||||
|
@ -949,17 +947,54 @@ int main()
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def CheckProjData(context, silent=False):
|
def CheckProjData(context, silent=False):
|
||||||
|
|
||||||
if not silent:
|
if not silent:
|
||||||
context.Message('Checking for PROJ_LIB directory...')
|
context.Message('Checking for PROJ_LIB directory...')
|
||||||
result = run(['pkg-config', 'proj', '--variable=datadir'], stdout=PIPE)
|
ret, out = context.TryRun("""
|
||||||
value = result.stdout.decode('utf-8').strip()
|
|
||||||
|
|
||||||
|
#include <proj.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
|
std::vector<std::string> split_searchpath(std::string const& paths)
|
||||||
|
{
|
||||||
|
std::vector<std::string> output;
|
||||||
|
std::stringstream ss(paths);
|
||||||
|
std::string path;
|
||||||
|
|
||||||
|
for( std::string path;std::getline(ss, path, ':');)
|
||||||
|
{
|
||||||
|
output.push_back(path);
|
||||||
|
}
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
PJ_INFO info = proj_info();
|
||||||
|
std::string result = info.searchpath;
|
||||||
|
for (auto path : split_searchpath(result))
|
||||||
|
{
|
||||||
|
std::ifstream file(path + "/proj.db");
|
||||||
|
if (file)
|
||||||
|
{
|
||||||
|
std::cout << path;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
""", '.cpp')
|
||||||
|
value = out.strip()
|
||||||
if silent:
|
if silent:
|
||||||
context.did_show_result=1
|
context.did_show_result=1
|
||||||
if os.path.exists(value):
|
if ret:
|
||||||
context.Result('`pkg-config proj --variable=datadir` returned:\n%s ' % value)
|
context.Result('proj_info.searchpath returned %s' % value)
|
||||||
else:
|
else:
|
||||||
value = None
|
|
||||||
context.Result('Failed to detect (mapnik-config will have null value)')
|
context.Result('Failed to detect (mapnik-config will have null value)')
|
||||||
return value
|
return value
|
||||||
|
|
||||||
|
@ -1545,25 +1580,11 @@ if not preconfigured:
|
||||||
env['SKIPPED_DEPS'].append('png')
|
env['SKIPPED_DEPS'].append('png')
|
||||||
|
|
||||||
if env['WEBP']:
|
if env['WEBP']:
|
||||||
if env.get('WEBP_LIBS') or env.get('WEBP_INCLUDES'):
|
|
||||||
OPTIONAL_LIBSHEADERS.append(['webp', 'webp/decode.h', False,'C','-DHAVE_WEBP'])
|
OPTIONAL_LIBSHEADERS.append(['webp', 'webp/decode.h', False,'C','-DHAVE_WEBP'])
|
||||||
inc_path = env['WEBP_INCLUDES']
|
inc_path = env['%s_INCLUDES' % 'WEBP']
|
||||||
lib_path = env['WEBP_LIBS']
|
lib_path = env['%s_LIBS' % 'WEBP']
|
||||||
env.AppendUnique(CPPPATH = fix_path(inc_path))
|
env.AppendUnique(CPPPATH = fix_path(inc_path))
|
||||||
env.AppendUnique(LIBPATH = fix_path(lib_path))
|
env.AppendUnique(LIBPATH = fix_path(lib_path))
|
||||||
else:
|
|
||||||
cmd = 'pkg-config libwebp --libs --cflags'
|
|
||||||
if env['RUNTIME_LINK'] == 'static':
|
|
||||||
cmd += ' --static'
|
|
||||||
temp_env = Environment(ENV=os.environ)
|
|
||||||
try:
|
|
||||||
temp_env.ParseConfig(cmd)
|
|
||||||
for lib in temp_env['LIBS']:
|
|
||||||
env.AppendUnique(LIBPATH = fix_path(lib))
|
|
||||||
for inc in temp_env['CPPPATH']:
|
|
||||||
env.AppendUnique(CPPPATH = fix_path(inc))
|
|
||||||
except OSError as e:
|
|
||||||
pass
|
|
||||||
else:
|
else:
|
||||||
env['SKIPPED_DEPS'].append('webp')
|
env['SKIPPED_DEPS'].append('webp')
|
||||||
|
|
||||||
|
@ -1610,12 +1631,6 @@ if not preconfigured:
|
||||||
if env['BIGINT']:
|
if env['BIGINT']:
|
||||||
env.Append(CPPDEFINES = '-DBIGINT')
|
env.Append(CPPDEFINES = '-DBIGINT')
|
||||||
|
|
||||||
if int(env['CXX_STD']) < 17:
|
|
||||||
env['USE_BOOST_FILESYSTEM'] = True
|
|
||||||
|
|
||||||
if env['USE_BOOST_FILESYSTEM']:
|
|
||||||
env.Append(CPPDEFINES = '-DUSE_BOOST_FILESYSTEM')
|
|
||||||
|
|
||||||
if env['THREADING'] == 'multi':
|
if env['THREADING'] == 'multi':
|
||||||
thread_flag = thread_suffix
|
thread_flag = thread_suffix
|
||||||
else:
|
else:
|
||||||
|
@ -1635,13 +1650,12 @@ if not preconfigured:
|
||||||
|
|
||||||
# The other required boost headers.
|
# The other required boost headers.
|
||||||
BOOST_LIBSHEADERS = [
|
BOOST_LIBSHEADERS = [
|
||||||
|
['system', 'boost/system/system_error.hpp', True],
|
||||||
|
['filesystem', 'boost/filesystem/operations.hpp', True],
|
||||||
['regex', 'boost/regex.hpp', True],
|
['regex', 'boost/regex.hpp', True],
|
||||||
['program_options', 'boost/program_options.hpp', False]
|
['program_options', 'boost/program_options.hpp', False]
|
||||||
]
|
]
|
||||||
|
|
||||||
if env['USE_BOOST_FILESYSTEM']:
|
|
||||||
BOOST_LIBSHEADERS.append(['system', 'boost/system/system_error.hpp', True])
|
|
||||||
BOOST_LIBSHEADERS.append(['filesystem', 'boost/filesystem/operations.hpp', True])
|
|
||||||
# if requested, sort LIBPATH and CPPPATH before running CheckLibWithHeader tests
|
# if requested, sort LIBPATH and CPPPATH before running CheckLibWithHeader tests
|
||||||
if env['PRIORITIZE_LINKING']:
|
if env['PRIORITIZE_LINKING']:
|
||||||
conf.prioritize_paths(silent=True)
|
conf.prioritize_paths(silent=True)
|
||||||
|
|
39
appveyor.yml
Normal file
39
appveyor.yml
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
environment:
|
||||||
|
msvs_toolset: 14
|
||||||
|
FASTBUILD: 1
|
||||||
|
matrix:
|
||||||
|
- platform: x64
|
||||||
|
configuration: Release
|
||||||
|
|
||||||
|
os: Visual Studio 2015
|
||||||
|
|
||||||
|
#shallow_clone: true
|
||||||
|
# limit clone to latest 5 commits
|
||||||
|
clone_depth: 5
|
||||||
|
|
||||||
|
services:
|
||||||
|
- postgresql94 #if changing this, also change PATH below
|
||||||
|
|
||||||
|
install:
|
||||||
|
- SET PGUSER=postgres
|
||||||
|
- SET PGPASSWORD=Password12!
|
||||||
|
- SET PATH=C:\Program Files\PostgreSQL\9.4\bin\;%PATH%
|
||||||
|
|
||||||
|
build_script:
|
||||||
|
- scripts\build-appveyor.bat
|
||||||
|
|
||||||
|
after_build:
|
||||||
|
- 7z a visual-test-results.zip C:\tmp\mapnik-visual-images\visual-test-results
|
||||||
|
|
||||||
|
artifacts:
|
||||||
|
- path: mapnik-gyp\msbuild-summary.txt
|
||||||
|
name: msbuild-summary.txt
|
||||||
|
- path: mapnik-gyp\msbuild-errors.txt
|
||||||
|
name: msbuild-errors.txt
|
||||||
|
- path: mapnik-gyp\msbuild-warnings.txt
|
||||||
|
name: msbuild-warnings.txt
|
||||||
|
- path: visual-test-results.zip
|
||||||
|
name: visual-test-results.zip
|
||||||
|
|
||||||
|
test: off
|
||||||
|
deploy: off
|
|
@ -15,6 +15,8 @@
|
||||||
#include <cstdio> // snprintf
|
#include <cstdio> // snprintf
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <set>
|
||||||
|
#include <sstream>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "bench_framework.hpp"
|
#include "bench_framework.hpp"
|
||||||
#include <mapnik/font_engine_freetype.hpp>
|
#include <mapnik/font_engine_freetype.hpp>
|
||||||
#include <boost/format.hpp>
|
#include <boost/format.hpp>
|
||||||
|
#include <boost/foreach.hpp>
|
||||||
|
|
||||||
class test : public benchmark::test_case
|
class test : public benchmark::test_case
|
||||||
{
|
{
|
||||||
|
|
|
@ -9,7 +9,7 @@ class test : public benchmark::test_case
|
||||||
: test_case(params)
|
: test_case(params)
|
||||||
, line_data_("this is one line\nand this is a second line\nand a third line")
|
, line_data_("this is one line\nand this is a second line\nand a third line")
|
||||||
{
|
{
|
||||||
auto line_data = params.get<std::string>("line");
|
boost::optional<std::string> line_data = params.get<std::string>("line");
|
||||||
if (line_data)
|
if (line_data)
|
||||||
{
|
{
|
||||||
line_data_ = *line_data;
|
line_data_ = *line_data;
|
||||||
|
@ -57,7 +57,7 @@ class test2 : public benchmark::test_case
|
||||||
: test_case(params)
|
: test_case(params)
|
||||||
, line_data_("this is one line\nand this is a second line\nand a third line")
|
, line_data_("this is one line\nand this is a second line\nand a third line")
|
||||||
{
|
{
|
||||||
auto line_data = params.get<std::string>("line");
|
boost::optional<std::string> line_data = params.get<std::string>("line");
|
||||||
if (line_data)
|
if (line_data)
|
||||||
{
|
{
|
||||||
line_data_ = *line_data;
|
line_data_ = *line_data;
|
||||||
|
|
|
@ -26,14 +26,14 @@ class test : public benchmark::test_case
|
||||||
, scale_factor_(*params.get<mapnik::value_double>("scale_factor", 1.0))
|
, scale_factor_(*params.get<mapnik::value_double>("scale_factor", 1.0))
|
||||||
, preview_(*params.get<std::string>("preview", ""))
|
, preview_(*params.get<std::string>("preview", ""))
|
||||||
{
|
{
|
||||||
const auto map = params.get<std::string>("map");
|
boost::optional<std::string> map = params.get<std::string>("map");
|
||||||
if (!map)
|
if (!map)
|
||||||
{
|
{
|
||||||
throw std::runtime_error("please provide a --map <path to xml> arg");
|
throw std::runtime_error("please provide a --map <path to xml> arg");
|
||||||
}
|
}
|
||||||
xml_ = *map;
|
xml_ = *map;
|
||||||
|
|
||||||
const auto ext = params.get<std::string>("extent");
|
boost::optional<std::string> ext = params.get<std::string>("extent");
|
||||||
if (ext && !ext->empty())
|
if (ext && !ext->empty())
|
||||||
{
|
{
|
||||||
if (!extent_.from_string(*ext))
|
if (!extent_.from_string(*ext))
|
||||||
|
@ -101,7 +101,7 @@ int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
mapnik::parameters params;
|
mapnik::parameters params;
|
||||||
benchmark::handle_args(argc, argv, params);
|
benchmark::handle_args(argc, argv, params);
|
||||||
const auto name = params.get<std::string>("name");
|
boost::optional<std::string> name = params.get<std::string>("name");
|
||||||
if (!name)
|
if (!name)
|
||||||
{
|
{
|
||||||
std::clog << "please provide a name for this test\n";
|
std::clog << "please provide a name for this test\n";
|
||||||
|
|
|
@ -64,14 +64,14 @@ class test : public benchmark::test_case
|
||||||
, preview_(*params.get<std::string>("preview", ""))
|
, preview_(*params.get<std::string>("preview", ""))
|
||||||
, im_(m_->width(), m_->height())
|
, im_(m_->width(), m_->height())
|
||||||
{
|
{
|
||||||
const auto map = params.get<std::string>("map");
|
boost::optional<std::string> map = params.get<std::string>("map");
|
||||||
if (!map)
|
if (!map)
|
||||||
{
|
{
|
||||||
throw std::runtime_error("please provide a --map=<path to xml> arg");
|
throw std::runtime_error("please provide a --map=<path to xml> arg");
|
||||||
}
|
}
|
||||||
xml_ = *map;
|
xml_ = *map;
|
||||||
|
|
||||||
auto ext = params.get<std::string>("extent");
|
boost::optional<std::string> ext = params.get<std::string>("extent");
|
||||||
mapnik::load_map(*m_, xml_, true);
|
mapnik::load_map(*m_, xml_, true);
|
||||||
if (ext && !ext->empty())
|
if (ext && !ext->empty())
|
||||||
{
|
{
|
||||||
|
@ -156,7 +156,7 @@ int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
mapnik::parameters params;
|
mapnik::parameters params;
|
||||||
benchmark::handle_args(argc, argv, params);
|
benchmark::handle_args(argc, argv, params);
|
||||||
const auto name = params.get<std::string>("name");
|
boost::optional<std::string> name = params.get<std::string>("name");
|
||||||
if (!name)
|
if (!name)
|
||||||
{
|
{
|
||||||
std::clog << "please provide a name for this test\n";
|
std::clog << "please provide a name for this test\n";
|
||||||
|
|
173
bootstrap.sh
Executable file
173
bootstrap.sh
Executable file
|
@ -0,0 +1,173 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
: '
|
||||||
|
|
||||||
|
todo
|
||||||
|
|
||||||
|
- docs for base setup: sudo apt-get -y install zlib1g-dev make git
|
||||||
|
- shrink icu data
|
||||||
|
'
|
||||||
|
|
||||||
|
MASON_VERSION="485514d8"
|
||||||
|
|
||||||
|
function setup_mason() {
|
||||||
|
if [[ ! -d ./.mason ]]; then
|
||||||
|
git clone https://github.com/mapbox/mason.git .mason || return
|
||||||
|
elif ! git -C .mason rev-parse -q --verify "$MASON_VERSION" >/dev/null; then
|
||||||
|
git -C .mason fetch --all || true # non-fatal
|
||||||
|
fi
|
||||||
|
git -C .mason checkout --detach "$MASON_VERSION" -- || return
|
||||||
|
case ":$PATH:" in
|
||||||
|
*":$PWD/.mason:"*) : already there ;;
|
||||||
|
*) export PATH="$PWD/.mason:$PATH" ;;
|
||||||
|
esac
|
||||||
|
export CXX=${CXX:-clang++}
|
||||||
|
export CC=${CC:-clang}
|
||||||
|
}
|
||||||
|
|
||||||
|
function install() {
|
||||||
|
MASON_PLATFORM_ID=$(mason env MASON_PLATFORM_ID)
|
||||||
|
if [[ ! -d ./mason_packages/${MASON_PLATFORM_ID}/${1}/${2} ]]; then
|
||||||
|
mason install $1 $2
|
||||||
|
if [[ ${3:-false} != false ]]; then
|
||||||
|
LA_FILE=$(mason prefix $1 $2)/lib/$3.la
|
||||||
|
if [[ -f ${LA_FILE} ]]; then
|
||||||
|
perl -i -p -e 's:\Q$ENV{HOME}/build/mapbox/mason\E:$ENV{PWD}:g' ${LA_FILE}
|
||||||
|
else
|
||||||
|
echo "$LA_FILE not found"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
# the rm here is to workaround https://github.com/mapbox/mason/issues/230
|
||||||
|
rm -f ./mason_packages/.link/mason.ini
|
||||||
|
mason link $1 $2
|
||||||
|
}
|
||||||
|
|
||||||
|
ICU_VERSION="58.1"
|
||||||
|
BOOST_VERSION="1.75.0"
|
||||||
|
|
||||||
|
function install_mason_deps() {
|
||||||
|
install ccache 3.3.1
|
||||||
|
install zlib 1.2.8
|
||||||
|
install jpeg_turbo 1.5.2 libjpeg
|
||||||
|
install libpng 1.6.32 libpng
|
||||||
|
install libtiff 4.0.8 libtiff
|
||||||
|
install libpq 9.6.5
|
||||||
|
install sqlite 3.34.0 libsqlite3
|
||||||
|
install icu ${ICU_VERSION}
|
||||||
|
install proj 7.2.1 libproj
|
||||||
|
install pixman 0.34.0 libpixman-1
|
||||||
|
install cairo 1.14.8 libcairo
|
||||||
|
install webp 0.6.0 libwebp
|
||||||
|
install libgdal 2.2.3 libgdal
|
||||||
|
install boost ${BOOST_VERSION}
|
||||||
|
install boost_libsystem ${BOOST_VERSION}
|
||||||
|
install boost_libfilesystem ${BOOST_VERSION}
|
||||||
|
install boost_libprogram_options ${BOOST_VERSION}
|
||||||
|
install boost_libregex_icu58 ${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 ${BOOST_VERSION}
|
||||||
|
install boost_libpython ${BOOST_VERSION}
|
||||||
|
install freetype 2.7.1 libfreetype
|
||||||
|
install harfbuzz 1.4.4-ft libharfbuzz
|
||||||
|
}
|
||||||
|
|
||||||
|
MASON_LINKED_ABS=$(pwd)/mason_packages/.link
|
||||||
|
MASON_LINKED_REL=./mason_packages/.link
|
||||||
|
export C_INCLUDE_PATH="${MASON_LINKED_ABS}/include"
|
||||||
|
export CPLUS_INCLUDE_PATH="${MASON_LINKED_ABS}/include"
|
||||||
|
export LIBRARY_PATH="${MASON_LINKED_ABS}/lib"
|
||||||
|
|
||||||
|
function make_config() {
|
||||||
|
echo "
|
||||||
|
CXX = '$CXX'
|
||||||
|
CC = '$CC'
|
||||||
|
CUSTOM_CXXFLAGS = '-D_GLIBCXX_USE_CXX11_ABI=0'
|
||||||
|
RUNTIME_LINK = 'static'
|
||||||
|
INPUT_PLUGINS = 'all'
|
||||||
|
PATH = '${MASON_LINKED_REL}/bin'
|
||||||
|
PKG_CONFIG_PATH = '${MASON_LINKED_REL}/lib/pkgconfig'
|
||||||
|
PATH_REMOVE = '/usr:/usr/local'
|
||||||
|
PATH_REPLACE = '$HOME/build/mapbox/mason/mason_packages:./mason_packages'
|
||||||
|
BOOST_INCLUDES = '${MASON_LINKED_REL}/include'
|
||||||
|
BOOST_LIBS = '${MASON_LINKED_REL}/lib'
|
||||||
|
ICU_INCLUDES = '${MASON_LINKED_REL}/include'
|
||||||
|
ICU_LIBS = '${MASON_LINKED_REL}/lib'
|
||||||
|
HB_INCLUDES = '${MASON_LINKED_REL}/include'
|
||||||
|
HB_LIBS = '${MASON_LINKED_REL}/lib'
|
||||||
|
PNG_INCLUDES = '${MASON_LINKED_REL}/include/libpng16'
|
||||||
|
PNG_LIBS = '${MASON_LINKED_REL}/lib'
|
||||||
|
JPEG_INCLUDES = '${MASON_LINKED_REL}/include'
|
||||||
|
JPEG_LIBS = '${MASON_LINKED_REL}/lib'
|
||||||
|
TIFF_INCLUDES = '${MASON_LINKED_REL}/include'
|
||||||
|
TIFF_LIBS = '${MASON_LINKED_REL}/lib'
|
||||||
|
WEBP_INCLUDES = '${MASON_LINKED_REL}/include'
|
||||||
|
WEBP_LIBS = '${MASON_LINKED_REL}/lib'
|
||||||
|
PROJ_INCLUDES = '${MASON_LINKED_REL}/include'
|
||||||
|
PROJ_LIBS = '${MASON_LINKED_REL}/lib'
|
||||||
|
PG_INCLUDES = '${MASON_LINKED_REL}/include'
|
||||||
|
PG_LIBS = '${MASON_LINKED_REL}/lib'
|
||||||
|
FREETYPE_INCLUDES = '${MASON_LINKED_REL}/include/freetype2'
|
||||||
|
FREETYPE_LIBS = '${MASON_LINKED_REL}/lib'
|
||||||
|
SVG_RENDERER = True
|
||||||
|
CAIRO_INCLUDES = '${MASON_LINKED_REL}/include'
|
||||||
|
CAIRO_LIBS = '${MASON_LINKED_REL}/lib'
|
||||||
|
SQLITE_INCLUDES = '${MASON_LINKED_REL}/include'
|
||||||
|
SQLITE_LIBS = '${MASON_LINKED_REL}/lib'
|
||||||
|
BENCHMARK = True
|
||||||
|
CPP_TESTS = True
|
||||||
|
PGSQL2SQLITE = True
|
||||||
|
XMLPARSER = 'ptree'
|
||||||
|
SVG2PNG = True
|
||||||
|
"
|
||||||
|
}
|
||||||
|
|
||||||
|
# NOTE: the `mapnik-settings.env` is used by test/run (which is run by `make test`)
|
||||||
|
function setup_runtime_settings() {
|
||||||
|
echo "export PROJ_LIB=${MASON_LINKED_ABS}/share/proj" > mapnik-settings.env
|
||||||
|
echo "export ICU_DATA=${MASON_LINKED_ABS}/share/icu/${ICU_VERSION}" >> mapnik-settings.env
|
||||||
|
echo "export GDAL_DATA=${MASON_LINKED_ABS}/share/gdal" >> mapnik-settings.env
|
||||||
|
}
|
||||||
|
|
||||||
|
# turn arguments of the form NAME=VALUE into exported variables;
|
||||||
|
# any other arguments are reported and cause error return status
|
||||||
|
function export_variables() {
|
||||||
|
local arg= ret=0
|
||||||
|
for arg
|
||||||
|
do
|
||||||
|
if [[ "$arg" =~ ^[[:alpha:]][_[:alnum:]]*= ]]
|
||||||
|
then
|
||||||
|
export "$arg"
|
||||||
|
else
|
||||||
|
printf >&2 "bootstrap.sh: invalid argument: %s\n" "$arg"
|
||||||
|
ret=1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
return $ret
|
||||||
|
}
|
||||||
|
|
||||||
|
function main() {
|
||||||
|
export_variables "$@" || return
|
||||||
|
# setup_mason must not run in subshell, because it sets default
|
||||||
|
# values of CC, CXX and adds mason to PATH, which we want to keep
|
||||||
|
# when sourced
|
||||||
|
setup_mason || return
|
||||||
|
(
|
||||||
|
# this is wrapped in subshell to allow sourcing this script
|
||||||
|
# without having the terminal closed on error
|
||||||
|
set -eu
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
install_mason_deps
|
||||||
|
make_config > ./config.py
|
||||||
|
setup_runtime_settings
|
||||||
|
|
||||||
|
printf "\n\e[1;32m%s\e[m\n" "bootstrap successful, now run:"
|
||||||
|
echo ""
|
||||||
|
echo " ./configure && make"
|
||||||
|
echo ""
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
|
@ -3,13 +3,13 @@ function(create_pkg_config_file _target _lib_name _description)
|
||||||
prefix=@CMAKE_INSTALL_PREFIX@
|
prefix=@CMAKE_INSTALL_PREFIX@
|
||||||
exec_prefix=${prefix}
|
exec_prefix=${prefix}
|
||||||
includedir=${prefix}/include
|
includedir=${prefix}/include
|
||||||
libdir=${exec_prefix}/@MAPNIK_LIB_DIR@
|
libdir=${exec_prefix}/lib
|
||||||
|
|
||||||
Name: @_lib_name@
|
Name: @_lib_name@
|
||||||
Description: @_description@
|
Description: @_description@
|
||||||
Version: @MAPNIK_VERSION@
|
Version: @MAPNIK_VERSION@
|
||||||
Libs: -L"${libdir}" -l$<TARGET_FILE_BASE_NAME:@_target@>$<TARGET_PROPERTY:@_target@,$<CONFIG>_POSTFIX>
|
Libs: -L"${libdir}" -l$<TARGET_FILE_BASE_NAME:@_target@>$<TARGET_PROPERTY:@_target@,$<CONFIG>_POSTFIX>
|
||||||
Cflags: -I"${includedir}" -I"${includedir}/mapnik" ]]
|
Cflags: -I"${includedir}" ]]
|
||||||
_contents @ONLY)
|
_contents @ONLY)
|
||||||
|
|
||||||
file(GENERATE
|
file(GENERATE
|
||||||
|
@ -64,7 +64,7 @@ function(create_pkg_config_file_mapnik _lib_name _description)
|
||||||
prefix=@CMAKE_INSTALL_PREFIX@
|
prefix=@CMAKE_INSTALL_PREFIX@
|
||||||
exec_prefix=${prefix}
|
exec_prefix=${prefix}
|
||||||
includedir=${prefix}/include
|
includedir=${prefix}/include
|
||||||
libdir=${exec_prefix}/@MAPNIK_LIB_DIR@
|
libdir=${exec_prefix}/lib
|
||||||
fonts_dir=${prefix}/@FONTS_INSTALL_DIR@
|
fonts_dir=${prefix}/@FONTS_INSTALL_DIR@
|
||||||
plugins_dir=${prefix}/@PLUGINS_INSTALL_DIR@
|
plugins_dir=${prefix}/@PLUGINS_INSTALL_DIR@
|
||||||
|
|
||||||
|
@ -73,7 +73,7 @@ Description: @_description@
|
||||||
Version: @MAPNIK_VERSION@
|
Version: @MAPNIK_VERSION@
|
||||||
Requires: @m_requires@
|
Requires: @m_requires@
|
||||||
Libs: -L"${libdir}" -l$<TARGET_FILE_BASE_NAME:mapnik>$<TARGET_PROPERTY:mapnik,$<CONFIG>_POSTFIX>
|
Libs: -L"${libdir}" -l$<TARGET_FILE_BASE_NAME:mapnik>$<TARGET_PROPERTY:mapnik,$<CONFIG>_POSTFIX>
|
||||||
Cflags: -I"${includedir}" -I"${includedir}/mapnik" -I"${includedir}/mapnik/agg" @m_str_compile_defs@]]
|
Cflags: -I"${includedir}" @m_str_compile_defs@]]
|
||||||
_contents @ONLY)
|
_contents @ONLY)
|
||||||
file(GENERATE
|
file(GENERATE
|
||||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_lib_name}-$<CONFIG>.pc
|
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_lib_name}-$<CONFIG>.pc
|
||||||
|
|
18
configure
vendored
18
configure
vendored
|
@ -1,32 +1,18 @@
|
||||||
#! /usr/bin/env bash
|
#! /bin/sh
|
||||||
|
|
||||||
set -eu
|
set -eu
|
||||||
|
|
||||||
: ${PYTHON:=python}
|
: ${PYTHON:=python}
|
||||||
|
|
||||||
# Only some shells (Bash and Z shell) support arrays. Therefore,
|
|
||||||
# the following code provides an alternative for users calling the script
|
|
||||||
# with shells other than Bash or Z shell (e.g. Debian users using Dash).
|
|
||||||
THE_SHELL=$(basename $SHELL)
|
|
||||||
if [ "$THE_SHELL" != "bash" ] && [ "$THE_SHELL" != "zsh" ]; then
|
|
||||||
if [ -f mapnik-settings.env ]; then
|
|
||||||
echo "WARNING: Reading from mapnik-settings.env is supported with Bash or Z shell only."
|
|
||||||
fi
|
|
||||||
$PYTHON scons/scons.py --implicit-deps-changed configure "$@"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# mapnik-settings.env is an optional file to store
|
# mapnik-settings.env is an optional file to store
|
||||||
# environment variables that should be used before
|
# environment variables that should be used before
|
||||||
# running tests like PROJ_LIB, GDAL_DATA, and ICU_DATA
|
# running tests like PROJ_LIB, GDAL_DATA, and ICU_DATA
|
||||||
# These do not normally need to be set except when
|
# These do not normally need to be set except when
|
||||||
# building against binary versions of dependencies like
|
# building against binary versions of dependencies like
|
||||||
# done via bootstrap.sh
|
# done via bootstrap.sh
|
||||||
|
|
||||||
if [ -f mapnik-settings.env ]; then
|
if [ -f mapnik-settings.env ]; then
|
||||||
echo "Inheriting from mapnik-settings.env"
|
echo "Inheriting from mapnik-settings.env"
|
||||||
. ./mapnik-settings.env
|
. ./mapnik-settings.env
|
||||||
VARS=( $(cat mapnik-settings.env) )
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
$PYTHON scons/scons.py --implicit-deps-changed configure ${VARS[*]:-} "$@"
|
$PYTHON scons/scons.py --implicit-deps-changed configure "$@"
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* This file is part of Mapnik (c++ mapping toolkit)
|
/* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* Mapnik is free software; you can redistribute it and/or
|
* Mapnik is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* This file is part of Mapnik (c++ mapping toolkit)
|
/* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* Mapnik is free software; you can redistribute it and/or
|
* Mapnik is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* This file is part of Mapnik (c++ mapping toolkit)
|
/* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* Mapnik is free software; you can redistribute it and/or
|
* Mapnik is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* This file is part of Mapnik (c++ mapping toolkit)
|
/* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* Mapnik is free software; you can redistribute it and/or
|
* Mapnik is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* This file is part of Mapnik (c++ mapping toolkit)
|
/* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* Mapnik is free software; you can redistribute it and/or
|
* Mapnik is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
@ -51,7 +51,7 @@ layer_info_dialog::layer_info_dialog(mapnik::layer& lay, QWidget* parent)
|
||||||
int index = 0;
|
int index = 0;
|
||||||
for (pos = ps.begin(); pos != ps.end(); ++pos)
|
for (pos = ps.begin(); pos != ps.end(); ++pos)
|
||||||
{
|
{
|
||||||
std::optional<std::string> result;
|
boost::optional<std::string> result;
|
||||||
mapnik::util::apply_visitor(mapnik::value_extractor_visitor<std::string>(result), pos->second);
|
mapnik::util::apply_visitor(mapnik::value_extractor_visitor<std::string>(result), pos->second);
|
||||||
if (result)
|
if (result)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* This file is part of Mapnik (c++ mapping toolkit)
|
/* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* Mapnik is free software; you can redistribute it and/or
|
* Mapnik is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* This file is part of Mapnik (c++ mapping toolkit)
|
/* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* Mapnik is free software; you can redistribute it and/or
|
* Mapnik is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* This file is part of Mapnik (c++ mapping toolkit)
|
/* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* Mapnik is free software; you can redistribute it and/or
|
* Mapnik is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* This file is part of Mapnik (c++ mapping toolkit)
|
/* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* Mapnik is free software; you can redistribute it and/or
|
* Mapnik is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* This file is part of Mapnik (c++ mapping toolkit)
|
/* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* Mapnik is free software; you can redistribute it and/or
|
* Mapnik is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* This file is part of Mapnik (c++ mapping toolkit)
|
/* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* Mapnik is free software; you can redistribute it and/or
|
* Mapnik is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* This file is part of Mapnik (c++ mapping toolkit)
|
/* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* Mapnik is free software; you can redistribute it and/or
|
* Mapnik is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* This file is part of Mapnik (c++ mapping toolkit)
|
/* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* Mapnik is free software; you can redistribute it and/or
|
* Mapnik is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* This file is part of Mapnik (c++ mapping toolkit)
|
/* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* Mapnik is free software; you can redistribute it and/or
|
* Mapnik is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
@ -38,7 +38,7 @@
|
||||||
// mapnik
|
// mapnik
|
||||||
|
|
||||||
#ifndef Q_MOC_RUN // QT moc chokes on BOOST_JOIN
|
#ifndef Q_MOC_RUN // QT moc chokes on BOOST_JOIN
|
||||||
// #include <mapnik/config_error.hpp>
|
//#include <mapnik/config_error.hpp>
|
||||||
#include <mapnik/load_map.hpp>
|
#include <mapnik/load_map.hpp>
|
||||||
#include <mapnik/save_map.hpp>
|
#include <mapnik/save_map.hpp>
|
||||||
#include <mapnik/projection.hpp>
|
#include <mapnik/projection.hpp>
|
||||||
|
@ -106,7 +106,10 @@ MainWindow::MainWindow()
|
||||||
// slider
|
// slider
|
||||||
connect(slider_, SIGNAL(valueChanged(int)), mapWidget_, SLOT(zoomToLevel(int)));
|
connect(slider_, SIGNAL(valueChanged(int)), mapWidget_, SLOT(zoomToLevel(int)));
|
||||||
// renderer selector
|
// renderer selector
|
||||||
connect(renderer_selector_, SIGNAL(currentIndexChanged(int)), mapWidget_, SLOT(updateRenderer(int)));
|
connect(renderer_selector_,
|
||||||
|
SIGNAL(currentIndexChanged(QString const&)),
|
||||||
|
mapWidget_,
|
||||||
|
SLOT(updateRenderer(QString const&)));
|
||||||
|
|
||||||
// scale factor
|
// scale factor
|
||||||
connect(scale_factor_, SIGNAL(valueChanged(double)), mapWidget_, SLOT(updateScaleFactor(double)));
|
connect(scale_factor_, SIGNAL(valueChanged(double)), mapWidget_, SLOT(updateScaleFactor(double)));
|
||||||
|
@ -387,7 +390,7 @@ void MainWindow::createToolBars()
|
||||||
|
|
||||||
scale_factor_ = new QDoubleSpinBox(fileToolBar);
|
scale_factor_ = new QDoubleSpinBox(fileToolBar);
|
||||||
scale_factor_->setMinimum(0.1);
|
scale_factor_->setMinimum(0.1);
|
||||||
scale_factor_->setMaximum(10.0);
|
scale_factor_->setMaximum(5.0);
|
||||||
scale_factor_->setSingleStep(0.1);
|
scale_factor_->setSingleStep(0.1);
|
||||||
scale_factor_->setValue(1.0);
|
scale_factor_->setValue(1.0);
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* This file is part of Mapnik (c++ mapping toolkit)
|
/* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* Mapnik is free software; you can redistribute it and/or
|
* Mapnik is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* This file is part of Mapnik (c++ mapping toolkit)
|
/* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* Mapnik is free software; you can redistribute it and/or
|
* Mapnik is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
@ -545,15 +545,15 @@ void render_cairo(mapnik::Map const& map, double scaling_factor, QPixmap& pix)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void MapWidget::updateRenderer(int index)
|
void MapWidget::updateRenderer(QString const& txt)
|
||||||
{
|
{
|
||||||
std::cerr << "updateRenderer:" << index << std::endl;
|
if (txt == "AGG")
|
||||||
if (index == 0)
|
|
||||||
cur_renderer_ = AGG;
|
cur_renderer_ = AGG;
|
||||||
else if (index == 1)
|
else if (txt == "Cairo")
|
||||||
cur_renderer_ = Cairo;
|
cur_renderer_ = Cairo;
|
||||||
else if (index == 2)
|
else if (txt == "Grid")
|
||||||
cur_renderer_ = Grid;
|
cur_renderer_ = Grid;
|
||||||
|
std::cerr << "Update renderer called" << std::endl;
|
||||||
updateMap();
|
updateMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* This file is part of Mapnik (c++ mapping toolkit)
|
/* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* Mapnik is free software; you can redistribute it and/or
|
* Mapnik is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
@ -82,7 +82,7 @@ class MapWidget : public QWidget
|
||||||
void zoomToLevel(int level);
|
void zoomToLevel(int level);
|
||||||
void updateMap();
|
void updateMap();
|
||||||
void layerSelected(int);
|
void layerSelected(int);
|
||||||
void updateRenderer(int);
|
void updateRenderer(QString const& txt);
|
||||||
void updateScaleFactor(double scale_factor);
|
void updateScaleFactor(double scale_factor);
|
||||||
signals:
|
signals:
|
||||||
void mapViewChanged();
|
void mapViewChanged();
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* This file is part of Mapnik (c++ mapping toolkit)
|
/* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* Mapnik is free software; you can redistribute it and/or
|
* Mapnik is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* This file is part of Mapnik (c++ mapping toolkit)
|
/* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* Mapnik is free software; you can redistribute it and/or
|
* Mapnik is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
|
5
deps/agg/include/agg_pixfmt_rgba.h
vendored
5
deps/agg/include/agg_pixfmt_rgba.h
vendored
|
@ -24,7 +24,6 @@
|
||||||
#ifndef AGG_PIXFMT_RGBA_INCLUDED
|
#ifndef AGG_PIXFMT_RGBA_INCLUDED
|
||||||
#define AGG_PIXFMT_RGBA_INCLUDED
|
#define AGG_PIXFMT_RGBA_INCLUDED
|
||||||
|
|
||||||
#include <mapnik/config.hpp>
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include "agg_basics.h"
|
#include "agg_basics.h"
|
||||||
|
@ -3167,10 +3166,6 @@ private:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
extern template struct MAPNIK_DECL comp_op_rgba_hue<agg::rgba8, agg::order_rgba>;
|
|
||||||
extern template struct MAPNIK_DECL comp_op_rgba_saturation<agg::rgba8, agg::order_rgba>;
|
|
||||||
extern template struct MAPNIK_DECL comp_op_rgba_color<agg::rgba8, agg::order_rgba>;
|
|
||||||
extern template struct MAPNIK_DECL comp_op_rgba_value<agg::rgba8, agg::order_rgba>;
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
typedef blender_rgba<rgba8, order_rgba> blender_rgba32; //----blender_rgba32
|
typedef blender_rgba<rgba8, order_rgba> blender_rgba32; //----blender_rgba32
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -92,7 +92,7 @@ class buffer_stack
|
||||||
|
|
||||||
void pop()
|
void pop()
|
||||||
{
|
{
|
||||||
// ^ ensure iterator is not out-of-range
|
// ^ ensure irator is not out-of-range
|
||||||
// prior calling this method
|
// prior calling this method
|
||||||
++position_;
|
++position_;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -175,14 +175,14 @@ struct symbolizer_attributes
|
||||||
|
|
||||||
void operator()(raster_symbolizer const& sym)
|
void operator()(raster_symbolizer const& sym)
|
||||||
{
|
{
|
||||||
const auto filter_factor = get_optional<double>(sym, keys::filter_factor);
|
boost::optional<double> filter_factor = get_optional<double>(sym, keys::filter_factor);
|
||||||
if (filter_factor)
|
if (filter_factor)
|
||||||
{
|
{
|
||||||
filter_factor_ = *filter_factor;
|
filter_factor_ = *filter_factor;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const auto scaling_method = get_optional<scaling_method_e>(sym, keys::scaling);
|
boost::optional<scaling_method_e> scaling_method = get_optional<scaling_method_e>(sym, keys::scaling);
|
||||||
if (scaling_method && *scaling_method != SCALING_NEAR)
|
if (scaling_method && *scaling_method != SCALING_NEAR)
|
||||||
{
|
{
|
||||||
filter_factor_ = 2;
|
filter_factor_ = 2;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -34,7 +34,7 @@ class cairo_context;
|
||||||
|
|
||||||
void render_vector_marker(cairo_context& context,
|
void render_vector_marker(cairo_context& context,
|
||||||
svg_path_adapter& svg_path,
|
svg_path_adapter& svg_path,
|
||||||
svg::group const& group_attr,
|
svg_attribute_type const& attributes,
|
||||||
box2d<double> const& bbox,
|
box2d<double> const& bbox,
|
||||||
agg::trans_affine const& tr,
|
agg::trans_affine const& tr,
|
||||||
double opacity);
|
double opacity);
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -56,11 +56,11 @@ struct cairo_renderer_process_visitor_p
|
||||||
cairo_context context(cairo);
|
cairo_context context(cairo);
|
||||||
|
|
||||||
svg_storage_type& svg = *marker.get_data();
|
svg_storage_type& svg = *marker.get_data();
|
||||||
auto const& svg_group = svg.svg_group();
|
svg_attribute_type const& svg_attributes = svg.attributes();
|
||||||
svg::vertex_stl_adapter<svg::svg_path_storage> stl_storage(svg.source());
|
svg::vertex_stl_adapter<svg::svg_path_storage> stl_storage(svg.source());
|
||||||
svg::svg_path_adapter svg_path(stl_storage);
|
svg::svg_path_adapter svg_path(stl_storage);
|
||||||
|
|
||||||
render_vector_marker(context, svg_path, svg_group, bbox, tr, opacity_);
|
render_vector_marker(context, svg_path, svg_attributes, bbox, tr, opacity_);
|
||||||
|
|
||||||
return surface;
|
return surface;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -94,7 +94,7 @@ struct coord<T, 2>
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T2>
|
template<typename T2>
|
||||||
bool operator==(coord<T2, 2> const& rhs) const
|
bool operator==(coord<T2, 2> const& rhs)
|
||||||
{
|
{
|
||||||
return x == rhs.x && y == rhs.y;
|
return x == rhs.x && y == rhs.y;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -352,9 +352,9 @@ auto const rgb_color_def = lit("rgb")
|
||||||
>> attr(255) >> lit(')');
|
>> attr(255) >> lit(')');
|
||||||
|
|
||||||
auto const rgb_color_percent_def = lit("rgb")
|
auto const rgb_color_percent_def = lit("rgb")
|
||||||
>> lit('(') >> double_[percent_red] >> lit('%')
|
>> lit('(') >> dec3[percent_red] >> lit('%')
|
||||||
>> lit(',') >> double_[percent_green] >> lit('%')
|
>> lit(',') >> dec3[percent_green] >> lit('%')
|
||||||
>> lit(',') >> double_[percent_blue] >> lit('%')
|
>> lit(',') >> dec3[percent_blue] >> lit('%')
|
||||||
>> attr(255) >> lit(')');
|
>> attr(255) >> lit(')');
|
||||||
|
|
||||||
auto const rgba_color_def = lit("rgba")
|
auto const rgba_color_def = lit("rgba")
|
||||||
|
@ -364,24 +364,24 @@ auto const rgba_color_def = lit("rgba")
|
||||||
>> lit(',') >> double_[opacity] >> lit(')');
|
>> lit(',') >> double_[opacity] >> lit(')');
|
||||||
|
|
||||||
auto const rgba_color_percent_def = lit("rgba")
|
auto const rgba_color_percent_def = lit("rgba")
|
||||||
>> lit('(') >> double_[percent_red] >> lit('%')
|
>> lit('(') >> dec3[percent_red] >> lit('%')
|
||||||
>> lit(',') >> double_[percent_green] >> lit('%')
|
>> lit(',') >> dec3[percent_green] >> lit('%')
|
||||||
>> lit(',') >> double_[percent_blue] >> lit('%')
|
>> lit(',') >> dec3[percent_blue] >> lit('%')
|
||||||
>> lit(',') >> double_[opacity] >> lit(')');
|
>> lit(',') >> double_[opacity] >> lit(')');
|
||||||
|
|
||||||
auto const hsl_values = x3::rule<class hsl_values, std::tuple<std::uint16_t, double, double, double >> {} =
|
auto const hsl_values = x3::rule<class hsl_values, std::tuple<std::uint16_t,std::uint8_t,std::uint8_t, double >> {} =
|
||||||
lit("hsl")
|
lit("hsl")
|
||||||
>> lit('(') >> dec3
|
>> lit('(') >> dec3
|
||||||
>> lit(',') >> double_ >> lit('%')
|
>> lit(',') >> dec3 >> lit('%')
|
||||||
>> lit(',') >> double_ >> lit('%')
|
>> lit(',') >> dec3 >> lit('%')
|
||||||
>> attr(1.0) >> lit(')')
|
>> attr(1.0) >> lit(')')
|
||||||
;
|
;
|
||||||
|
|
||||||
auto const hsla_values = x3::rule<class hsla_values, std::tuple<std::uint16_t, double, double, double >> {} =
|
auto const hsla_values = x3::rule<class hsla_values, std::tuple<std::uint16_t,std::uint8_t,std::uint8_t, double >> {} =
|
||||||
lit("hsla")
|
lit("hsla")
|
||||||
>> lit('(') >> dec3
|
>> lit('(') >> dec3
|
||||||
>> lit(',') >> double_ >> lit('%')
|
>> lit(',') >> dec3 >> lit('%')
|
||||||
>> lit(',') >> double_ >> lit('%')
|
>> lit(',') >> dec3 >> lit('%')
|
||||||
>> lit(',') >> double_ >> lit(')')
|
>> lit(',') >> double_ >> lit(')')
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -38,7 +38,6 @@
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <optional>
|
|
||||||
|
|
||||||
namespace mapnik {
|
namespace mapnik {
|
||||||
|
|
||||||
|
@ -92,7 +91,7 @@ class MAPNIK_DECL datasource : private util::noncopyable
|
||||||
// default implementation without context use features method
|
// default implementation without context use features method
|
||||||
return features(q);
|
return features(q);
|
||||||
}
|
}
|
||||||
virtual std::optional<datasource_geometry_t> get_geometry_type() const = 0;
|
virtual boost::optional<datasource_geometry_t> get_geometry_type() const = 0;
|
||||||
virtual featureset_ptr features(query const& q) const = 0;
|
virtual featureset_ptr features(query const& q) const = 0;
|
||||||
virtual featureset_ptr features_at_point(coord2d const& pt, double tol = 0) const = 0;
|
virtual featureset_ptr features_at_point(coord2d const& pt, double tol = 0) const = 0;
|
||||||
virtual box2d<double> envelope() const = 0;
|
virtual box2d<double> envelope() const = 0;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -41,10 +41,10 @@ class datasource;
|
||||||
class parameters;
|
class parameters;
|
||||||
class PluginInfo;
|
class PluginInfo;
|
||||||
|
|
||||||
class MAPNIK_DECL datasource_cache : public singleton<datasource_cache, CreateStatic>,
|
class MAPNIK_DECL datasource_cache : public singleton_cxx11<datasource_cache>,
|
||||||
private util::noncopyable
|
private util::noncopyable
|
||||||
{
|
{
|
||||||
friend class CreateStatic<datasource_cache>;
|
friend class singleton_cxx11<datasource_cache>;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool plugin_registered(const std::string& plugin_name) const;
|
bool plugin_registered(const std::string& plugin_name) const;
|
||||||
|
@ -66,7 +66,7 @@ class MAPNIK_DECL datasource_cache : public singleton<datasource_cache, CreateSt
|
||||||
mutable std::recursive_mutex instance_mutex_;
|
mutable std::recursive_mutex instance_mutex_;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern template class MAPNIK_DECL singleton<datasource_cache, CreateStatic>;
|
extern template class MAPNIK_DECL singleton_cxx11<datasource_cache>;
|
||||||
|
|
||||||
} // namespace mapnik
|
} // namespace mapnik
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -45,7 +45,7 @@ namespace mapnik {
|
||||||
// Global logger class that holds the configuration of severity, format
|
// Global logger class that holds the configuration of severity, format
|
||||||
// and file/console redirection.
|
// and file/console redirection.
|
||||||
|
|
||||||
class MAPNIK_DECL logger : public singleton<logger, CreateStatic>,
|
class MAPNIK_DECL logger : public singleton_cxx11<logger>,
|
||||||
private util::noncopyable
|
private util::noncopyable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -96,7 +96,10 @@ class MAPNIK_DECL logger : public singleton<logger, CreateStatic>,
|
||||||
}
|
}
|
||||||
|
|
||||||
// format
|
// format
|
||||||
static std::string const& get_format() { return format_; }
|
static std::string const& get_format()
|
||||||
|
{
|
||||||
|
return format_;
|
||||||
|
}
|
||||||
|
|
||||||
static void set_format(std::string const& format)
|
static void set_format(std::string const& format)
|
||||||
{
|
{
|
||||||
|
@ -208,7 +211,10 @@ class base_log : public util::noncopyable
|
||||||
|
|
||||||
private:
|
private:
|
||||||
#ifdef MAPNIK_LOG
|
#ifdef MAPNIK_LOG
|
||||||
inline bool check_severity() { return Severity >= logger::get_object_severity(object_name_); }
|
inline bool check_severity()
|
||||||
|
{
|
||||||
|
return Severity >= logger::get_object_severity(object_name_);
|
||||||
|
}
|
||||||
|
|
||||||
typename output_policy::stream_buffer streambuf_;
|
typename output_policy::stream_buffer streambuf_;
|
||||||
std::string object_name_;
|
std::string object_name_;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -35,7 +35,11 @@
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#if __cpp_lib_string_view >= 201606L
|
||||||
#include <string_view>
|
#include <string_view>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <mapnik/warning.hpp>
|
||||||
|
|
||||||
namespace mapnik {
|
namespace mapnik {
|
||||||
|
|
||||||
|
@ -58,9 +62,60 @@ class illegal_enum_value : public std::exception
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
|
#if __cpp_lib_string_view >= 201606L
|
||||||
|
using mapnik_string_view = std::string_view;
|
||||||
|
#else
|
||||||
|
class mapnik_string_view // use std::string_view in C++17
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
template<std::size_t N>
|
||||||
|
constexpr mapnik_string_view(const char (&s)[N])
|
||||||
|
: size_(N)
|
||||||
|
, data_(s)
|
||||||
|
{}
|
||||||
|
|
||||||
|
constexpr mapnik_string_view(const char* s, std::size_t N)
|
||||||
|
: size_(N)
|
||||||
|
, data_(s)
|
||||||
|
{}
|
||||||
|
|
||||||
|
constexpr char operator[](std::size_t index) const
|
||||||
|
{
|
||||||
|
return (index >= size_) ? throw std::out_of_range("Invalid index.") : data_[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
constexpr char const* data() const { return data_; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::size_t size_;
|
||||||
|
const char* data_;
|
||||||
|
};
|
||||||
|
|
||||||
|
constexpr bool mapnik_string_view_equals(mapnik_string_view const& a, char const* b, std::size_t i)
|
||||||
|
{
|
||||||
|
if (a[i] != b[i])
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (a[i] == 0 || b[i] == 0)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return mapnik_string_view_equals(a, b, i + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
constexpr bool operator==(mapnik_string_view const& a, char const* b)
|
||||||
|
{
|
||||||
|
return mapnik_string_view_equals(a, b, 0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
template<class EnumT>
|
template<class EnumT>
|
||||||
using EnumStringT = std::tuple<EnumT, std::string_view>;
|
using EnumStringT = std::tuple<EnumT, mapnik_string_view>;
|
||||||
|
|
||||||
template<class EnumT, std::size_t N>
|
template<class EnumT, std::size_t N>
|
||||||
using EnumMapT = std::array<EnumStringT<EnumT>, N>;
|
using EnumMapT = std::array<EnumStringT<EnumT>, N>;
|
||||||
|
@ -94,7 +149,9 @@ struct MAPNIK_DECL enumeration
|
||||||
{
|
{
|
||||||
using native_type = ENUM;
|
using native_type = ENUM;
|
||||||
constexpr operator ENUM() const { return value_; }
|
constexpr operator ENUM() const { return value_; }
|
||||||
|
// constexpr bool operator==(const enumeration_new& rhs) { return value_ == rhs.value_; }
|
||||||
void operator=(ENUM v) { value_ = v; }
|
void operator=(ENUM v) { value_ = v; }
|
||||||
|
void operator=(const enumeration& other) { value_ = other.value_; }
|
||||||
|
|
||||||
enumeration()
|
enumeration()
|
||||||
: value_()
|
: value_()
|
||||||
|
@ -134,12 +191,12 @@ struct MAPNIK_DECL enumeration
|
||||||
std::map<enum_class, std::string> fnc_name##_lookup() \
|
std::map<enum_class, std::string> fnc_name##_lookup() \
|
||||||
{ \
|
{ \
|
||||||
std::map<enum_class, std::string> val_map; \
|
std::map<enum_class, std::string> val_map; \
|
||||||
std::transform(fnc_name##_map.begin(), \
|
std::transform( \
|
||||||
|
fnc_name##_map.begin(), \
|
||||||
fnc_name##_map.end(), \
|
fnc_name##_map.end(), \
|
||||||
std::inserter(val_map, val_map.end()), \
|
std::inserter(val_map, val_map.end()), \
|
||||||
[](const mapnik::detail::EnumStringT<enum_class>& val) { \
|
[](const mapnik::detail::EnumStringT<enum_class>& val) { \
|
||||||
return std::pair<enum_class, std::string>{std::get<0>(val), \
|
return std::pair<enum_class, std::string>{std::get<0>(val), std::string{std::get<1>(val).data()}}; \
|
||||||
std::string{std::get<1>(val).data()}}; \
|
|
||||||
}); \
|
}); \
|
||||||
return val_map; \
|
return val_map; \
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -131,11 +131,11 @@ struct evaluate_expression
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
struct evaluate_expression<T, std::nullopt_t>
|
struct evaluate_expression<T, boost::none_t>
|
||||||
{
|
{
|
||||||
using value_type = T;
|
using value_type = T;
|
||||||
|
|
||||||
evaluate_expression(std::nullopt_t) {}
|
evaluate_expression(boost::none_t) {}
|
||||||
|
|
||||||
value_type operator()(attribute const&) const
|
value_type operator()(attribute const&) const
|
||||||
{
|
{
|
||||||
|
@ -265,7 +265,7 @@ std::tuple<T, bool> pre_evaluate_expression(expression_ptr const& expr)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return std::make_tuple(util::apply_visitor(mapnik::evaluate_expression<T, std::nullopt_t>(std::nullopt), *expr),
|
return std::make_tuple(util::apply_visitor(mapnik::evaluate_expression<T, boost::none_t>(boost::none), *expr),
|
||||||
true);
|
true);
|
||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -29,6 +29,7 @@
|
||||||
MAPNIK_DISABLE_WARNING_PUSH
|
MAPNIK_DISABLE_WARNING_PUSH
|
||||||
MAPNIK_DISABLE_UNUSED_VARIABLE
|
MAPNIK_DISABLE_UNUSED_VARIABLE
|
||||||
#include <mapnik/warning_ignore.hpp>
|
#include <mapnik/warning_ignore.hpp>
|
||||||
|
#include <boost/optional.hpp>
|
||||||
#include <boost/msm/back/state_machine.hpp>
|
#include <boost/msm/back/state_machine.hpp>
|
||||||
#include <boost/msm/front/state_machine_def.hpp>
|
#include <boost/msm/front/state_machine_def.hpp>
|
||||||
#include <boost/msm/front/functor_row.hpp>
|
#include <boost/msm/front/functor_row.hpp>
|
||||||
|
@ -36,7 +37,6 @@ MAPNIK_DISABLE_WARNING_POP
|
||||||
|
|
||||||
// stl
|
// stl
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <optional>
|
|
||||||
|
|
||||||
namespace mapnik {
|
namespace mapnik {
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ struct store
|
||||||
{
|
{
|
||||||
m.v2 = m.v1;
|
m.v2 = m.v1;
|
||||||
m.v1 = e.vertex;
|
m.v1 = e.vertex;
|
||||||
m.output = std::nullopt;
|
m.output = boost::none;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -177,7 +177,7 @@ struct extender_def : public msm::front::state_machine_def<extender_def>
|
||||||
: extend_length(extend_length)
|
: extend_length(extend_length)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
std::optional<vertex2d> output;
|
boost::optional<vertex2d> output;
|
||||||
vertex2d v1, v2;
|
vertex2d v1, v2;
|
||||||
double extend_length;
|
double extend_length;
|
||||||
};
|
};
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -33,7 +33,7 @@
|
||||||
namespace mapnik {
|
namespace mapnik {
|
||||||
|
|
||||||
template<typename product_type, typename key_type, typename... Args>
|
template<typename product_type, typename key_type, typename... Args>
|
||||||
class factory : public singleton<factory<product_type, key_type, Args...>>
|
class factory : public singleton_cxx11<factory<product_type, key_type, Args...>>
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
using product_creator = product_type* (*)(Args...);
|
using product_creator = product_type* (*)(Args...);
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
#include <mapnik/value/types.hpp>
|
#include <mapnik/value/types.hpp>
|
||||||
|
|
||||||
// boost
|
// boost
|
||||||
// #include <boost/pool/pool_alloc.hpp>
|
//#include <boost/pool/pool_alloc.hpp>
|
||||||
|
|
||||||
namespace mapnik {
|
namespace mapnik {
|
||||||
struct feature_factory
|
struct feature_factory
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -47,11 +47,7 @@ struct layer_rendering_material;
|
||||||
enum eAttributeCollectionPolicy { DEFAULT = 0, COLLECT_ALL = 1 };
|
enum eAttributeCollectionPolicy { DEFAULT = 0, COLLECT_ALL = 1 };
|
||||||
|
|
||||||
template<typename Processor>
|
template<typename Processor>
|
||||||
#ifdef __GNUC__
|
|
||||||
class MAPNIK_DECL feature_style_processor
|
|
||||||
#else
|
|
||||||
class feature_style_processor
|
class feature_style_processor
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit feature_style_processor(Map const& m, double scale_factor = 1.0);
|
explicit feature_style_processor(Map const& m, double scale_factor = 1.0);
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -248,7 +248,7 @@ void feature_style_processor<Processor>::prepare_layer(layer_rendering_material&
|
||||||
box2d<double> buffered_query_ext(query_ext); // buffered
|
box2d<double> buffered_query_ext(query_ext); // buffered
|
||||||
|
|
||||||
double buffer_padding = 2.0 * scale * p.scale_factor();
|
double buffer_padding = 2.0 * scale * p.scale_factor();
|
||||||
const auto layer_buffer_size = lay.buffer_size();
|
boost::optional<int> layer_buffer_size = lay.buffer_size();
|
||||||
if (layer_buffer_size) // if layer overrides buffer size, use this value to compute buffered extent
|
if (layer_buffer_size) // if layer overrides buffer size, use this value to compute buffered extent
|
||||||
{
|
{
|
||||||
buffer_padding *= *layer_buffer_size;
|
buffer_padding *= *layer_buffer_size;
|
||||||
|
@ -261,7 +261,7 @@ void feature_style_processor<Processor>::prepare_layer(layer_rendering_material&
|
||||||
buffered_query_ext.height(query_ext.height() + buffer_padding);
|
buffered_query_ext.height(query_ext.height() + buffer_padding);
|
||||||
|
|
||||||
// clip buffered extent by maximum extent, if supplied
|
// clip buffered extent by maximum extent, if supplied
|
||||||
auto&& maximum_extent = m_.maximum_extent();
|
boost::optional<box2d<double>> const& maximum_extent = m_.maximum_extent();
|
||||||
if (maximum_extent)
|
if (maximum_extent)
|
||||||
{
|
{
|
||||||
buffered_query_ext.clip(*maximum_extent);
|
buffered_query_ext.clip(*maximum_extent);
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -28,15 +28,21 @@
|
||||||
#include <mapnik/enumeration.hpp>
|
#include <mapnik/enumeration.hpp>
|
||||||
#include <mapnik/image_filter_types.hpp>
|
#include <mapnik/image_filter_types.hpp>
|
||||||
#include <mapnik/image_compositing.hpp>
|
#include <mapnik/image_compositing.hpp>
|
||||||
#include <mapnik/rule.hpp>
|
|
||||||
|
#include <mapnik/warning.hpp>
|
||||||
|
MAPNIK_DISABLE_WARNING_PUSH
|
||||||
|
#include <mapnik/warning_ignore.hpp>
|
||||||
|
#include <boost/optional.hpp>
|
||||||
|
MAPNIK_DISABLE_WARNING_POP
|
||||||
|
|
||||||
// stl
|
// stl
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <optional>
|
|
||||||
|
|
||||||
namespace mapnik {
|
namespace mapnik {
|
||||||
|
|
||||||
|
class rule;
|
||||||
|
|
||||||
enum class filter_mode_enum { FILTER_ALL, FILTER_FIRST, filter_mode_enum_MAX };
|
enum class filter_mode_enum { FILTER_ALL, FILTER_FIRST, filter_mode_enum_MAX };
|
||||||
|
|
||||||
DEFINE_ENUM(filter_mode_e, filter_mode_enum);
|
DEFINE_ENUM(filter_mode_e, filter_mode_enum);
|
||||||
|
@ -52,7 +58,7 @@ class MAPNIK_DECL feature_type_style
|
||||||
std::vector<filter::filter_type> filters_;
|
std::vector<filter::filter_type> filters_;
|
||||||
std::vector<filter::filter_type> direct_filters_;
|
std::vector<filter::filter_type> direct_filters_;
|
||||||
// comp-op
|
// comp-op
|
||||||
std::optional<composite_mode_e> comp_op_;
|
boost::optional<composite_mode_e> comp_op_;
|
||||||
float opacity_;
|
float opacity_;
|
||||||
bool image_filters_inflate_;
|
bool image_filters_inflate_;
|
||||||
friend void swap(feature_type_style& lhs, feature_type_style& rhs);
|
friend void swap(feature_type_style& lhs, feature_type_style& rhs);
|
||||||
|
@ -83,7 +89,7 @@ class MAPNIK_DECL feature_type_style
|
||||||
std::vector<filter::filter_type>& direct_image_filters();
|
std::vector<filter::filter_type>& direct_image_filters();
|
||||||
// compositing
|
// compositing
|
||||||
void set_comp_op(composite_mode_e comp_op);
|
void set_comp_op(composite_mode_e comp_op);
|
||||||
std::optional<composite_mode_e> comp_op() const;
|
boost::optional<composite_mode_e> comp_op() const;
|
||||||
void set_opacity(float opacity);
|
void set_opacity(float opacity);
|
||||||
float get_opacity() const;
|
float get_opacity() const;
|
||||||
void set_image_filters_inflate(bool inflate);
|
void set_image_filters_inflate(bool inflate);
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -41,21 +41,22 @@ struct MAPNIK_DECL Featureset : private util::noncopyable
|
||||||
virtual ~Featureset() {}
|
virtual ~Featureset() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MAPNIK_DECL empty_featureset : Featureset
|
struct MAPNIK_DECL invalid_featureset final : Featureset
|
||||||
{
|
{
|
||||||
feature_ptr next() { return feature_ptr(); }
|
feature_ptr next() { return feature_ptr(); }
|
||||||
|
~invalid_featureset() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
using featureset_ptr = std::shared_ptr<Featureset>;
|
using featureset_ptr = std::shared_ptr<Featureset>;
|
||||||
|
|
||||||
inline featureset_ptr make_empty_featureset()
|
inline featureset_ptr make_invalid_featureset()
|
||||||
{
|
{
|
||||||
return std::make_shared<empty_featureset>();
|
return std::make_shared<invalid_featureset>();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool is_empty(featureset_ptr const& ptr)
|
inline bool is_valid(featureset_ptr const& ptr)
|
||||||
{
|
{
|
||||||
return (dynamic_cast<empty_featureset*>(ptr.get()) != nullptr) ? true : false;
|
return (dynamic_cast<invalid_featureset*>(ptr.get()) == nullptr) ? true : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace mapnik
|
} // namespace mapnik
|
||||||
|
|
|
@ -1,43 +0,0 @@
|
||||||
/*****************************************************************************
|
|
||||||
*
|
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
|
||||||
*
|
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2.1 of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library 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
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
|
|
||||||
#ifndef MAPNIK_FILESYSTEM_HPP
|
|
||||||
#define MAPNIK_FILESYSTEM_HPP
|
|
||||||
|
|
||||||
#ifdef USE_BOOST_FILESYSTEM
|
|
||||||
#include <boost/filesystem/operations.hpp> // for absolute, exists, etc
|
|
||||||
#include <boost/filesystem/path.hpp> // for path, operator/
|
|
||||||
#else
|
|
||||||
#include <filesystem>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace mapnik {
|
|
||||||
#ifdef USE_BOOST_FILESYSTEM
|
|
||||||
namespace fs = boost::filesystem;
|
|
||||||
using error_code = boost::system::error_code;
|
|
||||||
#else
|
|
||||||
namespace fs = std::filesystem;
|
|
||||||
using error_code = std::error_code;
|
|
||||||
#endif
|
|
||||||
} // namespace mapnik
|
|
||||||
|
|
||||||
#endif // MAPNIK_FILESYSTEM_HPP
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -35,7 +35,11 @@
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <utility> // pair
|
#include <utility> // pair
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <optional>
|
|
||||||
|
namespace boost {
|
||||||
|
template<class T>
|
||||||
|
class optional;
|
||||||
|
}
|
||||||
|
|
||||||
namespace mapnik {
|
namespace mapnik {
|
||||||
|
|
||||||
|
@ -46,10 +50,10 @@ using face_set_ptr = std::unique_ptr<font_face_set>;
|
||||||
class font_face;
|
class font_face;
|
||||||
using face_ptr = std::shared_ptr<font_face>;
|
using face_ptr = std::shared_ptr<font_face>;
|
||||||
|
|
||||||
class MAPNIK_DECL freetype_engine : public singleton<freetype_engine, CreateUsingNew>,
|
class MAPNIK_DECL freetype_engine : public singleton_cxx11<freetype_engine>,
|
||||||
private util::noncopyable
|
private util::noncopyable
|
||||||
{
|
{
|
||||||
friend class CreateUsingNew<freetype_engine>;
|
friend class singleton_cxx11<freetype_engine>;
|
||||||
friend class Map;
|
friend class Map;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -113,7 +117,7 @@ class MAPNIK_DECL face_manager
|
||||||
face_ptr get_face(std::string const& name);
|
face_ptr get_face(std::string const& name);
|
||||||
face_set_ptr get_face_set(std::string const& name);
|
face_set_ptr get_face_set(std::string const& name);
|
||||||
face_set_ptr get_face_set(font_set const& fset);
|
face_set_ptr get_face_set(font_set const& fset);
|
||||||
face_set_ptr get_face_set(std::string const& name, std::optional<font_set> fset);
|
face_set_ptr get_face_set(std::string const& name, boost::optional<font_set> fset);
|
||||||
stroker_ptr get_stroker() const { return stroker_; }
|
stroker_ptr get_stroker() const { return stroker_; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -128,7 +132,7 @@ class MAPNIK_DECL face_manager
|
||||||
};
|
};
|
||||||
|
|
||||||
using face_manager_freetype = face_manager;
|
using face_manager_freetype = face_manager;
|
||||||
extern template class MAPNIK_DECL singleton<freetype_engine, CreateUsingNew>;
|
extern template class MAPNIK_DECL singleton_cxx11<freetype_engine>;
|
||||||
} // namespace mapnik
|
} // namespace mapnik
|
||||||
|
|
||||||
#endif // MAPNIK_FONT_ENGINE_FREETYPE_HPP
|
#endif // MAPNIK_FONT_ENGINE_FREETYPE_HPP
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of Mapnik (c++ mapping toolkit)
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2024 Artem Pavlenko
|
* Copyright (C) 2021 Artem Pavlenko
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue