Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
62200ce6a3 | ||
|
|
f18c3bba8c | ||
|
|
5ad2227c56 | ||
|
|
8d7d07544d | ||
|
|
819140eb23 | ||
|
|
cfbfea466e | ||
|
|
d42b48479b | ||
|
|
c49fcf76a8 | ||
|
|
11396b45a0 | ||
|
|
4b65baf477 | ||
|
|
35a2b5cbe6 | ||
|
|
8e0c5db704 | ||
|
|
4cc3d912e3 | ||
|
|
ae3527d4d5 | ||
|
|
23a028ffa0 | ||
|
|
bb69e6e578 | ||
|
|
061e32f575 | ||
|
|
c4895fdf89 | ||
|
|
9312b5c147 | ||
|
|
2b143b4829 | ||
|
|
7e9d6d6fdd | ||
|
|
847b58e85f | ||
|
|
6f0b7a6eee | ||
|
|
f7a47b01a7 | ||
|
|
2e179f25d2 |
@@ -1,29 +0,0 @@
|
||||
# Cirrus CI configuration
|
||||
|
||||
task:
|
||||
name: FreeBSD
|
||||
freebsd_instance:
|
||||
cpu: 4
|
||||
matrix:
|
||||
image: freebsd-12-1-release-amd64
|
||||
# image: freebsd-11-2-release-amd64
|
||||
# image: freebsd-10-4-release-amd64
|
||||
|
||||
env:
|
||||
CIRRUS_CLONE_DEPTH: 1
|
||||
MAKE_FLAGS: -j 4
|
||||
|
||||
# Disable cache: its upload can take up to 30 minutes!
|
||||
#cache:
|
||||
# folder: $HOME/.ccache
|
||||
|
||||
pkginstall_script:
|
||||
- pkg install -y autoconf automake libtool pkgconf sqlite3 tiff ccache gmake
|
||||
configure_script:
|
||||
- ./autogen.sh
|
||||
- ./configure --disable-static
|
||||
compile_script:
|
||||
- gmake $(MAKE_FLAGS)
|
||||
test_script:
|
||||
- gmake check $(MAKE_FLAGS)
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
BasedOnStyle: llvm
|
||||
IndentWidth: 4
|
||||
@@ -1,2 +0,0 @@
|
||||
# Auto-generated file.
|
||||
src/proj_symbol_rename.h
|
||||
@@ -1,2 +0,0 @@
|
||||
.git
|
||||
build
|
||||
@@ -1,2 +0,0 @@
|
||||
f090353792c0530a7aa5d02e44ad9b236986757b
|
||||
aa818d6772887453432ce607410b784ff56308a1
|
||||
@@ -1,8 +0,0 @@
|
||||
#
|
||||
# Configure line ending normalisation for this repository.
|
||||
#
|
||||
* text=auto
|
||||
*.ac text eol=lf
|
||||
*.am text eol=lf
|
||||
*.m4 text eol=lf
|
||||
*.sh text eol=lf
|
||||
@@ -1,42 +0,0 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
labels: bug
|
||||
---
|
||||
|
||||
<!-- Please search existing issues to avoid creating duplicates. -->
|
||||
|
||||
#### AI usage
|
||||
|
||||
- [ ] AI (Copilot or something similar) supported the creation f this ticket. See our [policy about AI tool use](https://proj.org/community/ai_tool_policy.html). Use of AI tools *must* be indicated.
|
||||
- [ ] This ticket has been (mostly) written by myself (human), and is aimed at being read by humans. We *do* not accept AI generated wall-of-text
|
||||
|
||||
#### Example of problem
|
||||
|
||||
Demonstrate the problem you have found, either by using PROJ tools like
|
||||
`cs2cs`, `cct` or `projinfo` **or** add a code snippet that highlights the
|
||||
problem using the PROJ C/C++ API.
|
||||
|
||||
A "Minimal, Complete and Verifiable Example" will make it much easier for
|
||||
maintainers to help you: <http://matthewrocklin.com/blog/work/2018/02/28/minimal-bug-reports>
|
||||
|
||||
```c
|
||||
# Your code here
|
||||
|
||||
```
|
||||
|
||||
#### Problem description
|
||||
|
||||
[this should explain **why** the current behavior is a problem and why the
|
||||
expected output is a better solution.]
|
||||
|
||||
#### Expected Output
|
||||
|
||||
#### Environment Information
|
||||
|
||||
- PROJ version (`proj`)
|
||||
- Operation System Information
|
||||
|
||||
#### Installation method
|
||||
|
||||
- conda, apt-get, from source, etc...
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
labels: feature request
|
||||
---
|
||||
|
||||
<!-- Describe the feature you'd like. -->
|
||||
@@ -1,7 +0,0 @@
|
||||
<!-- Feel free to remove check-list items aren't relevant to your change -->
|
||||
|
||||
- [ ] AI (Copilot or something similar) supported my development of this PR. See our [policy about AI tool use](https://proj.org/community/ai_tool_policy.html). Use of AI tools *must* be indicated.
|
||||
- [ ] Closes #xxxx
|
||||
- [ ] Tests added
|
||||
- [ ] Added clear title that can be used to generate release notes
|
||||
- [ ] Fully documented, including updating `docs/source/*.rst` for new API
|
||||
@@ -1,12 +0,0 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "monthly"
|
||||
cooldown:
|
||||
default-days: 7
|
||||
groups:
|
||||
all-actions:
|
||||
patterns:
|
||||
- "*"
|
||||
@@ -1,47 +0,0 @@
|
||||
name: Update Stable Tag
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- '**' # Matches all branches, but we later filter on the one matching the STABLE_BRANCH repository variable
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
update-stable-tag:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'OSGeo/PROJ'
|
||||
permissions:
|
||||
contents: write
|
||||
steps:
|
||||
- name: Check branch match
|
||||
id: check_branch
|
||||
env:
|
||||
STABLE_BRANCH: ${{ vars.STABLE_BRANCH }} # Repository variable
|
||||
run: |
|
||||
echo "Push detected on branch $GITHUB_REF"
|
||||
if [[ "${GITHUB_REF#refs/heads/}" != "${STABLE_BRANCH}" ]]; then
|
||||
echo "This workflow only runs for branch $STABLE_BRANCH. Skipping further steps."
|
||||
echo "run=false" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "run=true" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Checkout code
|
||||
if: steps.check_branch.outputs.run == 'true'
|
||||
uses: actions/checkout@v7.0.1
|
||||
|
||||
- name: Tag
|
||||
if: steps.check_branch.outputs.run == 'true'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
git config --global user.email "PROJ-bot@example.com"
|
||||
git config --global user.name "PROJ-bot"
|
||||
touch .dummy-file
|
||||
git add .dummy-file
|
||||
# Do that so that stable doesn't have the same git sha as the stable branch, so ReadTheDocs triggers a build
|
||||
git commit -a -m "Add .dummy-file"
|
||||
git checkout -b stable
|
||||
git push -f origin stable
|
||||
@@ -1,19 +0,0 @@
|
||||
name: Backport
|
||||
on:
|
||||
pull_request_target:
|
||||
types:
|
||||
- closed
|
||||
- labeled
|
||||
|
||||
permissions: {}
|
||||
jobs:
|
||||
backport:
|
||||
runs-on: ubuntu-latest
|
||||
name: Backport
|
||||
steps:
|
||||
- name: Backport Bot
|
||||
id: backport
|
||||
if: github.event.pull_request.merged && ( ( github.event.action == 'closed' && contains( join( github.event.pull_request.labels.*.name ), 'backport') ) || contains( github.event.label.name, 'backport' ) )
|
||||
uses: m-kuhn/backport@v1.2.8
|
||||
with:
|
||||
github_token: ${{ secrets.BACKPORT_TOKEN }}
|
||||
@@ -1,36 +0,0 @@
|
||||
name: CIFuzz
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
Fuzzing:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Build Fuzzers
|
||||
id: build
|
||||
uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
|
||||
with:
|
||||
oss-fuzz-project-name: 'proj4'
|
||||
dry-run: false
|
||||
- name: Run Fuzzers
|
||||
uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
|
||||
with:
|
||||
oss-fuzz-project-name: 'proj4'
|
||||
fuzz-seconds: 600
|
||||
dry-run: false
|
||||
- name: Upload Crash
|
||||
uses: actions/upload-artifact@v7
|
||||
if: failure() && steps.build.outcome == 'success'
|
||||
with:
|
||||
name: artifacts
|
||||
path: ./out/artifacts
|
||||
@@ -1,57 +0,0 @@
|
||||
name: Clang Linux
|
||||
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
|
||||
clang_linux:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
PROJ_CMAKE_BUILD_OPTIONS: ${{ matrix.PROJ_CMAKE_BUILD_OPTIONS }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- name: Regular
|
||||
id: regular
|
||||
PROJ_CMAKE_BUILD_OPTIONS: ""
|
||||
|
||||
- name: EMBED_RESOURCE_FILES
|
||||
id: EMBED_RESOURCE_FILES
|
||||
PROJ_CMAKE_BUILD_OPTIONS: "-DEMBED_RESOURCE_FILES=ON"
|
||||
|
||||
- name: Without TIFF
|
||||
id: without_tiff
|
||||
PROJ_CMAKE_BUILD_OPTIONS: "-DENABLE_TIFF=OFF"
|
||||
|
||||
if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]')"
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v7.0.1
|
||||
|
||||
- name: Cache
|
||||
uses: actions/cache@v6.1.0
|
||||
id: cache
|
||||
with:
|
||||
path: |
|
||||
${{ github.workspace }}/ccache.tar.gz
|
||||
key: ${{ runner.os }}-cache-clang-${{ matrix.id }}-${{ github.run_id }}
|
||||
restore-keys: ${{ runner.os }}-cache-clang-${{ matrix.id }}-
|
||||
|
||||
- name: Run
|
||||
run: docker run -e PROJ_GITHUB_SHA=${{ github.sha }} -e CI -e TRAVIS_BUILD_DIR="$PWD" -e PROJ_CMAKE_BUILD_OPTIONS="$PROJ_CMAKE_BUILD_OPTIONS" -e WORK_DIR="$PWD" -e TRAVIS_OS_NAME=linux -e BUILD_NAME=linux_clang -v $PWD:$PWD ubuntu:24.04 $PWD/ci/clang_linux/start.sh
|
||||
@@ -1,28 +0,0 @@
|
||||
name: Clang Static Analyzer
|
||||
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
|
||||
clang_static_analyzer:
|
||||
runs-on: ubuntu-24.04
|
||||
if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]')"
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v7.0.1
|
||||
|
||||
- name: Run
|
||||
run: ci/clang_static_analyzer/start.sh
|
||||
@@ -1,100 +0,0 @@
|
||||
name: Code Checks
|
||||
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
|
||||
cppcheck_2204:
|
||||
runs-on: ubuntu-22.04
|
||||
if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]')"
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v7.0.1
|
||||
|
||||
- name: Install Requirements
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y --no-install-recommends cppcheck
|
||||
|
||||
- name: Run cppcheck test
|
||||
run: ./scripts/cppcheck.sh
|
||||
|
||||
cppcheck_master:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v7.0.1
|
||||
|
||||
- name: Install Requirements
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install -y --no-install-recommends git cmake g++ make
|
||||
|
||||
- name: Build cppcheck
|
||||
run: |
|
||||
git clone https://github.com/danmar/cppcheck
|
||||
cd cppcheck
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release
|
||||
make -j$(nproc)
|
||||
sudo make install
|
||||
cd ../..
|
||||
|
||||
- name: Run cppcheck test (on push events)
|
||||
if: ${{ github.event_name == 'push' }}
|
||||
run: |
|
||||
./scripts/cppcheck.sh
|
||||
|
||||
- name: Run cppcheck test, but ignore failures (on pull request)
|
||||
if: ${{ github.event_name == 'pull_request' }}
|
||||
run: |
|
||||
# Do not fail the job. This is just used as a tool to monitor how we are regarding recent cppcheck
|
||||
./scripts/cppcheck.sh || /bin/true
|
||||
|
||||
code_quality_checks:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v7.0.1
|
||||
|
||||
- name: Detect missing includes
|
||||
run: ./scripts/detect_missing_include.sh
|
||||
|
||||
other_checks:
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v7.0.1
|
||||
|
||||
- name: Install Requirements
|
||||
run: |
|
||||
sudo apt-get install -y --no-install-recommends python3-pip
|
||||
sudo apt-get remove -y python3-jsonschema
|
||||
sudo pip3 install --break-system-packages cffconvert
|
||||
|
||||
- name: Validate citation file
|
||||
run: |
|
||||
cffconvert --validate
|
||||
cffconvert -f bibtex
|
||||
cffconvert -f apalike
|
||||
|
||||
linting:
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- uses: actions/checkout@v7.0.1
|
||||
- uses: actions/setup-python@v7
|
||||
- uses: pre-commit/action@v3.0.1
|
||||
@@ -1,104 +0,0 @@
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
# Runner size impacts CodeQL analysis time. To learn more, please see:
|
||||
# - https://gh.io/recommended-hardware-resources-for-running-codeql
|
||||
# - https://gh.io/supported-runners-and-hardware-resources
|
||||
# - https://gh.io/using-larger-runners
|
||||
# Consider using larger runners for possible analysis time improvements.
|
||||
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
|
||||
timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }}
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'c-cpp' ]
|
||||
# CodeQL supports [ 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift' ]
|
||||
# Use only 'java-kotlin' to analyze code written in Java, Kotlin or both
|
||||
# Use only 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
|
||||
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v7.0.1
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v4.37.8
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
# By default, queries listed here will override any specified in a config file.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
|
||||
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
|
||||
# queries: security-extended,security-and-quality
|
||||
config: |
|
||||
query-filters:
|
||||
- exclude:
|
||||
id: cpp/non-https-url
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y ccache cmake g++ sqlite3 libsqlite3-dev libtiff-dev libcurl4-openssl-dev
|
||||
# cache the .ccache directory
|
||||
# key it on the runner os, build type, deps, and arch
|
||||
# It's especially important to include arch in the key because we
|
||||
# may get runtime errors with -mavx2 from objects built on a
|
||||
# different architecture.
|
||||
- name: Restore build cache
|
||||
if: matrix.language == 'c-cpp'
|
||||
id: restore-cache
|
||||
uses: actions/cache/restore@v6.1.0
|
||||
with:
|
||||
path: ${{ github.workspace }}/.ccache
|
||||
key: ${{ matrix.id }}-${{ steps.get-arch.outputs.arch }}-${{ github.ref_name }}-${{ github.run_id }}
|
||||
restore-keys: |
|
||||
${{ matrix.id }}-${{ steps.get-arch.outputs.arch }}-${{ github.ref_name }}
|
||||
${{ matrix.id }}-${{ steps.get-arch.outputs.arch }}
|
||||
- name: Configure ccache
|
||||
if: matrix.language == 'c-cpp'
|
||||
run: |
|
||||
echo CCACHE_BASEDIR=${{ github.workspace }} >> ${GITHUB_ENV}
|
||||
echo CCACHE_DIR=${{ github.workspace }}/.ccache >> ${GITHUB_ENV}
|
||||
echo CCACHE_MAXSIZE=250M >> ${GITHUB_ENV}
|
||||
ccache -z
|
||||
- name: Build
|
||||
if: matrix.language == 'c-cpp'
|
||||
run: |
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DUSE_CCACHE=YES
|
||||
make -j$(nproc)
|
||||
- name: Summarize ccache
|
||||
if: matrix.language == 'c-cpp'
|
||||
run: |
|
||||
ccache -s
|
||||
- name: Save build cache
|
||||
if: matrix.language == 'c-cpp'
|
||||
uses: actions/cache/save@v6.1.0
|
||||
with:
|
||||
path: ${{ github.workspace }}/.ccache
|
||||
key: ${{ steps.restore-cache.outputs.cache-primary-key }}
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v4.37.8
|
||||
with:
|
||||
category: "/language:${{matrix.language}}"
|
||||
@@ -1,57 +0,0 @@
|
||||
name: Conda
|
||||
|
||||
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
conda:
|
||||
name: Conda ${{ matrix.platform }}
|
||||
if: github.repository == 'OSGeo/PROJ'
|
||||
|
||||
runs-on: ${{ matrix.platform }}
|
||||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
# macos-15-intel: Intel
|
||||
# macos-14: arm64
|
||||
platform: ['ubuntu-latest','windows-latest','macos-15-intel','macos-14']
|
||||
|
||||
env:
|
||||
GHA_CI_PLATFORM: ${{ matrix.platform }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v7.0.1
|
||||
|
||||
- uses: conda-incubator/setup-miniconda@v4
|
||||
with:
|
||||
miniforge-version: latest
|
||||
use-mamba: true
|
||||
channels: conda-forge
|
||||
auto-update-conda: true
|
||||
|
||||
- name: Setup
|
||||
shell: bash -l {0}
|
||||
run: |
|
||||
source ./ci/conda/setup.sh
|
||||
|
||||
- name: Build
|
||||
shell: bash -l {0}
|
||||
run: |
|
||||
source ../ci/conda/compile.sh
|
||||
working-directory: ./proj.4-feedstock
|
||||
|
||||
|
||||
- uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: ${{ matrix.platform }}-conda-package
|
||||
path: ./proj.4-feedstock/packages/
|
||||
@@ -1,54 +0,0 @@
|
||||
name: Coverity scan
|
||||
|
||||
# Controls when the action will run.
|
||||
on:
|
||||
# Run this action on a schedule (we're allowed a maximum of two per day)
|
||||
schedule:
|
||||
- cron: '0 18 * * SUN' # Sunday at 18:00 UTC
|
||||
|
||||
# Allows you to run this workflow manually from the Actions tab
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
||||
jobs:
|
||||
coverity:
|
||||
runs-on: ubuntu-22.04
|
||||
if: github.repository == 'OSGeo/PROJ'
|
||||
steps:
|
||||
- uses: actions/checkout@v7.0.1
|
||||
|
||||
- name: Install Libraries
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install --allow-unauthenticated curl libcurl4-gnutls-dev libtiff-dev sqlite3 libsqlite3-dev g++ make cmake
|
||||
- name: Configure PROJ
|
||||
run: |
|
||||
cmake . -DCMAKE_BUILD_TYPE=Debug -DBUILD_TESTING=OFF
|
||||
- name: Download Coverity Build Tool
|
||||
run: |
|
||||
wget -q https://scan.coverity.com/download/cxx/linux64 --post-data "token=$TOKEN&project=OSGeo%2Fproj.4" -O cov-analysis-linux64.tar.gz
|
||||
mkdir cov-analysis-linux64
|
||||
tar xzf cov-analysis-linux64.tar.gz --strip 1 -C cov-analysis-linux64
|
||||
env:
|
||||
TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }}
|
||||
- name: Build with cov-build
|
||||
run: |
|
||||
pwd
|
||||
export PATH=`pwd`/cov-analysis-linux64/bin:$PATH
|
||||
cov-build --dir cov-int make -j$(nproc)
|
||||
- name: Submit to Coverity Scan
|
||||
run: |
|
||||
tar czvf proj.tgz cov-int
|
||||
curl \
|
||||
--form project=OSGeo%2Fproj.4 \
|
||||
--form token=$TOKEN \
|
||||
--form email=even.rouault@spatialys.com \
|
||||
--form file=@proj.tgz \
|
||||
--form version=master \
|
||||
--form description="`git rev-parse --abbrev-ref HEAD` `git rev-parse --short HEAD`" \
|
||||
https://scan.coverity.com/builds?project=OSGeo%2Fproj.4
|
||||
env:
|
||||
TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }}
|
||||
@@ -1,59 +0,0 @@
|
||||
name: Docs
|
||||
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
- 'backport**'
|
||||
- 'dependabot**'
|
||||
pull_request:
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
docs:
|
||||
name: Documentation checks
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: true
|
||||
container: ghcr.io/osgeo/proj-docs
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v4.1.7
|
||||
|
||||
- name: Update sphinx-rtd-theme
|
||||
shell: bash -l {0}
|
||||
run: |
|
||||
pip install -U "sphinx-rtd-theme>=3.0.0"
|
||||
|
||||
- name: Print versions
|
||||
shell: bash -l {0}
|
||||
run: |
|
||||
python3 --version
|
||||
sphinx-build --version
|
||||
python3 -m pip list --not-required --format=columns
|
||||
- name: Lint .rst files
|
||||
shell: bash -l {0}
|
||||
run: |
|
||||
set -eu
|
||||
if find . -name '*.rst' | xargs grep -P '\t'; then echo 'Tabs are bad, please use four spaces in .rst files.'; false; fi
|
||||
if find . -name '*.rst' | xargs grep "\.\.versionadded"; then echo 'Wrong annotation. Should be .. versionadded'; false; fi
|
||||
if find . -name '*.rst' | xargs grep "\.\.note"; then echo 'Wrong annotation. Should be .. note'; false; fi
|
||||
if find . -name '*.rst' | xargs grep "\.\.warning"; then echo 'Wrong annotation. Should be .. warning'; false; fi
|
||||
if find . -name '*.rst' | xargs grep "\.\.codeblock"; then echo 'Wrong annotation. Should be .. codeblock'; false; fi
|
||||
working-directory: ./docs
|
||||
- name: Doxygen
|
||||
shell: bash -l {0}
|
||||
run: |
|
||||
make .doxygen_up_to_date
|
||||
working-directory: ./docs
|
||||
- name: Spelling
|
||||
shell: bash -l {0}
|
||||
run: |
|
||||
make spelling SPHINXOPTS=-W
|
||||
working-directory: ./docs
|
||||
@@ -1,244 +0,0 @@
|
||||
name: Docker
|
||||
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
branches-ignore: ["dependabot/**"]
|
||||
tags:
|
||||
- '*'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
workflow_dispatch:
|
||||
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
# adapted from https://raw.githubusercontent.com/stefanprodan/podinfo/master/.github/workflows/release.yml
|
||||
#
|
||||
jobs:
|
||||
containers:
|
||||
name: ${{ matrix.container }} Container - ${{ matrix.runner }}
|
||||
strategy:
|
||||
matrix:
|
||||
container: ["proj"]
|
||||
runner: [ubuntu-24.04, ubuntu-24.04-arm]
|
||||
dockerfile: ["./Dockerfile"]
|
||||
include:
|
||||
- container: "proj-docs"
|
||||
dockerfile: "./docs/docbuild/Dockerfile"
|
||||
runner: "ubuntu-24.04"
|
||||
runs-on: ${{ matrix.runner }}
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
attestations: write
|
||||
id-token: write
|
||||
env:
|
||||
# Only push proj-docs package for master
|
||||
PUSH_PACKAGES: ${{ github.repository_owner == 'OSGeo' && github.event_name != 'pull_request' && (matrix.container == 'proj' || (matrix.container == 'proj-docs' && github.ref_name == 'master')) }}
|
||||
CONTAINER: ${{ matrix.container }}
|
||||
steps:
|
||||
- uses: actions/checkout@v7.0.1
|
||||
- name: Lint
|
||||
id: lint
|
||||
run: |
|
||||
echo "are we pushing packages" ${{ env.PUSH_PACKAGES }}
|
||||
echo "event_name" ${{ github.event_name }}
|
||||
echo "ref" ${{ github.ref }}
|
||||
- name: Set up Docker
|
||||
uses: docker/setup-docker-action@v5.4.0
|
||||
with:
|
||||
daemon-config: |
|
||||
{
|
||||
"debug": false,
|
||||
"features": {
|
||||
"containerd-snapshotter": true
|
||||
}
|
||||
}
|
||||
- name: Setup Docker Buildx
|
||||
id: buildx
|
||||
uses: docker/setup-buildx-action@v4
|
||||
with:
|
||||
version: latest
|
||||
|
||||
- name: Login to GitHub Container Registry
|
||||
if: env.PUSH_PACKAGES == 'true'
|
||||
uses: docker/login-action@v4.6.0
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GHCR_TOKEN }}
|
||||
- name: Login to Docker Hub
|
||||
if: env.PUSH_PACKAGES == 'true'
|
||||
uses: docker/login-action@v4.6.0
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
- name: Extract container metadata
|
||||
id: meta
|
||||
uses: docker/metadata-action@v6
|
||||
with:
|
||||
images: |
|
||||
ghcr.io/osgeo/${{ matrix.container }}
|
||||
docker.io/osgeo/${{ matrix.container }}
|
||||
tags: |
|
||||
type=ref,event=branch
|
||||
type=ref,event=pr
|
||||
type=semver,pattern={{version}}
|
||||
type=semver,pattern={{major}}.{{minor}}
|
||||
env:
|
||||
DOCKER_METADATA_ANNOTATIONS_LEVELS: manifest,index
|
||||
- name: Prepare
|
||||
id: prep
|
||||
run: |
|
||||
VERSION=sha-${GITHUB_SHA::8}
|
||||
if [[ $GITHUB_REF == refs/tags/* ]]; then
|
||||
VERSION=${GITHUB_REF/refs\/tags\//}
|
||||
# 9.8.0-x --> 9.8.0
|
||||
VERSION=$(echo $VERSION | sed "s/-.*//" )
|
||||
fi
|
||||
echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_OUTPUT
|
||||
echo "VERSION=${VERSION}" >> $GITHUB_OUTPUT
|
||||
runner=${{ matrix.runner }}
|
||||
if [[ "$runner" == *"-arm" ]]; then
|
||||
ARCH=arm64
|
||||
else
|
||||
ARCH=amd64
|
||||
fi
|
||||
echo "ARCH=$ARCH" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Build docs image
|
||||
uses: docker/build-push-action@v7.3.0
|
||||
if: matrix.container == 'proj-docs'
|
||||
with:
|
||||
push: ${{ env.PUSH_PACKAGES == 'true' }}
|
||||
builder: ${{ steps.buildx.outputs.name }}
|
||||
context: .
|
||||
file: ${{ matrix.dockerfile }}
|
||||
platforms: linux/amd64
|
||||
tags: |
|
||||
docker.io/osgeo/${{ matrix.container }}:${{ steps.prep.outputs.VERSION }}
|
||||
docker.io/osgeo/${{ matrix.container }}:latest
|
||||
ghcr.io/osgeo/${{ matrix.container }}:${{ steps.prep.outputs.VERSION }}
|
||||
ghcr.io/osgeo/${{ matrix.container }}:latest
|
||||
labels: |
|
||||
org.opencontainers.image.title=${{ github.event.repository.name }}
|
||||
org.opencontainers.image.description=${{ github.event.repository.description }}
|
||||
org.opencontainers.image.source=${{ github.event.repository.html_url }}
|
||||
org.opencontainers.image.url=${{ github.event.repository.html_url }}
|
||||
org.opencontainers.image.revision=${{ github.sha }}
|
||||
org.opencontainers.image.version=${{ steps.prep.outputs.VERSION }}
|
||||
org.opencontainers.image.created=${{ steps.prep.outputs.BUILD_DATE }}
|
||||
|
||||
- name: Prepare tags
|
||||
id: prep_tags
|
||||
run: |
|
||||
TAGS="docker.io/osgeo/${{ matrix.container }}:${{ steps.prep.outputs.VERSION }}-${{ steps.prep.outputs.ARCH }}
|
||||
ghcr.io/osgeo/${{ matrix.container }}:${{ steps.prep.outputs.VERSION }}-${{ steps.prep.outputs.ARCH }}"
|
||||
if [ "${GITHUB_REF}" = "refs/heads/master" ]; then
|
||||
TAGS="$TAGS
|
||||
docker.io/osgeo/${{ matrix.container }}:latest-${{ steps.prep.outputs.ARCH }}
|
||||
ghcr.io/osgeo/${{ matrix.container }}:latest-${{ steps.prep.outputs.ARCH }}"
|
||||
fi
|
||||
echo "tags<<EOF" >> $GITHUB_OUTPUT
|
||||
echo "$TAGS" >> $GITHUB_OUTPUT
|
||||
echo "EOF" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Build image
|
||||
uses: docker/build-push-action@v7.3.0
|
||||
id: push
|
||||
if: matrix.container == 'proj'
|
||||
with:
|
||||
push: ${{ env.PUSH_PACKAGES == 'true' }}
|
||||
builder: ${{ steps.buildx.outputs.name }}
|
||||
context: .
|
||||
file: ${{ matrix.dockerfile }}
|
||||
build-args: |
|
||||
PROJ_GITHUB_SHA=${{ github.sha }}
|
||||
platforms: linux/${{ steps.prep.outputs.ARCH }}
|
||||
tags: ${{ steps.prep_tags.outputs.tags }}
|
||||
labels: |
|
||||
org.opencontainers.image.title=${{ github.event.repository.name }}
|
||||
org.opencontainers.image.description=${{ github.event.repository.description }}
|
||||
org.opencontainers.image.source=${{ github.event.repository.html_url }}
|
||||
org.opencontainers.image.url=${{ github.event.repository.html_url }}
|
||||
org.opencontainers.image.revision=${{ github.sha }}
|
||||
org.opencontainers.image.version=${{ steps.prep.outputs.VERSION }}
|
||||
org.opencontainers.image.created=${{ steps.prep.outputs.BUILD_DATE }}
|
||||
- name: Generate artifact attestation
|
||||
if: ${{ env.PUSH_PACKAGES == 'true' && matrix.container == 'proj' }}
|
||||
uses: actions/attest-build-provenance@v4.2.2
|
||||
with:
|
||||
subject-name: ghcr.io/osgeo/proj
|
||||
subject-digest: ${{ steps.push.outputs.digest }}
|
||||
push-to-registry: ${{ env.PUSH_PACKAGES == 'true' }}
|
||||
|
||||
create-manifest:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
attestations: write
|
||||
id-token: write
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
PUSH_PACKAGES: ${{ github.repository_owner == 'OSGeo' && github.event_name != 'pull_request' }}
|
||||
needs: containers
|
||||
steps:
|
||||
- name: Login to GitHub Container Registry
|
||||
uses: docker/login-action@v4.6.0
|
||||
if: env.PUSH_PACKAGES == 'true'
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v4.6.0
|
||||
if: env.PUSH_PACKAGES == 'true'
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Prepare
|
||||
id: prep
|
||||
run: |
|
||||
VERSION=sha-${GITHUB_SHA::8}
|
||||
if [[ $GITHUB_REF == refs/tags/* ]]; then
|
||||
VERSION=${GITHUB_REF/refs\/tags\//}
|
||||
# 9.8.0-x --> 9.8.0
|
||||
VERSION=$(echo $VERSION | sed "s/-.*//" )
|
||||
fi
|
||||
echo "VERSION=${VERSION}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Create and push multi-platform manifest
|
||||
if: env.PUSH_PACKAGES == 'true'
|
||||
run: |
|
||||
docker buildx imagetools create \
|
||||
-t ghcr.io/osgeo/proj:${{ steps.prep.outputs.VERSION }} \
|
||||
ghcr.io/osgeo/proj:${{ steps.prep.outputs.VERSION }}-amd64 \
|
||||
ghcr.io/osgeo/proj:${{ steps.prep.outputs.VERSION }}-arm64
|
||||
|
||||
docker buildx imagetools create \
|
||||
-t osgeo/proj:${{ steps.prep.outputs.VERSION }} \
|
||||
osgeo/proj:${{ steps.prep.outputs.VERSION }}-amd64 \
|
||||
osgeo/proj:${{ steps.prep.outputs.VERSION }}-arm64
|
||||
|
||||
if [ "${GITHUB_REF}" = "refs/heads/master" ]; then
|
||||
docker buildx imagetools create \
|
||||
-t ghcr.io/osgeo/proj:latest \
|
||||
ghcr.io/osgeo/proj:latest-amd64 \
|
||||
ghcr.io/osgeo/proj:latest-arm64
|
||||
|
||||
docker buildx imagetools create \
|
||||
-t osgeo/proj:latest \
|
||||
osgeo/proj:latest-amd64 \
|
||||
osgeo/proj:latest-arm64
|
||||
fi
|
||||
@@ -1,90 +0,0 @@
|
||||
name: Emscripten
|
||||
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
|
||||
emscripten:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]')"
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v7.0.1
|
||||
|
||||
- name: Build docker
|
||||
run: docker build -t proj-emscripten-builder ci/emscripten/
|
||||
|
||||
- name: Artifacts folder
|
||||
run: mkdir -p "$PWD"/wasm_out
|
||||
|
||||
- name: Run docker build
|
||||
run: |
|
||||
docker run --user $(id -u):$(id -g) --rm \
|
||||
-e PROJ_GITHUB_SHA=${{ github.sha }} \
|
||||
-v "$PWD":/build/proj_src \
|
||||
-v "$PWD"/wasm_out:/build/install \
|
||||
proj-emscripten-builder
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: proj-js-wasm
|
||||
retention-days: 90
|
||||
path: wasm_out/projModule.*
|
||||
|
||||
- name: Copy for tests
|
||||
run: |
|
||||
mkdir -p "$PWD"/out_node
|
||||
cp wasm_out/projModule.* out_node
|
||||
cp ci/emscripten/proj.ems.tests.js out_node
|
||||
|
||||
- name: Run docker tests
|
||||
run: |
|
||||
docker run --user $(id -u):$(id -g) --rm \
|
||||
-v "$PWD"/out_node:/opt/node/tests \
|
||||
node:24-alpine \
|
||||
node /opt/node/tests/proj.ems.tests.js
|
||||
|
||||
- name: Deploy ssh key (wasm_proj)
|
||||
if: ${{ github.event_name == 'push' && github.ref_name == 'master' && github.repository == 'OSGeo/PROJ' }}
|
||||
shell: bash -l {0}
|
||||
env:
|
||||
WASM_PROJ_DEPLOY_SSH_KEY: ${{ secrets.WASM_PROJ_DEPLOY_SSH_KEY }} # zizmor: ignore[secrets-outside-env]
|
||||
run: |
|
||||
mkdir $HOME/.ssh && echo "${WASM_PROJ_DEPLOY_SSH_KEY}" > $HOME/.ssh/id_rsa
|
||||
chmod 700 $HOME/.ssh && chmod 600 $HOME/.ssh/id_rsa
|
||||
ssh-keyscan -t rsa github.com >> $HOME/.ssh/known_hosts
|
||||
eval `ssh-agent -s`
|
||||
ssh-add $HOME/.ssh/id_rsa
|
||||
|
||||
- name: Deploy to wasm-proj/master pages
|
||||
if: ${{ github.event_name == 'push' && github.ref_name == 'master' && github.repository == 'OSGeo/PROJ' }}
|
||||
shell: bash -l {0}
|
||||
run: |
|
||||
set -x
|
||||
set -e
|
||||
git clone -b pages git@github.com:jjimenezshaw/wasm-proj.git wasm_proj_pages
|
||||
cp wasm_out/projModule.* wasm_proj_pages/master/wasm/
|
||||
cd wasm_proj_pages
|
||||
git config user.email "proj-master-updater@example.com"
|
||||
git config user.name "Automatic PROJ updater"
|
||||
git remote -v
|
||||
git rev-parse --abbrev-ref HEAD
|
||||
git add -A
|
||||
git commit -m "Update wasm with OSGeo/PROJ commit $GITHUB_SHA"
|
||||
git push -f origin pages
|
||||
@@ -1,37 +0,0 @@
|
||||
name: Fedora Rawhide
|
||||
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
|
||||
fedora_rawhide:
|
||||
runs-on: ubuntu-latest
|
||||
if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]')"
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v7.0.1
|
||||
|
||||
- name: Cache
|
||||
uses: actions/cache@v6.1.0
|
||||
id: cache
|
||||
with:
|
||||
path: |
|
||||
${{ github.workspace }}/ccache.tar.gz
|
||||
key: ${{ runner.os }}-cache-fedora_rawhide-${{ github.run_id }}
|
||||
restore-keys: ${{ runner.os }}-cache-fedora_rawhide-
|
||||
|
||||
- name: Run
|
||||
run: docker run -e PROJ_GITHUB_SHA=${{ github.sha }} -e CI -e WORK_DIR="$PWD" -v $PWD:$PWD fedora:rawhide $PWD/ci/fedora_rawhide/start.sh
|
||||
@@ -1,37 +0,0 @@
|
||||
name: Linux GCC 32bit
|
||||
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
|
||||
linux_gcc_32bit:
|
||||
runs-on: ubuntu-latest
|
||||
if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]')"
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v7.0.1
|
||||
|
||||
- name: Cache
|
||||
uses: actions/cache@v6.1.0
|
||||
id: cache
|
||||
with:
|
||||
path: |
|
||||
${{ github.workspace }}/ccache.tar.gz
|
||||
key: ${{ runner.os }}-cache-gcc32bit-${{ github.run_id }}
|
||||
restore-keys: ${{ runner.os }}-cache-gcc32bit-
|
||||
|
||||
- name: Run
|
||||
run: docker run -e PROJ_GITHUB_SHA=${{ github.sha }} -e CI -e WORK_DIR="$PWD" -v $PWD:$PWD ubuntu:24.04 $PWD/ci/linux_gcc_32bit/start.sh
|
||||
@@ -1,64 +0,0 @@
|
||||
name: MacOS build
|
||||
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
|
||||
macos_build:
|
||||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
include:
|
||||
- platform: "macos-15-intel"
|
||||
architecture: "x64"
|
||||
# macOS-14 is a M1 ARM64 MacOS runner: https://github.blog/changelog/2024-01-30-github-actions-introducing-the-new-m1-macos-runner-available-to-open-source/
|
||||
- platform: "macOS-14"
|
||||
architecture: "arm64"
|
||||
|
||||
runs-on: ${{ matrix.platform }}
|
||||
|
||||
if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]')"
|
||||
steps:
|
||||
|
||||
- uses: actions/checkout@v7.0.1
|
||||
|
||||
- uses: mamba-org/setup-micromamba@v3
|
||||
with:
|
||||
init-shell: bash
|
||||
environment-file: ci/mac/environment.yml
|
||||
|
||||
- name: Cache
|
||||
uses: actions/cache@v6.1.0
|
||||
id: cache
|
||||
with:
|
||||
path: ${{ github.workspace }}/.ccache
|
||||
key: ${{ runner.os }}-cache-mac-${{ matrix.architecture }}-${{ github.run_id }}
|
||||
restore-keys: ${{ runner.os }}-cache-mac-${{ matrix.architecture }}-
|
||||
|
||||
- name: Install Requirements
|
||||
shell: bash -l {0}
|
||||
run: |
|
||||
source ci/mac/before_install.sh
|
||||
|
||||
- name: Build
|
||||
shell: bash -l {0}
|
||||
run: |
|
||||
export TRAVIS_BUILD_DIR=$PWD
|
||||
source ci/mac/install.sh
|
||||
env:
|
||||
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||
TRAVIS_OS_NAME: osx
|
||||
BUILD_NAME: osx
|
||||
@@ -1,37 +0,0 @@
|
||||
name: mingw_w64 build
|
||||
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
|
||||
mingw_w64_build:
|
||||
runs-on: ubuntu-latest
|
||||
if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]')"
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v7.0.1
|
||||
|
||||
- name: Cache
|
||||
uses: actions/cache@v6.1.0
|
||||
id: cache
|
||||
with:
|
||||
path: |
|
||||
${{ github.workspace }}/ccache.tar.gz
|
||||
key: ${{ runner.os }}-cache-mingw_w64-${{ github.run_id }}
|
||||
restore-keys: ${{ runner.os }}-cache-mingw_w64-
|
||||
|
||||
- name: Build
|
||||
run: docker run -e PROJ_GITHUB_SHA=${{ github.sha }} -e CI -e TRAVIS_OS_NAME=linux -e BUILD_NAME=mingw_w64 -e WORK_DIR="$PWD" -v $PWD:$PWD ubuntu:22.04 $PWD/ci/mingw_w64/start.sh
|
||||
@@ -1,93 +0,0 @@
|
||||
name: Handle stale issues
|
||||
on:
|
||||
schedule:
|
||||
- cron: "30 2 * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
stale:
|
||||
permissions:
|
||||
issues: write # for actions/stale to close stale issues
|
||||
pull-requests: write # for actions/stale to close stale PRs
|
||||
if: github.repository_owner == 'osgeo'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v11.0.0
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
stale-pr-message: >
|
||||
The PROJ project highly values your contribution and would love to see
|
||||
this work merged!
|
||||
Unfortunately this PR has not had any activity in the last two months and
|
||||
is being automatically marked as "stale".
|
||||
If you think this pull request should be merged, please check
|
||||
|
||||
- that all unit tests are passing
|
||||
|
||||
- that all comments by reviewers have been addressed
|
||||
|
||||
- that there is enough information for reviewers, in particular
|
||||
|
||||
- link to any issues which this pull request fixes
|
||||
|
||||
- add a description of workflows which this pull request fixes
|
||||
|
||||
- add terminal output examples if applicable
|
||||
|
||||
- that you have written unit tests where possible
|
||||
|
||||
In case you should have any uncertainty, please leave a comment and we will
|
||||
be happy to help you proceed with this pull request.
|
||||
|
||||
If there is no further activity on this pull request, it will be closed in a
|
||||
week.
|
||||
|
||||
|
||||
close-pr-message: >
|
||||
While we hate to see this happen, this PR has been automatically closed because
|
||||
it has not had any activity in the last 2 months. If this pull request should be
|
||||
reconsidered, please follow the guidelines in the previous comment and reopen
|
||||
this pull request. Or, if you have any further questions, just ask! We love to
|
||||
help, and if there's anything the PROJ project can do to help push this PR forward
|
||||
please let us know how we can assist.
|
||||
|
||||
|
||||
stale-pr-label: 'stale'
|
||||
exempt-pr-labels: 'pinned'
|
||||
days-before-pr-stale: 60
|
||||
days-before-pr-close: 7
|
||||
|
||||
stale-issue-message: >
|
||||
The PROJ project highly values your report and would love to see it addressed.
|
||||
However, this issue has been left in feedback mode for the last two months and is
|
||||
being automatically marked as "stale".
|
||||
|
||||
If you would like to continue with this issue, please provide any missing information
|
||||
or answer any open questions. If you could resolve the issue yourself meanwhile,
|
||||
please leave a note for future readers with the same problem and close the issue.
|
||||
|
||||
In case you should have any uncertainty, please leave a comment and we will be
|
||||
happy to help you proceed with this issue.
|
||||
|
||||
If there is no further activity on this issue, it will be closed in a week.
|
||||
|
||||
|
||||
close-issue-message: >
|
||||
While we hate to see this happen, this issue has been automatically closed because
|
||||
it has not had any activity in the last two months despite being marked as feedback.
|
||||
If this issue should be reconsidered, please follow the guidelines in the previous
|
||||
comment and reopen this issue.
|
||||
|
||||
Or, if you have any further questions, there are also
|
||||
[further support channels](https://proj.org/community/channels.html)
|
||||
that can help you.
|
||||
|
||||
|
||||
stale-issue-label: 'stale'
|
||||
only-issue-labels: 'feedback'
|
||||
days-before-issue-stale: 60
|
||||
days-before-issue-close: 7
|
||||
|
||||
operations-per-run: 1000
|
||||
@@ -1,224 +0,0 @@
|
||||
name: Windows build
|
||||
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
|
||||
MSVC:
|
||||
runs-on: windows-latest
|
||||
if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]')"
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
BUILD_SHARED_LIBS: [ON, OFF]
|
||||
BUILD_TYPE: [Release, Debug]
|
||||
|
||||
env:
|
||||
ARCH: x64
|
||||
BUILD_SHARED_LIBS: ${{ matrix.BUILD_SHARED_LIBS }}
|
||||
BUILD_TYPE: ${{ matrix.BUILD_TYPE }}
|
||||
CMAKE_GENERATOR: Ninja
|
||||
|
||||
steps:
|
||||
|
||||
- uses: actions/checkout@v7.0.1
|
||||
|
||||
- uses: actions/setup-python@v7
|
||||
with:
|
||||
python-version: "3.x"
|
||||
- run: pip install pyyaml
|
||||
|
||||
- uses: TheMrMilchmann/setup-msvc-dev@v4
|
||||
with:
|
||||
arch: ${{ env.ARCH }}
|
||||
|
||||
- name: Cache vcpkg packages
|
||||
uses: actions/cache@v6.1.0
|
||||
id: cache
|
||||
with:
|
||||
path: c:\vcpkg\installed
|
||||
key: ${{ runner.os }}-vcpkg-${{ hashFiles('.github/workflows/windows.yml') }}
|
||||
|
||||
- name: Install build requirements
|
||||
shell: cmd
|
||||
if: steps.cache.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
vcpkg install sqlite3[core,tool,rtree] tiff curl --triplet=${{ env.ARCH }}-windows
|
||||
|
||||
- name: Build
|
||||
shell: cmd
|
||||
run: |
|
||||
set VCPKG_INSTALLED=c:\vcpkg\installed\${{ env.ARCH }}-windows
|
||||
dir %VCPKG_INSTALLED%\bin
|
||||
dir %VCPKG_INSTALLED%\tools
|
||||
set PROJ_DB_CACHE_DIR=%VCPKG_INSTALLED%\cache
|
||||
mkdir %PROJ_DB_CACHE_DIR%
|
||||
set PATH=%VCPKG_INSTALLED%\bin;%VCPKG_INSTALLED%\tools;%PATH%
|
||||
set PROJ_BUILD=%GITHUB_WORKSPACE%\build
|
||||
mkdir %PROJ_BUILD%
|
||||
cd %PROJ_BUILD%
|
||||
set PROJ_DIR=%GITHUB_WORKSPACE%\proj_dir
|
||||
:: Not directly linked to BUILD_SHARED_LIBS, but a way to test different C++ standard versions
|
||||
if "${{ env.BUILD_SHARED_LIBS }}"=="ON" (set CMAKE_CXX_STANDARD="-DCMAKE_CXX_STANDARD=20")
|
||||
if "${{ env.BUILD_TYPE }}"=="Release" (set CMAKE_UNITY_BUILD_OPT="-DCMAKE_UNITY_BUILD=ON")
|
||||
cmake ^
|
||||
-D CMAKE_BUILD_TYPE="${{ env.BUILD_TYPE }}" ^
|
||||
-D BUILD_SHARED_LIBS="${{ env.BUILD_SHARED_LIBS }}" ^
|
||||
-D EXPORT_PDB="ON" ^
|
||||
-D CMAKE_COMPILE_WARNING_AS_ERROR=ON ^
|
||||
%CMAKE_CXX_STANDARD% ^
|
||||
-D CMAKE_TOOLCHAIN_FILE=c:/vcpkg/scripts/buildsystems/vcpkg.cmake ^
|
||||
-D CMAKE_INSTALL_PREFIX="%PROJ_DIR%" ^
|
||||
-D PROJ_DB_CACHE_DIR=%PROJ_DB_CACHE_DIR% ^
|
||||
%CMAKE_UNITY_BUILD_OPT% ..
|
||||
ninja -v
|
||||
ninja install
|
||||
dir %PROJ_DIR%\bin
|
||||
|
||||
- name: Run tests
|
||||
shell: bash -l {0}
|
||||
run: |
|
||||
export VCPKG_ROOT=c:/vcpkg
|
||||
export platform=${{ env.ARCH }}
|
||||
export VCPKG_INSTALLED=${VCPKG_ROOT}/installed/${platform}-windows
|
||||
export PATH=${VCPKG_INSTALLED}/bin:${PATH}
|
||||
export PROJ_DIR=${GITHUB_WORKSPACE}/proj_dir
|
||||
export PROJ_BUILD=${GITHUB_WORKSPACE}/build
|
||||
cd ${PROJ_BUILD}
|
||||
ctest --output-on-failure -C "${{ env.BUILD_TYPE }}"
|
||||
|
||||
- name: Post install checks
|
||||
shell: cmd
|
||||
run: |
|
||||
set VCPKG_ROOT=c:\vcpkg
|
||||
set platform=${{ env.ARCH }}
|
||||
set VCPKG_INSTALLED=%VCPKG_ROOT%\installed\%platform%-windows
|
||||
set PATH=%VCPKG_INSTALLED%\bin;%PATH%
|
||||
set PROJ_DIR=%GITHUB_WORKSPACE%\proj_dir
|
||||
set PROJ_BUILD=%GITHUB_WORKSPACE%\build
|
||||
cd %PROJ_BUILD%
|
||||
set PATH=%PROJ_DIR%\bin;%PATH%
|
||||
set BUILD_MODE=shared
|
||||
if "${{ env.BUILD_SHARED_LIBS }}"=="OFF" (set BUILD_MODE=static)
|
||||
if "${{ env.BUILD_TYPE }}"=="Release" call %GITHUB_WORKSPACE%\test\postinstall\test_cmake.bat %PROJ_DIR% %BUILD_MODE%
|
||||
if "${{ env.BUILD_TYPE }}"=="Release" proj
|
||||
|
||||
MSYS2:
|
||||
runs-on: windows-latest
|
||||
if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]')"
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: msys2 {0}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
BUILD_SHARED_LIBS: [ON, OFF]
|
||||
|
||||
env:
|
||||
BUILD_SHARED_LIBS: ${{ matrix.BUILD_SHARED_LIBS }}
|
||||
BUILD_TYPE: Release
|
||||
CMAKE_GENERATOR: "MSYS Makefiles"
|
||||
|
||||
steps:
|
||||
|
||||
- uses: actions/checkout@v7.0.1
|
||||
|
||||
- name: Cache
|
||||
uses: actions/cache@v6.1.0
|
||||
id: cache
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: ${{ runner.os }}-cache-msys-${{ hashFiles('.github/workflows/windows.yml') }}
|
||||
|
||||
- uses: msys2/setup-msys2@v2
|
||||
with:
|
||||
msystem: MINGW64
|
||||
update: true
|
||||
install: >-
|
||||
git
|
||||
make
|
||||
mingw-w64-x86_64-cmake
|
||||
mingw-w64-x86_64-ccache
|
||||
mingw-w64-x86_64-curl
|
||||
mingw-w64-x86_64-gcc
|
||||
mingw-w64-x86_64-libtiff
|
||||
mingw-w64-x86_64-python-yaml
|
||||
mingw-w64-x86_64-sqlite3
|
||||
|
||||
- name: First build with EMBED_RESOURCE_FILES=ON and USE_ONLY_EMBEDDED_RESOURCE_FILES=ON
|
||||
run: |
|
||||
mkdir -p $HOME/.ccache
|
||||
ccache -M 500M
|
||||
ccache -s
|
||||
PROJ_BUILD=${GITHUB_WORKSPACE}/build
|
||||
PROJ_DIR=${GITHUB_WORKSPACE}/proj_dir
|
||||
mkdir ${PROJ_BUILD}
|
||||
cd ${PROJ_BUILD}
|
||||
|
||||
cmake \
|
||||
-D CMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \
|
||||
-D BUILD_SHARED_LIBS=${{ env.BUILD_SHARED_LIBS }} \
|
||||
-D CMAKE_INSTALL_PREFIX="${PROJ_DIR}" \
|
||||
-D CMAKE_COMPILE_WARNING_AS_ERROR=ON \
|
||||
-D USE_CCACHE=ON \
|
||||
-D PROJ_DB_CACHE_DIR=$HOME/.ccache \
|
||||
-D CMAKE_UNITY_BUILD=ON \
|
||||
-D Python_ROOT_DIR=/mingw64 \
|
||||
-D CMAKE_CXX_STANDARD=20 \
|
||||
-D EMBED_RESOURCE_FILES=ON \
|
||||
-D USE_ONLY_EMBEDDED_RESOURCE_FILES=ON \
|
||||
..
|
||||
make -j 2
|
||||
|
||||
- name: Seond build with EMBED_RESOURCE_FILES=OFF and USE_ONLY_EMBEDDED_RESOURCE_FILES=OFF
|
||||
run: |
|
||||
PROJ_BUILD=${GITHUB_WORKSPACE}/build
|
||||
PROJ_DIR=${GITHUB_WORKSPACE}/proj_dir
|
||||
cd ${PROJ_BUILD}
|
||||
cmake \
|
||||
-D CMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \
|
||||
-D BUILD_SHARED_LIBS=${{ env.BUILD_SHARED_LIBS }} \
|
||||
-D CMAKE_INSTALL_PREFIX="${PROJ_DIR}" \
|
||||
-D CMAKE_COMPILE_WARNING_AS_ERROR=ON \
|
||||
-D USE_CCACHE=ON \
|
||||
-D PROJ_DB_CACHE_DIR=$HOME/.ccache \
|
||||
-D CMAKE_UNITY_BUILD=ON \
|
||||
-D Python_ROOT_DIR=/mingw64 \
|
||||
-D CMAKE_CXX_STANDARD=20 \
|
||||
-D EMBED_RESOURCE_FILES=OFF \
|
||||
-D USE_ONLY_EMBEDDED_RESOURCE_FILES=OFF \
|
||||
..
|
||||
make -j 2
|
||||
make install
|
||||
ls ${PROJ_DIR}/bin
|
||||
ccache -s
|
||||
|
||||
- name: Run tests
|
||||
run: |
|
||||
PROJ_BUILD=${GITHUB_WORKSPACE}/build
|
||||
PROJ_DIR=${GITHUB_WORKSPACE}/proj_dir
|
||||
cd ${PROJ_BUILD}
|
||||
ctest --output-on-failure
|
||||
export PATH=${PROJ_DIR}/bin:${PATH}
|
||||
BUILD_MODE=shared
|
||||
if [ ${{ env.BUILD_SHARED_LIBS }} == "OFF" ]; then BUILD_MODE=static; fi
|
||||
../test/postinstall/test_cmake.sh ${PROJ_DIR} ${BUILD_MODE}
|
||||
# Disabled because of issue with (likely sqlite3.pc) that includes a unexisting -ldl
|
||||
# ../test/postinstall/test_pkg-config.sh ${PROJ_DIR} ${BUILD_MODE}
|
||||
proj
|
||||
+71
-118
@@ -1,141 +1,94 @@
|
||||
# Editor temporary/working/backup
|
||||
*~
|
||||
*.bak
|
||||
*.swp
|
||||
|
||||
# Compiled source
|
||||
*.dll
|
||||
*.exe
|
||||
*.exp
|
||||
*.la
|
||||
*.lib
|
||||
*.lo
|
||||
*.o
|
||||
*.obj
|
||||
*.ol
|
||||
*.pdb
|
||||
*.pyc
|
||||
|
||||
# IDEs
|
||||
build.local.bat
|
||||
build.local.sh
|
||||
/.idea
|
||||
/.vs*
|
||||
/*build*
|
||||
/nbproject
|
||||
|
||||
# Autotools
|
||||
autom4te.cache
|
||||
aclocal.m4
|
||||
compile
|
||||
config.cache
|
||||
config.guess
|
||||
config.log
|
||||
config.status
|
||||
config.sub
|
||||
configure
|
||||
depcomp
|
||||
test-driver
|
||||
install-sh
|
||||
ltmain.sh
|
||||
missing
|
||||
libtool
|
||||
.deps
|
||||
.dirstamp
|
||||
.libs
|
||||
Makefile.in
|
||||
Makefile
|
||||
|
||||
# CMake
|
||||
Makefile.in
|
||||
CMakeFiles
|
||||
CMakeCache.txt
|
||||
CMakeSettings.json
|
||||
CTestTestfile.cmake
|
||||
cmake_install.cmake
|
||||
cmake/project-config*.cmake
|
||||
install_manifest.txt
|
||||
/CMakeUserPresets.json
|
||||
cmake/project-config*.cmake
|
||||
README
|
||||
|
||||
# / (base)
|
||||
/.vs*
|
||||
/*.manifest
|
||||
/README
|
||||
/*.swp
|
||||
/*build*
|
||||
/aclocal.m4
|
||||
/autom4te.cache
|
||||
/config.cache
|
||||
/config.guess
|
||||
/config.log
|
||||
/config.status
|
||||
/config.sub
|
||||
/configure
|
||||
/compile
|
||||
/depcomp
|
||||
/install-sh
|
||||
/libtool
|
||||
/ltmain.sh
|
||||
/missing
|
||||
/nbproject
|
||||
/proj.pc
|
||||
/bin
|
||||
/lib
|
||||
/proj.pc
|
||||
/DartConfiguration.tcl
|
||||
/Testing
|
||||
|
||||
# data
|
||||
/data/all.sql.in
|
||||
/data/proj.db
|
||||
/data/*.ct2
|
||||
/data/*.dat
|
||||
/data/*.gsb
|
||||
/data/*.gtx
|
||||
/data/*.lla
|
||||
/data/*.pol
|
||||
/data/*.zip
|
||||
/data/DK
|
||||
/data/FL
|
||||
/data/FO
|
||||
/data/GL
|
||||
/data/MD
|
||||
/data/NKG
|
||||
/data/README*
|
||||
/data/TN
|
||||
/data/WI
|
||||
/data/WO
|
||||
/data/alaska
|
||||
/data/conus
|
||||
/data/hawaii
|
||||
/data/null
|
||||
/data/prvi
|
||||
/data/stgeorge
|
||||
/data/stlrnc
|
||||
/data/stpaul
|
||||
/data/tv_out
|
||||
/data/for_tests/
|
||||
|
||||
# docs
|
||||
/docs/.doxygen_up_to_date
|
||||
/docs/build
|
||||
/docs/plot/images
|
||||
/latex
|
||||
# html
|
||||
/html/dl
|
||||
/html/robots.txt
|
||||
|
||||
# m4
|
||||
m4/libtool.m4
|
||||
m4/ltoptions.m4
|
||||
m4/ltsugar.m4
|
||||
m4/ltversion.m4
|
||||
m4/lt~obsolete.m4
|
||||
/m4/libtool.m4
|
||||
/m4/ltoptions.m4
|
||||
/m4/ltsugar.m4
|
||||
/m4/ltversion.m4
|
||||
/m4/lt~obsolete.m4
|
||||
|
||||
# nad
|
||||
/nad/install
|
||||
/nad/WI
|
||||
/nad/prvi
|
||||
/nad/WO
|
||||
/nad/alaska
|
||||
/nad/FL
|
||||
/nad/README.NADUS
|
||||
/nad/stpaul
|
||||
/nad/stgeorge
|
||||
/nad/TN
|
||||
/nad/conus
|
||||
/nad/MD
|
||||
/nad/hawaii
|
||||
/nad/stlrnc
|
||||
/nad/null
|
||||
/nad/*.lla
|
||||
|
||||
# src
|
||||
/src/cct
|
||||
/src/cs2cs
|
||||
/src/geod
|
||||
/src/geodtest*
|
||||
/src/gie
|
||||
/src/*.o
|
||||
/src/*.lo
|
||||
/src/*.la
|
||||
/src/proj.dll
|
||||
/src/*.lib
|
||||
/src/*.pdb
|
||||
/src/*.exp
|
||||
/src/*.opt
|
||||
/src/*.obj
|
||||
/src/*.exe
|
||||
/src/.libs
|
||||
/src/.deps
|
||||
/src/*.manifest
|
||||
/src/*.swp
|
||||
/src/nad2nad
|
||||
/src/nad2bin
|
||||
/src/proj
|
||||
/src/geod
|
||||
/src/stamp-h*
|
||||
/src/proj_config.h
|
||||
/src/proj_config.h.in
|
||||
/src/projinfo
|
||||
/src/projsync
|
||||
/src/stamp-h1
|
||||
/src/test-suite.log
|
||||
/src/cs2cs
|
||||
/src/multistresstest
|
||||
/src/test228
|
||||
|
||||
# test/unit
|
||||
/test/unit/basic_test
|
||||
/test/unit/gie_self_tests
|
||||
/test/unit/include_proj_h_from_c
|
||||
/test/unit/pj_phi2_test
|
||||
/test/unit/pj_transform_test
|
||||
/test/unit/proj_angular_io_test
|
||||
/test/unit/proj_context_test
|
||||
/test/unit/test_cpp_api
|
||||
/test/unit/proj_errno_string_test
|
||||
/test/unit/test_defmodel
|
||||
/test/unit/test_network
|
||||
/test/unit/test_tinshift
|
||||
/tmp_alias/
|
||||
|
||||
# jniwrap
|
||||
jniwrap/out
|
||||
/docs/build
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
Aaron Puchert <aaron.puchert@sap.com> <aaronpuchert@alice-dsl.net>
|
||||
Alan D. Snow <alansnow21@gmail.com>
|
||||
Alan D. Snow <alansnow21@gmail.com> <alan.snow@pioneer.com>
|
||||
Ben Boeckel <ben.boeckel@kitware.com> <mathstuf@users.noreply.github.com>
|
||||
Bojan Šavrič <bsavric@esri.com>
|
||||
Brendan Jurd <direvus@gmail.com> <brendan.jurd@geoplex.com.au>
|
||||
Charles Karney <charles@karney.com>
|
||||
Charles Karney <charles@karney.com> <charles.karney@sri.com>
|
||||
Charles Karney <charles@karney.com> <ckarney@karney.com>
|
||||
dalia2 <dalia@lmi.is> <57895979+dalia2@users.noreply.github.com>
|
||||
Eli Rykoff <erykoff@stanford.edu>
|
||||
Even Rouault <even.rouault@spatialys.com> <even.rouault@mines-paris.org>
|
||||
George Ouzounoudis <geothrock@gmail.com>
|
||||
Jeff McKenna <jeffmckenna@gmail.com>
|
||||
Jeff McKenna <jeffmckenna@gmail.com> <jmckenna@gatewaygeomatics.com>
|
||||
Jürnjakob Dugge <juernjakob@gmail.com>
|
||||
Jürnjakob Dugge <juernjakob@gmail.com> <jdugge@users.noreply.github.com>
|
||||
Kurt Schwehr <schwehr@google.com> <schwehr@gmail.com>
|
||||
Martin Desruisseaux <martin.desruisseaux@geomatys.com> <martin.desruisseaux@geomatys.fr>
|
||||
Mateusz Łoskot <mateusz@loskot.net>
|
||||
Mike Taves <mwtoews@gmail.com>
|
||||
Olli Räisä <olli.raisa@trimble.com>
|
||||
Sebastian Val <Sebastian.Val@jpl.nasa.gov> <sval-dev@users.noreply.github.com>
|
||||
Sveinung Himle <himsve@kartverket.no>
|
||||
Sveinung Himle <himsve@kartverket.no> <56073535+himsve@users.noreply.github.com>
|
||||
Sveinung Himle <himsve@kartverket.no> <Sveinung.Himle@kartverket.no>
|
||||
Thomas Knudsen <thokn@sdfe.dk>
|
||||
Thomas Knudsen <thokn@sdfe.dk> <busstoptaktik@users.noreply.github.com>
|
||||
Thomas Knudsen <thokn@sdfe.dk> <knudsen.thomas@gmail.com>
|
||||
Thomas Knudsen <thokn@sdfe.dk> <lastname DOT firstname AT gmail DOT com>
|
||||
@@ -1,26 +0,0 @@
|
||||
# https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md
|
||||
|
||||
# Heading style
|
||||
MD003:
|
||||
style: "atx"
|
||||
|
||||
# Unordered list indentation
|
||||
MD007:
|
||||
indent: 2
|
||||
|
||||
# Line length
|
||||
MD013: false
|
||||
# line_length: 100
|
||||
|
||||
# Multiple headings with the same content
|
||||
MD024:
|
||||
siblings_only: true
|
||||
|
||||
# Multiple top-level headings in the same document
|
||||
MD025: false
|
||||
|
||||
# First line in a file should be a top-level heading
|
||||
MD041: false
|
||||
|
||||
# Required heading structure
|
||||
MD043: true
|
||||
@@ -1,23 +0,0 @@
|
||||
repos:
|
||||
- repo: https://github.com/pre-commit/mirrors-clang-format
|
||||
rev: 'v15.0.4'
|
||||
hooks:
|
||||
- id: clang-format
|
||||
exclude: >
|
||||
(?x)^(
|
||||
data/|
|
||||
schemas/|
|
||||
docs/|
|
||||
include/proj/nn.hpp|
|
||||
include/proj/internal/lru_cache.hpp|
|
||||
include/proj/internal/vendor/nlohmann/json.hpp|
|
||||
src/wkt1_generated_parser.c|
|
||||
src/wkt1_generated_parser.h|
|
||||
src/wkt2_generated_parser.c|
|
||||
src/wkt2_generated_parser.h|
|
||||
src/geodesic.c|
|
||||
src/geodesic.h|
|
||||
src/proj_symbol_rename.h|
|
||||
src/tests/geodtest.c|
|
||||
src/tests/geodsigntest.c
|
||||
)
|
||||
@@ -1,41 +0,0 @@
|
||||
# .readthedocs.yaml
|
||||
# Read the Docs configuration file
|
||||
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
||||
|
||||
# Required
|
||||
version: 2
|
||||
|
||||
build:
|
||||
os: "ubuntu-22.04"
|
||||
tools:
|
||||
python: "mambaforge-4.10"
|
||||
|
||||
jobs:
|
||||
post_checkout:
|
||||
- (git --no-pager log --pretty="tformat:%s -- %b" -1 | paste -s -d " " | grep -viqP "skip ci|ci skip") || exit 183
|
||||
pre_build:
|
||||
- ./docs/rtd/pre_build.sh
|
||||
- ./scripts/doxygen.sh
|
||||
- ./docs/rtd/plot.sh
|
||||
post_build:
|
||||
- ./docs/rtd/post_build.sh
|
||||
|
||||
apt_packages:
|
||||
- cmake
|
||||
- ninja-build
|
||||
- g++
|
||||
- sqlite3
|
||||
- libsqlite3-dev
|
||||
- libtiff-dev
|
||||
- libcurl4-openssl-dev
|
||||
|
||||
formats:
|
||||
- htmlzip
|
||||
- pdf
|
||||
|
||||
conda:
|
||||
environment: docs/environment.yml
|
||||
|
||||
sphinx:
|
||||
configuration: docs/source/conf.py
|
||||
fail_on_warning: true
|
||||
+39
-37
@@ -1,15 +1,5 @@
|
||||
# This is the config file for building proj and running its test suite
|
||||
# This is the config file for building proj.4 and running its test suite
|
||||
# with Travis-ci.org
|
||||
language: cpp
|
||||
|
||||
# FIXME: Travis-CI builds are disabled
|
||||
branches:
|
||||
only:
|
||||
- disabled_disabled
|
||||
|
||||
#branches:
|
||||
# except:
|
||||
# - /^(cherry-pick-)?backport-\d+-to-/
|
||||
|
||||
cache:
|
||||
directories:
|
||||
@@ -18,43 +8,55 @@ cache:
|
||||
matrix:
|
||||
fast_finish: true
|
||||
include:
|
||||
|
||||
#- os: linux
|
||||
# dist: jammy
|
||||
# compiler: gcc
|
||||
# arch: s390x
|
||||
# env:
|
||||
# - BUILD_NAME=linux_generic
|
||||
# - DETAILS="linux, s390x"
|
||||
|
||||
- os: linux
|
||||
dist: jammy
|
||||
compiler: gcc
|
||||
arch: arm64
|
||||
language: c
|
||||
sudo: required
|
||||
services:
|
||||
- docker
|
||||
env:
|
||||
- BUILD_NAME=linux_generic
|
||||
- DETAILS="linux, arm64"
|
||||
- NPROC=4
|
||||
- BUILD_NAME=linux_gcc
|
||||
- DETAILS="linux, gcc"
|
||||
- os: linux
|
||||
compiler: clang
|
||||
language: c
|
||||
sudo: required
|
||||
services:
|
||||
- docker
|
||||
env:
|
||||
- BUILD_NAME=linux_clang
|
||||
- DETAILS="linux, clang"
|
||||
- os: osx
|
||||
language: c
|
||||
env:
|
||||
- BUILD_NAME=osx
|
||||
- DETAILS="osx"
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
language: c
|
||||
sudo: required
|
||||
env:
|
||||
- BUILD_NAME=mingw32
|
||||
- DETAILS="mingw32"
|
||||
|
||||
allow_failures:
|
||||
- env: BUILD_NAME=mingw32
|
||||
# allow_failures:
|
||||
# - os: osx
|
||||
|
||||
before_install: ./ci/${BUILD_NAME}/before_install.sh
|
||||
before_install: ./travis/${BUILD_NAME}/before_install.sh
|
||||
|
||||
install: ./ci/${BUILD_NAME}/install.sh
|
||||
install: ./travis/${BUILD_NAME}/install.sh
|
||||
|
||||
script:
|
||||
- echo "done"
|
||||
|
||||
after_success: ./travis/${BUILD_NAME}/after_success.sh
|
||||
|
||||
notifications:
|
||||
#email:
|
||||
# recipients:
|
||||
# - gdal-commits@lists.osgeo.org
|
||||
|
||||
irc:
|
||||
channels:
|
||||
- "irc.freenode.org#proj-activity"
|
||||
# - "irc.freenode.org#gdal"
|
||||
# - "irc.freenode.org#proj"
|
||||
- "irc.freenode.org#gdal"
|
||||
use_notice: true
|
||||
|
||||
# #email:
|
||||
# # recipients:
|
||||
# # - gdal-commits@lists.osgeo.org
|
||||
#
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
Original Author:
|
||||
Gerald Evenden
|
||||
|
||||
Maintainer(s):
|
||||
Frank Warmerdam <warmerdam@pobox.com>
|
||||
Howard Butler <howard@hobu.co>
|
||||
|
||||
Contributors:
|
||||
Brent Fraser <bfraser@geoanalytic.com>
|
||||
Chris Stuber <imap@chesapeake.net>
|
||||
Craig Bruce <cbruce@cubewerx.com>
|
||||
Victor Osipkov <vctos@email.com>
|
||||
Andrea Antonello <andrea.antonello@hydrologis.com>
|
||||
Charles Karney <charles.karney@sri.com>
|
||||
Karsten Engsager
|
||||
Knud Poder
|
||||
Kristian Evers <kreve@sdfe.dk>
|
||||
Thomas Knudsen <thokn@sdfe.dk>
|
||||
Even Rouault <even.rouault@spatialys.com>
|
||||
-33
@@ -1,33 +0,0 @@
|
||||
# Authors
|
||||
|
||||
## Original Author
|
||||
|
||||
- Gerald Evenden (1935-2016)
|
||||
|
||||
## Maintainers
|
||||
|
||||
- Kristian Evers <kreve@sdfi.dk>
|
||||
- Even Rouault <even.rouault@spatialys.com>
|
||||
|
||||
## Project Steering Committee
|
||||
|
||||
Process and membership can be found at:
|
||||
<https://proj.org/community/rfc/rfc-1.html>
|
||||
|
||||
Chair:
|
||||
|
||||
- Kristian Evers <kreve@sdfi.dk>
|
||||
|
||||
Members:
|
||||
|
||||
- Frank Warmerdam <warmerdam@pobox.com>
|
||||
- Howard Butler <howard@hobu.co>
|
||||
- Charles Karney <charles.karney@sri.com>
|
||||
- Thomas Knudsen <thokn@sdfi.dk>
|
||||
- Even Rouault <even.rouault@spatialys.com>
|
||||
- Kurt Schwehr <schwehr@gmail.com>
|
||||
|
||||
## Contributors
|
||||
|
||||
The full list of contributors can be found on GitHub
|
||||
<https://github.com/OSGeo/PROJ/graphs/contributors>
|
||||
@@ -1,18 +0,0 @@
|
||||
To cite PROJ in publications use:
|
||||
|
||||
PROJ contributors (2026). PROJ coordinate transformation software
|
||||
library. Open Source Geospatial Foundation. URL https://proj.org/.
|
||||
DOI: 10.5281/zenodo.5884394
|
||||
|
||||
A BibTeX entry for LaTeX users is
|
||||
|
||||
.. code-block:: latex
|
||||
|
||||
@Manual{,
|
||||
title = {{PROJ} coordinate transformation software library},
|
||||
author = {{PROJ contributors}},
|
||||
organization = {Open Source Geospatial Foundation},
|
||||
year = {2026},
|
||||
url = {https://proj.org/},
|
||||
doi = {10.5281/zenodo.5884394},
|
||||
}
|
||||
@@ -1,70 +0,0 @@
|
||||
cff-version: 1.2.0
|
||||
message: Please cite this software using these metadata or in the CITATION file.
|
||||
type: software
|
||||
title: PROJ
|
||||
version: 9.9.0
|
||||
date-released: 2026-09-15
|
||||
doi: 10.5281/zenodo.5884394
|
||||
abstract: PROJ is a generic coordinate transformation software that transforms
|
||||
geospatial coordinates from one coordinate reference system (CRS) to another.
|
||||
This includes cartographic projections as well as geodetic transformations.
|
||||
url: https://proj.org
|
||||
repository-code: https://github.com/OSGeo/PROJ/
|
||||
license: MIT
|
||||
authors:
|
||||
- given-names: Gerald I.
|
||||
family-names: Evenden
|
||||
affiliation: United States Geological Survey
|
||||
- given-names: Even
|
||||
family-names: Rouault
|
||||
affiliation: Spatialys
|
||||
orcid: https://orcid.org/0000-0002-5068-0476
|
||||
- given-names: Frank
|
||||
family-names: Warmerdam
|
||||
affiliation: Planet Labs Inc
|
||||
- given-names: Kristian
|
||||
family-names: Evers
|
||||
affiliation: Danish Agency for Climate Data
|
||||
orcid: https://orcid.org/0000-0002-1310-4576
|
||||
- given-names: Thomas
|
||||
family-names: Knudsen
|
||||
affiliation: Danish Agency for Climate Data
|
||||
- given-names: Howard
|
||||
family-names: Butler
|
||||
affiliation: Hobu Inc
|
||||
orcid: https://orcid.org/0000-0002-5340-1380
|
||||
- given-names: Mike W.
|
||||
family-names: Taves
|
||||
affiliation: Earth Sciences New Zealand
|
||||
orcid: https://orcid.org/0000-0003-3657-7963
|
||||
- given-names: Kurt
|
||||
family-names: Schwehr
|
||||
affiliation: Google Inc
|
||||
orcid: https://orcid.org/0000-0002-5624-8190
|
||||
- given-names: Elliott
|
||||
family-names: Sales de Andrade
|
||||
orcid: https://orcid.org/0000-0001-7310-8942
|
||||
- given-names: Charles
|
||||
family-names: Karney
|
||||
affiliation: SRI International
|
||||
orcid: https://orcid.org/0000-0002-5006-5836
|
||||
- given-names: Sebastiaan
|
||||
family-names: Couwenberg
|
||||
- given-names: Nyall
|
||||
family-names: Dawson
|
||||
affiliation: North Road
|
||||
orcid: https://orcid.org/0000-0001-9812-7584
|
||||
- given-names: Alan D.
|
||||
family-names: Snow
|
||||
affiliation: Corteva
|
||||
orcid: https://orcid.org/0000-0002-7333-3100
|
||||
- given-names: Javier
|
||||
family-names: Jimenez Shaw
|
||||
orcid: https://orcid.org/0000-0002-7227-9173
|
||||
keywords:
|
||||
- PROJ
|
||||
- geodesy
|
||||
- cartography
|
||||
- coordinates
|
||||
- projections
|
||||
- conversion
|
||||
+120
-503
@@ -1,548 +1,165 @@
|
||||
################################################################################
|
||||
#################################################################################
|
||||
#
|
||||
# This file is part of CMake configuration for PROJ library (inspired from SOCI
|
||||
# This file is part of CMake configuration for PROJ4 library (inspired from SOCI
|
||||
# CMake, Copyright (C) 2009-2010 Mateusz Loskot <mateusz@loskot.net> )
|
||||
#
|
||||
# Copyright (C) 2011 Nicolas David <nicolas.david@ign.fr>
|
||||
# Distributed under the MIT license
|
||||
#
|
||||
################################################################################
|
||||
#################################################################################
|
||||
# General settings
|
||||
################################################################################
|
||||
cmake_minimum_required(VERSION 3.22.1)
|
||||
#################################################################################
|
||||
cmake_minimum_required(VERSION 2.6.0 FATAL_ERROR)
|
||||
|
||||
project(PROJ
|
||||
DESCRIPTION "PROJ coordinate transformation software library"
|
||||
LANGUAGES C CXX
|
||||
)
|
||||
# proj4 is an ANSI C project
|
||||
project(PROJ4 C)
|
||||
set(PROJECT_INTERN_NAME PROJ)
|
||||
|
||||
# Only interpret if() arguments as variables or keywords when unquoted
|
||||
cmake_policy(SET CMP0054 NEW)
|
||||
|
||||
include(CheckCXXCompilerFlag)
|
||||
|
||||
# Set C++ version
|
||||
# Make CMAKE_CXX_STANDARD available as cache option overridable by user
|
||||
set(CMAKE_CXX_STANDARD 17
|
||||
CACHE STRING "C++ standard version to use (default is 17)")
|
||||
message(CHECK_START "Requiring C++${CMAKE_CXX_STANDARD}")
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
message(CHECK_PASS "done")
|
||||
|
||||
# Set C99 version
|
||||
# Make CMAKE_C_STANDARD available as cache option overridable by user
|
||||
set(CMAKE_C_STANDARD 99
|
||||
CACHE STRING "C standard version to use (default is 99)")
|
||||
message(CHECK_START "Requiring C${CMAKE_C_STANDARD}")
|
||||
set(CMAKE_C_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_C_EXTENSIONS OFF)
|
||||
message(CHECK_PASS "done")
|
||||
|
||||
# Set global -fvisibility=hidden
|
||||
set(CMAKE_C_VISIBILITY_PRESET hidden)
|
||||
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
|
||||
|
||||
# Set warnings as variables, then store as cache options
|
||||
set(PROJ_common_WARN_FLAGS # common only to GNU/Clang C/C++
|
||||
-Wall
|
||||
-Wdate-time
|
||||
-Werror=format-security
|
||||
-Werror=vla
|
||||
-Wextra
|
||||
-Wformat
|
||||
-Wimplicit-fallthrough
|
||||
-Wmissing-declarations
|
||||
-Wshadow
|
||||
-Wswitch
|
||||
-Wunused-parameter
|
||||
)
|
||||
if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
|
||||
set(PROJ_common_WARN_FLAGS ${PROJ_common_WARN_FLAGS}
|
||||
-Wduplicated-cond
|
||||
-Wduplicated-branches
|
||||
-Wlogical-op
|
||||
)
|
||||
set(PROJ_C_WARN_FLAGS ${PROJ_common_WARN_FLAGS}
|
||||
-Wmissing-prototypes
|
||||
)
|
||||
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8)
|
||||
set(PROJ_CXX_WARN_FLAGS ${PROJ_common_WARN_FLAGS} -Wextra-semi)
|
||||
endif()
|
||||
set(PROJ_CXX_WARN_FLAGS ${PROJ_common_WARN_FLAGS}
|
||||
-Weffc++
|
||||
# -Wold-style-cast
|
||||
-Woverloaded-virtual
|
||||
-Wzero-as-null-pointer-constant
|
||||
)
|
||||
if (NOT CMAKE_VERSION VERSION_LESS 3.1)
|
||||
cmake_policy(SET CMP0054 NEW)
|
||||
endif ()
|
||||
# Set warnings
|
||||
if("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
|
||||
# Suppress warning 4996 about sprintf, etc., being unsafe
|
||||
set(CMAKE_C_FLAGS "/wd4996 /WX ${CMAKE_C_FLAGS}")
|
||||
elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
|
||||
set(CMAKE_C_FLAGS "-std=c89 -Wall -Wextra -Wswitch -Werror \
|
||||
-Wunused-parameter -Wmissing-prototypes -Wmissing-declarations -Wformat \
|
||||
-Werror=format-security -Wshadow ${CMAKE_C_FLAGS}")
|
||||
elseif("${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
|
||||
set(PROJ_common_WARN_FLAGS ${PROJ_common_WARN_FLAGS}
|
||||
-Wcomma
|
||||
-Wdeprecated
|
||||
-Wdocumentation -Wno-documentation-deprecated-sync
|
||||
-Wfloat-conversion
|
||||
-Wlogical-op-parentheses
|
||||
)
|
||||
|
||||
# Not sure about the minimum version, but clang 12 complains about \file, @cond Doxygen_Suppress, etc.
|
||||
if("${CMAKE_CXX_COMPILER_VERSION}" VERSION_GREATER_EQUAL 18.0.0)
|
||||
set(PROJ_common_WARN_FLAGS ${PROJ_common_WARN_FLAGS} -Wdocumentation-unknown-command)
|
||||
endif()
|
||||
|
||||
set(PROJ_C_WARN_FLAGS ${PROJ_common_WARN_FLAGS}
|
||||
-Wmissing-prototypes
|
||||
-Wc11-extensions
|
||||
)
|
||||
set(PROJ_CXX_WARN_FLAGS ${PROJ_common_WARN_FLAGS}
|
||||
-Weffc++
|
||||
-Wextra-semi
|
||||
# -Wold-style-cast
|
||||
-Woverloaded-virtual
|
||||
-Wshorten-64-to-32
|
||||
-Wunused-private-field
|
||||
-Wzero-as-null-pointer-constant
|
||||
-Wweak-vtables
|
||||
)
|
||||
elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
|
||||
add_definitions(/D_CRT_SECURE_NO_WARNINGS) # Eliminate deprecation warnings
|
||||
set(PROJ_C_WARN_FLAGS
|
||||
/W4
|
||||
/wd4706 # Suppress warning about assignment within conditional expression
|
||||
/wd4996 # Suppress warning about sprintf, etc., being unsafe
|
||||
)
|
||||
if("$ENV{VSCMD_ARG_TGT_ARCH}" STREQUAL "arm64")
|
||||
# Suppress an inaccurate warning when compiling for an MSVC/ARM64 platform
|
||||
# It incorrectly assumes a division by zero is possible despite a check
|
||||
set(PROJ_C_WARN_FLAGS ${PROJ_C_WARN_FLAGS} /wd4723)
|
||||
endif()
|
||||
set(PROJ_CXX_WARN_FLAGS /EHsc ${PROJ_C_WARN_FLAGS})
|
||||
elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "Intel")
|
||||
if(MSVC)
|
||||
set(PROJ_C_WARN_FLAGS /Wall)
|
||||
set(PROJ_CXX_WARN_FLAGS /Wall)
|
||||
else()
|
||||
set(PROJ_C_WARN_FLAGS -Wall)
|
||||
set(PROJ_CXX_WARN_FLAGS -Wall)
|
||||
endif()
|
||||
set(CMAKE_C_FLAGS "-std=c89 -Wall -Wextra -Wswitch -Werror \
|
||||
-Wc99-extensions -Wc11-extensions -Wunused-parameter -Wmissing-prototypes \
|
||||
-Wmissing-declarations -Wformat -Werror=format-security -Wshadow \
|
||||
-Wfloat-conversion ${CMAKE_C_FLAGS}")
|
||||
endif()
|
||||
|
||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM")
|
||||
# Intel CXX compiler based on clang defaults to -ffast-math, which
|
||||
# breaks std::isinf(), std::isnan(), etc.
|
||||
string(APPEND CMAKE_C_FLAGS " -fno-fast-math")
|
||||
string(APPEND CMAKE_CXX_FLAGS " -fno-fast-math")
|
||||
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND
|
||||
CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13 AND
|
||||
CMAKE_SIZEOF_VOID_P EQUAL 4)
|
||||
# GCC 13 and later changed their C++ excess precision support, which impacts
|
||||
# 32-bit builds. This restores the previous behavior.
|
||||
string(APPEND CMAKE_CXX_FLAGS " -fexcess-precision=fast")
|
||||
endif()
|
||||
# Tell Intel compiler to do arithmetic accurately. This is needed to
|
||||
# stop the compiler from ignoring parentheses in expressions like
|
||||
# (a + b) + c and from simplifying 0.0 + x to x (which is wrong if
|
||||
# x = -0.0).
|
||||
if (CMAKE_C_COMPILER_ID STREQUAL "Intel")
|
||||
if (MSVC)
|
||||
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /fp:precise")
|
||||
else ()
|
||||
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fp-model precise")
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
# Add other supported compiler flags
|
||||
if(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") OR ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang"))
|
||||
check_cxx_compiler_flag(-Wdeprecated-copy-dtor HAVE_DEP_COPY_DTOR_FLAG)
|
||||
if(HAVE_DEP_COPY_DTOR_FLAG)
|
||||
set(PROJ_CXX_WARN_FLAGS ${PROJ_CXX_WARN_FLAGS} -Wdeprecated-copy-dtor)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(PROJ_C_WARN_FLAGS "${PROJ_C_WARN_FLAGS}"
|
||||
CACHE STRING "C flags used to compile PROJ targets")
|
||||
set(PROJ_CXX_WARN_FLAGS "${PROJ_CXX_WARN_FLAGS}"
|
||||
CACHE STRING "C++ flags used to compile PROJ targets")
|
||||
|
||||
################################################################################
|
||||
# PROJ CMake modules
|
||||
################################################################################
|
||||
#################################################################################
|
||||
# PROJ4 CMake modules
|
||||
#################################################################################
|
||||
# Path to additional CMake modules
|
||||
set(CMAKE_MODULE_PATH ${PROJ_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
|
||||
set(CMAKE_MODULE_PATH ${PROJ4_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
|
||||
set(CMAKE_MODULE_PATH ${PROJ4_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH})
|
||||
|
||||
include(ProjUtilities)
|
||||
include(Proj4Utilities)
|
||||
|
||||
message(STATUS "Configuring PROJ:")
|
||||
message(STATUS "")
|
||||
colormsg(_HIBLUE_ "Configuring PROJ:")
|
||||
|
||||
################################################################################
|
||||
#################################################################################
|
||||
#PROJ version information
|
||||
################################################################################
|
||||
include(ProjVersion)
|
||||
proj_version(MAJOR 9 MINOR 9 PATCH 0)
|
||||
set(PROJ_SOVERSION 25)
|
||||
set(PROJ_BUILD_VERSION "${PROJ_SOVERSION}.${PROJ_VERSION}")
|
||||
#################################################################################
|
||||
include(Proj4Version)
|
||||
proj_version(MAJOR 5 MINOR 0 PATCH 0)
|
||||
set(PROJ_API_VERSION "13")
|
||||
set(PROJ_BUILD_VERSION "13.1.0")
|
||||
|
||||
################################################################################
|
||||
#################################################################################
|
||||
# Build features and variants
|
||||
################################################################################
|
||||
|
||||
include(Ccache)
|
||||
include(ProjConfig)
|
||||
include(ProjMac)
|
||||
#################################################################################
|
||||
include(Proj4SystemInfo)
|
||||
include(Proj4Config)
|
||||
include(Proj4Mac)
|
||||
include(policies)
|
||||
|
||||
##############################################
|
||||
### SWITCH BETWEEN STATIC OR SHARED LIBRARY###
|
||||
##############################################
|
||||
|
||||
# default config is shared
|
||||
option(BUILD_SHARED_LIBS "Build PROJ library shared." ON)
|
||||
|
||||
################################################################################
|
||||
# Check for nlohmann_json
|
||||
################################################################################
|
||||
|
||||
set(NLOHMANN_JSON_ORIGIN "auto" CACHE STRING
|
||||
"nlohmann/json origin. The default auto will try to use external \
|
||||
nlohmann/json if possible")
|
||||
set_property(CACHE NLOHMANN_JSON_ORIGIN PROPERTY STRINGS auto internal external)
|
||||
|
||||
# Probably not the strictest minimum, but known to work with it
|
||||
set(MIN_NLOHMANN_JSON_VERSION 3.7.0)
|
||||
|
||||
if(NLOHMANN_JSON_ORIGIN STREQUAL "external")
|
||||
find_package(nlohmann_json REQUIRED)
|
||||
set(NLOHMANN_JSON "external")
|
||||
elseif(NLOHMANN_JSON_ORIGIN STREQUAL "internal")
|
||||
set(NLOHMANN_JSON "internal")
|
||||
else()
|
||||
find_package(nlohmann_json QUIET)
|
||||
if(nlohmann_json_FOUND)
|
||||
set(NLOHMANN_JSON "external")
|
||||
else()
|
||||
set(NLOHMANN_JSON "internal")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NLOHMANN_JSON STREQUAL "external")
|
||||
# Check minimum version
|
||||
if(nlohmann_json_VERSION VERSION_LESS MIN_NLOHMANN_JSON_VERSION)
|
||||
message(STATUS "external nlohmann/json version ${nlohmann_json_VERSION} "
|
||||
"is older than minimum requirement ${MIN_NLOHMANN_JSON_VERSION}")
|
||||
set(NLOHMANN_JSON "internal")
|
||||
else()
|
||||
message(STATUS "found nlohmann/json version ${nlohmann_json_VERSION}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
message(STATUS "nlohmann/json: ${NLOHMANN_JSON}")
|
||||
|
||||
################################################################################
|
||||
# Check for sqlite3
|
||||
################################################################################
|
||||
|
||||
find_program(EXE_SQLITE3 sqlite3)
|
||||
if(NOT EXE_SQLITE3)
|
||||
message(SEND_ERROR "sqlite3 binary not found!")
|
||||
endif()
|
||||
|
||||
# Deprecated variables since PROJ 9.4.0
|
||||
if(DEFINED SQLITE3_INCLUDE_DIR)
|
||||
message(DEPRECATION "Use SQLite3_INCLUDE_DIR instead of SQLITE3_INCLUDE_DIR")
|
||||
set(SQLite3_INCLUDE_DIR ${SQLITE3_INCLUDE_DIR})
|
||||
endif()
|
||||
if(DEFINED SQLITE3_LIBRARY)
|
||||
message(DEPRECATION "Use SQLite3_LIBRARY instead of SQLITE3_LIBRARY")
|
||||
set(SQLite3_LIBRARY ${SQLITE3_LIBRARY})
|
||||
endif()
|
||||
|
||||
find_package(SQLite3 3.11 REQUIRED)
|
||||
if(NOT TARGET SQLite3::SQLite3) # CMake < 4.3
|
||||
add_library(SQLite3::SQLite3 ALIAS SQLite::SQLite3)
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
# Check for libtiff
|
||||
################################################################################
|
||||
|
||||
option(ENABLE_TIFF "Enable TIFF support to read some grids" ON)
|
||||
mark_as_advanced(ENABLE_TIFF)
|
||||
set(TIFF_ENABLED FALSE)
|
||||
if(ENABLE_TIFF)
|
||||
find_package(TIFF REQUIRED)
|
||||
if(TIFF_FOUND)
|
||||
set(TIFF_ENABLED TRUE)
|
||||
else()
|
||||
message(SEND_ERROR
|
||||
"libtiff dependency not found! Use ENABLE_TIFF=OFF to force it off")
|
||||
endif()
|
||||
else()
|
||||
message(WARNING
|
||||
"TIFF support is not enabled and will result in the inability to read "
|
||||
"some grids")
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
# Check for curl
|
||||
################################################################################
|
||||
|
||||
option(ENABLE_CURL "Enable Curl support" ON)
|
||||
set(CURL_ENABLED FALSE)
|
||||
if(ENABLE_CURL)
|
||||
find_package(CURL REQUIRED)
|
||||
if(CURL_FOUND)
|
||||
set(CURL_ENABLED TRUE)
|
||||
|
||||
# Curl SSL options are described in
|
||||
# https://curl.se/libcurl/c/CURLOPT_SSL_OPTIONS.html
|
||||
#set(CURLSSLOPT_NO_REVOKE 2)
|
||||
#set(SSL_OPTIONS ${CURLSSLOPT_NO_REVOKE})
|
||||
#add_compile_definitions(SSL_OPTIONS=${SSL_OPTIONS})
|
||||
|
||||
else()
|
||||
message(SEND_ERROR "curl dependency not found!")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
# Check for Emscripten fetch
|
||||
################################################################################
|
||||
|
||||
option(ENABLE_EMSCRIPTEN_FETCH "Enable Emscripten fetch support" OFF)
|
||||
set(EMSCRIPTEN_FETCH_ENABLED FALSE)
|
||||
if(ENABLE_EMSCRIPTEN_FETCH)
|
||||
set(EMSCRIPTEN_FETCH_ENABLED TRUE)
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
|
||||
option(EMBED_PROJ_DATA_PATH "Whether the PROJ_DATA path should be embedded" ON)
|
||||
|
||||
if(DEFINED PROJ_LIB_ENV_VAR_TRIED_LAST)
|
||||
set(PROJ_DATA_ENV_VAR_TRIED_LAST ${PROJ_LIB_ENV_VAR_TRIED_LAST})
|
||||
message(WARNING "PROJ_LIB_ENV_VAR_TRIED_LAST option has been renamed to PROJ_DATA_ENV_VAR_TRIED_LAST. PROJ_LIB_ENV_VAR_TRIED_LAST is still working for now, but may be completely replaced by PROJ_DATA_ENV_VAR_TRIED_LAST in a future release")
|
||||
else()
|
||||
option(PROJ_DATA_ENV_VAR_TRIED_LAST "Whether the PROJ_DATA environment variable should be tried after the hardcoded location" OFF)
|
||||
endif()
|
||||
if(PROJ_DATA_ENV_VAR_TRIED_LAST)
|
||||
add_definitions(-DPROJ_DATA_ENV_VAR_TRIED_LAST)
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
#################################################################################
|
||||
# threading configuration
|
||||
################################################################################
|
||||
#################################################################################
|
||||
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
|
||||
find_package(Threads)
|
||||
if(Threads_FOUND AND CMAKE_USE_PTHREADS_INIT)
|
||||
set(CMAKE_REQUIRED_LIBRARIES
|
||||
"${CMAKE_REQUIRED_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}")
|
||||
find_package (Threads)
|
||||
|
||||
include(CheckIncludeFiles)
|
||||
include(CheckSymbolExists)
|
||||
CHECK_SYMBOL_EXISTS(PTHREAD_MUTEX_RECURSIVE pthread.h HAVE_PTHREAD_MUTEX_RECURSIVE_DEFN)
|
||||
if (HAVE_PTHREAD_MUTEX_RECURSIVE_DEFN)
|
||||
add_definitions(-DHAVE_PTHREAD_MUTEX_RECURSIVE=1)
|
||||
endif()
|
||||
|
||||
include (CheckCSourceCompiles)
|
||||
if (MSVC)
|
||||
set (CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} /WX")
|
||||
else ()
|
||||
set (CMAKE_REQUIRED_LIBRARIES m)
|
||||
set (CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} -Werror")
|
||||
endif ()
|
||||
# Check whether the C99 math function: hypot, atanh, etc. are available.
|
||||
check_c_source_compiles (
|
||||
"#include <math.h>
|
||||
int main() {
|
||||
int q;
|
||||
return (int)(hypot(3.0, 4.0) + atanh(0.8) + cbrt(8.0) +
|
||||
remquo(100.0, 90.0, &q) +
|
||||
remainder(100.0, 90.0) + copysign(1.0, -0.0));
|
||||
}\n" C99_MATH)
|
||||
if (C99_MATH)
|
||||
add_definitions (-DHAVE_C99_MATH=1)
|
||||
else ()
|
||||
add_definitions (-DHAVE_C99_MATH=0)
|
||||
endif ()
|
||||
|
||||
boost_report_value(PROJ_PLATFORM_NAME)
|
||||
boost_report_value(PROJ_COMPILER_NAME)
|
||||
|
||||
# Set a default build type for single-configuration cmake generators if
|
||||
# no build type is set.
|
||||
if(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE Release)
|
||||
endif()
|
||||
if (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
|
||||
set (CMAKE_BUILD_TYPE Release)
|
||||
endif ()
|
||||
|
||||
if(MSVC OR CMAKE_CONFIGURATION_TYPES)
|
||||
if (MSVC OR CMAKE_CONFIGURATION_TYPES)
|
||||
# For multi-config systems and for Visual Studio, the debug version of
|
||||
# the library has _d appended.
|
||||
set(CMAKE_DEBUG_POSTFIX _d)
|
||||
endif()
|
||||
set (CMAKE_DEBUG_POSTFIX _d)
|
||||
endif ()
|
||||
|
||||
option(PROJ4_TESTS "Enable build of collection of PROJ4 tests" ON)
|
||||
boost_report_value(PROJ4_TESTS)
|
||||
if(PROJ4_TESTS)
|
||||
include(CTest)
|
||||
enable_testing()
|
||||
endif(PROJ4_TESTS)
|
||||
include(Proj4Test)
|
||||
|
||||
# Put the libraries and binaries that get built into directories at the
|
||||
# top of the build tree rather than in hard-to-find leaf
|
||||
# directories. This simplifies manual testing and the use of the build
|
||||
# tree rather than installed PROJ libraries.
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJ_BINARY_DIR}/lib)
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJ_BINARY_DIR}/lib)
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJ_BINARY_DIR}/bin)
|
||||
# tree rather than installed Boost libraries.
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
|
||||
link_directories(${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
|
||||
|
||||
################################################################################
|
||||
#################################################################################
|
||||
# Installation
|
||||
################################################################################
|
||||
include(ProjInstallPath)
|
||||
#################################################################################
|
||||
include(Proj4InstallPath)
|
||||
set(BINDIR "${DEFAULT_BINDIR}" CACHE PATH "The directory to install binaries into.")
|
||||
set(LIBDIR "${DEFAULT_LIBDIR}" CACHE PATH "The directory to install libraries into.")
|
||||
set(DATADIR "${DEFAULT_DATADIR}" CACHE PATH "The directory to install data files into.")
|
||||
set(DOCDIR "${DEFAULT_DOCDIR}" CACHE PATH "The directory to install doc files into.")
|
||||
set(INCLUDEDIR "${DEFAULT_INCLUDEDIR}" CACHE PATH "The directory to install includes into.")
|
||||
set(CMAKECONFIGDIR "${DEFAULT_CMAKEDIR}" CACHE PATH "The directory to install cmake config files into.")
|
||||
|
||||
# By default GNUInstallDirs will use the upper case project name
|
||||
# for CMAKE_INSTALL_DOCDIR, resulting in something like share/doc/PROJ
|
||||
# instead of share/doc/proj which historically have been the path used
|
||||
# by the project.
|
||||
# Here force the use of a lower case project name and reset after
|
||||
# GNUInstallDirs has done its thing
|
||||
set(PROJECT_NAME_ORIGINAL "${PROJECT_NAME}")
|
||||
string(TOLOWER "${PROJECT_NAME}" PROJECT_NAME)
|
||||
|
||||
include(GNUInstallDirs)
|
||||
|
||||
set(PROJECT_NAME "${PROJECT_NAME_ORIGINAL}")
|
||||
|
||||
################################################################################
|
||||
# Tests
|
||||
################################################################################
|
||||
|
||||
option(BUILD_TESTING "Build the testing tree." ON)
|
||||
if(BUILD_TESTING)
|
||||
enable_testing()
|
||||
include(ProjTest)
|
||||
else()
|
||||
message(STATUS "Testing disabled")
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
# Whether we should embed resources
|
||||
################################################################################
|
||||
|
||||
include(CheckCSourceCompiles)
|
||||
function (is_sharp_embed_available res)
|
||||
if (NOT EMSCRIPTEN AND
|
||||
((CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 15.0) OR
|
||||
(CMAKE_C_COMPILER_ID STREQUAL "Clang" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 19.0)))
|
||||
set(TEST_SHARP_EMBED
|
||||
"static const unsigned char embedded[] = {\n#embed __FILE__\n};\nint main() { (void)embedded; return 0;}"
|
||||
)
|
||||
set(CMAKE_C_STANDARD_BACKUP "${CMAKE_C_STANDARD}")
|
||||
set(CMAKE_C_STANDARD "23")
|
||||
check_c_source_compiles("${TEST_SHARP_EMBED}" _TEST_SHARP_EMBED)
|
||||
set(CMAKE_C_STANDARD "${CMAKE_C_STANDARD_BACKUP}")
|
||||
if (_TEST_SHARP_EMBED)
|
||||
set(${res} ON PARENT_SCOPE)
|
||||
else()
|
||||
set(${res} OFF PARENT_SCOPE)
|
||||
endif()
|
||||
else()
|
||||
set(${res} OFF PARENT_SCOPE)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
is_sharp_embed_available(IS_SHARP_EMBED_AVAILABLE_RES)
|
||||
if (NOT DEFINED BUILD_SHARED_LIBS)
|
||||
message(FATAL_ERROR "BUILD_SHARED_LIBS should be set")
|
||||
endif()
|
||||
if (NOT BUILD_SHARED_LIBS)
|
||||
set(DEFAULT_EMBED_RESOURCE_FILES ON)
|
||||
else()
|
||||
set(DEFAULT_EMBED_RESOURCE_FILES OFF)
|
||||
endif()
|
||||
option(EMBED_RESOURCE_FILES "Whether resource files (limited to proj.db) should be embedded into the PROJ library" ${DEFAULT_EMBED_RESOURCE_FILES})
|
||||
|
||||
option(USE_ONLY_EMBEDDED_RESOURCE_FILES "Whether embedded resource files (limited to proj.db) should be used (should nominally be used together with EMBED_RESOURCE_FILES=ON, otherwise this will result in non-functional builds)" OFF)
|
||||
|
||||
if (USE_ONLY_EMBEDDED_RESOURCE_FILES AND NOT EMBED_RESOURCE_FILES)
|
||||
message(WARNING "USE_ONLY_EMBEDDED_RESOURCE_FILES=ON set but EMBED_RESOURCE_FILES=OFF: some drivers will lack required resource files")
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
#################################################################################
|
||||
# Build configured components
|
||||
################################################################################
|
||||
#################################################################################
|
||||
include_directories(${PROJ4_SOURCE_DIR}/src)
|
||||
|
||||
set(PROJ_DICTIONARY
|
||||
world
|
||||
other.extra
|
||||
nad27
|
||||
GL27
|
||||
nad83
|
||||
nad.lst
|
||||
CH
|
||||
ITRF2000
|
||||
ITRF2008
|
||||
ITRF2014
|
||||
ITRF2020
|
||||
)
|
||||
|
||||
include_directories(${PROJ_SOURCE_DIR}/src)
|
||||
|
||||
add_subdirectory(data)
|
||||
add_subdirectory(include)
|
||||
message(STATUS "")
|
||||
add_subdirectory(nad)
|
||||
add_subdirectory(src)
|
||||
add_subdirectory(man)
|
||||
add_subdirectory(cmake)
|
||||
if(BUILD_TESTING)
|
||||
add_subdirectory(test)
|
||||
endif()
|
||||
add_subdirectory(test)
|
||||
|
||||
option(BUILD_EXAMPLES "Whether to build example programs" OFF)
|
||||
if(BUILD_EXAMPLES)
|
||||
add_subdirectory(examples)
|
||||
endif()
|
||||
|
||||
add_subdirectory(scripts)
|
||||
|
||||
set(docfiles COPYING NEWS.md AUTHORS.md)
|
||||
install(FILES ${docfiles}
|
||||
DESTINATION ${CMAKE_INSTALL_DOCDIR})
|
||||
|
||||
################################################################################
|
||||
# Build debug symbols
|
||||
################################################################################
|
||||
option(EXPORT_PDB "Export PDB file" OFF)
|
||||
|
||||
if (WIN32 AND EXPORT_PDB)
|
||||
target_compile_options(proj PRIVATE /Zi /Zf)
|
||||
target_link_options(proj PRIVATE /DEBUG /OPT:REF /OPT:ICF)
|
||||
|
||||
if(BUILD_SHARED_LIBS)
|
||||
set(pdbFile $<TARGET_PDB_FILE:proj>)
|
||||
else()
|
||||
set(pdbDirFullPath ${CMAKE_BINARY_DIR}/lib)
|
||||
set_target_properties(proj
|
||||
PROPERTIES
|
||||
COMPILE_PDB_OUTPUT_DIRECTORY ${pdbDirFullPath}
|
||||
COMPILE_PDB_NAME proj)
|
||||
set(pdbFile ${pdbDirFullPath}/proj.pdb)
|
||||
endif()
|
||||
|
||||
install(FILES ${pdbFile} DESTINATION lib)
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
# pkg-config support
|
||||
################################################################################
|
||||
configure_proj_pc()
|
||||
|
||||
install(FILES
|
||||
${CMAKE_CURRENT_BINARY_DIR}/proj.pc
|
||||
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
|
||||
|
||||
################################################################################
|
||||
# "make dist" workalike
|
||||
################################################################################
|
||||
|
||||
if(PROJECT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
|
||||
set(CPACK_SOURCE_GENERATOR "TGZ;ZIP")
|
||||
set(CPACK_SOURCE_PACKAGE_FILE_NAME "proj-${PROJ_VERSION}")
|
||||
set(CPACK_PACKAGE_VENDOR "OSGeo")
|
||||
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJ_VERSION_MAJOR})
|
||||
set(CPACK_PACKAGE_VERSION_MINOR ${PROJ_VERSION_MINOR})
|
||||
set(CPACK_PACKAGE_VERSION_PATCH ${PROJ_VERSION_PATCH})
|
||||
set(CPACK_VERBATIM_VARIABLES TRUE)
|
||||
set(CPACK_SOURCE_IGNORE_FILES
|
||||
/\\..* # any file/directory starting with .
|
||||
/.*\\.yml
|
||||
/.*\\.gz
|
||||
/.*\\.zip
|
||||
/.*build.*/
|
||||
\\.deps
|
||||
/autogen\\.sh
|
||||
/autom4te\\.cache
|
||||
/ci/
|
||||
/CODE_OF_CONDUCT.md
|
||||
/CONTRIBUTING.md
|
||||
/disabled_workflows/
|
||||
/Dockerfile
|
||||
/docs/
|
||||
/Doxyfile
|
||||
/HOWTO-RELEASE.md
|
||||
/m4/lt*
|
||||
/m4/libtool*
|
||||
/media/
|
||||
/schemas/
|
||||
/test/fuzzers/
|
||||
/test/gigs/.*gie\\.failing
|
||||
/test/postinstall/
|
||||
/travis/
|
||||
${PROJECT_BINARY_DIR}
|
||||
)
|
||||
include(CPack)
|
||||
|
||||
get_property(_is_multi_config_generator GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
|
||||
if(NOT _is_multi_config_generator)
|
||||
add_custom_target(dist
|
||||
COMMAND ${CMAKE_MAKE_PROGRAM} package_source
|
||||
)
|
||||
message(STATUS "PROJ: Configured 'dist' target")
|
||||
endif()
|
||||
|
||||
configure_file(cmake/uninstall.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/proj_uninstall.cmake @ONLY)
|
||||
add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/proj_uninstall.cmake)
|
||||
endif()
|
||||
|
||||
message(STATUS "EMBED_RESOURCE_FILES=${EMBED_RESOURCE_FILES}")
|
||||
|
||||
@@ -1,76 +0,0 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to make participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, sex characteristics, gender identity and expression,
|
||||
level of experience, education, socio-economic status, nationality, personal
|
||||
appearance, race, religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or
|
||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||
permanently any contributor for other behaviors that they deem inappropriate,
|
||||
threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all project spaces, and it also applies when
|
||||
an individual is representing the project or its community in public spaces.
|
||||
Examples of representing a project or community include using an official
|
||||
project e-mail address, posting via an official social media account, or acting
|
||||
as an appointed representative at an online or offline event. Representation of
|
||||
a project may be further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project team at <kristianevers@gmail.com>. All
|
||||
complaints will be reviewed and investigated and will result in a response that
|
||||
is deemed necessary and appropriate to the circumstances. The project team is
|
||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||
Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||
available at <https://www.contributor-covenant.org/version/1/4/code-of-conduct.html>
|
||||
|
||||
For answers to common questions about this code of conduct, see
|
||||
<https://www.contributor-covenant.org/faq>
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
+87
-38
@@ -1,11 +1,11 @@
|
||||
# How to contribute to PROJ
|
||||
# How to contribute to PROJ.4
|
||||
|
||||
PROJ has a wide and varied user base. Some are highly skilled geodesists with a deep
|
||||
PROJ.4 has a wide and varied user base. Some are highly skilled geodesists with a deep
|
||||
knowledge of map projections and reference systems, some are GIS software developers
|
||||
and others are GIS users. All users, regardless of the profession or skill level,
|
||||
have the ability to contribute to PROJ. Here are a few suggestions on how:
|
||||
has the ability to contribute to PROJ.4. Here's a few suggestion on how:
|
||||
|
||||
* Help PROJ-users that is less experienced than yourself.
|
||||
* Help PROJ.4-users that is less experienced than yourself.
|
||||
* Write a bug report
|
||||
* Request a new feature
|
||||
* Write documentation for your favorite map projection
|
||||
@@ -13,25 +13,24 @@ have the ability to contribute to PROJ. Here are a few suggestions on how:
|
||||
* Implement a new feature
|
||||
|
||||
In the following sections you can find some guidelines on how to contribute.
|
||||
As PROJ is managed on GitHub most contributions require that you have a GitHub
|
||||
As PROJ.4 is managed on GitHub most contributions require that you have a GitHub
|
||||
account. Familiarity with [issues](https://guides.github.com/features/issues/) and
|
||||
the [GitHub Flow](https://guides.github.com/introduction/flow/) is an advantage.
|
||||
|
||||
## Help a fellow PROJ user
|
||||
## Help a fellow PROJ.4 user
|
||||
The main forum for support for PROJ.4 is the mailing list. You can subscribe to
|
||||
the mailing list [here](http://lists.maptools.org/mailman/listinfo/proj) and read
|
||||
the archive [here](http://lists.maptools.org/pipermail/proj/).
|
||||
|
||||
The main forum for support for PROJ is the mailing list. You can subscribe to
|
||||
the mailing list [here](http://lists.osgeo.org/mailman/listinfo/proj) and read
|
||||
the archive [here](http://lists.osgeo.org/pipermail/proj/).
|
||||
|
||||
If you have questions about the usage of PROJ the mailing list is also the place to go.
|
||||
If you have questions about the usage of PROJ.4 the mailing list is also the place to go.
|
||||
Please *do not* use the GitHub issue tracker as a support forum. Your question is much
|
||||
more likely to be answered on the mailing list, as many more people follow that than
|
||||
the issue tracker.
|
||||
|
||||
## Adding bug reports
|
||||
|
||||
Bug reports are handled in the [issue tracker](https://github.com/OSGeo/PROJ/issues)
|
||||
on PROJ's home on GitHub. Writing a good bug report is not easy. But fixing a poorly
|
||||
Bug reports are handled in the [issue tracker](https://github.com/OSGeo/proj.4/issues)
|
||||
on PROJ.4's home on GitHub. Writing a good bug report is not easy. But fixing a poorly
|
||||
documented bug is not easy either, so please put in the effort it takes to create a
|
||||
thorough bug report.
|
||||
|
||||
@@ -39,7 +38,7 @@ A good bug report includes at least:
|
||||
|
||||
* A title that quickly explains the problem
|
||||
* A description of the problem and how it can be reproduced
|
||||
* Version of PROJ being used
|
||||
* Version of PROJ.4 being used
|
||||
* Version numbers of any other relevant software being used, e.g. operating system
|
||||
* A description of what already has been done to solve the problem
|
||||
|
||||
@@ -48,16 +47,16 @@ will find interest in solving the problem. You will probably get follow-up quest
|
||||
after submitting a bug report. Please answer them in a timely manner if you have an
|
||||
interest in getting the issue solved.
|
||||
|
||||
Finally, please only submit bug reports that are actually related to PROJ. If the
|
||||
issue materializes in software that uses PROJ it is likely a problem with that
|
||||
particular software. Make sure that it actually is a PROJ problem before you submit
|
||||
an issue. If you can reproduce the problem only by using tools from PROJ it is
|
||||
definitely a problem with PROJ.
|
||||
Finally, please only submit bug reports that are actually related to PROJ.4. If the
|
||||
issue materializes in software that uses PROJ.4 it is likely a problem with that
|
||||
particular software. Make sure that it actually is a PROJ.4 problem before you submit
|
||||
an issue. If you can reproduce the problem only by using tools from PROJ.4 it is
|
||||
definitely a problem with PROJ.4.
|
||||
|
||||
## Feature requests
|
||||
|
||||
Got an idea for a new feature in PROJ? Submit a thorough description of the new
|
||||
feature in the [issue tracker](https://github.com/OSGeo/PROJ/issues). Please
|
||||
Got an idea for a new feature in PROJ.4? Submit a thorough description of the new
|
||||
feature in the [issue tracker](https://github.com/OSGeo/proj.4/issues). Please
|
||||
include any technical documents that can help the developer make the new feature a
|
||||
reality. An example of this could be a publicly available academic paper that
|
||||
describes a new projection. Also, including a numerical test case will make it
|
||||
@@ -68,30 +67,79 @@ Note that not all feature requests are accepted.
|
||||
|
||||
## Write documentation
|
||||
|
||||
PROJ is in dire need of better documentation. Any contributions of documentation
|
||||
are greatly appreciated. The PROJ documentation is available on [proj.org](https://proj.org).
|
||||
PROJ.4 is in dire need of better documentation. Any contributions of documentation
|
||||
are greatly appreciated. The PROJ.4 documentation is available on [proj4.org](ttp://proj4.org).
|
||||
The website is generated with [Sphinx](http://www.sphinx-doc.org/en/stable/). Contributions
|
||||
to the documentation should be made as [Pull Requests](https://github.com/OSGeo/PROJ/pulls)
|
||||
to the documentation should be made as [Pull Requests](https://github.com/OSGeo/proj.4/pulls)
|
||||
on GitHub.
|
||||
|
||||
If you intend to document one of PROJ's supported projections please use the
|
||||
[Mercator projection](https://proj.org/operations/projections/merc.html) as a template.
|
||||
If you intend to document one of PROJ.4's supported projections please use the
|
||||
[Mercator projection](http://proj4.org/projections/merc.html) as a template.
|
||||
|
||||
|
||||
## Code contributions
|
||||
|
||||
See [Code Contributions](https://proj.org/community/code_contributions.html)
|
||||
Code contributions can be either bug fixes or new features. The process is the same
|
||||
for both, so they will be discussed together in this section.
|
||||
|
||||
### Legalese
|
||||
### Making Changes
|
||||
|
||||
Committers are the front line gatekeepers to keep the code base clear of improperly contributed code.
|
||||
It is important to the PROJ users, developers and the OSGeo foundation to avoid contributing any
|
||||
* Create a topic branch from where you want to base your work.
|
||||
* You usually should base your topic branch off of the master branch.
|
||||
* To quickly create a topic branch: `git checkout -b my-topic-branch`
|
||||
* Make commits of logical units.
|
||||
* Check for unnecessary whitespace with `git diff --check` before committing.
|
||||
* Make sure your commit messages are in the [proper format](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html).
|
||||
* Make sure you have added the necessary tests for your changes.
|
||||
* Make sure that all tests pass
|
||||
|
||||
### Submitting Changes
|
||||
|
||||
* Push your changes to a topic branch in your fork of the repository.
|
||||
* Submit a pull request to the PROJ.4 repository in the OSGeo organization.
|
||||
* If your pull request fixes/references an issue, include that issue number in the pull request. For example:
|
||||
|
||||
```
|
||||
Wiz the bang
|
||||
|
||||
Fixes #123.
|
||||
```
|
||||
|
||||
* PROJ.4 developers will look at your patch and take an appropriate action.
|
||||
|
||||
### Coding conventions
|
||||
|
||||
#### Programming language
|
||||
PROJ.4 is developed strictly in ANSI C 89.
|
||||
|
||||
#### Coding style
|
||||
We don't enforce any particular coding style, but please try to keep it as simple as possible.
|
||||
If improving existing code, please try to conform with the style of the locally surrounding code.
|
||||
|
||||
#### Whitespace
|
||||
Throughout the PROJ.4 code base you will see differing whitespace use.
|
||||
The general rule is to keep whitespace in whatever form it is
|
||||
in the file you are currently editing. If the file has a mix of tabs and space please
|
||||
convert the tabs to space in a separate commit before making any other changes. This
|
||||
makes it a lot easier to see the changes in diffs when evaluating the changed code. New
|
||||
files should use spaces as whitespace.
|
||||
|
||||
#### File names
|
||||
Files in which projections are implemented are prefixed with an upper-case `PJ_` and most other
|
||||
files are prefixed with lower-case `pj_`. Some file deviate from this pattern, most of them dates
|
||||
back to the very early releases of PROJ.4. New contributions should follow the pj-prefix pattern.
|
||||
Unless there are obvious reasons not to.
|
||||
|
||||
#### Legalese
|
||||
Commiters are the front line gatekeepers to keep the code base clear of improperly contributed code.
|
||||
It is important to the PROJ.4 users, developers and the OSGeo foundation to avoid contributing any
|
||||
code to the project without it being clearly licensed under the project license.
|
||||
|
||||
Generally speaking the key issues are that those providing code to be included in the repository
|
||||
understand that the code will be released under the MIT/X license, and that the person providing
|
||||
the code has the right to contribute the code. For the committer themselves understanding about
|
||||
the license is hopefully clear. For other contributors, the committer should verify the understanding
|
||||
unless the committer is very comfortable that the contributor understands the license (for
|
||||
the code has the right to contribute the code. For the commiter themselves understanding about
|
||||
the license is hopefully clear. For other contributors, the commiter should verify the understanding
|
||||
unless the commiter is very comfortable that the contributor understands the license (for
|
||||
instance frequent contributors).
|
||||
|
||||
If the contribution was developed on behalf of an employer (on work time, as part of a work project,
|
||||
@@ -105,7 +153,7 @@ compatible license.
|
||||
|
||||
All unusual situations need to be discussed and/or documented.
|
||||
|
||||
Committer should adhere to the following guidelines, and may be personally legally liable for
|
||||
Commiters should adhere to the following guidelines, and may be personally legally liable for
|
||||
improperly contributing code to the source repository:
|
||||
|
||||
* Make sure the contributor (and possibly employer) is aware of the contribution terms.
|
||||
@@ -123,13 +171,14 @@ improperly contributing code to the source repository:
|
||||
* If there is uncertainty about whether a change is proper to contribute to the code base, please
|
||||
seek more information from the project steering committee, or the foundation legal counsel.
|
||||
|
||||
|
||||
## Additional Resources
|
||||
|
||||
* [General GitHub documentation](https://help.github.com/)
|
||||
* [General GitHub documentation](http://help.github.com/)
|
||||
* [GitHub pull request documentation](https://help.github.com/articles/about-pull-requests/)
|
||||
|
||||
## Acknowledgements
|
||||
|
||||
The [code contribution](#Code Contributions) section of this CONTRIBUTING file is inspired by
|
||||
[PDAL's](https://github.com/PDAL/PDAL/blob/master/CONTRIBUTING.md) and the [legalese](#legalese)
|
||||
section is modified from [GDAL committer guidelines](https://trac.osgeo.org/gdal/wiki/rfc3_commiters)
|
||||
The _code contribution_ section of this CONTRIBUTING file is inspired by
|
||||
[PDAL's](https://github.com/PDAL/PDAL/blob/master/CONTRIBUTING.md) and the _legalese_ section is
|
||||
modified from [GDAL contributer guidelines](https://trac.osgeo.org/gdal/wiki/rfc3_commiters)
|
||||
|
||||
@@ -1,20 +1,19 @@
|
||||
|
||||
All source, data files and other contents of the PROJ package are
|
||||
All source, data files and other contents of the PROJ.4 package are
|
||||
available under the following terms. Note that the PROJ 4.3 and earlier
|
||||
was "public domain" as is common with US government work, but apparently
|
||||
this is not a well defined legal term in many countries. Frank Warmerdam placed
|
||||
everything under the following MIT style license because he believed it is
|
||||
this is not a well defined legal term in many countries. I am placing
|
||||
everything under the following MIT style license because I believe it is
|
||||
effectively the same as public domain, allowing anyone to use the code as
|
||||
they wish, including making proprietary derivatives.
|
||||
they wish, including making proprietary derivatives.
|
||||
|
||||
Initial PROJ 4.3 public domain code was put as Frank Warmerdam as copyright
|
||||
holder, but he didn't mean to imply he did the work. Essentially all work was
|
||||
done by Gerald Evenden.
|
||||
|
||||
Copyright information can be found in source files.
|
||||
Though I have put my own name as copyright holder, I don't mean to imply
|
||||
I did the work. Essentially all work was done by Gerald Evenden.
|
||||
|
||||
--------------
|
||||
|
||||
Copyright (c) 2000, Frank Warmerdam
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
@@ -32,3 +31,4 @@ Copyright information can be found in source files.
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
2015-07-27 Even Rouault <even.rouault@spatialys.com>
|
||||
* : Remove setlocale() use in pj_init_ctx(), and replace uses of atof() &
|
||||
strtod() by their locale safe variants pj_atof() and pj_strtod().
|
||||
Proj versions from now advertise #define PJ_LOCALE_SAFE 1 in proj_api.h
|
||||
Proj versions from now advertize #define PJ_LOCALE_SAFE 1 in proj_api.h
|
||||
and export pj_atof() & pj_strtod() (#226)
|
||||
|
||||
2015-06-01 Charles Karney <https://github.com/cffk>
|
||||
@@ -601,7 +601,7 @@
|
||||
2010-03-16 Frank Warmerdam <warmerdam@pobox.com>
|
||||
|
||||
* src/pj_transform.c, src/pj_init.c, src/projects.h, src/pj_gridlist.c,
|
||||
src/pj_apply_gridshift.c: rework the translation of nadgrids parameters
|
||||
src/pj_apply_gridshit.c: rework the translation of nadgrids parameters
|
||||
into a list of gridshift files to avoid use of static "lastnadgrids"
|
||||
information which screws up multithreading. Changes the PJ structure.
|
||||
|
||||
@@ -1491,7 +1491,7 @@ Rel. 4.4.4 2001/09/15
|
||||
|
||||
2001-05-14 Frank Warmerdam <warmerdam@pobox.com>
|
||||
|
||||
* upgraded config.sub and config.guess as per debian bug report 97374.
|
||||
* upraded config.sub and config.guess as per debian bug report 97374.
|
||||
|
||||
Rel. 4.4.3 2001/04/20
|
||||
-------------------------------------------------------------------------
|
||||
@@ -1714,7 +1714,7 @@ Rel. 4.3.1 94/2/16 Base-line
|
||||
-------------------------------------------------------------------------
|
||||
|
||||
94/6/2
|
||||
Transverse Mercator, spherical inverse fixed. Misplaced parenthesis.
|
||||
Transverse Mercator, spherical inverse fixed. Misplaced parenthsis.
|
||||
|
||||
94/10/5
|
||||
Dropped dependency on FILENAME_MAX---too poorly defined in both
|
||||
@@ -1756,14 +1756,14 @@ Rel. 4.3 94/2/16 Base-line
|
||||
Added SPECIAL entry to conics Lambert, Albers and Equidistant.
|
||||
|
||||
Corrected nad/install.in test so as to only look for conus.lla.Z
|
||||
as test for installation of NADCON datum matrices.
|
||||
as test for installation of NADCON datum matricies.
|
||||
|
||||
94/3/19
|
||||
Problems with MAPGEN's mapdef choking on call to proj. Fixed
|
||||
with PROJ.4.3-patch-01.
|
||||
|
||||
94/3/22
|
||||
Bump mode of handling memory allocation for 2D arrays, so that
|
||||
Bumb mode of handling memory allocation for 2D arrays, so that
|
||||
execution of -L may not work on some systems. Interim corrections
|
||||
distributed with PROJ.4.3-patch-02.
|
||||
|
||||
@@ -1937,7 +1937,7 @@ Rel. 4.1.1 93/3/26 Base-line
|
||||
|
||||
pj_strerrno prototype added to projects.h
|
||||
|
||||
DOS option in strtod.c for MS C's lack of standard macros in headers.
|
||||
DOS option in strtod.c for MS C's lack of standard macros in neaders.
|
||||
|
||||
Rel. 4.1 93/3/8 Base-line --- @(#)CHANGE-LOG 4.14 95/09/23 GIE REL
|
||||
-------------------------------------------------------------------------
|
||||
|
||||
+40
-36
@@ -1,47 +1,51 @@
|
||||
##
|
||||
# OSGeo/PROJ
|
||||
# osgeo/proj.4
|
||||
|
||||
FROM ubuntu:24.04 AS builder
|
||||
FROM ubuntu:xenial
|
||||
|
||||
LABEL maintainer="Howard Butler <howard@hobu.co>"
|
||||
MAINTAINER Howard Butler <howard@hobu.co>
|
||||
|
||||
ARG DESTDIR="/build"
|
||||
|
||||
ARG PROJ_GITHUB_SHA
|
||||
|
||||
# Setup build env
|
||||
RUN apt-get update \
|
||||
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --fix-missing --no-install-recommends \
|
||||
software-properties-common build-essential ca-certificates \
|
||||
cmake wget unzip \
|
||||
zlib1g-dev libsqlite3-dev sqlite3 libcurl4-gnutls-dev \
|
||||
libtiff-dev \
|
||||
&& apt-get clean && rm -rf /var/lib/apt/lists/*
|
||||
RUN mkdir /build
|
||||
RUN apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 16126D3A3E5C1192 \
|
||||
&& apt-get update \
|
||||
&& apt-get install -y --fix-missing --no-install-recommends \
|
||||
software-properties-common build-essential ca-certificates \
|
||||
git make cmake wget unzip libtool automake python-pip \
|
||||
libpython-dev libjpeg-dev zlib1g-dev \
|
||||
python-dev python-pip g++ doxygen dvipng \
|
||||
cmake libjpeg8-dev zlib1g-dev texlive-latex-base \
|
||||
texlive-latex-extra git \
|
||||
graphviz python-matplotlib \
|
||||
python-setuptools imagemagick \
|
||||
&& apt-get remove --purge -y $BUILD_PACKAGES && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY . /PROJ
|
||||
|
||||
RUN cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -S /PROJ -B _build
|
||||
RUN cmake --build _build -j $(nproc)
|
||||
RUN cmake --install _build
|
||||
RUN rm -rfv _build
|
||||
RUN mkdir /vdatum \
|
||||
&& cd /vdatum \
|
||||
&& wget http://download.osgeo.org/proj/vdatum/usa_geoid2012.zip && unzip -j -u usa_geoid2012.zip -d /usr/share/proj \
|
||||
&& wget http://download.osgeo.org/proj/vdatum/usa_geoid2009.zip && unzip -j -u usa_geoid2009.zip -d /usr/share/proj \
|
||||
&& wget http://download.osgeo.org/proj/vdatum/usa_geoid2003.zip && unzip -j -u usa_geoid2003.zip -d /usr/share/proj \
|
||||
&& wget http://download.osgeo.org/proj/vdatum/usa_geoid1999.zip && unzip -j -u usa_geoid1999.zip -d /usr/share/proj \
|
||||
&& wget http://download.osgeo.org/proj/vdatum/vertcon/vertconc.gtx && mv vertconc.gtx /usr/share/proj \
|
||||
&& wget http://download.osgeo.org/proj/vdatum/vertcon/vertcone.gtx && mv vertcone.gtx /usr/share/proj \
|
||||
&& wget http://download.osgeo.org/proj/vdatum/vertcon/vertconw.gtx && mv vertconw.gtx /usr/share/proj \
|
||||
&& wget http://download.osgeo.org/proj/vdatum/egm96_15/egm96_15.gtx && mv egm96_15.gtx /usr/share/proj \
|
||||
&& wget http://download.osgeo.org/proj/vdatum/egm08_25/egm08_25.gtx && mv egm08_25.gtx /usr/share/proj \
|
||||
&& rm -rf /vdatum
|
||||
|
||||
FROM ubuntu:24.04 AS runner
|
||||
RUN pip install Sphinx breathe \
|
||||
sphinx_bootstrap_theme awscli sphinxcontrib-bibtex \
|
||||
sphinx_rtd_theme
|
||||
|
||||
RUN date
|
||||
RUN git clone https://github.com/OSGeo/proj.4.git \
|
||||
&& cd proj.4 \
|
||||
&& ./autogen.sh \
|
||||
&& ./configure --prefix=/usr \
|
||||
&& make \
|
||||
&& make install \
|
||||
&& cd /proj.4/docs \
|
||||
&& make html \
|
||||
&& rm -rf /proj.4
|
||||
|
||||
RUN apt-get update \
|
||||
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
||||
libsqlite3-0 libtiff6 libcurl4 libcurl3-gnutls \
|
||||
wget ca-certificates \
|
||||
&& apt-get clean && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Put this first as this is rarely changing
|
||||
WORKDIR /usr/share/proj
|
||||
RUN wget --no-verbose --mirror https://cdn.proj.org/ || true
|
||||
RUN cd cdn.proj.org && rm -fv *.js *.css *.html favicon* && mv * .. && cd .. && rmdir cdn.proj.org
|
||||
WORKDIR /
|
||||
|
||||
COPY --from=builder /build/usr/share/proj/ /usr/share/proj/
|
||||
COPY --from=builder /build/usr/include/ /usr/include/
|
||||
COPY --from=builder /build/usr/bin/ /usr/bin/
|
||||
COPY --from=builder /build/usr/lib/ /usr/lib/
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
Preparing a PROJ.4 Release
|
||||
==========================
|
||||
|
||||
1) Update the version number in configure.ac (in AC_INIT()).
|
||||
|
||||
1a) Update the version number in PROJ_BUILD_VERSION in CMakeLists.txt
|
||||
1b) Update the version number in doc/source/conf.py
|
||||
1c) Update version numbers in man pages in man/man1/ and man/man3/
|
||||
|
||||
2) Update the version number in proj_api.h (#define PJ_VERSION).
|
||||
|
||||
2a) Update PROJ_VERSION_MAJOR, PROJ_VERSION_MINOR and PROJ_VERSION_PATCH
|
||||
in src/proj.h
|
||||
|
||||
3) Update the version number, and date in src/pj_release.c.
|
||||
|
||||
4) Update the version number in the -version-info definition in
|
||||
src/Makefile.am. It consists of "current:revision:age".
|
||||
|
||||
4a) Increment PROJ_BUILD_VERSION in CMakeLists.txt to follow
|
||||
libtool versioning
|
||||
|
||||
- If the library source code has changed at all since the last update,
|
||||
then increment revision (c:r:a becomes c:r+1:a).
|
||||
|
||||
- If any interfaces have been added, removed, or changed since the last
|
||||
update, increment current, and set revision to 0.
|
||||
|
||||
- If any interfaces have been added since the last public release, then
|
||||
increment age.
|
||||
|
||||
- If any interfaces have been removed since the last public release, then
|
||||
set age to 0.
|
||||
|
||||
4.5) Run "autogen.sh" (hopefully on the same machine it was last run on)
|
||||
|
||||
5) Add a note to the ChangeLog that a new release is being issued, and what
|
||||
the release number is.
|
||||
|
||||
6) Update NEWS file with summary of release changes.
|
||||
|
||||
7) Update the proj.spec file for the new version:
|
||||
- PACKAGE_VERSION
|
||||
- Source0
|
||||
- %setup line
|
||||
- rm -rf line
|
||||
|
||||
8) If this is a major release, prepare a branch.
|
||||
|
||||
git checkout -b 5.0
|
||||
|
||||
9) Tag the release
|
||||
|
||||
git tag 5.0.0
|
||||
|
||||
10) Do a "make dist-all" in the proj root directory. After some grinding
|
||||
this should result in files like proj-4.4.3.tar.gz and proj-4.4.3.zip
|
||||
being created. These are full source distributions.
|
||||
|
||||
11) Put these in the proj ftp area on /osgeo/download/proj on
|
||||
download.osgeo.org. This can be done via scp using a command like the
|
||||
following.
|
||||
|
||||
scp proj-4.4.3.{tar.gz,zip} warmerdam@download.osgeo.org:/osgeo/download/proj
|
||||
|
||||
12) Announce the new release on the PROJ.4 and MetaCRS mailing lists.
|
||||
|
||||
13) Issue a new release report on GitHub:
|
||||
|
||||
https://github.com/OSGeo/proj.4/releases/new
|
||||
|
||||
NOTES:
|
||||
|
||||
o Information about preparing binary releases, and RPMs should be formalized.
|
||||
o A "beta" release step should likely be incorporated.
|
||||
@@ -1,229 +0,0 @@
|
||||
# Preparing a PROJ Release
|
||||
|
||||
Preparing a PROJ release is a three-step process. Before the actual release is
|
||||
published we want to issue one or more release candidates to ensure that the
|
||||
code is in fact ready to be released. That is step one. Step two starts when a
|
||||
release candidate has been selected for promotion to final release. Step three
|
||||
updates version numbers in the master branch to avoid confusion between
|
||||
released code and code still in development.
|
||||
|
||||
The three phases are described below.
|
||||
|
||||
## 1 Release candidate
|
||||
|
||||
At least one release candidate is necessary before the final release is
|
||||
published. In case more than one release candidate is needed most steps below
|
||||
can be skipped depending on what prompted the release candidate 1+n. Steps 1.6
|
||||
and 1.7 are mandatory for all release candidates, otherwise it will in most
|
||||
cases only be necessary to update the NEWS section (1.3).
|
||||
|
||||
Release candidates should be released about a week before the final release is
|
||||
scheduled. When preparing major version releases it may be wise to issue the
|
||||
release candidate earlier than that.
|
||||
|
||||
When a release candidate has not prompted any request for changes in 48 hours,
|
||||
a motion for promotion to final release should be issued on the PROJ mailing
|
||||
list. The PROJ PSC guidelines describes the rules for passing a motion.
|
||||
|
||||
### 1.1 Update ABI version numbers
|
||||
|
||||
In case of a un-planned maintenance release, make sure that version numbers are
|
||||
properly updated: see 3.1
|
||||
|
||||
For each release version, increment PROJ_SOVERSION in CMakeLists.txt if the
|
||||
ABI is not backwards compatible, i.e. any interfaces have been removed, or
|
||||
changed since the last release. See also:
|
||||
<https://community.kde.org/Policies/Binary_Compatibility_Issues_With_C%2B%2B>
|
||||
|
||||
*Commit the changes to master.*
|
||||
|
||||
### 1.2 Update man pages
|
||||
|
||||
Man pages are (mostly) automatically generated from the Sphinx docs. Follow
|
||||
these steps:
|
||||
|
||||
- Temporarily update `version` and `data_version` in `docs/source/conf.py`
|
||||
- run `scripts/update_man.sh`
|
||||
- Revert version number in `docs/source/conf.py`
|
||||
|
||||
The `update_man.sh` script builds the man pages and commits the update man pages
|
||||
to master.
|
||||
|
||||
### 1.3 Write release notes
|
||||
|
||||
Update `NEWS.md` with descriptions of the changes since the last release.
|
||||
Hopefully issues and pull requests that go into the new release have been
|
||||
properly tagged with the milestone for the current release.
|
||||
|
||||
`scripts/releasenotes.py` can be used to create a first draft of the release
|
||||
notes.
|
||||
|
||||
*Commit the changes to master.*
|
||||
|
||||
### 1.4 Update `CITATION.cff` and `CITATION`
|
||||
|
||||
Update the "version" and "date-released" fields in `CITATION.cff`. The
|
||||
"doi" does not need to be updated.
|
||||
|
||||
If needed, update the two instances of year in `CITATION`.
|
||||
|
||||
*Commit the changes to master.*
|
||||
|
||||
### 1.5 Update `PROJ_DATA.VERSION`
|
||||
|
||||
If the database references data from an updated PROJ-data package, update
|
||||
`PROJ_DATA.VERSION` in `data/sql/metadata.sql`.
|
||||
|
||||
*Commit the changes to master.*
|
||||
|
||||
### 1.6 Create maintenance branch
|
||||
|
||||
*Skip this step if you are preparing a patch release or RC2 and later.*
|
||||
|
||||
Create the branch:
|
||||
|
||||
```sh
|
||||
git branch x.y
|
||||
```
|
||||
|
||||
where `x` is the major version number and `y` is the minor version number. Bug
|
||||
fixes found in the release candidates should be pushed to master and
|
||||
subsequently cherry-picked to the maintenance branch.
|
||||
|
||||
*Push branch upstream.*
|
||||
|
||||
### 1.7 Prepare and upload archives
|
||||
|
||||
Checkout the GitHub repo to an isolated local directory to package files only
|
||||
tracked in git. Then, run CMake and build source distributions:
|
||||
|
||||
```sh
|
||||
BRANCH_NAME=master
|
||||
git clone --depth 1 --branch $BRANCH_NAME \
|
||||
https://github.com/OSGeo/PROJ.git PROJ-$BRANCH_NAME
|
||||
cd PROJ-$BRANCH_NAME
|
||||
mkdir _build && cd _build
|
||||
cmake -D BUILD_TESTING=OFF ..
|
||||
cmake --build . --target dist
|
||||
```
|
||||
|
||||
Rename the archives and generate MD5 sum files:
|
||||
|
||||
```sh
|
||||
mv proj-x.y.z.tar.gz proj-x.y.zRCn.tar.gz
|
||||
mv proj-x.y.z.zip proj-x.y.zRCn.zip
|
||||
md5 proj-x.y.zRCn.tar.gz > proj-x.y.zRCn.tar.gz.md5
|
||||
md5 proj-x.y.zRCn.zip > proj-x.y.zRCn.zip.md5
|
||||
```
|
||||
|
||||
Upload to the OSGeo download server:
|
||||
|
||||
```sh
|
||||
scp proj-x.y.zRCn.* warmerdam@upload.osgeo.org:/osgeo/download/proj
|
||||
```
|
||||
|
||||
Adjust version numbers and usernames accordingly.
|
||||
|
||||
### 1.8 Announce the release candidate
|
||||
|
||||
Announce the release candidate on the PROJ mailing list.
|
||||
|
||||
### 1.9 Promotion to final release
|
||||
|
||||
When you are confident that the latest release candidate is ready for promotion
|
||||
to final release a motion for promotion should be issued on the PROJ mailing
|
||||
list. Allow for a minimum of 48 hours for voting time.
|
||||
|
||||
## 2 Final release
|
||||
|
||||
Barring a successful promotion process we can proceed with the final release.
|
||||
|
||||
### 2.1 Prepare and upload archives
|
||||
|
||||
See step 1.6 above. Do not rename the archives with RC postfixes.
|
||||
|
||||
|
||||
### 2.2 Update the STABLE_BRANCH repository variable
|
||||
|
||||
Go to https://github.com/OSGeo/PROJ/settings/variables/actions/STABLE_BRANCH
|
||||
and update the value to be x.y
|
||||
|
||||
### 2.3 Update website
|
||||
|
||||
- Add the release notes from `NEWS.md` to `docs/source/news.rst`
|
||||
|
||||
These vim substitutions are helpful when converting NEWS.md to rst:
|
||||
|
||||
```sh
|
||||
:s!(\#\(\d\{4}\))!(`\#\1 <https://github.com/OSGeo/PROJ/issues/\1>`_)!
|
||||
```
|
||||
|
||||
- Update download links in `docs/source/download.rst`
|
||||
|
||||
*Commit the changes to master and cherry-pick into maintenance branch.*
|
||||
|
||||
When pushed upstream the website will be update to the current version.
|
||||
|
||||
### 2.4 Tag the release
|
||||
|
||||
Tag the release with:
|
||||
|
||||
```sh
|
||||
git tag -a -m "Create tag x.y.z" x.y.z
|
||||
git push --tags
|
||||
```
|
||||
|
||||
### 2.5 Check the GitHub Zeonodo integration
|
||||
|
||||
Go to https://zenodo.org/account/settings/github/ and check that the OSGeo/PROJ
|
||||
repository is ON so that the creation of the GitHub release triggers the
|
||||
creation of a corresponding Zenodo record.
|
||||
|
||||
### 2.6 Prepare the release on GitHub
|
||||
|
||||
When the new tag is pushed upstream GitHub picks up that a new release has been
|
||||
issued. Update the new release on <https://github.com/OSGeo/PROJ/releases> with
|
||||
the release notes from `NEWS.md` and add the prepared source distribution archives
|
||||
to the release (otherwise GitHub will just package the entire repository - we
|
||||
don't want that).
|
||||
|
||||
### 2.7 Announce the new release
|
||||
|
||||
The release should be announced on PROJ and MetaCRS mailing lists. Additionally
|
||||
the release announcement should be sent to <news_item@osgeo.org> which will add
|
||||
the announcement to osgeo.org and other OSGeo communication channels.
|
||||
|
||||
Make some noise on relevant social media.
|
||||
|
||||
## 3 Post final release
|
||||
|
||||
### 3.1 Update version numbers
|
||||
|
||||
PROJ uses [semantic versioning](http://semver.org/). Depending on the changes
|
||||
in the release will be either a major, minor or patch release. Update the
|
||||
version numbers in the files.
|
||||
|
||||
- src/proj.h: Update PROJ_VERSION_MAJOR, PROJ_VERSION_MINOR and
|
||||
PROJ_VERSION_PATCH.
|
||||
- src/release.cpp: Update date to the scheduled release date.
|
||||
- CMakeLists.txt: Update proj_version()
|
||||
- docs/source/conf.py: Update version number
|
||||
|
||||
*Commit changes. Either to master or maintenance branch depending on the nature
|
||||
of the release.*
|
||||
|
||||
### 3.2 Documentation
|
||||
|
||||
Edit the Sphinx configuration docs/source/conf.py with these changes:
|
||||
|
||||
- Set "version" to the major project version, e.g. "9.2"
|
||||
- Set "release" to the full project version, e.g. "9.2.1"
|
||||
- Set "data_version" to the PROJ-data version
|
||||
- Set "today_date = date(Y, M, D)" using the release date
|
||||
- set "github_version" to the maintenance branch label, e.g. "9.2"
|
||||
|
||||
HTML and PDF documentation is built using ReadTheDocs, which supports multiple
|
||||
versions. Versions are based on branch labels, e.g. "9.2". To modify settings,
|
||||
registered users must first log in. To add a version, go to
|
||||
<https://readthedocs.org/projects/osgeo-proj/versions/> and click "Activate"
|
||||
next to the maintenance branch label.
|
||||
@@ -1,16 +1,182 @@
|
||||
Basic Installation
|
||||
==================
|
||||
|
||||
These are generic installation instructions. See details online at
|
||||
https://proj.org/install.html
|
||||
These are generic installation instructions.
|
||||
|
||||
The `configure' shell script attempts to guess correct values for
|
||||
various system-dependent variables used during compilation. It uses
|
||||
those values to create a `Makefile' in each directory of the package.
|
||||
It may also create one or more `.h' files containing system-dependent
|
||||
definitions. Finally, it creates a shell script `config.status' that
|
||||
you can run in the future to recreate the current configuration, a file
|
||||
`config.cache' that saves the results of its tests to speed up
|
||||
reconfiguring, and a file `config.log' containing compiler output
|
||||
(useful mainly for debugging `configure').
|
||||
|
||||
PROJ can be built using a modern C/C++ compiler with CMake. From the source
|
||||
directory, use the following commands to configure, build and install PROJ:
|
||||
If you need to do unusual things to compile the package, please try
|
||||
to figure out how `configure' could check whether to do them, and mail
|
||||
diffs or instructions to the address given in the `README' so they can
|
||||
be considered for the next release. If at some point `config.cache'
|
||||
contains results you don't want to keep, you may remove or edit it.
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
cmake ..
|
||||
cmake --build .
|
||||
cmake --build . --target install
|
||||
The file `configure.in' is used to create `configure' by a program
|
||||
called `autoconf'. You only need `configure.in' if you want to change
|
||||
it or regenerate `configure' using a newer version of `autoconf'.
|
||||
|
||||
The simplest way to compile this package is:
|
||||
|
||||
1. `cd' to the directory containing the package's source code and type
|
||||
`./configure' to configure the package for your system. If you're
|
||||
using `csh' on an old version of System V, you might need to type
|
||||
`sh ./configure' instead to prevent `csh' from trying to execute
|
||||
`configure' itself.
|
||||
|
||||
Running `configure' takes awhile. While running, it prints some
|
||||
messages telling which features it is checking for.
|
||||
|
||||
2. Type `make' to compile the package.
|
||||
|
||||
3. Optionally, type `make check' to run any self-tests that come with
|
||||
the package.
|
||||
|
||||
4. Type `make install' to install the programs and any data files and
|
||||
documentation.
|
||||
|
||||
5. You can remove the program binaries and object files from the
|
||||
source code directory by typing `make clean'. To also remove the
|
||||
files that `configure' created (so you can compile the package for
|
||||
a different kind of computer), type `make distclean'. There is
|
||||
also a `make maintainer-clean' target, but that is intended mainly
|
||||
for the package's developers. If you use it, you may have to get
|
||||
all sorts of other programs in order to regenerate files that came
|
||||
with the distribution.
|
||||
|
||||
Compilers and Options
|
||||
=====================
|
||||
|
||||
Some systems require unusual options for compilation or linking that
|
||||
the `configure' script does not know about. You can give `configure'
|
||||
initial values for variables by setting them in the environment. Using
|
||||
a Bourne-compatible shell, you can do that on the command line like
|
||||
this:
|
||||
CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
|
||||
|
||||
Or on systems that have the `env' program, you can do it like this:
|
||||
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
|
||||
|
||||
Compiling For Multiple Architectures
|
||||
====================================
|
||||
|
||||
You can compile the package for more than one kind of computer at the
|
||||
same time, by placing the object files for each architecture in their
|
||||
own directory. To do this, you must use a version of `make' that
|
||||
supports the `VPATH' variable, such as GNU `make'. `cd' to the
|
||||
directory where you want the object files and executables to go and run
|
||||
the `configure' script. `configure' automatically checks for the
|
||||
source code in the directory that `configure' is in and in `..'.
|
||||
|
||||
If you have to use a `make' that does not supports the `VPATH'
|
||||
variable, you have to compile the package for one architecture at a time
|
||||
in the source code directory. After you have installed the package for
|
||||
one architecture, use `make distclean' before reconfiguring for another
|
||||
architecture.
|
||||
|
||||
Installation Names
|
||||
==================
|
||||
|
||||
By default, `make install' will install the package's files in
|
||||
`/usr/local/bin', `/usr/local/man', etc. You can specify an
|
||||
installation prefix other than `/usr/local' by giving `configure' the
|
||||
option `--prefix=PATH'.
|
||||
|
||||
You can specify separate installation prefixes for
|
||||
architecture-specific files and architecture-independent files. If you
|
||||
give `configure' the option `--exec-prefix=PATH', the package will use
|
||||
PATH as the prefix for installing programs and libraries.
|
||||
Documentation and other data files will still use the regular prefix.
|
||||
|
||||
In addition, if you use an unusual directory layout you can give
|
||||
options like `--bindir=PATH' to specify different values for particular
|
||||
kinds of files. Run `configure --help' for a list of the directories
|
||||
you can set and what kinds of files go in them.
|
||||
|
||||
If the package supports it, you can cause programs to be installed
|
||||
with an extra prefix or suffix on their names by giving `configure' the
|
||||
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
|
||||
|
||||
Optional Features
|
||||
=================
|
||||
|
||||
Some packages pay attention to `--enable-FEATURE' options to
|
||||
`configure', where FEATURE indicates an optional part of the package.
|
||||
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
|
||||
is something like `gnu-as' or `x' (for the X Window System). The
|
||||
`README' should mention any `--enable-' and `--with-' options that the
|
||||
package recognizes.
|
||||
|
||||
For packages that use the X Window System, `configure' can usually
|
||||
find the X include and library files automatically, but if it doesn't,
|
||||
you can use the `configure' options `--x-includes=DIR' and
|
||||
`--x-libraries=DIR' to specify their locations.
|
||||
|
||||
Specifying the System Type
|
||||
==========================
|
||||
|
||||
There may be some features `configure' can not figure out
|
||||
automatically, but needs to determine by the type of host the package
|
||||
will run on. Usually `configure' can figure that out, but if it prints
|
||||
a message saying it can not guess the host type, give it the
|
||||
`--host=TYPE' option. TYPE can either be a short name for the system
|
||||
type, such as `sun4', or a canonical name with three fields:
|
||||
CPU-COMPANY-SYSTEM
|
||||
|
||||
See the file `config.sub' for the possible values of each field. If
|
||||
`config.sub' isn't included in this package, then this package doesn't
|
||||
need to know the host type.
|
||||
|
||||
If you are building compiler tools for cross-compiling, you can also
|
||||
use the `--target=TYPE' option to select the type of system they will
|
||||
produce code for and the `--build=TYPE' option to select the type of
|
||||
system on which you are compiling the package.
|
||||
|
||||
Sharing Defaults
|
||||
================
|
||||
|
||||
If you want to set default values for `configure' scripts to share,
|
||||
you can create a site shell script called `config.site' that gives
|
||||
default values for variables like `CC', `cache_file', and `prefix'.
|
||||
`configure' looks for `PREFIX/share/config.site' if it exists, then
|
||||
`PREFIX/etc/config.site' if it exists. Or, you can set the
|
||||
`CONFIG_SITE' environment variable to the location of the site script.
|
||||
A warning: not all `configure' scripts look for a site script.
|
||||
|
||||
Operation Controls
|
||||
==================
|
||||
|
||||
`configure' recognizes the following options to control how it
|
||||
operates.
|
||||
|
||||
`--cache-file=FILE'
|
||||
Use and save the results of the tests in FILE instead of
|
||||
`./config.cache'. Set FILE to `/dev/null' to disable caching, for
|
||||
debugging `configure'.
|
||||
|
||||
`--help'
|
||||
Print a summary of the options to `configure', and exit.
|
||||
|
||||
`--quiet'
|
||||
`--silent'
|
||||
`-q'
|
||||
Do not print messages saying which checks are being made. To
|
||||
suppress all normal output, redirect it to `/dev/null' (any error
|
||||
messages will still be shown).
|
||||
|
||||
`--srcdir=DIR'
|
||||
Look for the package's source code in directory DIR. Usually
|
||||
`configure' can determine that directory automatically.
|
||||
|
||||
`--version'
|
||||
Print the version of Autoconf used to generate the `configure'
|
||||
script, and exit.
|
||||
|
||||
`configure' also accepts some other, not widely useful, options.
|
||||
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
SUBDIRS = src man nad jniwrap cmake test
|
||||
|
||||
EXTRA_DIST = makefile.vc nmake.opt CMakeLists.txt
|
||||
|
||||
pkgconfigdir = $(libdir)/pkgconfig
|
||||
pkgconfig_DATA = proj.pc
|
||||
|
||||
AUTOMAKE_OPTIONS = dist-zip
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
|
||||
|
||||
README: README.md
|
||||
fgrep -v "[](https://coveralls.io/github/OSGeo/PROJ?branch=master)
|
||||
[](https://github.com/OSGeo/PROJ/actions/workflows/codeql.yml)
|
||||
[](https://gitter.im/OSGeo/proj.4)
|
||||
[](http://lists.osgeo.org/mailman/listinfo/proj)
|
||||
[](CODE_OF_CONDUCT.md)
|
||||
[](https://github.com/OSGeo/PROJ/releases)
|
||||
[](https://doi.org/10.5281/zenodo.5884394)
|
||||
[](https://travis-ci.org/OSGeo/proj.4)
|
||||
[](https://ci.appveyor.com/project/OSGeo/proj-4)
|
||||
[](https://coveralls.io/github/OSGeo/proj.4?branch=master)
|
||||
|
||||
PROJ is a generic coordinate transformation software, that transforms
|
||||
coordinates from one coordinate reference system (CRS) to another.
|
||||
This includes cartographic projections as well as geodetic transformations.
|
||||
|
||||
For more information on the PROJ project please see the web page at:
|
||||
For more information on the PROJ.4 project please see the web page at:
|
||||
|
||||
<https://proj.org/>
|
||||
http://proj4.org/
|
||||
|
||||
The PROJ mailing list can be found at:
|
||||
The PROJ.4 mailing list can be found at:
|
||||
|
||||
<https://lists.osgeo.org/mailman/listinfo/proj/>
|
||||
http://lists.maptools.org/mailman/listinfo/proj
|
||||
|
||||
See the NEWS.md file for changes between versions.
|
||||
See the NEWS file for changes between versions.
|
||||
|
||||
The following command line utilities are included in the PROJ package:
|
||||
|
||||
- `proj`: for cartographic projection of geodetic coordinates.
|
||||
- `cs2cs`: for transformation from one CRS to another CRS.
|
||||
- `geod`: for geodesic (great circle) computations.
|
||||
- `cct`: for generic Coordinate Conversions and Transformations.
|
||||
- `gie`: the Geospatial Integrity Investigation Environment.
|
||||
- `projinfo`: for geodetic object and coordinate operation queries.
|
||||
- `projsync`: for synchronizing PROJ datum and transformation support data.
|
||||
- proj, for cartographic projection of geodetic coordinates
|
||||
- cs2cs, for transformation from one CRS to another CRS.
|
||||
- geod, for geodesic (great circle) computations.
|
||||
- cct, for generic Coordinate Conversions and Transformations.
|
||||
- gie, the Geospatial Integrity Investigation Environment.
|
||||
|
||||
> More information on the utilities can be found on the [PROJ website](https://proj.org/apps).
|
||||
|
||||
## Installation
|
||||
### Building with CMake
|
||||
|
||||
Consult the [Installation](https://proj.org/install.html) page of the official
|
||||
documentation.
|
||||
For builds on the master branch, [install.rst](https://github.com/OSGeo/PROJ/blob/master/docs/source/install.rst)
|
||||
might be more up-to-date.
|
||||
cd proj
|
||||
mkdir build
|
||||
cd build
|
||||
cmake ..
|
||||
cmake --build .
|
||||
|
||||
## Distribution files and format
|
||||
On Windows, one may need to specify generator:
|
||||
|
||||
cmake -G "Visual Studio 15 2017" ..
|
||||
|
||||
Tests are run with
|
||||
|
||||
ctest
|
||||
|
||||
The test suite requires that the proj-datumgrid package is installed
|
||||
in `PROJ_LIB`.
|
||||
|
||||
### Building on Unix/Linux
|
||||
|
||||
FSF's configuration procedure is used to ease installation of the
|
||||
PROJ system.
|
||||
|
||||
The default destination path prefix for installed files is `/usr/local`.
|
||||
Results from the installation script will be placed into subdirectories
|
||||
`bin`, `include`, `lib`, `man/man1` and `man/man3`.
|
||||
If this default path prefix is proper, then execute:
|
||||
|
||||
./configure
|
||||
|
||||
If another path prefix is required, then execute:
|
||||
|
||||
./configure --prefix=/my/path
|
||||
|
||||
In either case, the directory of the prefix path must exist and be
|
||||
writable by the installer.
|
||||
|
||||
After executing configure, execute:
|
||||
|
||||
make
|
||||
make install
|
||||
|
||||
The install target will create, if necessary, all required sub-directories.
|
||||
|
||||
Tests are run with
|
||||
|
||||
make check
|
||||
|
||||
The test suite requires that the proj-datumgrid package is installed
|
||||
in `PROJ_LIB`.
|
||||
|
||||
### Building on Windows with NMAKE
|
||||
|
||||
PROJ can be built with Microsoft Visual C/C++ using the `makefile.vc`
|
||||
in the `PROJ` directory. First edit the `PROJ\nmake.opt` and
|
||||
modify the `INSTDIR` value at the top to point to the directory
|
||||
where the PROJ tree shall be installed.
|
||||
If you want to install into `C:\PROJ`, it can remain unchanged.
|
||||
Then use the `makefile.vc` to build the software e.g.:
|
||||
|
||||
C:\> cd proj
|
||||
C:\PROJ> nmake /f makefile.vc
|
||||
C:\PROJ> nmake /f makefile.vc install-all
|
||||
|
||||
Note that you have to have the VC++ environment variables, and path
|
||||
setup properly. This may involve running the `VCVARS32.BAT`
|
||||
script out of the Visual C++ tree.
|
||||
|
||||
The `makefile.vc` builds `proj.exe`, `proj.dll` and `proj.lib`.
|
||||
|
||||
On Windows you have to set the `PROJ_LIB` environment variable to make
|
||||
sure that PROJ can find the resource files that it needs. For the
|
||||
default install directory you can set `PROJ_LIB` with:
|
||||
|
||||
C:\> set PROJ_LIB=C:\PROJ\share
|
||||
|
||||
|
||||
### Distribution files and format
|
||||
|
||||
Sources are distributed in one or more files. The principle elements
|
||||
of the system are stored in a compressed tar file named `proj-x.y.z.tar.gz` where
|
||||
"x" will indicate the major release number, "y" indicates the minor release
|
||||
number, and "z" indicates the patch number of the release.
|
||||
of the system are in a compress tar file named `proj-x.y.z.tar.gz` where
|
||||
"x" will indicate major release number, "y" indicates minor release
|
||||
number and "z" indicates the patch number of the release.
|
||||
|
||||
In addition to the PROJ software package, distributions of datum
|
||||
conversion grid files and PROJ parameter files are also available.
|
||||
The grid package is distributed under the name `proj-data-x.y.zip`,
|
||||
where "x" is the major release version and "y" is the minor release
|
||||
version numbers. The resource packages can be downloaded from the
|
||||
[PROJ website](https://proj.org/download.html).
|
||||
The grid package is distributed under the name `proj-datumgrid-x.y.zip`,
|
||||
where "x" is the major release version and "y" the minor release
|
||||
version numbers. Similarly regional packages are distributed. The
|
||||
regional packages contain resources that are not essential to the
|
||||
functionality of PROJ but still of value to users in the region
|
||||
specific to the package. All grids that were in proj-datumgrids-1.6
|
||||
remain in proj-datumgrids-1.7; the regional datumgrid files contain
|
||||
grids for datums not previously supported (prior to PROJ 5.0.0).
|
||||
|
||||
More info on the contents of the proj-data package can be
|
||||
The resource packages can be downloaded from the PROJ.4 website.
|
||||
|
||||
More info on the contents of the various resource packages can be
|
||||
found at the
|
||||
[PROJ-data GitHub repository](https://github.com/OSGeo/PROJ-data).
|
||||
[proj-datumgrid GitHub repository](https://github.com/OSGeo/proj-datumgrid).
|
||||
|
||||
The resource file packages should be extracted to `PROJ_LIB`
|
||||
where PROJ will find them after installation. The default location of
|
||||
`PROJ_LIB` on UNIX-based systems is `/usr/local/share/proj` but it may
|
||||
be changed to a different directory. On Windows you have to define
|
||||
`PROJ_LIB` yourself.
|
||||
|
||||
As an alternative to installing the data package on the local system,
|
||||
the resource files can be retrieved on-the-fly from the
|
||||
[PROJ CDN](https://cdn.proj.org/).
|
||||
A [network-enabled](https://proj.org/usage/network.html) PROJ build, will
|
||||
automatically fetch resource files that are not present locally from the CDN.
|
||||
|
||||
## Citing PROJ in publications
|
||||
|
||||
See [CITATION](CITATION)
|
||||
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
platform:
|
||||
- x64
|
||||
- x86
|
||||
|
||||
environment:
|
||||
matrix:
|
||||
|
||||
# Does not work
|
||||
# VS 2008
|
||||
# - BUILD_TYPE: cmake
|
||||
# VS_VERSION: Visual Studio 9 2008
|
||||
|
||||
# VS 2010
|
||||
- BUILD_TYPE: cmake
|
||||
VS_VERSION: Visual Studio 10
|
||||
|
||||
# VS 2012
|
||||
- BUILD_TYPE: cmake
|
||||
VS_VERSION: Visual Studio 11
|
||||
|
||||
# VS 2013
|
||||
- BUILD_TYPE: cmake
|
||||
VS_VERSION: Visual Studio 12
|
||||
|
||||
# VS 2015
|
||||
- BUILD_TYPE: cmake
|
||||
VS_VERSION: Visual Studio 14
|
||||
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||
|
||||
# VS 2017
|
||||
- BUILD_TYPE: cmake
|
||||
VS_VERSION: Visual Studio 15
|
||||
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||
|
||||
- BUILD_TYPE: nmake
|
||||
|
||||
shallow_clone: true
|
||||
|
||||
build_script:
|
||||
- echo build_script
|
||||
- if "%BUILD_TYPE%" == "nmake" if "%platform%" == "x86" call "%VS120COMNTOOLS%\..\..\VC\vcvarsall.bat"
|
||||
- if "%BUILD_TYPE%" == "nmake" if "%platform%" == "x64" "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64
|
||||
- if "%BUILD_TYPE%" == "nmake" if "%platform%" == "x64" call "%VS120COMNTOOLS%\..\..\VC\vcvarsall.bat" x86_amd64
|
||||
- if "%BUILD_TYPE%" == "nmake" nmake /f makefile.vc
|
||||
- if "%BUILD_TYPE%" == "nmake" nmake /f makefile.vc install-all
|
||||
- if "%BUILD_TYPE%" == "nmake" if "%platform%" == "x64" cd src
|
||||
- if "%BUILD_TYPE%" == "nmake" if "%platform%" == "x64" nmake /f makefile.vc multistresstest.exe
|
||||
# Disabled for now as it scales badly
|
||||
# - if "%BUILD_TYPE%" == "nmake" if "%platform%" == "x64" multistresstest.exe
|
||||
- if "%BUILD_TYPE%" == "cmake" if "%platform%" == "x64" SET VS_FULL=%VS_VERSION% Win64
|
||||
- if "%BUILD_TYPE%" == "cmake" if "%platform%" == "x86" SET VS_FULL=%VS_VERSION%
|
||||
- if "%BUILD_TYPE%" == "cmake" echo "%VS_FULL%"
|
||||
# warning C4706: assignment within conditional expression
|
||||
- if "%BUILD_TYPE%" == "cmake" cmake -G "%VS_FULL%" . -DCMAKE_BUILD_TYPE=Release -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE=../bin -DBUILD_LIBPROJ_SHARED=ON -DCMAKE_C_FLAGS="/W4 /wd4706 /WX /D_CRT_SECURE_NO_WARNINGS"
|
||||
- if "%BUILD_TYPE%" == "cmake" cmake --build . --config Release
|
||||
|
||||
test_script:
|
||||
- echo test_script
|
||||
- if "%BUILD_TYPE%" == "cmake" set PROJ_LIB=C:\projects\proj-4\nad
|
||||
- if "%BUILD_TYPE%" == "nmake" set PROJ_LIB=C:\PROJ\SHARE
|
||||
- cd %PROJ_LIB%
|
||||
- curl -O http://download.osgeo.org/proj/proj-datumgrid-1.6.zip
|
||||
- curl -O http://download.osgeo.org/proj/vdatum/egm96_15/egm96_15.gtx
|
||||
- curl -O -k https://raw.githubusercontent.com/OSGeo/proj-datumgrid/master/BETA2007.gsb
|
||||
- 7z e -aoa -y proj-datumgrid-1.6.zip
|
||||
- dir
|
||||
- cd ..
|
||||
- dir
|
||||
- cd bin
|
||||
- echo "Contents of current directory:"
|
||||
- dir
|
||||
- echo "Contents of ..\test\gie:"
|
||||
- dir ..\test\gie
|
||||
- echo "Contents of PROJ_LIB " %PROJ_LIB%
|
||||
- dir %PROJ_LIB%
|
||||
- gie.exe ..\test\gie\*.gie ..\test\gigs\*.gie
|
||||
|
||||
deploy: off
|
||||
Executable
+41
@@ -0,0 +1,41 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Autotools boostrapping script
|
||||
#
|
||||
giveup()
|
||||
{
|
||||
echo
|
||||
echo " Something went wrong, giving up!"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
OSTYPE=`uname -s`
|
||||
|
||||
for libtoolize in glibtoolize libtoolize; do
|
||||
LIBTOOLIZE=`which $libtoolize 2>/dev/null`
|
||||
if test "$LIBTOOLIZE"; then
|
||||
break;
|
||||
fi
|
||||
done
|
||||
|
||||
#AMFLAGS="--add-missing --copy --force-missing"
|
||||
AMFLAGS="--add-missing --copy"
|
||||
if test "$OSTYPE" = "IRIX" -o "$OSTYPE" = "IRIX64"; then
|
||||
AMFLAGS=$AMFLAGS" --include-deps";
|
||||
fi
|
||||
|
||||
echo "Running aclocal"
|
||||
aclocal -I ./m4 || giveup
|
||||
echo "Running autoheader"
|
||||
autoheader || giveup
|
||||
echo "Running libtoolize"
|
||||
$LIBTOOLIZE --force --copy || giveup
|
||||
echo "Running automake"
|
||||
automake $AMFLAGS # || giveup
|
||||
echo "Running autoconf"
|
||||
autoconf || giveup
|
||||
|
||||
echo "======================================"
|
||||
echo "Now you are ready to run './configure'"
|
||||
echo "======================================"
|
||||
@@ -1,7 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# All Debian-like before_install scripts starts by running this
|
||||
# "global" before_install script.
|
||||
|
||||
sudo apt-get update -qq
|
||||
sudo apt-get install -qq python3-pip python3-setuptools
|
||||
@@ -1,9 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# All platform-specific before_install scripts starts by running this
|
||||
# "global" before_install script.
|
||||
|
||||
# Configure Python pip
|
||||
python3 -m pip config --user set global.progress_bar off
|
||||
python3 -m pip install --user --upgrade pip
|
||||
python3 -m pip install --user jsonschema pyyaml pytest
|
||||
@@ -1,34 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
CLANG_VERSION=20
|
||||
|
||||
apt-get update -y
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
||||
autoconf automake libtool make cmake ccache pkg-config sqlite3 tar zip curl ca-certificates jq \
|
||||
python3-pytest python3-ruamel.yaml python3-jsonschema \
|
||||
python3-clang-$CLANG_VERSION clang-$CLANG_VERSION libclang-rt-$CLANG_VERSION-dev \
|
||||
libsqlite3-dev libgtest-dev \
|
||||
libtiff-dev libwebp-dev libzstd-dev \
|
||||
libcurl4-openssl-dev libnghttp2-dev libidn2-dev librtmp-dev libssh-dev \
|
||||
libpsl-dev libssl-dev libkrb5-dev comerr-dev libldap2-dev libbrotli-dev \
|
||||
nlohmann-json3-dev libgtest-dev
|
||||
|
||||
cd "$WORK_DIR"
|
||||
|
||||
if test -f "$WORK_DIR/ccache.tar.gz"; then
|
||||
echo "Restoring ccache..."
|
||||
(cd $HOME && tar xzf "$WORK_DIR/ccache.tar.gz")
|
||||
else
|
||||
mkdir -p $HOME/.ccache
|
||||
fi
|
||||
|
||||
ccache -M 500M
|
||||
|
||||
# -fno-use-cxa-atexit is needed to build with -coverage
|
||||
CC="clang-$CLANG_VERSION" CXX="clang++-$CLANG_VERSION" CFLAGS="-fsanitize=address -fno-use-cxa-atexit" CXXFLAGS="-fsanitize=address -fno-use-cxa-atexit" LDFLAGS="-fsanitize=address" ./ci/install.sh
|
||||
|
||||
echo "Saving ccache..."
|
||||
rm -f "$WORK_DIR/ccache.tar.gz"
|
||||
(cd $HOME && tar czf "$WORK_DIR/ccache.tar.gz" .ccache)
|
||||
@@ -1,41 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
sudo apt-get update
|
||||
|
||||
DEBIAN_FRONTEND=noninteractive sudo apt-get install -y --no-install-recommends \
|
||||
g++ cmake make sqlite3 libsqlite3-dev libtiff-dev libcurl4-openssl-dev jq \
|
||||
clang-tools libfindbin-libs-perl
|
||||
|
||||
NPROC=$(nproc)
|
||||
echo "NPROC=${NPROC}"
|
||||
export MAKEFLAGS="-j ${NPROC}"
|
||||
|
||||
mkdir csa_build
|
||||
cd csa_build
|
||||
|
||||
scan-build -o scanbuildoutput -plist -v cmake ..
|
||||
|
||||
scan-build -o scanbuildoutput -sarif -v -enable-checker alpha.unix.cstring.OutOfBounds,alpha.unix.cstring.BufferOverlap,optin.cplusplus.VirtualCall,optin.cplusplus.UninitializedObject make
|
||||
|
||||
rm -f filtered_scanbuild.txt
|
||||
files=$(find scanbuildoutput -name "*.sarif")
|
||||
for f in $files; do
|
||||
jq '.runs[].results[] | (if .locations[].physicalLocation.fileLocation.uri | (index("_generated_parser") ) then empty else { "uri": .locations[].physicalLocation.fileLocation.uri, "msg": .message.text, "location": .codeFlows[-1].threadFlows[-1].locations[-1] } end)' < $f > tmp.txt
|
||||
if [ -s tmp.txt ]; then
|
||||
echo "Errors from $f: "
|
||||
cat $f
|
||||
echo ""
|
||||
cat tmp.txt >> filtered_scanbuild.txt
|
||||
fi
|
||||
rm -f tmp.txt
|
||||
done
|
||||
if [ -s filtered_scanbuild.txt ]; then
|
||||
echo ""
|
||||
echo ""
|
||||
echo "========================"
|
||||
echo "Summary of errors found:"
|
||||
cat filtered_scanbuild.txt
|
||||
/bin/false
|
||||
fi
|
||||
@@ -1,30 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
mkdir packages
|
||||
|
||||
CONDA_PLAT=""
|
||||
if grep -q "windows" <<< "$GHA_CI_PLATFORM"; then
|
||||
CONDA_PLAT="win"
|
||||
ARCH="64"
|
||||
fi
|
||||
|
||||
if grep -q "ubuntu" <<< "$GHA_CI_PLATFORM"; then
|
||||
CONDA_PLAT="linux"
|
||||
ARCH="64"
|
||||
fi
|
||||
|
||||
if grep -q "macos-14" <<< "$GHA_CI_PLATFORM"; then
|
||||
CONDA_PLAT="osx"
|
||||
ARCH="arm64"
|
||||
elif grep -q "macos-15-intel" <<< "$GHA_CI_PLATFORM"; then
|
||||
CONDA_PLAT="osx"
|
||||
ARCH="64"
|
||||
fi
|
||||
|
||||
rattler-build build \
|
||||
--recipe-dir recipe \
|
||||
--output-dir packages \
|
||||
--variant-config ".ci_support/${CONDA_PLAT}_${ARCH}_.yaml"
|
||||
conda install -c ./packages proj
|
||||
|
||||
#projinfo -s NAD27 -t EPSG:4269 --area "USA - Missouri"
|
||||
@@ -1,14 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
conda update -n base -c defaults conda -y
|
||||
conda install rattler-build ninja compilers yq -y
|
||||
|
||||
pwd
|
||||
ls
|
||||
git clone https://github.com/conda-forge/proj.4-feedstock.git
|
||||
|
||||
cd proj.4-feedstock
|
||||
|
||||
yq -y -i '.source = {"path": "../../../PROJ"} | .build.number = 2112' recipe/recipe.yaml
|
||||
|
||||
ls recipe
|
||||
@@ -1,25 +0,0 @@
|
||||
# Use the official Emscripten SDK image.
|
||||
FROM emscripten/emsdk:4.0.5
|
||||
|
||||
# Set non-interactive frontend for package installations
|
||||
ENV DEBIAN_FRONTEND="noninteractive"
|
||||
|
||||
# --- Install System Dependencies ---
|
||||
RUN apt-get update && \
|
||||
apt-get install -y \
|
||||
sqlite3 \
|
||||
ninja-build && \
|
||||
# Clean up apt cache to reduce image size
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ENV BUILD_DIR="/build"
|
||||
RUN mkdir -p ${BUILD_DIR}
|
||||
RUN chmod ugo+rwx ${BUILD_DIR}
|
||||
|
||||
# Copy the build script into the container
|
||||
COPY build_wasm.sh /scripts/build_wasm.sh
|
||||
RUN chmod +x /scripts/build_wasm.sh
|
||||
|
||||
# Set the main command to execute the build script
|
||||
WORKDIR /build
|
||||
CMD ["/scripts/build_wasm.sh"]
|
||||
@@ -1,365 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
###############################################################################
|
||||
# $Id$
|
||||
#
|
||||
# Project: PROJ
|
||||
# Purpose: Build with emscripten compiler
|
||||
# Author: Javier Jimenez Shaw
|
||||
#
|
||||
###############################################################################
|
||||
# Copyright (c) 2025 Javier Jimenez Shaw
|
||||
###############################################################################
|
||||
|
||||
# Exit immediately if a command exits with a non-zero status.
|
||||
set -e
|
||||
|
||||
# --- Configuration Variables ---
|
||||
# Use environment variables from Dockerfile or runtime.
|
||||
PROJ_REPO=${PROJ_REPO:-https://github.com/OSGeo/PROJ.git}
|
||||
|
||||
INSTALL_DIR=${INSTALL_DIR:-/build/install}
|
||||
BUILD_DIR=${BUILD_DIR:-/build}
|
||||
PROJ_SRC_DIR="${BUILD_DIR}/proj_src"
|
||||
PROJ_BUILD_WASM_DIR="${BUILD_DIR}/proj_build_wasm"
|
||||
DEPS_SRC_DIR="${BUILD_DIR}/deps_src"
|
||||
TEMP_BUILD_DIR="${BUILD_DIR}/temp_build"
|
||||
|
||||
# Clean build directories to ensure a fresh build
|
||||
rm -rf ${TEMP_BUILD_DIR}
|
||||
# We keep DEPS_SRC_DIR to cache downloads
|
||||
mkdir -p ${PROJ_SRC_DIR}
|
||||
mkdir -p ${DEPS_SRC_DIR}
|
||||
mkdir -p ${TEMP_BUILD_DIR}
|
||||
|
||||
# Emscripten flags for Pthreads (multithreading support for synchronous emscripten_fetch)
|
||||
# and some other.
|
||||
EM_PTHREADS_FLAGS="-pthread -matomics -mbulk-memory -fexceptions"
|
||||
|
||||
# --- Utility Functions ---
|
||||
|
||||
function log_step {
|
||||
echo ""
|
||||
echo "--- $1 ---"
|
||||
echo ""
|
||||
}
|
||||
|
||||
function configure_cmake {
|
||||
# Use emcmake wrapper to correctly configure the toolchain
|
||||
emcmake cmake "$@" \
|
||||
-G Ninja \
|
||||
-D CMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
|
||||
-D CMAKE_BUILD_TYPE=Release \
|
||||
-D BUILD_SHARED_LIBS=OFF \
|
||||
-D CMAKE_C_FLAGS="${EM_PTHREADS_FLAGS}" \
|
||||
-D CMAKE_CXX_FLAGS="${EM_PTHREADS_FLAGS}" \
|
||||
-D CMAKE_FIND_ROOT_PATH="${INSTALL_DIR}" \
|
||||
-D CMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY \
|
||||
-D CMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
|
||||
-D CMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY
|
||||
}
|
||||
|
||||
function build_and_install {
|
||||
cmake --build . --parallel $(nproc)
|
||||
cmake --install .
|
||||
}
|
||||
|
||||
# --- Preparation ---
|
||||
|
||||
log_step "1. Setting up Environment and Directories"
|
||||
|
||||
if [ "${FORCE_REBUILD}" = "1" ]; then
|
||||
echo "!!! FORCE_REBUILD is set. Existing libraries will be ignored and rebuilt. !!!"
|
||||
rm -rf "${INSTALL_DIR}"/*
|
||||
fi
|
||||
|
||||
if [ -f "${PROJ_SRC_DIR}/CMakeLists.txt" ]; then
|
||||
echo "Using content from ${PROJ_SRC_DIR} to build PROJ"
|
||||
elif [ -n "${PROJ_TAG}" ]; then
|
||||
echo "Using PROJ from ${PROJ_REPO} : ${PROJ_TAG}"
|
||||
else
|
||||
echo "Please set PROJ_TAG env variable, or populate ${PROJ_SRC_DIR}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Installation target: ${INSTALL_DIR}"
|
||||
|
||||
# --- 2. Build and Install Zlib (Dependency) ---
|
||||
|
||||
log_step "2. Building and Installing Zlib"
|
||||
|
||||
if [ "${FORCE_REBUILD}" != "1" ] && [ -f "${INSTALL_DIR}/lib/libz.a" ] && [ -f "${INSTALL_DIR}/include/zlib.h" ]; then
|
||||
echo "Zlib library and header already installed. Skipping."
|
||||
else
|
||||
ZLIB_DIR="${DEPS_SRC_DIR}/zlib-1.3.1"
|
||||
cd ${DEPS_SRC_DIR}
|
||||
if [ ! -f "v1.3.1.zip" ]; then
|
||||
wget -nc "https://github.com/madler/zlib/archive/refs/tags/v1.3.1.zip"
|
||||
fi
|
||||
unzip -qo v1.3.1.zip
|
||||
cd ${ZLIB_DIR}
|
||||
|
||||
# Zlib defines both SHARED and STATIC targets with the same output name (libz.a)
|
||||
# on Emscripten, causing Ninja errors.
|
||||
# Fixed in https://github.com/madler/zlib/commit/b3907c2cd99908259c71fab6754f88e25d370fed
|
||||
# Instead of renaming, we simply remove the SHARED target definitions entirely.
|
||||
sed -i '/add_library(zlib SHARED/d' CMakeLists.txt
|
||||
sed -i '/target_include_directories(zlib /d' CMakeLists.txt
|
||||
sed -i '/set_target_properties(zlib /d' CMakeLists.txt
|
||||
sed -i 's/install(TARGETS zlib zlibstatic/install(TARGETS zlibstatic/g' CMakeLists.txt
|
||||
|
||||
rm -rf build_wasm
|
||||
mkdir -p build_wasm
|
||||
cd build_wasm
|
||||
|
||||
configure_cmake .. -DZLIB_BUILD_EXAMPLES=OFF
|
||||
build_and_install
|
||||
|
||||
# Handle case where Zlib installs as libzlibstatic.a instead of libz.a
|
||||
if [ -f "${INSTALL_DIR}/lib/libzlibstatic.a" ]; then
|
||||
echo "Detected libzlibstatic.a, copying to libz.a..."
|
||||
cp "${INSTALL_DIR}/lib/libzlibstatic.a" "${INSTALL_DIR}/lib/libz.a"
|
||||
fi
|
||||
fi
|
||||
|
||||
# --- 3. Build and Install LibTIFF (Dependency) ---
|
||||
|
||||
log_step "3. Building and Installing LibTIFF"
|
||||
|
||||
if [ "${FORCE_REBUILD}" != "1" ] && [ -f "${INSTALL_DIR}/lib/libtiff.a" ] && [ -f "${INSTALL_DIR}/include/tiff.h" ]; then
|
||||
echo "LibTIFF library and header already installed. Skipping."
|
||||
else
|
||||
TIFF_VERSION="4.7.0"
|
||||
TIFF_DIR="${DEPS_SRC_DIR}/tiff-${TIFF_VERSION}"
|
||||
cd ${DEPS_SRC_DIR}
|
||||
|
||||
if [ ! -f "tiff-${TIFF_VERSION}.tar.gz" ]; then
|
||||
wget -nc "https://download.osgeo.org/libtiff/tiff-${TIFF_VERSION}.tar.gz"
|
||||
fi
|
||||
tar -xzf tiff-${TIFF_VERSION}.tar.gz
|
||||
cd ${TIFF_DIR}
|
||||
|
||||
rm -rf build_wasm
|
||||
mkdir -p build_wasm
|
||||
cd build_wasm
|
||||
|
||||
# Configure minimal LibTIFF: No JPEG, No LZMA, No WebP, No ZSTD.
|
||||
# Only Zlib support enabled.
|
||||
configure_cmake .. \
|
||||
-D tiff-tools=OFF \
|
||||
-D tiff-tests=OFF \
|
||||
-D tiff-contrib=OFF \
|
||||
-D tiff-docs=OFF \
|
||||
-D jpeg=OFF \
|
||||
-D zlib=ON \
|
||||
-D lzma=OFF \
|
||||
-D zstd=OFF \
|
||||
-D webp=OFF \
|
||||
-D jbig=OFF \
|
||||
-D CMAKE_PREFIX_PATH="${INSTALL_DIR}"
|
||||
|
||||
build_and_install
|
||||
fi
|
||||
|
||||
# --- 4. Build and Install SQLite3 (Dependency) ---
|
||||
|
||||
log_step "4. Building and Installing SQLite3"
|
||||
|
||||
# Check if both the library AND the header exist before skipping
|
||||
if [ "${FORCE_REBUILD}" != "1" ] && [ -f "${INSTALL_DIR}/lib/libsqlite3.a" ] && [ -f "${INSTALL_DIR}/include/sqlite3.h" ]; then
|
||||
echo "SQLite3 static library and header already found. Skipping build."
|
||||
else
|
||||
SQLITE_VERSION="3440200"
|
||||
SQLITE_AMALGAMATION_DIR="${DEPS_SRC_DIR}/sqlite3_amalgamation"
|
||||
mkdir -p ${SQLITE_AMALGAMATION_DIR}
|
||||
|
||||
cd ${SQLITE_AMALGAMATION_DIR}
|
||||
if [ ! -f "sqlite-amalgamation-${SQLITE_VERSION}.zip" ]; then
|
||||
wget "https://sqlite.org/2023/sqlite-amalgamation-${SQLITE_VERSION}.zip"
|
||||
fi
|
||||
unzip -qo sqlite-amalgamation-${SQLITE_VERSION}.zip
|
||||
# Move files to the parent directory for a flat structure
|
||||
mv sqlite-amalgamation-${SQLITE_VERSION}/* .
|
||||
rmdir sqlite-amalgamation-${SQLITE_VERSION}
|
||||
|
||||
# Step 4a: Compile SQLite3 to an object file (.o)
|
||||
emcc sqlite3.c \
|
||||
-o ${TEMP_BUILD_DIR}/sqlite3.o \
|
||||
-c \
|
||||
-O3 \
|
||||
-DSQLITE_THREADSAFE=1 \
|
||||
-D_REENTRANT \
|
||||
${EM_PTHREADS_FLAGS}
|
||||
|
||||
# Step 4b: Create the static library archive (.a) from the object file
|
||||
emmake ar rcs ${INSTALL_DIR}/lib/libsqlite3.a ${TEMP_BUILD_DIR}/sqlite3.o
|
||||
|
||||
# Copy the header to the install directory
|
||||
mkdir -p ${INSTALL_DIR}/include
|
||||
# Force copy to overwrite any broken symlinks from previous runs
|
||||
rm -f ${INSTALL_DIR}/include/sqlite3.h
|
||||
cp ${SQLITE_AMALGAMATION_DIR}/sqlite3.h ${INSTALL_DIR}/include/sqlite3.h
|
||||
fi
|
||||
|
||||
|
||||
# --- 5. Download PROJ Source if needed ---
|
||||
|
||||
log_step "5. Downloading PROJ Source"
|
||||
|
||||
if [ ! -f "${PROJ_SRC_DIR}/CMakeLists.txt" ]; then
|
||||
git clone --depth 1 --branch ${PROJ_TAG} ${PROJ_REPO} ${PROJ_SRC_DIR}
|
||||
fi
|
||||
|
||||
cd ${PROJ_SRC_DIR}
|
||||
|
||||
# --- 6. Build and Install PROJ ---
|
||||
# This step uses the NATIVE sqlite3 binary (from the Docker image)
|
||||
# to generate proj.db, which is then embedded into libproj.a.
|
||||
|
||||
log_step "6. Building and Installing PROJ"
|
||||
|
||||
if [ "${FORCE_REBUILD}" != "1" ] && [ -f "${INSTALL_DIR}/lib/libproj.a" ]; then
|
||||
echo "PROJ already built. Skipping."
|
||||
else
|
||||
# If forcing a rebuild, clean the PROJ build directory too to be safe
|
||||
if [ "${FORCE_REBUILD}" = "1" ]; then
|
||||
echo "Cleaning PROJ build directory due to FORCE_REBUILD..."
|
||||
rm -rf ${PROJ_BUILD_WASM_DIR}
|
||||
fi
|
||||
|
||||
mkdir -p ${PROJ_BUILD_WASM_DIR}
|
||||
cd ${PROJ_BUILD_WASM_DIR}
|
||||
|
||||
# Configure PROJ
|
||||
configure_cmake ${PROJ_SRC_DIR} \
|
||||
-D BUILD_TESTING=OFF \
|
||||
-D BUILD_APPS=OFF \
|
||||
-D ENABLE_TIFF=ON \
|
||||
-D ENABLE_CURL=OFF \
|
||||
-D ENABLE_EMSCRIPTEN_FETCH=ON \
|
||||
-D EXE_SQLITE3=/usr/bin/sqlite3 \
|
||||
-D SQLite3_INCLUDE_DIR="${INSTALL_DIR}/include" \
|
||||
-D SQLite3_LIBRARY="${INSTALL_DIR}/lib/libsqlite3.a" \
|
||||
-D TIFF_INCLUDE_DIR="${INSTALL_DIR}/include" \
|
||||
-D TIFF_LIBRARY_RELEASE="${INSTALL_DIR}/lib/libtiff.a"
|
||||
|
||||
build_and_install
|
||||
fi
|
||||
|
||||
# --- 6.5 Create C Wrappers ---
|
||||
# Helper functions to extract some info from PROJ in C and C++
|
||||
log_step "6.5 Creating C Wrapper Functions"
|
||||
|
||||
WRAPPER_FILE="${TEMP_BUILD_DIR}/proj_wrappers.cpp"
|
||||
WRAPPER_OBJ_FILE="${TEMP_BUILD_DIR}/proj_wrappers.o"
|
||||
|
||||
DDD=`date +"%Y-%m-%dT%H:%M:%S%z" -u`
|
||||
cat << EOF > ${WRAPPER_FILE}
|
||||
#include "proj.h"
|
||||
#include "math.h"
|
||||
|
||||
#include "projapps_lib.h"
|
||||
|
||||
#include <emscripten/bind.h>
|
||||
#include <emscripten/val.h>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
void trampoline(PJ_PROJINFO_LOG_LEVEL level, const char *msg, void *user_data) {
|
||||
if (!user_data) return;
|
||||
const emscripten::val* js_callback = reinterpret_cast<const emscripten::val*>(user_data);
|
||||
(*js_callback)(level, std::string(msg));
|
||||
}
|
||||
|
||||
int projinfo_wrapper(uintptr_t ctx_ptr, emscripten::val jsArgs, emscripten::val jsCallback) {
|
||||
std::vector<std::string> args = emscripten::vecFromJSArray<std::string>(jsArgs);
|
||||
std::vector<char*> argv;
|
||||
for (auto& s : args) {
|
||||
argv.push_back(&s[0]);
|
||||
}
|
||||
PJ_CONTEXT *ctx = reinterpret_cast<PJ_CONTEXT *>(ctx_ptr);
|
||||
return projinfo(ctx, args.size(), argv.data(), &trampoline, &jsCallback);
|
||||
}
|
||||
|
||||
EMSCRIPTEN_BINDINGS(proj_module) {
|
||||
emscripten::value_object<PJ_INFO>("PJ_INFO")
|
||||
.field("major", &PJ_INFO::major)
|
||||
.field("minor", &PJ_INFO::minor)
|
||||
.field("patch", &PJ_INFO::patch)
|
||||
.field("release", std::function<std::string(const PJ_INFO&)>([](const PJ_INFO& i) {
|
||||
return std::string(i.release); }),
|
||||
std::function<void(PJ_INFO&, std::string)>([](PJ_INFO& i, std::string v) {}))
|
||||
.field("version", std::function<std::string(const PJ_INFO&)>([](const PJ_INFO& i) {
|
||||
return std::string(i.version); }),
|
||||
std::function<void(PJ_INFO&, std::string)>([](PJ_INFO& i, std::string v) {}));
|
||||
emscripten::function("proj_info_ems", &proj_info);
|
||||
|
||||
emscripten::enum_<PJ_PROJINFO_LOG_LEVEL>("PJ_PROJINFO_LOG_LEVEL")
|
||||
.value("INFO", PJ_PROJINFO_LOG_LEVEL_INFO)
|
||||
.value("WARN", PJ_PROJINFO_LOG_LEVEL_WARN)
|
||||
.value("ERR", PJ_PROJINFO_LOG_LEVEL_ERR);
|
||||
|
||||
emscripten::function("projinfo_ems", &projinfo_wrapper, emscripten::allow_raw_pointers());
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
|
||||
const char* get_compilation_date() {
|
||||
return "$DDD" ;
|
||||
}
|
||||
|
||||
int get_ptr_size() {
|
||||
return sizeof(void*);
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
# Compile the wrapper into an object file
|
||||
emcc ${WRAPPER_FILE} \
|
||||
-c \
|
||||
-o ${WRAPPER_OBJ_FILE} \
|
||||
-I ${INSTALL_DIR}/include \
|
||||
${EM_PTHREADS_FLAGS}
|
||||
|
||||
# --- 7. Final WASM Module Generation ---
|
||||
# Link all the static libraries and the wrapper object file
|
||||
# into the final JS/WASM module and expose functions.
|
||||
|
||||
log_step "7. Generating Final WASM Module (projModule.js + .wasm)"
|
||||
|
||||
FINAL_LIBS="${INSTALL_DIR}/lib/libproj.a \
|
||||
${INSTALL_DIR}/lib/libsqlite3.a \
|
||||
${INSTALL_DIR}/lib/libtiff.a \
|
||||
${INSTALL_DIR}/lib/libz.a \
|
||||
${WRAPPER_OBJ_FILE}"
|
||||
|
||||
# include all exported symbols
|
||||
echo -e "_malloc\n_free\n_get_compilation_date\n_get_ptr_size" > ${INSTALL_DIR}/exported_symbols.txt
|
||||
grep "^proj_\|^geod_" ${PROJ_SRC_DIR}/scripts/reference_exported_symbols.txt | grep -v "(" | sed 's/^/_/' >> ${INSTALL_DIR}/exported_symbols.txt
|
||||
head ${INSTALL_DIR}/exported_symbols.txt
|
||||
|
||||
emcc -v ${FINAL_LIBS} \
|
||||
-o ${INSTALL_DIR}/projModule.js \
|
||||
-O3 \
|
||||
-lembind \
|
||||
-s STACK_OVERFLOW_CHECK=1 \
|
||||
-s STACK_SIZE=5MB \
|
||||
-s NO_DISABLE_EXCEPTION_CATCHING \
|
||||
-s FETCH=1 \
|
||||
-s USE_PTHREADS=1 \
|
||||
-s FETCH_SUPPORT_INDEXEDDB=0 \
|
||||
-s WASM=1 \
|
||||
-s MODULARIZE=1 \
|
||||
-s EXPORT_NAME="'ProjModuleFactory'" \
|
||||
-s FORCE_FILESYSTEM=1 \
|
||||
-s ALLOW_MEMORY_GROWTH=1 \
|
||||
-s EXPORTED_RUNTIME_METHODS="[ccall, cwrap, FS, HEAP8, HEAP16, HEAP32, HEAPF64, lengthBytesUTF8, stringToUTF8, stringToNewUTF8, UTF8ToString, getValue, setValue]" \
|
||||
-s EXPORTED_FUNCTIONS=@${INSTALL_DIR}/exported_symbols.txt \
|
||||
${EM_PTHREADS_FLAGS}
|
||||
|
||||
log_step "BUILD SUCCESSFUL!"
|
||||
|
||||
echo "ls -l ${INSTALL_DIR}"
|
||||
ls -l ${INSTALL_DIR}
|
||||
|
||||
echo "Artifacts are installed in ${INSTALL_DIR}"
|
||||
@@ -1,252 +0,0 @@
|
||||
const assert = require("node:assert/strict");
|
||||
const ProjModuleFactory = require("./projModule.js");
|
||||
|
||||
// Small class to help to manage memory.
|
||||
class Keeper {
|
||||
constructor(proj, debug = false) {
|
||||
if (!proj) {
|
||||
throw new Error("proj cannot be empty in class Keeper");
|
||||
}
|
||||
|
||||
this.proj = proj;
|
||||
this.debug = debug;
|
||||
this.to_free = [];
|
||||
this.to_destroy = [];
|
||||
};
|
||||
|
||||
add(ptr, proj_destroy = true) {
|
||||
if (proj_destroy) {
|
||||
if (this.debug)
|
||||
console.debug("add destroy", ptr);
|
||||
this.to_destroy.push(ptr);
|
||||
} else {
|
||||
if (this.debug)
|
||||
console.debug("add free", ptr);
|
||||
this.to_free.push(ptr);
|
||||
}
|
||||
return ptr;
|
||||
};
|
||||
|
||||
call(name, ...args) {
|
||||
const ptr = this.proj[name](...args);
|
||||
return this.add(ptr, true);
|
||||
}
|
||||
|
||||
malloc(ptrSize) {
|
||||
const ptr = this.proj._malloc(ptrSize);
|
||||
return this.add(ptr, false);
|
||||
};
|
||||
|
||||
string(str) {
|
||||
const ptr = this.proj.stringToNewUTF8(str);
|
||||
return this.add(ptr, false);
|
||||
};
|
||||
|
||||
destroy() {
|
||||
this.to_destroy.reverse();
|
||||
for (const p of this.to_destroy) {
|
||||
if (this.debug)
|
||||
console.debug("call destroy", p);
|
||||
this.proj._proj_destroy(p);
|
||||
}
|
||||
this.to_destroy = [];
|
||||
|
||||
this.to_free.reverse();
|
||||
for (const p of this.to_free) {
|
||||
if (this.debug)
|
||||
console.debug("call free", p);
|
||||
this.proj._free(p);
|
||||
}
|
||||
this.to_free = [];
|
||||
};
|
||||
};
|
||||
|
||||
const tests = {
|
||||
test_proj_info : (proj) => {
|
||||
const r = proj.proj_info_ems();
|
||||
const compilation_date =
|
||||
proj.UTF8ToString(proj._get_compilation_date());
|
||||
// Print it for visual inspection
|
||||
console.log(r);
|
||||
console.log(compilation_date);
|
||||
assert(compilation_date.length > 5);
|
||||
assert(r.major >= 9);
|
||||
if (r.major === 9) {
|
||||
assert(r.minor >= 8);
|
||||
}
|
||||
assert(typeof r.minor === "number")
|
||||
assert(typeof r.patch === "number")
|
||||
const rel = `${r.major}.${r.minor}.${r.patch}`;
|
||||
assert(r.release.includes(rel));
|
||||
assert(r.version.includes(rel));
|
||||
},
|
||||
|
||||
test_projinfo : (proj) => {
|
||||
function get_projinfo(args) {
|
||||
let msg = "";
|
||||
const myCallback = (level, message) => { msg += message; };
|
||||
const rc = proj.projinfo_ems(0, args, myCallback);
|
||||
return [ rc, msg ];
|
||||
} {
|
||||
let [rc, msg] = get_projinfo([ "EPSG:32633", "-o", "WKT1:GDAL" ]);
|
||||
assert.equal(rc, 0);
|
||||
assert.ok(msg.includes('PROJCS["WGS 84 / UTM zone 33N"'));
|
||||
assert.ok(msg.includes('AUTHORITY["EPSG","32633"]'));
|
||||
} {let [rc, msg] = get_projinfo([ "EPSG:32633", "-o", "invalid" ]);
|
||||
assert.equal(rc, 1);
|
||||
assert.ok(msg.includes('Unrecognized value '));} {
|
||||
let [rc, msg] = get_projinfo(
|
||||
[ "EPSG:4326", "EPSG:32633", "-o", "proj", "--single-line" ]);
|
||||
assert.equal(rc, 0);
|
||||
assert.ok(msg.includes('Candidate operations'));
|
||||
assert.ok(
|
||||
msg.includes(('+proj=pipeline +step +proj=axisswap +order=2,1 ',
|
||||
'+step +proj=unitconvert +xy_in=deg +xy_out=rad ',
|
||||
'+step +proj=utm +zone=33 +ellps=WGS84')));
|
||||
}
|
||||
},
|
||||
|
||||
test_convert : (proj) => {
|
||||
let ctx = proj._proj_context_create();
|
||||
if (ctx === 0) {
|
||||
throw new Error("proj_context_create returned NULL");
|
||||
}
|
||||
const sourceCRS = proj.stringToNewUTF8("EPSG:4326");
|
||||
const targetCRS = proj.stringToNewUTF8("EPSG:32633");
|
||||
const P = proj._proj_create_crs_to_crs(ctx, sourceCRS, targetCRS, 0);
|
||||
if (P === 0) {
|
||||
throw new Error("proj_create_crs_to_crs returned NULL.");
|
||||
}
|
||||
// PJ_COORD is 4 doubles: (x, y, z, t) or (lon, lat, z, t)
|
||||
// We need 4 * 8 = 32 bytes of memory
|
||||
let coordPtr = proj._malloc(32);
|
||||
const coordView = new Float64Array(proj.HEAPF64.buffer, coordPtr, 4);
|
||||
coordView[0] = 52;
|
||||
coordView[1] = 13.5;
|
||||
coordView[2] = 0;
|
||||
coordView[3] = Infinity; // HUGE_VAL
|
||||
|
||||
let res = proj._proj_trans_array(P, 1, 1, coordPtr);
|
||||
if (res != 0) {
|
||||
let msgPtr = proj._proj_context_errno_string(ctx, res);
|
||||
let msg = proj.UTF8ToString(msgPtr);
|
||||
throw new Error(`_proj_trans_array error ${msg}`);
|
||||
}
|
||||
assert(Math.abs(coordView[0] - 397027.0183) < 1e-3);
|
||||
assert(Math.abs(coordView[1] - 5762100.4897) < 1e-3);
|
||||
|
||||
proj._free(coordPtr);
|
||||
proj._proj_destroy(P);
|
||||
proj._free(sourceCRS);
|
||||
proj._free(targetCRS);
|
||||
proj._proj_destroy(ctx);
|
||||
},
|
||||
|
||||
test_axes : (proj) => {
|
||||
let ctx = proj._proj_context_create();
|
||||
if (ctx === 0) {
|
||||
throw new Error("proj_context_create returned NULL");
|
||||
}
|
||||
function get_str(ptr) {
|
||||
const strPtr = proj.getValue(ptr, 'i32'); // It's a pointer (i32)
|
||||
const str = proj.UTF8ToString(strPtr);
|
||||
return str;
|
||||
}
|
||||
function get_axes(crs) {
|
||||
let keep = new Keeper(proj);
|
||||
try {
|
||||
// TODO support compound CRS
|
||||
|
||||
const ptrSize = proj._get_ptr_size();
|
||||
assert.ok(ptrSize == 4 || ptrSize == 8);
|
||||
const doubleSize = 8; // Doubles are 8 bytes
|
||||
const sourceCRS = keep.string(crs);
|
||||
const P_crs = keep.call("_proj_create", ctx, sourceCRS);
|
||||
const P_cs =
|
||||
keep.add(proj._proj_crs_get_coordinate_system(ctx, P_crs));
|
||||
const axis_count = proj._proj_cs_get_axis_count(ctx, P_cs);
|
||||
const outNamePtr = keep.malloc(ptrSize);
|
||||
const outAbbrevPtr = keep.malloc(ptrSize);
|
||||
const outDirectionPtr = keep.malloc(ptrSize);
|
||||
const outConvFactorPtr = keep.malloc(doubleSize);
|
||||
const outUnitPtr = keep.malloc(ptrSize);
|
||||
res = {
|
||||
name : [],
|
||||
abbr : [],
|
||||
direction : [],
|
||||
conv_factor : [],
|
||||
unit : []
|
||||
};
|
||||
for (let i = 0; i < axis_count; i++) {
|
||||
const r = proj._proj_cs_get_axis_info(
|
||||
ctx, P_cs, i, outNamePtr, outAbbrevPtr, outDirectionPtr,
|
||||
outConvFactorPtr, outUnitPtr, 0, 0);
|
||||
if (r != 1) {
|
||||
throw new Error("error calling proj_cs_get_axis_info");
|
||||
}
|
||||
|
||||
res.name.push(get_str(outNamePtr));
|
||||
res.abbr.push(get_str(outAbbrevPtr));
|
||||
res.direction.push(get_str(outDirectionPtr));
|
||||
res.conv_factor.push(
|
||||
proj.getValue(outConvFactorPtr, 'double'));
|
||||
res.unit.push(get_str(outUnitPtr));
|
||||
}
|
||||
} finally {
|
||||
keep.destroy();
|
||||
}
|
||||
return res;
|
||||
}
|
||||
const ax4326 = get_axes("EPSG:4326");
|
||||
assert.deepEqual(ax4326, {
|
||||
name : [ 'Geodetic latitude', 'Geodetic longitude' ],
|
||||
abbr : [ 'Lat', 'Lon' ],
|
||||
direction : [ 'north', 'east' ],
|
||||
conv_factor : [ 0.017453292519943295, 0.017453292519943295 ],
|
||||
unit : [ 'degree', 'degree' ]
|
||||
});
|
||||
|
||||
const ax25833 = get_axes("EPSG:25833");
|
||||
assert.deepEqual(ax25833, {
|
||||
name : [ 'Easting', 'Northing' ],
|
||||
abbr : [ 'E', 'N' ],
|
||||
direction : [ 'east', 'north' ],
|
||||
conv_factor : [ 1, 1 ],
|
||||
unit : [ 'metre', 'metre' ]
|
||||
});
|
||||
|
||||
const ax3855 = get_axes("EPSG:3855");
|
||||
assert.deepEqual(ax3855, {
|
||||
name : [ 'Gravity-related height' ],
|
||||
abbr : [ 'H' ],
|
||||
direction : [ 'up' ],
|
||||
conv_factor : [ 1 ],
|
||||
unit : [ 'metre' ]
|
||||
});
|
||||
proj._proj_destroy(ctx);
|
||||
}
|
||||
};
|
||||
|
||||
if (typeof ProjModuleFactory === 'undefined') {
|
||||
console.error(
|
||||
"'ProjModuleFactory' is not defined. Have you loaded projModule.js.");
|
||||
process.exit(1);
|
||||
} else {
|
||||
ProjModuleFactory()
|
||||
.then(module => {
|
||||
proj = module;
|
||||
console.log("Starting tests");
|
||||
let counter = 0;
|
||||
for (let test of Object.keys(tests)) {
|
||||
console.log(`+++++ Running test "${test}"`)
|
||||
tests[test](proj);
|
||||
counter++;
|
||||
};
|
||||
console.log(`Number of tests run: ${counter}`)
|
||||
process.exit(0);
|
||||
})
|
||||
.catch(err => {
|
||||
console.error(`Tests failed: ${err}`);
|
||||
process.exit(1);
|
||||
});
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
dnf install -y cmake clang ccache ninja-build sqlite-devel libtiff-devel libcurl-devel diffutils wget
|
||||
# For this build, install nlohmann-json so that the "use external"
|
||||
# branch is tested; the other builds use the vendored copy.
|
||||
dnf install -y nlohmann-json-devel
|
||||
|
||||
cd "$WORK_DIR"
|
||||
|
||||
if test -f "$WORK_DIR/ccache.tar.gz"; then
|
||||
echo "Restoring ccache..."
|
||||
(cd $HOME && tar xzf "$WORK_DIR/ccache.tar.gz")
|
||||
fi
|
||||
|
||||
export CCACHE_CPP2=yes
|
||||
|
||||
ccache -M 500M
|
||||
ccache -s
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
echo "Build with -DEMBED_RESOURCE_FILES=ON"
|
||||
CC=clang CXX=clang++ cmake .. \
|
||||
-DEMBED_RESOURCE_FILES=ON -DUSE_CCACHE=ON -DPROJ_DB_CACHE_DIR=$HOME/.ccache ..
|
||||
make -j$(nproc)
|
||||
ctest -j$(nproc)
|
||||
|
||||
# Try EMBED_RESOURCE_DIRECTORY option
|
||||
wget https://raw.githubusercontent.com/OSGeo/PROJ-data/refs/heads/master/us_nga/us_nga_egm96_15.tif
|
||||
wget https://cdn.proj.org/fi_nls_ykj_etrs35fin.gpkg
|
||||
mkdir grids
|
||||
mv us_nga_egm96_15.tif grids
|
||||
mv fi_nls_ykj_etrs35fin.gpkg grids
|
||||
echo "Build with -DEMBED_RESOURCE_FILES=ON -DEMBED_RESOURCE_DIRECTORY=$PWD/grids"
|
||||
CC=clang CXX=clang++ cmake .. -DEMBED_RESOURCE_DIRECTORY=$PWD/grids
|
||||
make -j$(nproc)
|
||||
rm -rf data
|
||||
echo 49 2 0 | bin/cs2cs "WGS84 + EGM96 height" EPSG:4979
|
||||
echo 49 2 0 | bin/cs2cs "WGS84 + EGM96 height" EPSG:4979 | grep 44.643 >/dev/null || (echo "Expected 49dN 2dE 44.643 as a result" && /bin/false)
|
||||
echo 0 0 0 | bin/cct +init=ITRF2000:ITRF96
|
||||
echo 0 0 0 | bin/cct +init=ITRF2000:ITRF96 | grep 0.0067 >/dev/null || (echo "Expected 0.0067 0.0061 -0.0185 as a result" && /bin/false)
|
||||
echo 3432087 6995748 0 | bin/cct +proj=tinshift +file=fi_nls_ykj_etrs35fin.gpkg
|
||||
echo 3432087 6995748 0 | bin/cct +proj=tinshift +file=fi_nls_ykj_etrs35fin.gpkg | grep 431943.0905 >/dev/null || (echo "Expected 431943.0905 6992816.7826 0 as a result" && /bin/false)
|
||||
|
||||
echo "Build with -DEMBED_RESOURCE_FILES=ON -DEMBED_RESOURCE_DIRECTORY=$PWD/grids -DUSE_ONLY_EMBEDDED_RESOURCE_FILES=ON"
|
||||
CC=clang CXX=clang++ cmake .. -DEMBED_RESOURCE_DIRECTORY=$PWD/grids -DUSE_ONLY_EMBEDDED_RESOURCE_FILES=ON
|
||||
make -j$(nproc)
|
||||
rm -rf data
|
||||
echo 49 2 0 | bin/cs2cs "WGS84 + EGM96 height" EPSG:4979
|
||||
echo 49 2 0 | bin/cs2cs "WGS84 + EGM96 height" EPSG:4979 | grep 44.643 >/dev/null || (echo "Expected 49dN 2dE 44.643 as a result" && /bin/false)
|
||||
echo 0 0 0 | bin/cct +init=ITRF2000:ITRF96
|
||||
echo 0 0 0 | bin/cct +init=ITRF2000:ITRF96 | grep 0.0067 >/dev/null || (echo "Expected 0.0067 0.0061 -0.0185 as a result" && /bin/false)
|
||||
|
||||
cd ..
|
||||
|
||||
ccache -s
|
||||
|
||||
echo "Saving ccache..."
|
||||
rm -f "$WORK_DIR/ccache.tar.gz"
|
||||
(cd $HOME && tar czf "$WORK_DIR/ccache.tar.gz" .cache)
|
||||
-304
@@ -1,304 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
UNAME="$(uname)" || UNAME=""
|
||||
if test "x${NPROC}" = "x"; then
|
||||
if test "${UNAME}" = "Linux" ; then
|
||||
NPROC=$(nproc);
|
||||
elif test "${UNAME}" = "Darwin" ; then
|
||||
NPROC=$(sysctl -n hw.ncpu);
|
||||
fi
|
||||
if test "x${NPROC}" = "x"; then
|
||||
NPROC=2;
|
||||
fi
|
||||
fi
|
||||
echo "NPROC=${NPROC}"
|
||||
export MAKEFLAGS="-j ${NPROC}"
|
||||
|
||||
# Use ccache if it's available
|
||||
if command -v ccache &> /dev/null
|
||||
then
|
||||
USE_CCACHE=ON
|
||||
ccache -s
|
||||
else
|
||||
USE_CCACHE=OFF
|
||||
fi
|
||||
|
||||
# Ensure directory exists for PROJ_DB_CACHE_DIR
|
||||
mkdir -p $HOME/.ccache
|
||||
|
||||
if test "x${CMAKE_BUILD_TYPE}" = "x"; then
|
||||
CMAKE_BUILD_TYPE=Release
|
||||
fi
|
||||
|
||||
cmake --version
|
||||
|
||||
# For some odd reason the tar xzvf $TAR_FILENAME doesn't work on Travis-CI ...
|
||||
if test "$TRAVIS" = ""; then
|
||||
echo "Make dist tarball, and check consistency"
|
||||
mkdir build_dist
|
||||
cd build_dist
|
||||
cmake -D BUILD_TESTING=OFF ..
|
||||
make dist
|
||||
|
||||
TAR_FILENAME=$(ls *.tar.gz)
|
||||
TAR_DIRECTORY=$(basename $TAR_FILENAME .tar.gz)
|
||||
mkdir ../build_from_dist
|
||||
cd ../build_from_dist
|
||||
tar xvzf ../build_dist/$TAR_FILENAME
|
||||
|
||||
# continue build from dist tarball
|
||||
cd $TAR_DIRECTORY
|
||||
fi
|
||||
|
||||
# There's a nasty #define CS in a Solaris system header. Avoid being caught about that again
|
||||
CXXFLAGS="-DCS=do_not_use_CS_for_solaris_compat $CXXFLAGS"
|
||||
|
||||
echo "Build shared ${CMAKE_BUILD_TYPE} configuration from generated tarball"
|
||||
mkdir shared_build
|
||||
cd shared_build
|
||||
cmake \
|
||||
-D CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} \
|
||||
-D CMAKE_UNITY_BUILD=ON \
|
||||
-D CMAKE_COMPILE_WARNING_AS_ERROR=ON \
|
||||
-D USE_CCACHE=${USE_CCACHE} \
|
||||
${PROJ_CMAKE_BUILD_OPTIONS:-} \
|
||||
-D PROJ_DB_CACHE_DIR=$HOME/.ccache \
|
||||
-D BUILD_SHARED_LIBS=ON \
|
||||
-D BUILD_EXAMPLES=ON \
|
||||
-D CMAKE_INSTALL_PREFIX=/tmp/proj_shared_install_from_dist \
|
||||
..
|
||||
make
|
||||
|
||||
# Test adding non-official file to DB
|
||||
cp data/proj.db /tmp
|
||||
cat ../data/sql/transformations_czechia_extra.sql | sqlite3 /tmp/proj.db
|
||||
|
||||
if [ "$(uname)" == "Linux" -a -f lib/libproj.so ]; then
|
||||
if objdump -TC "lib/libproj.so" | grep "elf64-x86-64">/dev/null; then
|
||||
echo "Checking exported symbols..."
|
||||
cat $TRAVIS_BUILD_DIR/scripts/reference_exported_symbols.txt | sort > /tmp/reference_exported_symbols.txt
|
||||
$TRAVIS_BUILD_DIR/scripts/dump_exported_symbols.sh lib/libproj.so | sort > /tmp/got_symbols.txt
|
||||
diff -u /tmp/reference_exported_symbols.txt /tmp/got_symbols.txt || (echo "Difference(s) found in exported symbols. If intended, refresh scripts/reference_exported_symbols.txt with 'scripts/dump_exported_symbols.sh lib/libproj.so > scripts/reference_exported_symbols.txt'"; exit 1)
|
||||
fi
|
||||
fi
|
||||
|
||||
ctest --output-on-failure
|
||||
make install
|
||||
# find /tmp/proj_shared_install_from_dist
|
||||
$TRAVIS_BUILD_DIR/test/postinstall/test_cmake.sh /tmp/proj_shared_install_from_dist shared
|
||||
if [ "$BUILD_NAME" != "osx" ]; then
|
||||
# Fail on osx Conda with "autom4te: error: need GNU m4 1.4 or later: /Users/runner/miniforge3/conda-bld/autoconf_1746873780934/_build_env/bin/m4"
|
||||
$TRAVIS_BUILD_DIR/test/postinstall/test_autotools.sh /tmp/proj_shared_install_from_dist
|
||||
else
|
||||
echo "Skipping test_autotools.sh test for $BUILD_NAME"
|
||||
fi
|
||||
|
||||
# Test install and uninstall targets with DESTDIR
|
||||
make install DESTDIR=/tmp/destdir
|
||||
make uninstall DESTDIR=/tmp/destdir
|
||||
if [ ! -z "$(ls -A /tmp/destdir/tmp/proj_shared_install_from_dist)" ]; then
|
||||
echo "Directory /tmp/destdir/tmp/proj_shared_install_from_dist should be empty, but its content is:"
|
||||
find /tmp/destdir/tmp/proj_shared_install_from_dist
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Build static ${CMAKE_BUILD_TYPE} configuration from generated tarball"
|
||||
cd ..
|
||||
mkdir static_build
|
||||
cd static_build
|
||||
# Also test setting CMAKE_INSTALL_INCLUDEDIR/CMAKE_INSTALL_LIBDIR/CMAKE_INSTALL_BINDIR to absolute directories
|
||||
# and INSTALL_LEGACY_CMAKE_FILES=OFF (both are independent from static build particularities)
|
||||
cmake \
|
||||
-D CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} \
|
||||
-D CMAKE_COMPILE_WARNING_AS_ERROR=ON \
|
||||
-D USE_CCACHE=${USE_CCACHE} \
|
||||
-D PROJ_DB_CACHE_DIR=$HOME/.ccache \
|
||||
-D BUILD_SHARED_LIBS=OFF \
|
||||
-D INSTALL_LEGACY_CMAKE_FILES=OFF \
|
||||
-D CMAKE_INSTALL_PREFIX=/tmp/proj_static_install_from_dist \
|
||||
-D CMAKE_INSTALL_INCLUDEDIR=/tmp/proj_static_install_from_dist/include \
|
||||
-D CMAKE_INSTALL_LIBDIR=/tmp/proj_static_install_from_dist/lib \
|
||||
-D CMAKE_INSTALL_BINDIR=/tmp/proj_static_install_from_dist/bin \
|
||||
..
|
||||
make
|
||||
|
||||
ctest --output-on-failure
|
||||
make install
|
||||
# find /tmp/proj_static_install_from_dist
|
||||
$TRAVIS_BUILD_DIR/test/postinstall/test_cmake.sh /tmp/proj_static_install_from_dist static PROJ_CONFIG
|
||||
if [ "$BUILD_NAME" != "osx" ]; then
|
||||
# Fail on osx Conda with "autom4te: error: need GNU m4 1.4 or later: /Users/runner/miniforge3/conda-bld/autoconf_1746873780934/_build_env/bin/m4"
|
||||
$TRAVIS_BUILD_DIR/test/postinstall/test_autotools.sh /tmp/proj_static_install_from_dist static
|
||||
else
|
||||
echo "Skipping test_autotools.sh test for $BUILD_NAME"
|
||||
fi
|
||||
|
||||
# Re-run by unsetting CMAKE_INSTALL_INCLUDEDIR/CMAKE_INSTALL_LIBDIR/CMAKE_INSTALL_BINDIR
|
||||
# so that later test which involve renaming/moving the installation prefix work.
|
||||
cmake -UCMAKE_INSTALL_INCLUDEDIR -UCMAKE_INSTALL_LIBDIR -UCMAKE_INSTALL_BINDIR ..
|
||||
make install
|
||||
|
||||
echo "Run PROJJSON tests only with shared configuration"
|
||||
|
||||
export SCHEMA_FILENAME=/tmp/proj_shared_install_from_dist/share/proj/projjson.schema.json
|
||||
|
||||
validate_json(){
|
||||
if [ $(jsonschema --version) = "3.2.0" ]; then
|
||||
# workaround for this version, which does not validate UTF-8
|
||||
tr -cd '\11\12\15\40-\176' < $1 > tmp.ascii.json
|
||||
jsonschema -i tmp.ascii.json ${SCHEMA_FILENAME}
|
||||
else
|
||||
jsonschema -i $1 ${SCHEMA_FILENAME}
|
||||
fi
|
||||
ret=$?
|
||||
if [ $ret != 0 ]; then
|
||||
return $ret
|
||||
else
|
||||
echo "Valid!"
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
test_projjson(){
|
||||
printf "Testing PROJJSON output with $* ... "
|
||||
case "$1" in
|
||||
\+*)
|
||||
/tmp/proj_shared_install_from_dist/bin/projinfo "$@" -o PROJJSON -q > out.json ;;
|
||||
*)
|
||||
/tmp/proj_shared_install_from_dist/bin/projinfo $* -o PROJJSON -q > out.json ;;
|
||||
esac
|
||||
validate_json out.json
|
||||
ret=$?
|
||||
if [ $ret != 0 ]; then
|
||||
return $ret
|
||||
fi
|
||||
/tmp/proj_shared_install_from_dist/bin/projinfo @out.json -o PROJJSON -q > out2.json
|
||||
diff -u out.json out2.json
|
||||
ret=$?
|
||||
rm -f out.json out2.json
|
||||
return $ret
|
||||
}
|
||||
|
||||
test_projjson EPSG:32631
|
||||
test_projjson EPSG:4326+3855
|
||||
test_projjson "+proj=longlat +ellps=GRS80 +nadgrids=@foo +type=crs"
|
||||
test_projjson -s EPSG:3111 -t GDA2020
|
||||
# Dynamic geographic CRS "WGS 84 (G1762)"
|
||||
test_projjson EPSG:9057
|
||||
# Dynamic vertical CRS "RH2000 height"
|
||||
test_projjson EPSG:5613
|
||||
test_projjson "ITRF2014@2025.0"
|
||||
|
||||
validate_json $TRAVIS_BUILD_DIR/schemas/v0.5/examples/point_motion_operation.json
|
||||
|
||||
cd ..
|
||||
|
||||
echo "Check that we can retrieve the resource directory in a relative way after renaming the installation prefix"
|
||||
|
||||
mkdir /tmp/proj_shared_install_from_dist_renamed
|
||||
mkdir /tmp/proj_static_install_from_dist_renamed
|
||||
mv /tmp/proj_shared_install_from_dist /tmp/proj_shared_install_from_dist_renamed/subdir
|
||||
mv /tmp/proj_static_install_from_dist /tmp/proj_static_install_from_dist_renamed/subdir
|
||||
set +e
|
||||
/tmp/proj_shared_install_from_dist_renamed/subdir/bin/projsync --source-id ? --dry-run --system-directory 2>/dev/null 1>shared.out
|
||||
/tmp/proj_static_install_from_dist_renamed/subdir/bin/projsync --source-id ? --dry-run --system-directory 2>/dev/null 1>static.out
|
||||
set -e
|
||||
if [ "$TRAVIS_OS_NAME" == "osx" ]; then
|
||||
# on macOS 11 /tmp is resolved by PROJ as a symlink to /private/tmp only for the shared build.
|
||||
# on macOS 12 for both static and shared builds
|
||||
INST=/private/tmp
|
||||
else
|
||||
INST=/tmp
|
||||
fi
|
||||
cat shared.out
|
||||
grep "Downloading from https://cdn.proj.org into $INST/proj_shared_install_from_dist_renamed/subdir/share/proj" shared.out
|
||||
cat static.out
|
||||
grep "Downloading from https://cdn.proj.org into \($INST\|/tmp\)/proj_static_install_from_dist_renamed/subdir/share/proj" static.out
|
||||
rm shared.out static.out
|
||||
|
||||
sed -i'.bak' -e '1c\
|
||||
prefix='"$INST"'/proj_shared_install_from_dist_renamed/subdir' $INST/proj_shared_install_from_dist_renamed/subdir/lib/pkgconfig/proj.pc
|
||||
# cat $INST/proj_shared_install_from_dist_renamed/subdir/lib/pkgconfig/proj.pc
|
||||
|
||||
sed -i'.bak' -e '1c\
|
||||
prefix=/tmp/proj_static_install_from_dist_renamed/subdir' /tmp/proj_static_install_from_dist_renamed/subdir/lib/pkgconfig/proj.pc
|
||||
# cat /tmp/proj_static_install_from_dist_renamed/subdir/lib/pkgconfig/proj.pc
|
||||
|
||||
if [ $BUILD_NAME = "linux_gcc" ]; then
|
||||
$TRAVIS_BUILD_DIR/test/postinstall/test_autotools.sh /tmp/proj_shared_install_from_dist_renamed/subdir shared
|
||||
PROJ_DATA=/tmp/proj_static_install_from_dist_renamed/subdir/share/proj $TRAVIS_BUILD_DIR/test/postinstall/test_autotools.sh /tmp/proj_static_install_from_dist_renamed/subdir static
|
||||
else
|
||||
echo "Skipping test_autotools.sh test for $BUILD_NAME"
|
||||
fi
|
||||
|
||||
$TRAVIS_BUILD_DIR/test/postinstall/test_cmake.sh /tmp/proj_shared_install_from_dist_renamed/subdir shared
|
||||
PROJ_DATA=/tmp/proj_static_install_from_dist_renamed/subdir/share/proj $TRAVIS_BUILD_DIR/test/postinstall/test_cmake.sh /tmp/proj_static_install_from_dist_renamed/subdir static PROJ_CONFIG
|
||||
|
||||
if [ "$BUILD_NAME" != "linux_gcc8" -a "$BUILD_NAME" != "linux_gcc_32bit" ]; then
|
||||
echo "Build PROJ as a subproject"
|
||||
mkdir proj_as_subproject
|
||||
cd proj_as_subproject
|
||||
mkdir external
|
||||
ln -s $PWD/.. external/PROJ
|
||||
|
||||
echo '#include "proj.h"' > mytest.c
|
||||
echo 'int main() { proj_info(); return 0; }' >> mytest.c
|
||||
|
||||
echo 'cmake_minimum_required(VERSION 3.9)' > CMakeLists.txt
|
||||
echo 'project(mytest)' >> CMakeLists.txt
|
||||
echo 'add_subdirectory(external/PROJ)' >> CMakeLists.txt
|
||||
echo 'add_executable(mytest mytest.c)' >> CMakeLists.txt
|
||||
echo 'target_include_directories(mytest PRIVATE $<TARGET_PROPERTY:PROJ::proj,INTERFACE_INCLUDE_DIRECTORIES>)' >> CMakeLists.txt
|
||||
echo 'target_link_libraries(mytest PRIVATE PROJ::proj)' >> CMakeLists.txt
|
||||
|
||||
mkdir build_cmake
|
||||
cd build_cmake
|
||||
cmake -D USE_CCACHE=${USE_CCACHE} -D PROJ_DB_CACHE_DIR=$HOME/.ccache ..
|
||||
make
|
||||
|
||||
# return to root
|
||||
cd ../..
|
||||
if test "$TRAVIS" = ""; then
|
||||
cd ../..
|
||||
fi
|
||||
|
||||
echo "Build coverage as in-source build"
|
||||
# There's an issue with the clang on Travis + coverage + cpp code
|
||||
if [ "$BUILD_NAME" != "linux_clang" ]; then
|
||||
# build with grids and coverage
|
||||
if [ "$TRAVIS_OS_NAME" == "osx" ]; then
|
||||
LDFLAGS="$LDFLAGS -fprofile-arcs -ftest-coverage" cmake \
|
||||
-D CMAKE_BUILD_TYPE=Debug \
|
||||
-D CMAKE_COMPILE_WARNING_AS_ERROR=ON \
|
||||
-D USE_CCACHE=${USE_CCACHE} \
|
||||
-D PROJ_DB_CACHE_DIR=$HOME/.ccache \
|
||||
-D CMAKE_C_FLAGS="--coverage" \
|
||||
-D CMAKE_CXX_FLAGS="--coverage" \
|
||||
. ;
|
||||
else
|
||||
LDFLAGS="$LDFLAGS -lgcov" cmake \
|
||||
-D CMAKE_BUILD_TYPE=Debug \
|
||||
-D CMAKE_COMPILE_WARNING_AS_ERROR=ON \
|
||||
-D USE_CCACHE=${USE_CCACHE} \
|
||||
-D PROJ_DB_CACHE_DIR=$HOME/.ccache \
|
||||
-D CMAKE_C_FLAGS="$CFLAGS --coverage" \
|
||||
-D CMAKE_CXX_FLAGS="$CXXFLAGS --coverage" \
|
||||
. ;
|
||||
fi
|
||||
else
|
||||
cmake \
|
||||
-D CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} \
|
||||
-D CMAKE_COMPILE_WARNING_AS_ERROR=ON \
|
||||
-D USE_CCACHE=${USE_CCACHE} \
|
||||
-D PROJ_DB_CACHE_DIR=$HOME/.ccache \
|
||||
. ;
|
||||
fi
|
||||
make
|
||||
ctest --output-on-failure
|
||||
fi
|
||||
|
||||
if [ "${USE_CCACHE}" = "ON" ]; then
|
||||
ccache -s
|
||||
fi
|
||||
@@ -1,52 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
export TRAVIS_OS_NAME=linux
|
||||
export BUILD_NAME=linux_gcc_32bit
|
||||
export TRAVIS_BUILD_DIR="$WORK_DIR"
|
||||
|
||||
GCC_VERSION=13
|
||||
|
||||
ARCH=i386
|
||||
|
||||
dpkg --add-architecture i386
|
||||
apt-get update -y
|
||||
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends -o APT::Immediate-Configure=0 \
|
||||
autoconf automake libtool make cmake ccache pkg-config sqlite3 tar zip curl ca-certificates jq \
|
||||
python3-pytest python3-ruamel.yaml python3-jsonschema \
|
||||
gcc-$GCC_VERSION-multilib g++-$GCC_VERSION-multilib g++-$GCC_VERSION \
|
||||
libsqlite3-dev:$ARCH libgtest-dev:$ARCH \
|
||||
libtiff-dev:$ARCH libwebp-dev:$ARCH libzstd-dev:$ARCH \
|
||||
libcurl4-openssl-dev:$ARCH libnghttp2-dev:$ARCH libidn2-dev:$ARCH librtmp-dev:$ARCH libssh-dev:$ARCH \
|
||||
libpsl-dev:$ARCH libssl-dev:$ARCH libkrb5-dev:$ARCH comerr-dev:$ARCH libldap2-dev:$ARCH libbrotli-dev:$ARCH
|
||||
|
||||
LIBDIR=/usr/lib/i386-linux-gnu
|
||||
INCDIR=/usr/include/i386-linux-gnu
|
||||
|
||||
export CXXFLAGS="-m32 -D_GLIBCXX_ASSERTIONS"
|
||||
export CFLAGS="-m32"
|
||||
export TIFF_CFLAGS="-I$INCDIR"
|
||||
export TIFF_LIBS="-L$LIBDIR -ltiff"
|
||||
export SQLITE3_CFLAGS="-I$INCDIR"
|
||||
export SQLITE3_LIBS="-L$LIBDIR -lsqlite3"
|
||||
|
||||
export PKG_CONFIG=i686-linux-gnu-pkg-config
|
||||
|
||||
cd "$WORK_DIR"
|
||||
|
||||
if test -f "$WORK_DIR/ccache.tar.gz"; then
|
||||
echo "Restoring ccache..."
|
||||
(cd $HOME && tar xzf "$WORK_DIR/ccache.tar.gz")
|
||||
else
|
||||
mkdir -p $HOME/.ccache
|
||||
fi
|
||||
|
||||
ccache -M 500M
|
||||
|
||||
CC="gcc-$GCC_VERSION" CXX="g++-$GCC_VERSION" CMAKE_BUILD_TYPE=RelWithDebInfo ./ci/install.sh
|
||||
|
||||
echo "Saving ccache..."
|
||||
rm -f "$WORK_DIR/ccache.tar.gz"
|
||||
(cd $HOME && tar czf "$WORK_DIR/ccache.tar.gz" .ccache)
|
||||
@@ -1,13 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
./ci/before_install_apt.sh
|
||||
./ci/before_install_pip.sh
|
||||
|
||||
sudo apt-get install -qq \
|
||||
sqlite3 zip \
|
||||
libsqlite3-dev \
|
||||
libtiff-dev libwebp-dev \
|
||||
libcurl4-openssl-dev libnghttp2-dev libidn2-dev librtmp-dev libssh-dev \
|
||||
libpsl-dev libssl-dev libkrb5-dev comerr-dev libldap2-dev libbrotli-dev
|
||||
@@ -1,6 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
# -fno-use-cxa-atexit is needed to build with -coverage
|
||||
./ci/install.sh
|
||||
@@ -1,5 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
mamba install --yes --quiet --only-deps proj
|
||||
@@ -1,20 +0,0 @@
|
||||
name: proj
|
||||
channels:
|
||||
- conda-forge
|
||||
dependencies:
|
||||
- python=3.8
|
||||
- conda
|
||||
- mamba
|
||||
- compilers
|
||||
- compiler-rt
|
||||
- ninja
|
||||
- cmake
|
||||
- pkg-config
|
||||
- ccache
|
||||
- autoconf
|
||||
- automake
|
||||
- m4
|
||||
- jsonschema
|
||||
- ruamel.yaml
|
||||
- pytest
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
ccache -M 200M
|
||||
|
||||
CC="clang" CXX="clang++" CMAKE_BUILD_TYPE=RelWithDebInfo ./ci/install.sh
|
||||
@@ -1,128 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR=$(dirname "$0")
|
||||
case $SCRIPT_DIR in
|
||||
"/"*)
|
||||
;;
|
||||
".")
|
||||
SCRIPT_DIR=$(pwd)
|
||||
;;
|
||||
*)
|
||||
SCRIPT_DIR=$(pwd)/$(dirname "$0")
|
||||
;;
|
||||
esac
|
||||
|
||||
apt-get update -y
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
||||
sudo wget tzdata
|
||||
|
||||
USER=root
|
||||
export USER
|
||||
|
||||
cd "$WORK_DIR"
|
||||
|
||||
if test -f "$WORK_DIR/ccache.tar.gz"; then
|
||||
echo "Restoring ccache..."
|
||||
(cd $HOME && tar xzf "$WORK_DIR/ccache.tar.gz")
|
||||
else
|
||||
mkdir -p $HOME/.ccache
|
||||
fi
|
||||
|
||||
sudo apt-get install -y --no-install-recommends \
|
||||
binutils-mingw-w64-x86-64 \
|
||||
gcc-mingw-w64-x86-64 \
|
||||
g++-mingw-w64-x86-64 \
|
||||
g++-mingw-w64 \
|
||||
mingw-w64-tools \
|
||||
wine-stable \
|
||||
cmake make ccache \
|
||||
sqlite3 \
|
||||
curl ca-certificates
|
||||
|
||||
# Select posix/pthread for std::mutex
|
||||
update-alternatives --set x86_64-w64-mingw32-gcc /usr/bin/x86_64-w64-mingw32-gcc-posix
|
||||
update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix
|
||||
|
||||
ccache -M 500M
|
||||
ccache -s
|
||||
|
||||
MINGW_ARCH=x86_64-w64-mingw32
|
||||
MINGW_PREFIX=/usr/lib/gcc/$MINGW_ARCH/10-posix
|
||||
|
||||
export CC="$MINGW_ARCH-gcc"
|
||||
export CXX="$MINGW_ARCH-g++"
|
||||
export LD=$MINGW_ARCH-ld
|
||||
|
||||
UNAME="$(uname)" || UNAME=""
|
||||
NPROC=$(nproc);
|
||||
echo "NPROC=${NPROC}"
|
||||
export MAKEFLAGS="-j ${NPROC}"
|
||||
|
||||
# prepare wine environment
|
||||
export WINE_PREFIX="$HOME/.wine"
|
||||
WINE_SYSDIR=$WINE_PREFIX/drive_c/windows
|
||||
wine64 cmd /c dir
|
||||
ln -s $MINGW_PREFIX/libstdc++-6.dll $WINE_SYSDIR
|
||||
ln -s $MINGW_PREFIX/libgcc_s_seh-1.dll $WINE_SYSDIR
|
||||
# ln -s $MINGW_PREFIX/libgcc_s_sjlj-1.dll $WINE_SYSDIR
|
||||
ln -s /usr/$MINGW_ARCH/lib/libwinpthread-1.dll $WINE_SYSDIR
|
||||
|
||||
# build zlib
|
||||
wget -q https://github.com/madler/zlib/archive/v1.2.11.tar.gz
|
||||
tar xzf v1.2.11.tar.gz
|
||||
(cd zlib-1.2.11 && \
|
||||
sudo make install -f win32/Makefile.gcc SHARED_MODE=1 \
|
||||
PREFIX=${MINGW_ARCH}- \
|
||||
prefix=/usr/${MINGW_ARCH} \
|
||||
DESTDIR=/usr/${MINGW_ARCH}/ \
|
||||
BINARY_PATH=bin INCLUDE_PATH=include LIBRARY_PATH=lib)
|
||||
ln -s /usr/$MINGW_ARCH/bin/zlib1.dll $WINE_SYSDIR
|
||||
|
||||
# build libtiff
|
||||
wget -q http://download.osgeo.org/libtiff/tiff-4.1.0.tar.gz
|
||||
tar xzf tiff-4.1.0.tar.gz
|
||||
(cd tiff-4.1.0 && ./configure --host=$MINGW_ARCH --prefix=/usr/$MINGW_ARCH && make && sudo make install)
|
||||
ln -s /usr/$MINGW_ARCH/bin/libtiff-5.dll $WINE_SYSDIR
|
||||
|
||||
# build sqlite3
|
||||
wget -q https://sqlite.org/2020/sqlite-autoconf-3330000.tar.gz
|
||||
tar xzf sqlite-autoconf-3330000.tar.gz
|
||||
# Build with SQLITE_DQS=0 to ensure we properly use single quotes and double quotes (cf issue #2480)
|
||||
(cd sqlite-autoconf-3330000 &&
|
||||
CFLAGS="-DSQLITE_DQS=0" ./configure --host=$MINGW_ARCH --prefix=/usr/$MINGW_ARCH && make && sudo make install)
|
||||
ln -s /usr/$MINGW_ARCH/bin/libsqlite3-0.dll $WINE_SYSDIR
|
||||
|
||||
# build proj
|
||||
rm -rf build
|
||||
mkdir build
|
||||
cd build
|
||||
cmake \
|
||||
-G "Unix Makefiles" \
|
||||
-D CMAKE_SYSTEM_NAME=Windows \
|
||||
-D CMAKE_CROSSCOMPILING_EMULATOR=/usr/bin/wine64 \
|
||||
-D CMAKE_C_COMPILER=/usr/bin/${MINGW_ARCH}-gcc \
|
||||
-D CMAKE_CXX_COMPILER=/usr/bin/${MINGW_ARCH}-g++ \
|
||||
-D CMAKE_COMPILE_WARNING_AS_ERROR=ON \
|
||||
-D CMAKE_BUILD_TYPE=Release \
|
||||
-D CMAKE_FIND_ROOT_PATH=/usr/${MINGW_ARCH} \
|
||||
-D CMAKE_INSTALL_PREFIX=/tmp/proj_install \
|
||||
-D ENABLE_CURL=OFF \
|
||||
-D BUILD_PROJSYNC=OFF \
|
||||
-D USE_CCACHE=ON \
|
||||
-D PROJ_DB_CACHE_DIR=$HOME/.ccache \
|
||||
..
|
||||
make
|
||||
# Run a subset of tests that should pass
|
||||
ctest --output-on-failure -R "proj_test_cpp_api|geodesic-test|proj_errno_string_test|proj_angular_io_test|proj_context_test|pj_phi2_test|gie_self_tests|test_network|test_defmodel|test_tinshift|test_misc|test_fork"
|
||||
# TODO: fix failing tests with .gie files; see #2168 and run
|
||||
# PROJ_DATA=./data/for_tests wine64 ./bin/gie.exe ../test/gie/more_builtins.gie
|
||||
|
||||
make install
|
||||
|
||||
ccache -s
|
||||
|
||||
echo "Saving ccache..."
|
||||
rm -f "$WORK_DIR/ccache.tar.gz"
|
||||
(cd $HOME && test ! -e .ccache || tar czf "$WORK_DIR/ccache.tar.gz" .ccache)
|
||||
+26
-129
@@ -1,130 +1,27 @@
|
||||
# The old CMake PROJECT-NAME was PROJ4.
|
||||
set (PROJECT_LEGACY_NAME PROJ4)
|
||||
string (TOLOWER "${PROJECT_NAME}" PROJECT_NAME_LOWER)
|
||||
string (TOLOWER "${PROJECT_LEGACY_NAME}" PROJECT_LEGACY_LOWER)
|
||||
|
||||
# Starting with version 7.0, we install config-style find package
|
||||
# files so that PROJ can be found with both
|
||||
#
|
||||
# find_package(PROJ)
|
||||
# find_package(PROJ4)
|
||||
#
|
||||
# Here are the details... The command
|
||||
#
|
||||
# find_package(PROJ)
|
||||
#
|
||||
# if successful, will define variables
|
||||
#
|
||||
# PROJ_FOUND
|
||||
# PROJ_VERSION
|
||||
# PROJ_LIBRARIES = PROJ::proj
|
||||
# PROJ_INCLUDE_DIRS
|
||||
# etc
|
||||
#
|
||||
# and will define targets
|
||||
#
|
||||
# PROJ::proj
|
||||
# PROJ4::proj
|
||||
#
|
||||
# Similarly
|
||||
#
|
||||
# find_package(PROJ4)
|
||||
#
|
||||
# if successful, will define variables
|
||||
#
|
||||
# PROJ4_FOUND
|
||||
# PROJ4_VERSION
|
||||
# PROJ4_LIBRARIES = PROJ4::proj
|
||||
# PROJ4_INCLUDE_DIRS
|
||||
# etc
|
||||
#
|
||||
# and will define targets
|
||||
#
|
||||
# PROJ::proj
|
||||
# PROJ4::proj
|
||||
#
|
||||
# Note that targets PROJ::proj and PROJ4::proj are provided in both
|
||||
# cases. However, no attempt is made to define both sets of variables
|
||||
# with the two find_package options. Doing so would just lead to user
|
||||
# confusion.
|
||||
#
|
||||
# Because pre-7.0 versions of PROJ do not support find_package (PROJ)
|
||||
# and do not define a target PROJ::proj
|
||||
#
|
||||
# find_package(PROJ4)
|
||||
#
|
||||
# (instead of PROJ) should be used in any development scenarios which
|
||||
# might involve (even indirectly) pre-7.0 versions of PROJ.
|
||||
#
|
||||
# At some future dates, find_package (PROJ4) will
|
||||
#
|
||||
# define PROJ4_LIBRARIES = PROJ::proj
|
||||
# give WARNING message suggesting migration to find_package(PROJ)
|
||||
# be disallowed via the version checking code
|
||||
#
|
||||
# At some more distant date, the PROJ4::proj target will be retired.
|
||||
#
|
||||
#
|
||||
# All this messiness is confined to
|
||||
#
|
||||
# cmake/CMakeLists.txt (this file)
|
||||
# cmake/project-config.cmake.in
|
||||
# cmake/project-config-version.cmake.in
|
||||
|
||||
# Variables needed by ${PROJECT_NAME_LOWER}-config-version.cmake
|
||||
if (MSVC)
|
||||
# For checking the compatibility of MSVC_TOOLSET_VERSION; see
|
||||
# https://docs.microsoft.com/en-us/cpp/porting/overview-of-potential-upgrade-issues-visual-cpp
|
||||
# Assume major version number is obtained by dropping the last decimal
|
||||
# digit.
|
||||
math (EXPR MSVC_TOOLSET_MAJOR "${MSVC_TOOLSET_VERSION}/10")
|
||||
else ()
|
||||
set (MSVC_TOOLSET_VERSION 0)
|
||||
set (MSVC_TOOLSET_MAJOR 0)
|
||||
endif ()
|
||||
|
||||
# If this is a regular build (PROJECT_SOURCE_DIR == CMAKE_SOURCE_DIR), export legacy files by default
|
||||
# Otherwise, this is embedded in another project, only export PROJ target
|
||||
# cf https://github.com/OSGeo/gdal/issues/5646
|
||||
string(COMPARE EQUAL "${PROJECT_SOURCE_DIR}" "${CMAKE_SOURCE_DIR}" DEFAULT_VAL)
|
||||
option(INSTALL_LEGACY_CMAKE_FILES "Install PROJ4 legacy target CMake files" ${DEFAULT_VAL})
|
||||
|
||||
set(PROJECT_LIST ${PROJECT_NAME})
|
||||
if (INSTALL_LEGACY_CMAKE_FILES)
|
||||
set(PROJECT_LIST "${PROJECT_LIST}" "${PROJECT_LEGACY_NAME}")
|
||||
endif ()
|
||||
foreach (PROJECT_VARIANT_NAME IN LISTS PROJECT_LIST)
|
||||
string (TOLOWER "${PROJECT_VARIANT_NAME}" PROJECT_VARIANT_LOWER)
|
||||
set (CMAKECONFIGSUBDIR "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_VARIANT_LOWER}")
|
||||
# proj-config.cmake for the install tree. It's installed in
|
||||
# ${CMAKECONFIGSUBDIR} and @PROJECT_ROOT_DIR@ is the relative
|
||||
# path to the root from there. (Note that the whole install tree can
|
||||
# be relocated.)
|
||||
file (RELATIVE_PATH PROJECT_ROOT_DIR
|
||||
${CMAKE_INSTALL_PREFIX}/${CMAKECONFIGSUBDIR} ${CMAKE_INSTALL_PREFIX})
|
||||
configure_file (project-config.cmake.in
|
||||
project-${PROJECT_VARIANT_LOWER}-config.cmake @ONLY)
|
||||
configure_file (project-config-version.cmake.in
|
||||
project-${PROJECT_VARIANT_LOWER}-version.cmake @ONLY)
|
||||
install(FILES
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/project-${PROJECT_VARIANT_LOWER}-config.cmake"
|
||||
DESTINATION "${CMAKECONFIGSUBDIR}"
|
||||
RENAME "${PROJECT_VARIANT_LOWER}-config.cmake")
|
||||
install(FILES
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/project-${PROJECT_VARIANT_LOWER}-version.cmake"
|
||||
DESTINATION "${CMAKECONFIGSUBDIR}"
|
||||
RENAME "${PROJECT_VARIANT_LOWER}-config-version.cmake")
|
||||
# Make information about the cmake targets (the library and the tools)
|
||||
# available.
|
||||
install(EXPORT targets
|
||||
NAMESPACE ${PROJECT_NAME}::
|
||||
FILE ${PROJECT_NAME_LOWER}-targets.cmake
|
||||
DESTINATION "${CMAKECONFIGSUBDIR}")
|
||||
if (INSTALL_LEGACY_CMAKE_FILES)
|
||||
install(EXPORT targets
|
||||
NAMESPACE ${PROJECT_LEGACY_NAME}::
|
||||
FILE ${PROJECT_LEGACY_LOWER}-targets.cmake
|
||||
DESTINATION "${CMAKECONFIGSUBDIR}")
|
||||
endif()
|
||||
endforeach ()
|
||||
# proj-config.cmake for the install tree. It's installed in
|
||||
# ${INSTALL_CMAKE_DIR} and @PROJECT_ROOT_DIR@ is the relative
|
||||
# path to the root from there. (Note that the whole install tree can
|
||||
# be relocated.)
|
||||
file(RELATIVE_PATH PROJECT_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/${CMAKECONFIGDIR} ${CMAKE_INSTALL_PREFIX})
|
||||
|
||||
string(TOLOWER "${PROJECT_NAME}" PROJECT_NAME_LOWER)
|
||||
configure_file (project-config.cmake.in project-config.cmake @ONLY)
|
||||
configure_file (project-config-version.cmake.in
|
||||
project-config-version.cmake @ONLY)
|
||||
install (FILES
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/project-config.cmake"
|
||||
DESTINATION "${CMAKECONFIGDIR}"
|
||||
RENAME "${PROJECT_NAME_LOWER}-config.cmake")
|
||||
install (FILES
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/project-config-version.cmake"
|
||||
DESTINATION "${CMAKECONFIGDIR}"
|
||||
RENAME "${PROJECT_NAME_LOWER}-config-version.cmake")
|
||||
# Make information about the cmake targets (the library and the tools)
|
||||
# available.
|
||||
install (EXPORT targets
|
||||
FILE ${PROJECT_NAME_LOWER}-targets.cmake
|
||||
DESTINATION "${CMAKECONFIGDIR}")
|
||||
install (EXPORT targets
|
||||
NAMESPACE ${PROJECT_NAME}::
|
||||
FILE ${PROJECT_NAME_LOWER}-namespace-targets.cmake
|
||||
DESTINATION "${CMAKECONFIGDIR}")
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
#
|
||||
# CMake module to support ccache (or clcache for MSVC)
|
||||
#
|
||||
# Copyright (c) 2021, Mike Taves <mwtoews at gmail dot com>
|
||||
#
|
||||
# Usage:
|
||||
# Add "include(Ccache)" to CMakeLists.txt and enable
|
||||
# using the option -D USE_CCACHE=ON
|
||||
|
||||
|
||||
option(USE_CCACHE
|
||||
"Use ccache (or clcache for MSVC) to compile C/C++ objects" OFF)
|
||||
if(NOT USE_CCACHE)
|
||||
# stop here and return to including file
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Search priority:
|
||||
# 1. ccache for many compilers except MSVC
|
||||
# 2. clcache for MSVC
|
||||
|
||||
find_program(CCACHE_PROGRAM NAMES ccache clcache)
|
||||
|
||||
if(CCACHE_PROGRAM)
|
||||
message(STATUS "Configuring ccache with ${CCACHE_PROGRAM}")
|
||||
|
||||
if(CMAKE_GENERATOR STREQUAL "Xcode")
|
||||
# see https://crascit.com/2016/04/09/using-ccache-with-cmake/
|
||||
set(C_LAUNCHER "${CCACHE_PROGRAM}")
|
||||
set(CXX_LAUNCHER "${CCACHE_PROGRAM}")
|
||||
set(CCACHE_LAUNCH_C ${CMAKE_BINARY_DIR}/ccache-c)
|
||||
set(CCACHE_LAUNCH_CXX ${CMAKE_BINARY_DIR}/ccache-cxx)
|
||||
file(WRITE "${CCACHE_LAUNCH_C}" "\
|
||||
#!/bin/sh
|
||||
shift
|
||||
exec \"${C_LAUNCHER}\" \"${CMAKE_C_COMPILER}\" \"$@\"
|
||||
")
|
||||
file(WRITE "${CCACHE_LAUNCH_CXX}" "\
|
||||
#!/bin/sh
|
||||
shift
|
||||
exec \"${CXX_LAUNCHER}\" \"${CMAKE_CXX_COMPILER}\" \"$@\"
|
||||
")
|
||||
# Do equivalent of chmod a+rx
|
||||
file(CHMOD "${CCACHE_LAUNCH_C}" "${CCACHE_LAUNCH_CXX}"
|
||||
FILE_PERMISSIONS
|
||||
OWNER_WRITE OWNER_READ OWNER_EXECUTE
|
||||
GROUP_READ GROUP_EXECUTE
|
||||
WORLD_READ WORLD_EXECUTE
|
||||
)
|
||||
# Set Xcode project attributes to route compilation and linking
|
||||
# through the wrapper scripts
|
||||
set(CMAKE_XCODE_ATTRIBUTE_CC "${CCACHE_LAUNCH_C}")
|
||||
set(CMAKE_XCODE_ATTRIBUTE_CXX "${CCACHE_LAUNCH_CXX}")
|
||||
set(CMAKE_XCODE_ATTRIBUTE_LD "${CCACHE_LAUNCH_C}")
|
||||
set(CMAKE_XCODE_ATTRIBUTE_LDPLUSPLUS "${CCACHE_LAUNCH_CXX}")
|
||||
else()
|
||||
# Most other generators (Unix Makefiles, Ninja, etc.)
|
||||
set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE_PROGRAM}")
|
||||
set(CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE_PROGRAM}")
|
||||
endif()
|
||||
else()
|
||||
message(WARNING "Ccache was requested, but no program was not found")
|
||||
endif()
|
||||
@@ -1,99 +0,0 @@
|
||||
# Derived from https://gitlab.com/jhamberg/cmake-examples/-/blob/master/cmake/FileEmbed.cmake
|
||||
# MIT licensed
|
||||
# Copyright (c) 2022 Jonathan Hamberg
|
||||
|
||||
function(FileEmbedSetup)
|
||||
|
||||
if (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/file_embed)
|
||||
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}file_embed)
|
||||
endif ()
|
||||
|
||||
if (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/file_embed/file_embed_empty.c)
|
||||
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/file_embed/file_embed_empty.c "")
|
||||
endif ()
|
||||
|
||||
add_library(file_embed ${CMAKE_CURRENT_BINARY_DIR}/file_embed/file_embed_empty.c)
|
||||
target_include_directories(file_embed PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/file_embed)
|
||||
|
||||
endfunction()
|
||||
|
||||
function(FileEmbedAdd file)
|
||||
FileEmbedGenerate(${file} var)
|
||||
target_sources(file_embed PUBLIC ${var})
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${var}
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-DRUN_FILE_EMBED_GENERATE=1
|
||||
"-DFILE_EMBED_GENERATE_PATH=${file}"
|
||||
-P ${PROJECT_SOURCE_DIR}/cmake/FileEmbed.cmake
|
||||
MAIN_DEPENDENCY ${file}
|
||||
)
|
||||
endfunction()
|
||||
|
||||
function(FileEmbedGenerate file generated_c)
|
||||
|
||||
get_filename_component(base_filename ${file} NAME)
|
||||
set(output_filename "${base_filename}.c")
|
||||
string(MAKE_C_IDENTIFIER ${base_filename} c_name)
|
||||
file(READ ${file} content HEX)
|
||||
|
||||
string(LENGTH "${content}" size)
|
||||
math(EXPR size_mult_16 "${size} - (${size} % 16)")
|
||||
string(SUBSTRING "${content}" 0 ${size_mult_16} content_mult_16)
|
||||
|
||||
string(REGEX REPLACE
|
||||
"([A-Fa-f0-9][A-Fa-f0-9])\
|
||||
([A-Fa-f0-9][A-Fa-f0-9])\
|
||||
([A-Fa-f0-9][A-Fa-f0-9])\
|
||||
([A-Fa-f0-9][A-Fa-f0-9])\
|
||||
([A-Fa-f0-9][A-Fa-f0-9])\
|
||||
([A-Fa-f0-9][A-Fa-f0-9])\
|
||||
([A-Fa-f0-9][A-Fa-f0-9])\
|
||||
([A-Fa-f0-9][A-Fa-f0-9])"
|
||||
"0x\\1,0x\\2,0x\\3,0x\\4,0x\\5,0x\\6,0x\\7,0x\\8,\n" SEPARATED_HEX "${content_mult_16}")
|
||||
|
||||
set(SEPARATED_HEX_REMAINDER "")
|
||||
if (NOT ${size_mult_16} EQUAL ${size})
|
||||
string(SUBSTRING "${content}" ${size_mult_16} 16 content_remainder)
|
||||
string(REGEX REPLACE "([A-Fa-f0-9][A-Fa-f0-9])" "0x\\1," SEPARATED_HEX_REMAINDER "${content_remainder}")
|
||||
endif()
|
||||
|
||||
set(output_c "${SEPARATED_HEX}${SEPARATED_HEX_REMAINDER}")
|
||||
|
||||
set(output_c "
|
||||
#include \"${c_name}.h\"
|
||||
const uint8_t ${c_name}_data[] = {
|
||||
${output_c}
|
||||
}\;
|
||||
const unsigned ${c_name}_size = sizeof(${c_name}_data)\;
|
||||
")
|
||||
|
||||
set(output_h "
|
||||
#ifndef ${c_name}_H
|
||||
#define ${c_name}_H
|
||||
#include <stdint.h>
|
||||
extern const uint8_t ${c_name}_data[]\;
|
||||
extern const unsigned ${c_name}_size\;
|
||||
#endif // ${c_name}_H
|
||||
")
|
||||
|
||||
|
||||
if (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/file_embed)
|
||||
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}file_embed)
|
||||
endif ()
|
||||
|
||||
|
||||
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/file_embed/${c_name}.c
|
||||
${output_c})
|
||||
|
||||
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/file_embed/${c_name}.h
|
||||
${output_h})
|
||||
|
||||
set(${generated_c} ${CMAKE_CURRENT_BINARY_DIR}/file_embed/${c_name}.c PARENT_SCOPE)
|
||||
|
||||
endfunction()
|
||||
|
||||
if (RUN_FILE_EMBED_GENERATE)
|
||||
FileEmbedGenerate(${FILE_EMBED_GENERATE_PATH} var)
|
||||
endif ()
|
||||
@@ -0,0 +1,14 @@
|
||||
EXTRA_DIST = CMakeLists.txt \
|
||||
Proj4InstallPath.cmake \
|
||||
Proj4SystemInfo.cmake \
|
||||
Proj4Utilities.cmake \
|
||||
proj_config.cmake.in \
|
||||
Proj4Config.cmake \
|
||||
Proj4Mac.cmake \
|
||||
Proj4Test.cmake \
|
||||
Proj4Version.cmake \
|
||||
policies.cmake \
|
||||
proj_config.cmake.in \
|
||||
project-config-version.cmake.in \
|
||||
project-config.cmake.in
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
################################################################################
|
||||
# SociConfig.cmake - CMake build configuration of SOCI library
|
||||
################################################################################
|
||||
# Copyright (C) 2010 Mateusz Loskot <mateusz@loskot.net>
|
||||
#
|
||||
# Distributed under the Boost Software License, Version 1.0.
|
||||
# (See accompanying file LICENSE_1_0.txt or copy at
|
||||
# http://www.boost.org/LICENSE_1_0.txt)
|
||||
################################################################################
|
||||
include (CheckIncludeFiles)
|
||||
include (CheckLibraryExists)
|
||||
include (CheckFunctionExists)
|
||||
|
||||
# check needed include file
|
||||
check_include_files (dlfcn.h HAVE_DLFCN_H)
|
||||
check_include_files (inttypes.h HAVE_INTTYPES_H)
|
||||
check_include_files (jni.h HAVE_JNI_H)
|
||||
check_include_files (memory.h HAVE_MEMORY_H)
|
||||
check_include_files (stdint.h HAVE_STDINT_H)
|
||||
check_include_files (stdlib.h HAVE_STDLIB_H)
|
||||
check_include_files (string.h HAVE_STRING_H)
|
||||
check_include_files (sys/stat.h HAVE_SYS_STAT_H)
|
||||
check_include_files (sys/types.h HAVE_SYS_TYPES_H)
|
||||
check_include_files (unistd.h HAVE_UNISTD_H)
|
||||
check_include_files("stdlib.h;stdarg.h;string.h;float.h" STDC_HEADERS)
|
||||
|
||||
CHECK_FUNCTION_EXISTS(localeconv HAVE_LOCALECONV)
|
||||
|
||||
# check libm need on unix
|
||||
check_library_exists(m ceil "" HAVE_LIBM)
|
||||
|
||||
set(PACKAGE "proj")
|
||||
set(PACKAGE_BUGREPORT "https://github.com/OSGeo/proj.4/issues")
|
||||
set(PACKAGE_NAME "PROJ.4 Projections")
|
||||
set(PACKAGE_STRING "PROJ.4 Projections ${${PROJECT_INTERN_NAME}_VERSION}")
|
||||
set(PACKAGE_TARNAME "proj")
|
||||
set(PACKAGE_VERSION "${${PROJECT_INTERN_NAME}_VERSION}")
|
||||
|
||||
configure_file(cmake/proj_config.cmake.in src/proj_config.h)
|
||||
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
#----------------------------------------------
|
||||
# installation path settings
|
||||
#----------------------------------------------
|
||||
if(WIN32)
|
||||
if(DEFINED ENV{OSGEO4W_ROOT})
|
||||
set(OSGEO4W_ROOT_DIR $ENV{OSGEO4W_ROOT})
|
||||
else()
|
||||
set(OSGEO4W_ROOT_DIR c:/OSGeo4W)
|
||||
endif()
|
||||
set(DEFAULT_PROJ_ROOT_DIR ${OSGEO4W_ROOT_DIR})
|
||||
endif()
|
||||
if(UNIX)
|
||||
set(DEFAULT_PROJ_ROOT_DIR "/usr/local/")
|
||||
endif(UNIX)
|
||||
|
||||
|
||||
IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
||||
SET(CMAKE_INSTALL_PREFIX ${DEFAULT_PROJ_ROOT_DIR} CACHE PATH "Proj.4 install
|
||||
prefix" FORCE)
|
||||
ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
||||
|
||||
#TODO
|
||||
# for data install testing the PROJ_LIB envVar
|
||||
|
||||
string(TOLOWER "${PROJECT_NAME}" PROJECT_NAME_LOWER)
|
||||
if(WIN32)
|
||||
set(DEFAULT_BIN_SUBDIR bin)
|
||||
set(DEFAULT_LIB_SUBDIR local/lib)
|
||||
set(DEFAULT_DATA_SUBDIR share)
|
||||
set(DEFAULT_INCLUDE_SUBDIR local/include)
|
||||
set(DEFAULT_DOC_SUBDIR share/doc/proj)
|
||||
set(DEFAULT_CMAKE_SUBDIR local/lib/cmake/${PROJECT_NAME_LOWER})
|
||||
elseif(UNIX)
|
||||
include(GNUInstallDirs)
|
||||
set(DEFAULT_BIN_SUBDIR ${CMAKE_INSTALL_BINDIR})
|
||||
set(DEFAULT_LIB_SUBDIR ${CMAKE_INSTALL_LIBDIR})
|
||||
set(DEFAULT_DATA_SUBDIR ${CMAKE_INSTALL_DATAROOTDIR}/proj)
|
||||
set(DEFAULT_INCLUDE_SUBDIR ${CMAKE_INSTALL_INCLUDEDIR})
|
||||
set(DEFAULT_DOC_SUBDIR ${CMAKE_INSTALL_DOCDIR})
|
||||
set(DEFAULT_CMAKE_SUBDIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME_LOWER})
|
||||
else()
|
||||
# Common locatoins for Unix and Mac OS X
|
||||
set(DEFAULT_BIN_SUBDIR bin)
|
||||
set(DEFAULT_LIB_SUBDIR lib)
|
||||
set(DEFAULT_DATA_SUBDIR share/proj)
|
||||
set(DEFAULT_DOC_SUBDIR doc/proj)
|
||||
set(DEFAULT_INCLUDE_SUBDIR include)
|
||||
set(DEFAULT_DOC_SUBDIR share/doc/proj)
|
||||
set(DEFAULT_CMAKE_SUBDIR lib/cmake/${PROJECT_NAME_LOWER})
|
||||
endif()
|
||||
|
||||
# Locations are changeable by user to customize layout of Proj.4 installation
|
||||
# (default values are platform-specific)
|
||||
set(PROJ_BIN_SUBDIR ${DEFAULT_BIN_SUBDIR} CACHE STRING
|
||||
"Subdirectory where executables will be installed")
|
||||
set(PROJ_LIB_SUBDIR ${DEFAULT_LIB_SUBDIR} CACHE STRING
|
||||
"Subdirectory where libraries will be installed")
|
||||
set(PROJ_INCLUDE_SUBDIR ${DEFAULT_INCLUDE_SUBDIR} CACHE STRING
|
||||
"Subdirectory where header files will be installed")
|
||||
set(PROJ_DATA_SUBDIR ${DEFAULT_DATA_SUBDIR} CACHE STRING
|
||||
"Subdirectory where data will be installed")
|
||||
set(PROJ_DOC_SUBDIR ${DEFAULT_DOC_SUBDIR} CACHE STRING
|
||||
"Subdirectory where doc will be installed")
|
||||
set(PROJ_CMAKE_SUBDIR ${DEFAULT_CMAKE_SUBDIR} CACHE STRING
|
||||
"Subdirectory where cmake proj4-config file will be installed")
|
||||
|
||||
# Mark *DIR variables as advanced and dedicated to use by power-users only.
|
||||
mark_as_advanced(PROJ_ROOT_DIR
|
||||
PROJ_BIN_SUBDIR
|
||||
PROJ_LIB_SUBDIR
|
||||
PROJ_INCLUDE_SUBDIR
|
||||
PROJ_DATA_SUBDIR
|
||||
PROJ_DOC_SUBDIR
|
||||
PROJ_CMAKE_SUBDIR )
|
||||
|
||||
set(DEFAULT_BINDIR "${PROJ_BIN_SUBDIR}")
|
||||
set(DEFAULT_LIBDIR "${PROJ_LIB_SUBDIR}")
|
||||
set(DEFAULT_DATADIR "${PROJ_DATA_SUBDIR}")
|
||||
set(DEFAULT_DOCDIR "${PROJ_DOC_SUBDIR}")
|
||||
set(DEFAULT_INCLUDEDIR "${PROJ_INCLUDE_SUBDIR}")
|
||||
set(DEFAULT_CMAKEDIR "${PROJ_CMAKE_SUBDIR}")
|
||||
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
if(APPLE)
|
||||
set(FRAMEWORKDIR "Library/Frameworks" CACHE PATH "the path to install framework")
|
||||
set(BUNDLEDIR "Applications/OSGEO" CACHE PATH "the path to install bundle")
|
||||
file(RELATIVE_PATH BUNDLE_FRAME_REL_PATH_AAA "/${FRAMEWORKDIR}" "/aaa")
|
||||
string(LENGTH ${BUNDLE_FRAME_REL_PATH_AAA} AAA_LENGTH)
|
||||
math(EXPR RELATIVE_PATH_LENGTH "${AAA_LENGTH}-4")
|
||||
string(SUBSTRING ${BUNDLE_FRAME_REL_PATH_AAA} 0 ${RELATIVE_PATH_LENGTH} BUNDLE_FRAME_REL_PATH)
|
||||
set(PROJ_INSTALL_NAME_DIR "@executable_path/${BUNDLE_FRAME_REL_PATH}/${FRAMEWORKDIR}" )
|
||||
else(APPLE)
|
||||
set(FRAMEWORKDIR "")
|
||||
set(BUNDLEDIR "")
|
||||
set(PROJ_INSTALL_NAME_DIR "")
|
||||
endif(APPLE)
|
||||
|
||||
set(PROJ_RESOURCES "" )
|
||||
|
||||
if(APPLE)
|
||||
option(BUILD_FRAMEWORKS_AND_BUNDLE "if set to ON, build a library framework and application bundle, otherwise install classical UNIX bin/lib" OFF )
|
||||
set(DEFAULT_BINDIR ${BUNDLEDIR})
|
||||
boost_report_value(BUNDLEDIR)
|
||||
boost_report_value(PROJ_INSTALL_NAME_DIR)
|
||||
boost_report_value(FRAMEWORKDIR)
|
||||
endif(APPLE)
|
||||
@@ -0,0 +1,89 @@
|
||||
################################################################################
|
||||
# SociSystemInfo.cmake - part of CMake configuration of Proj.4 library
|
||||
#
|
||||
# Based on idea taken from http://code.google.com/p/softart/ project
|
||||
################################################################################
|
||||
# Copyright (C) 2010 Mateusz Loskot <mateusz@loskot.net>
|
||||
#
|
||||
# Distributed under the Boost Software License, Version 1.0.
|
||||
# (See accompanying file LICENSE_1_0.txt or copy at
|
||||
# http://www.boost.org/LICENSE_1_0.txt)
|
||||
################################################################################
|
||||
# The following variables are defined:
|
||||
# PROJ_COMPILER_NAME - name of compiler toolset, follows Boost toolset naming.
|
||||
# PROJ_PLATFORM_NAME - target platform name: x64, x86 or win32
|
||||
################################################################################
|
||||
|
||||
set(PROJ_COMPILER_NAME)
|
||||
set(PROJ_PLATFORM_NAME)
|
||||
|
||||
if(MINGW OR UNIX)
|
||||
exec_program(gcc ARGS -dumpversion OUTPUT_VARIABLE GCC_VERSION)
|
||||
string(REPLACE "." "" GCC_VERSION_STR_FULL ${GCC_VERSION})
|
||||
string(REGEX MATCH "[0-9]+\\.[0-9]+" GCC_VERSION_MAJOR_MINOR ${GCC_VERSION})
|
||||
endif()
|
||||
|
||||
if(WIN32)
|
||||
# Compilers, taken from http://predef.sourceforge.net/precomp.html#sec34
|
||||
if(MSVC)
|
||||
if(MSVC_VERSION EQUAL 1200)
|
||||
set(PROJ_COMPILER_NAME "msvc-6.0")
|
||||
endif()
|
||||
if(MSVC_VERSION EQUAL 1300)
|
||||
set(PROJ_COMPILER_NAME "msvc-7.0")
|
||||
endif()
|
||||
if(MSVC_VERSION EQUAL 1310)
|
||||
set(PROJ_COMPILER_NAME "msvc-7.1") #Visual Studio 2003
|
||||
endif()
|
||||
if(MSVC_VERSION EQUAL 1400)
|
||||
set(PROJ_COMPILER_NAME "msvc-8.0") #Visual Studio 2005
|
||||
endif()
|
||||
if(MSVC_VERSION EQUAL 1500)
|
||||
set(PROJ_COMPILER_NAME "msvc-9.0") #Visual Studio 2008
|
||||
endif()
|
||||
if(MSVC_VERSION EQUAL 1600)
|
||||
set(PROJ_COMPILER_NAME "msvc-10.0") #Visual Studio 2010
|
||||
endif()
|
||||
if(MSVC_VERSION EQUAL 1700)
|
||||
set(PROJ_COMPILER_NAME "msvc-11.0") #Visual Studio 2012
|
||||
endif()
|
||||
if(MSVC_VERSION EQUAL 1800)
|
||||
set(PROJ_COMPILER_NAME "msvc-12.0") #Visual Studio 2013
|
||||
endif()
|
||||
if(MSVC_VERSION EQUAL 1900) # CMake 3.1+
|
||||
set(PROJ_COMPILER_NAME "msvc-14.0") #Visual Studio 2015
|
||||
endif()
|
||||
if(MSVC_VERSION GREATER 1900 AND MSVC_VERSION LESS 1920) # CMake 3.8+
|
||||
set(PROJ_COMPILER_NAME "msvc-14.1") #Visual Studio 2017
|
||||
endif()
|
||||
endif(MSVC)
|
||||
|
||||
if(MINGW)
|
||||
set(PROJ_COMPILER_NAME "mingw-${GCC_VERSION}")
|
||||
endif( MINGW )
|
||||
|
||||
if(CMAKE_GENERATOR MATCHES "Win64")
|
||||
set(PROJ_PLATFORM_NAME "x64")
|
||||
else()
|
||||
set(PROJ_PLATFORM_NAME "win32")
|
||||
endif()
|
||||
endif(WIN32)
|
||||
|
||||
if(UNIX)
|
||||
set(PROJ_COMPILER_NAME "gcc-${GCC_VERSION}")
|
||||
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
|
||||
set(PROJ_PLATFORM_NAME "x64")
|
||||
else()
|
||||
set(PROJ_PLATFORM_NAME "x86")
|
||||
endif()
|
||||
endif(UNIX)
|
||||
|
||||
if(NOT PROJ_COMPILER_NAME)
|
||||
colormsg(_RED_ "WARNING:")
|
||||
colormsg(RED "Could not determine compiler toolset name to set PROJ_COMPILER_NAME variable.")
|
||||
endif()
|
||||
|
||||
if(NOT PROJ_COMPILER_NAME)
|
||||
colormsg(_RED_ "WARNING:")
|
||||
colormsg(RED "Could not determine platform name to set PROJ_COMPILER_NAME variable.")
|
||||
endif()
|
||||
@@ -0,0 +1,45 @@
|
||||
#
|
||||
# add test with sh script
|
||||
#
|
||||
|
||||
function(proj_add_test_script_sh SH_NAME BIN_USE)
|
||||
if(UNIX)
|
||||
get_filename_component(testname ${SH_NAME} NAME_WE)
|
||||
|
||||
set(TEST_OK 1)
|
||||
if(ARGV2)
|
||||
set(TEST_OK 0)
|
||||
set(GRID_FULLNAME ${PROJECT_SOURCE_DIR}/nad/${ARGV2})
|
||||
if(EXISTS ${GRID_FULLNAME})
|
||||
set(TEST_OK 1)
|
||||
endif(EXISTS ${GRID_FULLNAME})
|
||||
endif(ARGV2)
|
||||
|
||||
if( CMAKE_VERSION VERSION_LESS 2.8.4 )
|
||||
set(TEST_OK 0)
|
||||
message(STATUS "test with bash script need a cmake version >= 2.8.4")
|
||||
endif()
|
||||
|
||||
if(${TEST_OK})
|
||||
add_test( NAME "${testname}"
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/nad
|
||||
COMMAND ${PROJECT_SOURCE_DIR}/nad/${SH_NAME}
|
||||
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${${BIN_USE}}
|
||||
)
|
||||
endif(${TEST_OK})
|
||||
|
||||
endif(UNIX)
|
||||
endfunction()
|
||||
|
||||
|
||||
function(proj_add_gie_test TESTNAME TESTCASE)
|
||||
|
||||
set(GIE_BIN "gie")
|
||||
set(TESTFILE ${CMAKE_SOURCE_DIR}/test/${TESTCASE})
|
||||
add_test( NAME ${TESTNAME}
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/test
|
||||
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${GIE_BIN}
|
||||
${TESTFILE}
|
||||
)
|
||||
|
||||
endfunction()
|
||||
@@ -0,0 +1,456 @@
|
||||
################################################################################
|
||||
# SociUtilities.cmake - part of CMake configuration of Proj4 library
|
||||
#
|
||||
# Based on BoostUtilities.cmake from CMake configuration for Boost
|
||||
################################################################################
|
||||
# Copyright (C) 2007 Douglas Gregor <doug.gregor@gmail.com>
|
||||
# Copyright (C) 2007 Troy Straszheim
|
||||
# Copyright (C) 2010 Mateusz Loskot <mateusz@loskot.net>
|
||||
#
|
||||
# Distributed under the Boost Software License, Version 1.0.
|
||||
# See accompanying file LICENSE_1_0.txt or copy at
|
||||
# http://www.boost.org/LICENSE_1_0.txt
|
||||
################################################################################
|
||||
# Macros in this module:
|
||||
#
|
||||
# list_contains: Determine whether a string value is in a list.
|
||||
#
|
||||
# car: Return the first element in a list
|
||||
#
|
||||
# cdr: Return all but the first element in a list
|
||||
#
|
||||
# parse_arguments: Parse keyword arguments for use in other macros.
|
||||
#
|
||||
# proj_report_directory_property
|
||||
#
|
||||
# proj_target_output_name:
|
||||
#
|
||||
################################################################################
|
||||
|
||||
# This utility macro determines whether a particular string value
|
||||
# occurs within a list of strings:
|
||||
#
|
||||
# list_contains(result string_to_find arg1 arg2 arg3 ... argn)
|
||||
#
|
||||
# This macro sets the variable named by result equal to TRUE if
|
||||
# string_to_find is found anywhere in the following arguments.
|
||||
macro(list_contains var value)
|
||||
set(${var})
|
||||
foreach (value2 ${ARGN})
|
||||
if (${value} STREQUAL ${value2})
|
||||
set(${var} TRUE)
|
||||
endif (${value} STREQUAL ${value2})
|
||||
endforeach (value2)
|
||||
endmacro(list_contains)
|
||||
|
||||
# This utility macro extracts the first argument from the list of
|
||||
# arguments given, and places it into the variable named var.
|
||||
#
|
||||
# car(var arg1 arg2 ...)
|
||||
macro(car var)
|
||||
set(${var} ${ARGV1})
|
||||
endmacro(car)
|
||||
|
||||
# This utility macro extracts all of the arguments given except the
|
||||
# first, and places them into the variable named var.
|
||||
#
|
||||
# car(var arg1 arg2 ...)
|
||||
macro(cdr var junk)
|
||||
set(${var} ${ARGN})
|
||||
endmacro(cdr)
|
||||
|
||||
# The parse_arguments macro will take the arguments of another macro and
|
||||
# define several variables. The first argument to parse_arguments is a
|
||||
# prefix to put on all variables it creates. The second argument is a
|
||||
# list of names, and the third argument is a list of options. Both of
|
||||
# these lists should be quoted. The rest of parse_arguments are
|
||||
# arguments from another macro to be parsed.
|
||||
#
|
||||
# parse_arguments(prefix arg_names options arg1 arg2...)
|
||||
#
|
||||
# For each item in options, parse_arguments will create a variable with
|
||||
# that name, prefixed with prefix_. So, for example, if prefix is
|
||||
# MY_MACRO and options is OPTION1;OPTION2, then parse_arguments will
|
||||
# create the variables MY_MACRO_OPTION1 and MY_MACRO_OPTION2. These
|
||||
# variables will be set to true if the option exists in the command line
|
||||
# or false otherwise.
|
||||
#
|
||||
# For each item in arg_names, parse_arguments will create a variable
|
||||
# with that name, prefixed with prefix_. Each variable will be filled
|
||||
# with the arguments that occur after the given arg_name is encountered
|
||||
# up to the next arg_name or the end of the arguments. All options are
|
||||
# removed from these lists. parse_arguments also creates a
|
||||
# prefix_DEFAULT_ARGS variable containing the list of all arguments up
|
||||
# to the first arg_name encountered.
|
||||
macro(parse_arguments prefix arg_names option_names)
|
||||
set(DEFAULT_ARGS)
|
||||
foreach(arg_name ${arg_names})
|
||||
set(${prefix}_${arg_name})
|
||||
endforeach(arg_name)
|
||||
foreach(option ${option_names})
|
||||
set(${prefix}_${option} FALSE)
|
||||
endforeach(option)
|
||||
|
||||
set(current_arg_name DEFAULT_ARGS)
|
||||
set(current_arg_list)
|
||||
foreach(arg ${ARGN})
|
||||
list_contains(is_arg_name ${arg} ${arg_names})
|
||||
if (is_arg_name)
|
||||
set(${prefix}_${current_arg_name} ${current_arg_list})
|
||||
set(current_arg_name ${arg})
|
||||
set(current_arg_list)
|
||||
else (is_arg_name)
|
||||
list_contains(is_option ${arg} ${option_names})
|
||||
if (is_option)
|
||||
set(${prefix}_${arg} TRUE)
|
||||
else (is_option)
|
||||
set(current_arg_list ${current_arg_list} ${arg})
|
||||
endif (is_option)
|
||||
endif (is_arg_name)
|
||||
endforeach(arg)
|
||||
set(${prefix}_${current_arg_name} ${current_arg_list})
|
||||
endmacro(parse_arguments)
|
||||
|
||||
# Perform a reverse topological sort on the given LIST.
|
||||
#
|
||||
# topological_sort(my_list "MY_" "_EDGES")
|
||||
#
|
||||
# LIST is the name of a variable containing a list of elements to be
|
||||
# sorted in reverse topological order. Each element in the list has a
|
||||
# set of outgoing edges (for example, those other list elements that
|
||||
# it depends on). In the resulting reverse topological ordering
|
||||
# (written back into the variable named LIST), an element will come
|
||||
# later in the list than any of the elements that can be reached by
|
||||
# following its outgoing edges and the outgoing edges of any vertices
|
||||
# they target, recursively. Thus, if the edges represent dependencies
|
||||
# on build targets, for example, the reverse topological ordering is
|
||||
# the order in which one would build those targets.
|
||||
#
|
||||
# For each element E in this list, the edges for E are contained in
|
||||
# the variable named ${PREFIX}${E}${SUFFIX}, where E is the
|
||||
# upper-cased version of the element in the list. If no such variable
|
||||
# exists, then it is assumed that there are no edges. For example, if
|
||||
# my_list contains a, b, and c, one could provide a dependency graph
|
||||
# using the following variables:
|
||||
#
|
||||
# MY_A_EDGES b
|
||||
# MY_B_EDGES
|
||||
# MY_C_EDGES a b
|
||||
#
|
||||
# With the involcation of topological_sort shown above and these
|
||||
# variables, the resulting reverse topological ordering will be b, a,
|
||||
# c.
|
||||
function(topological_sort LIST PREFIX SUFFIX)
|
||||
# Clear the stack and output variable
|
||||
set(VERTICES "${${LIST}}")
|
||||
set(STACK)
|
||||
set(${LIST})
|
||||
|
||||
# Loop over all of the vertices, starting the topological sort from
|
||||
# each one.
|
||||
foreach(VERTEX ${VERTICES})
|
||||
string(TOUPPER ${VERTEX} UPPER_VERTEX)
|
||||
|
||||
# If we haven't already processed this vertex, start a depth-first
|
||||
# search from where.
|
||||
if (NOT FOUND_${UPPER_VERTEX})
|
||||
# Push this vertex onto the stack with all of its outgoing edges
|
||||
string(REPLACE ";" " " NEW_ELEMENT
|
||||
"${VERTEX};${${PREFIX}${UPPER_VERTEX}${SUFFIX}}")
|
||||
list(APPEND STACK ${NEW_ELEMENT})
|
||||
|
||||
# We've now seen this vertex
|
||||
set(FOUND_${UPPER_VERTEX} TRUE)
|
||||
|
||||
# While the depth-first search stack is not empty
|
||||
list(LENGTH STACK STACK_LENGTH)
|
||||
while(STACK_LENGTH GREATER 0)
|
||||
# Remove the vertex and its remaining out-edges from the top
|
||||
# of the stack
|
||||
list(GET STACK -1 OUT_EDGES)
|
||||
list(REMOVE_AT STACK -1)
|
||||
|
||||
# Get the source vertex and the list of out-edges
|
||||
separate_arguments(OUT_EDGES)
|
||||
list(GET OUT_EDGES 0 SOURCE)
|
||||
list(REMOVE_AT OUT_EDGES 0)
|
||||
|
||||
# While there are still out-edges remaining
|
||||
list(LENGTH OUT_EDGES OUT_DEGREE)
|
||||
while (OUT_DEGREE GREATER 0)
|
||||
# Pull off the first outgoing edge
|
||||
list(GET OUT_EDGES 0 TARGET)
|
||||
list(REMOVE_AT OUT_EDGES 0)
|
||||
|
||||
string(TOUPPER ${TARGET} UPPER_TARGET)
|
||||
if (NOT FOUND_${UPPER_TARGET})
|
||||
# We have not seen the target before, so we will traverse
|
||||
# its outgoing edges before coming back to our
|
||||
# source. This is the key to the depth-first traversal.
|
||||
|
||||
# We've now seen this vertex
|
||||
set(FOUND_${UPPER_TARGET} TRUE)
|
||||
|
||||
# Push the remaining edges for the current vertex onto the
|
||||
# stack
|
||||
string(REPLACE ";" " " NEW_ELEMENT
|
||||
"${SOURCE};${OUT_EDGES}")
|
||||
list(APPEND STACK ${NEW_ELEMENT})
|
||||
|
||||
# Setup the new source and outgoing edges
|
||||
set(SOURCE ${TARGET})
|
||||
string(TOUPPER ${SOURCE} UPPER_SOURCE)
|
||||
set(OUT_EDGES
|
||||
${${PREFIX}${UPPER_SOURCE}${SUFFIX}})
|
||||
endif(NOT FOUND_${UPPER_TARGET})
|
||||
|
||||
list(LENGTH OUT_EDGES OUT_DEGREE)
|
||||
endwhile (OUT_DEGREE GREATER 0)
|
||||
|
||||
# We have finished all of the outgoing edges for
|
||||
# SOURCE; add it to the resulting list.
|
||||
list(APPEND ${LIST} ${SOURCE})
|
||||
|
||||
# Check the length of the stack
|
||||
list(LENGTH STACK STACK_LENGTH)
|
||||
endwhile(STACK_LENGTH GREATER 0)
|
||||
endif (NOT FOUND_${UPPER_VERTEX})
|
||||
endforeach(VERTEX)
|
||||
|
||||
set(${LIST} ${${LIST}} PARENT_SCOPE)
|
||||
endfunction(topological_sort)
|
||||
|
||||
# Small little hack that tweaks a component name (as used for CPack)
|
||||
# to make sure to avoid certain names that cause problems. Sets the
|
||||
# variable named varname to the "sanitized" name.
|
||||
#
|
||||
# FIXME: This is a complete hack. We probably need to fix the CPack
|
||||
# generators (NSIS in particular) to get rid of the need for this.
|
||||
macro(fix_cpack_component_name varname name)
|
||||
if (${name} STREQUAL "foreach")
|
||||
set(${varname} "boost_foreach")
|
||||
else()
|
||||
set(${varname} ${name})
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
|
||||
#
|
||||
# A big shout out to the cmake gurus @ compiz
|
||||
#
|
||||
|
||||
function (colormsg)
|
||||
string (ASCII 27 _escape)
|
||||
set(WHITE "29")
|
||||
set(GRAY "30")
|
||||
set(RED "31")
|
||||
set(GREEN "32")
|
||||
set(YELLOW "33")
|
||||
set(BLUE "34")
|
||||
set(MAG "35")
|
||||
set(CYAN "36")
|
||||
|
||||
foreach (color WHITE GRAY RED GREEN YELLOW BLUE MAG CYAN)
|
||||
set(HI${color} "1\;${${color}}")
|
||||
set(LO${color} "2\;${${color}}")
|
||||
set(_${color}_ "4\;${${color}}")
|
||||
set(_HI${color}_ "1\;4\;${${color}}")
|
||||
set(_LO${color}_ "2\;4\;${${color}}")
|
||||
endforeach()
|
||||
|
||||
set(str "")
|
||||
set(coloron FALSE)
|
||||
foreach(arg ${ARGV})
|
||||
if (NOT ${${arg}} STREQUAL "")
|
||||
if (CMAKE_COLOR_MAKEFILE)
|
||||
set(str "${str}${_escape}[${${arg}}m")
|
||||
set(coloron TRUE)
|
||||
endif()
|
||||
else()
|
||||
set(str "${str}${arg}")
|
||||
if (coloron)
|
||||
set(str "${str}${_escape}[0m")
|
||||
set(coloron FALSE)
|
||||
endif()
|
||||
set(str "${str} ")
|
||||
endif()
|
||||
endforeach()
|
||||
message(STATUS ${str})
|
||||
endfunction()
|
||||
|
||||
# colormsg("Colors:"
|
||||
# WHITE "white" GRAY "gray" GREEN "green"
|
||||
# RED "red" YELLOW "yellow" BLUE "blue" MAG "mag" CYAN "cyan"
|
||||
# _WHITE_ "white" _GRAY_ "gray" _GREEN_ "green"
|
||||
# _RED_ "red" _YELLOW_ "yellow" _BLUE_ "blue" _MAG_ "mag" _CYAN_ "cyan"
|
||||
# _HIWHITE_ "white" _HIGRAY_ "gray" _HIGREEN_ "green"
|
||||
# _HIRED_ "red" _HIYELLOW_ "yellow" _HIBLUE_ "blue" _HIMAG_ "mag" _HICYAN_ "cyan"
|
||||
# HIWHITE "white" HIGRAY "gray" HIGREEN "green"
|
||||
# HIRED "red" HIYELLOW "yellow" HIBLUE "blue" HIMAG "mag" HICYAN "cyan"
|
||||
# "right?")
|
||||
|
||||
#
|
||||
# pretty-prints the value of a variable so that the
|
||||
# equals signs align
|
||||
#
|
||||
|
||||
function(boost_report_value NAME)
|
||||
string(LENGTH "${NAME}" varlen)
|
||||
# LOG
|
||||
#message(STATUS "boost_report_value: NAME=${NAME} (${varlen})")
|
||||
#message(STATUS "boost_report_value: \${NAME}=${${NAME}}")
|
||||
math(EXPR padding_len 40-${varlen})
|
||||
string(SUBSTRING " "
|
||||
0 ${padding_len} varpadding)
|
||||
colormsg("${NAME}${varpadding} = ${${NAME}}")
|
||||
endfunction()
|
||||
|
||||
function(trace NAME)
|
||||
if(BOOST_CMAKE_TRACE)
|
||||
string(LENGTH "${NAME}" varlen)
|
||||
math(EXPR padding_len 40-${varlen})
|
||||
string(SUBSTRING "........................................"
|
||||
0 ${padding_len} varpadding)
|
||||
message("${NAME} ${varpadding} ${${NAME}}")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
#
|
||||
# pretty-prints the value of a variable so that the
|
||||
# equals signs align
|
||||
#
|
||||
function(boost_report_pretty PRETTYNAME VARNAME)
|
||||
string(LENGTH "${PRETTYNAME}" varlen)
|
||||
math(EXPR padding_len 30-${varlen})
|
||||
string(SUBSTRING " "
|
||||
0 ${padding_len} varpadding)
|
||||
message(STATUS "${PRETTYNAME}${varpadding} = ${${VARNAME}}")
|
||||
endfunction()
|
||||
|
||||
#
|
||||
# assert that ARG is actually a library target
|
||||
#
|
||||
|
||||
macro(dependency_check ARG)
|
||||
trace(ARG)
|
||||
if (NOT "${ARG}" STREQUAL "")
|
||||
get_target_property(deptype ${ARG} TYPE)
|
||||
if(NOT deptype MATCHES ".*_LIBRARY$")
|
||||
set(DEPENDENCY_OKAY FALSE)
|
||||
list(APPEND DEPENDENCY_FAILURES ${ARG})
|
||||
endif()
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
|
||||
|
||||
#
|
||||
# Pretty-print of given property of current directory.
|
||||
#
|
||||
macro(proj_report_directory_property PROPNAME)
|
||||
get_directory_property(${PROPNAME} ${PROPNAME})
|
||||
boost_report_value(${PROPNAME})
|
||||
endmacro()
|
||||
|
||||
#
|
||||
# Scans the current directory and returns a list of subdirectories.
|
||||
# Author: Robert Fleming
|
||||
# Source: http://www.cmake.org/pipermail/cmake/2008-February/020114.html
|
||||
#
|
||||
# Third parameter is 1 if you want relative paths returned.
|
||||
# Usage: list_subdirectories(the_list_is_returned_here /path/to/project TRUE)
|
||||
#
|
||||
|
||||
macro(list_subdirectories retval curdir return_relative)
|
||||
file(GLOB sub-dir RELATIVE ${curdir} *)
|
||||
set(list_of_dirs "")
|
||||
foreach(dir ${sub-dir})
|
||||
if(IS_DIRECTORY ${curdir}/${dir})
|
||||
if (${return_relative})
|
||||
set(list_of_dirs ${list_of_dirs} ${dir})
|
||||
else()
|
||||
set(list_of_dirs ${list_of_dirs} ${curdir}/${dir})
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
set(${retval} ${list_of_dirs})
|
||||
endmacro()
|
||||
|
||||
#
|
||||
# Generates output name for given target depending on platform and version.
|
||||
# For instance, on Windows, libraries get ABI version suffix soci_coreXY.{dll|lib}.
|
||||
#
|
||||
|
||||
function(proj_target_output_name TARGET_NAME OUTPUT_NAME)
|
||||
if(NOT DEFINED TARGET_NAME)
|
||||
message(SEND_ERROR "Error, the variable TARGET_NAME is not defined!")
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED ${PROJECT_INTERN_NAME}_VERSION)
|
||||
message(SEND_ERROR "Error, the variable ${${PROJECT_INTERN_NAME}_VERSION} is not defined!")
|
||||
endif()
|
||||
|
||||
# On Windows, ABI version is specified using binary file name suffix.
|
||||
# On Unix, suffix is empty and SOVERSION is used instead.
|
||||
if (WIN32)
|
||||
string(LENGTH "${${PROJECT_INTERN_NAME}_ABI_VERSION}" abilen)
|
||||
if(abilen GREATER 0)
|
||||
set(SUFFIX "_${${PROJECT_INTERN_NAME}_ABI_VERSION}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(${OUTPUT_NAME} ${TARGET_NAME}${SUFFIX} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
|
||||
#
|
||||
# conversion from lla name to lla convert name ( without lla extension)
|
||||
#
|
||||
|
||||
function(proj_lla_output_name LLA_INPUT_NAME LLA_OUTPUT_NAME )
|
||||
get_filename_component(filename ${LLA_INPUT_NAME} NAME_WE)
|
||||
get_filename_component(pathname ${LLA_INPUT_NAME} PATH)
|
||||
set(${LLA_OUTPUT_NAME} ${pathname}/${filename} PARENT_SCOPE)
|
||||
set(${LLA_OUTPUT_NAME} ${pathname}/${filename} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(proj_lla_target_name LLA_INPUT_NAME LLA_TARGET )
|
||||
get_filename_component(filename ${LLA_INPUT_NAME} NAME_WE)
|
||||
set(${LLA_TARGET} ${filename} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
#
|
||||
# in place conversion of lla file to gsb
|
||||
#
|
||||
|
||||
function(proj_convert_grid_lla2gsb GRID_DIRECTORY)
|
||||
set(NAD2BIN_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
|
||||
set(NAD2BIN_PATH ${NAD2BIN_DIR}/nad2bin${CMAKE_EXECUTABLE_SUFFIX})
|
||||
file(TO_NATIVE_PATH ${NAD2BIN_PATH} NAD2BIN_EXE)
|
||||
file(GLOB LLA_FILES ${${GRID_DIRECTORY}}/*.lla)
|
||||
foreach(LLA ${LLA_FILES} )
|
||||
proj_lla_output_name(${LLA} DEST_FILE)
|
||||
file(TO_NATIVE_PATH ${DEST_FILE} DEST)
|
||||
proj_lla_target_name(${LLA} LLA_TARGET)
|
||||
if(NOT EXISTS ${DEST})
|
||||
add_custom_target( ${LLA_TARGET} ALL
|
||||
COMMAND ${NAD2BIN_EXE} ${DEST} "<" ${LLA}
|
||||
DEPENDS nad2bin )
|
||||
endif(NOT EXISTS ${DEST})
|
||||
endforeach(LLA)
|
||||
endfunction()
|
||||
|
||||
#
|
||||
# add lla output list to an existing file list
|
||||
#
|
||||
|
||||
function(proj_append_lla_output_file LLA_INPUT_FILE FILE_LIST)
|
||||
set(LIST_OUT ${${FILE_LIST}})
|
||||
foreach(LLA ${${LLA_INPUT_FILE}} )
|
||||
proj_lla_output_name(${LLA} DEST_FILE)
|
||||
file(TO_NATIVE_PATH ${DEST_FILE} DEST)
|
||||
set(LIST_OUT ${LIST_OUT} ${DEST_FILE} )
|
||||
endforeach(LLA ${LLA_INPUT_FILE})
|
||||
set(${FILE_LIST} ${LIST_OUT} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
################################################################################
|
||||
# Proj4Version.cmake - part of CMake configuration of Proj4 library
|
||||
################################################################################
|
||||
# Copyright (C) 2010 Mateusz Loskot <mateusz@loskot.net>
|
||||
#
|
||||
# Distributed under the Boost Software License, Version 1.0
|
||||
################################################################################
|
||||
# Macros in this module:
|
||||
#
|
||||
# proj_version - defines version information for PROJ library
|
||||
# (best known as PROJ4 because MAJOR version is 4 since a very long time)
|
||||
################################################################################
|
||||
|
||||
# Defines version information for PROJ library
|
||||
#
|
||||
# proj_version(MAJOR major_version MINOR minor_version PATCH patch_level)
|
||||
#
|
||||
# MAJOR.MINOR version is used to set SOVERSION
|
||||
#
|
||||
|
||||
macro(proj_version)
|
||||
parse_arguments(THIS_VERSION "MAJOR;MINOR;PATCH;"
|
||||
""
|
||||
${ARGN})
|
||||
|
||||
# Set version components
|
||||
set(${PROJECT_INTERN_NAME}_VERSION_MAJOR ${THIS_VERSION_MAJOR})
|
||||
set(${PROJECT_INTERN_NAME}_VERSION_MINOR ${THIS_VERSION_MINOR})
|
||||
set(${PROJECT_INTERN_NAME}_VERSION_PATCH ${THIS_VERSION_PATCH})
|
||||
|
||||
# Set VERSION string
|
||||
set(${PROJECT_INTERN_NAME}_VERSION
|
||||
"${${PROJECT_INTERN_NAME}_VERSION_MAJOR}.${${PROJECT_INTERN_NAME}_VERSION_MINOR}.${${PROJECT_INTERN_NAME}_VERSION_PATCH}")
|
||||
|
||||
# Set ABI version string used to name binary output
|
||||
# On Windows, ABI version is specified using binary file name suffix.
|
||||
if(WIN32)
|
||||
set(${PROJECT_INTERN_NAME}_ABI_VERSION
|
||||
"${${PROJECT_INTERN_NAME}_VERSION_MAJOR}_${${PROJECT_INTERN_NAME}_VERSION_MINOR}")
|
||||
endif()
|
||||
|
||||
message(STATUS "")
|
||||
boost_report_value(${PROJECT_INTERN_NAME}_VERSION)
|
||||
if(WIN32)
|
||||
boost_report_value(${PROJECT_INTERN_NAME}_ABI_VERSION)
|
||||
endif(WIN32)
|
||||
endmacro()
|
||||
@@ -1,89 +0,0 @@
|
||||
################################################################################
|
||||
# ProjConfig.cmake - CMake build configuration of PROJ library
|
||||
################################################################################
|
||||
# Copyright (C) 2010 Mateusz Loskot <mateusz@loskot.net>
|
||||
#
|
||||
# Distributed under the Boost Software License, Version 1.0.
|
||||
# (See accompanying file LICENSE_1_0.txt or copy at
|
||||
# https://www.boost.org/LICENSE_1_0.txt)
|
||||
################################################################################
|
||||
include(CheckLibraryExists)
|
||||
include(CheckFunctionExists)
|
||||
|
||||
# check needed include file
|
||||
check_function_exists(localeconv HAVE_LOCALECONV)
|
||||
check_function_exists(strerror HAVE_STRERROR)
|
||||
if(NOT WIN32)
|
||||
check_library_exists(dl dladdr "" HAVE_LIBDL)
|
||||
check_library_exists(m exp "" HAVE_LIBM)
|
||||
endif()
|
||||
|
||||
set(PACKAGE "proj")
|
||||
set(PACKAGE_BUGREPORT "https://github.com/OSGeo/PROJ/issues")
|
||||
set(PACKAGE_NAME "PROJ")
|
||||
set(PACKAGE_STRING "PROJ ${${PROJECT_NAME}_VERSION}")
|
||||
set(PACKAGE_TARNAME "proj")
|
||||
set(PACKAGE_URL "https://proj.org")
|
||||
set(PACKAGE_VERSION "${${PROJECT_NAME}_VERSION}")
|
||||
|
||||
# check if a second proj_config.h exists (created by ./configure)
|
||||
# as this is within CMake's C_INCLUDES / CXX_INCLUDES
|
||||
set(AUTOCONF_PROJ_CONFIG_H "${PROJ_SOURCE_DIR}/src/proj_config.h")
|
||||
if(EXISTS ${AUTOCONF_PROJ_CONFIG_H})
|
||||
message(WARNING
|
||||
"Autoconf's ${AUTOCONF_PROJ_CONFIG_H} may interfere with this "
|
||||
"CMake build. Run 'make distclean' in the source directory "
|
||||
"before CMake's build.")
|
||||
endif()
|
||||
|
||||
# Get the git hash to write it in the release message.
|
||||
set(PROJ_GIT_HASH "")
|
||||
if(DEFINED ENV{PROJ_GITHUB_SHA})
|
||||
string(SUBSTRING "$ENV{PROJ_GITHUB_SHA}" 0 7 PROJ_GIT_HASH)
|
||||
else()
|
||||
find_package(Git QUIET)
|
||||
if(Git_FOUND AND EXISTS "${PROJ_SOURCE_DIR}/.git")
|
||||
# Get the short hash
|
||||
execute_process(
|
||||
COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
|
||||
WORKING_DIRECTORY "${PROJ_SOURCE_DIR}"
|
||||
RESULT_VARIABLE GIT_REV_RESULT
|
||||
OUTPUT_VARIABLE PROJ_GIT_HASH
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
ERROR_QUIET
|
||||
)
|
||||
|
||||
if(GIT_REV_RESULT EQUAL 0)
|
||||
# Check if the working directory is dirty
|
||||
execute_process(
|
||||
COMMAND ${GIT_EXECUTABLE} status --porcelain --untracked-files=no
|
||||
WORKING_DIRECTORY "${PROJ_SOURCE_DIR}"
|
||||
RESULT_VARIABLE GIT_STATUS_RESULT
|
||||
OUTPUT_VARIABLE GIT_STATUS_OUTPUT
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
ERROR_QUIET
|
||||
)
|
||||
|
||||
# If the command succeeds and outputs anything, the tree is dirty
|
||||
if(GIT_STATUS_RESULT EQUAL 0 AND NOT GIT_STATUS_OUTPUT STREQUAL "")
|
||||
string(APPEND PROJ_GIT_HASH "*")
|
||||
endif()
|
||||
else()
|
||||
set(PROJ_GIT_HASH "")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
if(PROJ_GIT_HASH)
|
||||
add_compile_definitions(PROJ_GIT_HASH=\"${PROJ_GIT_HASH}\")
|
||||
endif()
|
||||
message(VERBOSE "PROJ_GIT_HASH=\"${PROJ_GIT_HASH}\"")
|
||||
|
||||
# Tell CMake to re-configure if the Git HEAD or index changes
|
||||
if(Git_FOUND AND EXISTS "${PROJ_SOURCE_DIR}/.git")
|
||||
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS
|
||||
"${PROJ_SOURCE_DIR}/.git/HEAD" # for the hash
|
||||
"${PROJ_SOURCE_DIR}/.git/index" # for the *
|
||||
)
|
||||
endif()
|
||||
|
||||
configure_file(cmake/proj_config.cmake.in src/proj_config.h)
|
||||
@@ -1,20 +0,0 @@
|
||||
#----------------------------------------------
|
||||
# installation path settings
|
||||
#----------------------------------------------
|
||||
if(WIN32)
|
||||
if(DEFINED ENV{OSGEO4W_ROOT})
|
||||
set(OSGEO4W_ROOT_DIR $ENV{OSGEO4W_ROOT})
|
||||
else()
|
||||
set(OSGEO4W_ROOT_DIR c:/OSGeo4W)
|
||||
endif()
|
||||
set(DEFAULT_PROJ_ROOT_DIR ${OSGEO4W_ROOT_DIR})
|
||||
endif()
|
||||
if(UNIX)
|
||||
set(DEFAULT_PROJ_ROOT_DIR "/usr/local/")
|
||||
endif()
|
||||
|
||||
|
||||
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
||||
set(CMAKE_INSTALL_PREFIX ${DEFAULT_PROJ_ROOT_DIR}
|
||||
CACHE PATH "Proj install prefix" FORCE)
|
||||
endif()
|
||||
@@ -1,31 +0,0 @@
|
||||
if(APPLE)
|
||||
set(FRAMEWORKDIR "Library/Frameworks" CACHE PATH
|
||||
"the path to install framework")
|
||||
set(BUNDLEDIR "Applications/OSGEO" CACHE PATH
|
||||
"the path to install bundle")
|
||||
file(RELATIVE_PATH BUNDLE_FRAME_REL_PATH_AAA "/${FRAMEWORKDIR}" "/aaa")
|
||||
string(LENGTH ${BUNDLE_FRAME_REL_PATH_AAA} AAA_LENGTH)
|
||||
math(EXPR RELATIVE_PATH_LENGTH "${AAA_LENGTH}-4")
|
||||
string(SUBSTRING ${BUNDLE_FRAME_REL_PATH_AAA}
|
||||
0 ${RELATIVE_PATH_LENGTH} BUNDLE_FRAME_REL_PATH)
|
||||
set(PROJ_INSTALL_NAME_DIR
|
||||
"@executable_path/${BUNDLE_FRAME_REL_PATH}/${FRAMEWORKDIR}")
|
||||
else()
|
||||
set(FRAMEWORKDIR "")
|
||||
set(BUNDLEDIR "")
|
||||
set(PROJ_INSTALL_NAME_DIR "")
|
||||
endif()
|
||||
|
||||
set(PROJ_RESOURCES "")
|
||||
|
||||
if(APPLE)
|
||||
option(BUILD_FRAMEWORKS_AND_BUNDLE
|
||||
"if set to ON, build a library framework and application bundle, \
|
||||
otherwise install classical UNIX bin/lib" OFF)
|
||||
if(BUILD_FRAMEWORKS_AND_BUNDLE)
|
||||
set(CMAKE_INSTALL_BINDIR ${BUNDLEDIR})
|
||||
endif()
|
||||
print_variable(BUNDLEDIR)
|
||||
print_variable(PROJ_INSTALL_NAME_DIR)
|
||||
print_variable(FRAMEWORKDIR)
|
||||
endif()
|
||||
@@ -1,73 +0,0 @@
|
||||
#
|
||||
# Add command-line interface tests
|
||||
#
|
||||
|
||||
function(proj_test_set_properties TESTNAME)
|
||||
set(_env "PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY=YES"
|
||||
"PROJ_DATA=${PROJ_BINARY_DIR}/data/for_tests")
|
||||
if(TIFF_ENABLED)
|
||||
set(_env ${_env} "TIFF_ENABLED=YES")
|
||||
else()
|
||||
set(_env ${_env} "TIFF_ENABLED=NO")
|
||||
endif()
|
||||
set_property(TEST ${TESTNAME}
|
||||
PROPERTY ENVIRONMENT ${_env})
|
||||
endfunction()
|
||||
|
||||
function(proj_add_test_script_sh SH_NAME EXE_PATH)
|
||||
set(testname ${SH_NAME})
|
||||
|
||||
add_test(NAME ${testname}
|
||||
WORKING_DIRECTORY ${PROJ_BINARY_DIR}/test/cli
|
||||
COMMAND bash ${PROJ_SOURCE_DIR}/test/cli/${SH_NAME} "${${EXE_PATH}}"
|
||||
)
|
||||
proj_test_set_properties(${testname})
|
||||
endfunction()
|
||||
|
||||
function(proj_run_cli_test TESTFILE EXE_PATH)
|
||||
set(testname ${TESTFILE})
|
||||
|
||||
add_test(NAME ${testname}
|
||||
WORKING_DIRECTORY ${PROJ_BINARY_DIR}/test/cli
|
||||
COMMAND ${Python_EXECUTABLE}
|
||||
${PROJ_SOURCE_DIR}/test/cli/run_cli_test.py
|
||||
--exe "${${EXE_PATH}}"
|
||||
${PROJ_SOURCE_DIR}/test/cli/${TESTFILE}
|
||||
)
|
||||
proj_test_set_properties(${testname})
|
||||
endfunction()
|
||||
|
||||
function(proj_add_gie_test TESTNAME TESTCASE)
|
||||
|
||||
set(GIE_BIN $<TARGET_FILE_NAME:gie>)
|
||||
set(TESTFILE ${PROJ_SOURCE_DIR}/test/${TESTCASE})
|
||||
add_test(NAME ${TESTNAME}
|
||||
WORKING_DIRECTORY ${PROJ_SOURCE_DIR}/test
|
||||
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${GIE_BIN}
|
||||
${TESTFILE}
|
||||
)
|
||||
proj_test_set_properties(${TESTNAME})
|
||||
|
||||
endfunction()
|
||||
|
||||
# Create user writable directory for tests
|
||||
add_custom_target(create_tmp_user_writable_dir ALL
|
||||
COMMAND ${CMAKE_COMMAND} -E remove_directory ${PROJ_BINARY_DIR}/tmp_user_writable_dir
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJ_BINARY_DIR}/tmp_user_writable_dir)
|
||||
|
||||
function(proj_add_gie_network_dependent_test TESTNAME TESTCASE)
|
||||
|
||||
set(GIE_BIN $<TARGET_FILE_NAME:gie>)
|
||||
set(TESTFILE ${PROJ_SOURCE_DIR}/test/${TESTCASE})
|
||||
add_test(NAME ${TESTNAME}
|
||||
WORKING_DIRECTORY ${PROJ_SOURCE_DIR}/test
|
||||
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${GIE_BIN}
|
||||
${TESTFILE}
|
||||
)
|
||||
set_property(TEST ${TESTNAME}
|
||||
PROPERTY ENVIRONMENT
|
||||
"PROJ_USER_WRITABLE_DIRECTORY=${PROJ_BINARY_DIR}/tmp_user_writable_dir"
|
||||
"PROJ_NETWORK=ON"
|
||||
"PROJ_DATA=${PROJ_BINARY_DIR}/data/for_tests")
|
||||
|
||||
endfunction()
|
||||
@@ -1,100 +0,0 @@
|
||||
################################################################################
|
||||
# ProjUtilities.cmake - part of CMake configuration of PROJ library
|
||||
#
|
||||
# Based on BoostUtilities.cmake from CMake configuration for Boost
|
||||
################################################################################
|
||||
# Copyright (C) 2007 Douglas Gregor <doug.gregor@gmail.com>
|
||||
# Copyright (C) 2007 Troy Straszheim
|
||||
# Copyright (C) 2010 Mateusz Loskot <mateusz@loskot.net>
|
||||
#
|
||||
# Distributed under the Boost Software License, Version 1.0.
|
||||
# See accompanying file LICENSE_1_0.txt or copy at
|
||||
# https://www.boost.org/LICENSE_1_0.txt
|
||||
################################################################################
|
||||
# Macros in this module:
|
||||
#
|
||||
# print_variable
|
||||
# proj_target_output_name
|
||||
# configure_proj_pc
|
||||
#
|
||||
################################################################################
|
||||
|
||||
#
|
||||
# pretty-prints the value of a variable so that the
|
||||
# equals signs align
|
||||
#
|
||||
|
||||
function(print_variable NAME)
|
||||
string(LENGTH "${NAME}" varlen)
|
||||
math(EXPR padding_len 30-${varlen})
|
||||
if(${padding_len} GREATER 0)
|
||||
string(SUBSTRING " "
|
||||
0 ${padding_len} varpadding)
|
||||
endif()
|
||||
message(STATUS "${NAME}${varpadding} = ${${NAME}}")
|
||||
endfunction()
|
||||
|
||||
#
|
||||
# Configure a pkg-config file proj.pc
|
||||
# See also ProjInstallPath.cmake
|
||||
#
|
||||
|
||||
function(set_variable_from_rel_or_absolute_path var root rel_or_abs_path)
|
||||
if(IS_ABSOLUTE "${rel_or_abs_path}")
|
||||
set(${var} "${rel_or_abs_path}" PARENT_SCOPE)
|
||||
else()
|
||||
set(${var} "${root}/${rel_or_abs_path}" PARENT_SCOPE)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(configure_proj_pc)
|
||||
set(prefix ${CMAKE_INSTALL_PREFIX})
|
||||
set_variable_from_rel_or_absolute_path("libdir" "$\{prefix\}" "${CMAKE_INSTALL_LIBDIR}")
|
||||
set_variable_from_rel_or_absolute_path("includedir" "$\{prefix\}" "${CMAKE_INSTALL_INCLUDEDIR}")
|
||||
set_variable_from_rel_or_absolute_path("datarootdir" "$\{prefix\}" "${CMAKE_INSTALL_DATAROOTDIR}")
|
||||
set(datadir "$\{datarootdir\}")
|
||||
set(PACKAGE "proj")
|
||||
set(VERSION ${PROJ_VERSION})
|
||||
# Build strings of dependencies (Libs.private, Requires.private)
|
||||
set(EXTRA_LIBS "${CMAKE_THREAD_LIBS_INIT}")
|
||||
set(EXTRA_REQUIRES "")
|
||||
option(USE_PKGCONFIG_REQUIRES "Use 'Requires' instead 'Libs' in proj.pc" ON)
|
||||
macro(add_module_or_libs MODULE)
|
||||
if(USE_PKGCONFIG_REQUIRES)
|
||||
list(APPEND EXTRA_REQUIRES "${MODULE}")
|
||||
else()
|
||||
list(APPEND EXTRA_LIBS "${ARGN}")
|
||||
endif()
|
||||
endmacro()
|
||||
add_module_or_libs(sqlite3 -lsqlite3)
|
||||
if(TIFF_ENABLED)
|
||||
add_module_or_libs(libtiff-4 -ltiff)
|
||||
endif()
|
||||
if(CURL_ENABLED)
|
||||
add_module_or_libs(libcurl -lcurl)
|
||||
endif()
|
||||
if(WIN32 AND NOT MINGW)
|
||||
list(APPEND EXTRA_LIBS -lole32 -lshell32)
|
||||
else()
|
||||
set(cxx_libs "${CMAKE_CXX_IMPLICIT_LINK_LIBRARIES}")
|
||||
list(REMOVE_ITEM cxx_libs ${CMAKE_C_IMPLICIT_LINK_LIBRARIES} nonempty)
|
||||
foreach(lib IN LISTS cxx_libs)
|
||||
list(APPEND EXTRA_LIBS "-l${lib}")
|
||||
endforeach()
|
||||
endif()
|
||||
if(HAVE_LIBM AND NOT "-lm" IN_LIST EXTRA_LIBS)
|
||||
list(APPEND EXTRA_LIBS -lm)
|
||||
endif()
|
||||
if(HAVE_LIBDL)
|
||||
list(APPEND EXTRA_LIBS -ldl)
|
||||
endif()
|
||||
|
||||
# Join lists with a space
|
||||
list(JOIN EXTRA_LIBS " " EXTRA_LIBS)
|
||||
list(JOIN EXTRA_REQUIRES " " EXTRA_REQUIRES)
|
||||
|
||||
configure_file(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/proj.pc.in
|
||||
${CMAKE_CURRENT_BINARY_DIR}/proj.pc
|
||||
@ONLY)
|
||||
endfunction()
|
||||
@@ -1,41 +0,0 @@
|
||||
################################################################################
|
||||
# ProjVersion.cmake - part of CMake configuration of PROJ library
|
||||
################################################################################
|
||||
# Copyright (C) 2010 Mateusz Loskot <mateusz@loskot.net>
|
||||
#
|
||||
# Distributed under the Boost Software License, Version 1.0
|
||||
################################################################################
|
||||
# Macros in this module:
|
||||
#
|
||||
# proj_version - defines version information for PROJ library
|
||||
################################################################################
|
||||
|
||||
# Defines version information for PROJ library
|
||||
#
|
||||
# proj_version(MAJOR major_version MINOR minor_version PATCH patch_level)
|
||||
#
|
||||
# MAJOR.MINOR version is used to set SOVERSION
|
||||
#
|
||||
|
||||
include(CMakeParseArguments)
|
||||
|
||||
macro(proj_version)
|
||||
cmake_parse_arguments(THIS_VERSION
|
||||
""
|
||||
"MAJOR;MINOR;PATCH"
|
||||
""
|
||||
${ARGN})
|
||||
|
||||
# Set version components
|
||||
set(${PROJECT_NAME}_VERSION_MAJOR ${THIS_VERSION_MAJOR})
|
||||
set(${PROJECT_NAME}_VERSION_MINOR ${THIS_VERSION_MINOR})
|
||||
set(${PROJECT_NAME}_VERSION_PATCH ${THIS_VERSION_PATCH})
|
||||
|
||||
# Set VERSION string
|
||||
set(${PROJECT_NAME}_VERSION
|
||||
"${${PROJECT_NAME}_VERSION_MAJOR}.\
|
||||
${${PROJECT_NAME}_VERSION_MINOR}.\
|
||||
${${PROJECT_NAME}_VERSION_PATCH}")
|
||||
|
||||
print_variable(${PROJECT_NAME}_VERSION)
|
||||
endmacro()
|
||||
@@ -1,4 +1,4 @@
|
||||
if(CMAKE_MAJOR_VERSION GREATER 2)
|
||||
cmake_policy(SET CMP0042 NEW) # osx rpath
|
||||
cmake_policy(SET CMP0011 NEW) # policy setting
|
||||
if (CMAKE_MAJOR_VERSION GREATER 2)
|
||||
cmake_policy(SET CMP0042 NEW) # osx rpath
|
||||
cmake_policy(SET CMP0011 NEW) # policy setting
|
||||
endif()
|
||||
|
||||
@@ -1,11 +1,44 @@
|
||||
/* Define to 1 if you have the `dl' library (-ldl). */
|
||||
#cmakedefine HAVE_LIBDL 1
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
#cmakedefine HAVE_DLFCN_H 1
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#cmakedefine HAVE_INTTYPES_H 1
|
||||
|
||||
/* Define to 1 if you have the <jni.h> header file. */
|
||||
#cmakedefine HAVE_JNI_H 1
|
||||
|
||||
/* Define to 1 if you have the `m' library (-lm). */
|
||||
#cmakedefine HAVE_LIBM 1
|
||||
|
||||
/* Define to 1 if you have localeconv */
|
||||
#cmakedefine HAVE_LOCALECONV 1
|
||||
|
||||
/* Define to 1 if you have the `strerror' function. */
|
||||
#cmakedefine HAVE_STRERROR 1
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#cmakedefine HAVE_MEMORY_H 1
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#cmakedefine HAVE_STDINT_H 1
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#cmakedefine HAVE_STDLIB_H 1
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#cmakedefine HAVE_STRINGS_H 1
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#cmakedefine HAVE_STRING_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#cmakedefine HAVE_SYS_STAT_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#cmakedefine HAVE_SYS_TYPES_H 1
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#cmakedefine HAVE_UNISTD_H 1
|
||||
|
||||
/* Enabled for Java/JNI Support */
|
||||
#cmakedefine JNI_ENABLED 1
|
||||
|
||||
/* Name of package */
|
||||
#cmakedefine PACKAGE "${PACKAGE}"
|
||||
@@ -25,5 +58,8 @@
|
||||
/* Define to the version of this package. */
|
||||
#cmakedefine PACKAGE_VERSION "${PACKAGE_VERSION}"
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#cmakedefine STDC_HEADERS 1
|
||||
|
||||
/* Version number of package */
|
||||
#cmakedefine VERSION "${VERSION}"
|
||||
|
||||
@@ -1,40 +1,36 @@
|
||||
# Version checking for @PROJECT_VARIANT_NAME@
|
||||
# Version checking for @PROJECT_NAME@
|
||||
|
||||
set (PACKAGE_VERSION "@PROJ_VERSION@")
|
||||
set (PACKAGE_VERSION_MAJOR "@PROJ_VERSION_MAJOR@")
|
||||
set (PACKAGE_VERSION_MINOR "@PROJ_VERSION_MINOR@")
|
||||
set (PACKAGE_VERSION_PATCH "@PROJ_VERSION_PATCH@")
|
||||
|
||||
# These variable definitions parallel those in @PROJECT_NAME@'s
|
||||
# cmake/CMakeLists.txt.
|
||||
if (MSVC)
|
||||
# For checking the compatibility of MSVC_TOOLSET_VERSION; see
|
||||
# https://docs.microsoft.com/en-us/cpp/porting/overview-of-potential-upgrade-issues-visual-cpp
|
||||
# Assume major version number is obtained by dropping the last decimal
|
||||
# digit.
|
||||
math (EXPR MSVC_TOOLSET_MAJOR "${MSVC_TOOLSET_VERSION}/10")
|
||||
endif ()
|
||||
|
||||
if (NOT PACKAGE_FIND_NAME STREQUAL "@PROJECT_VARIANT_NAME@")
|
||||
if (NOT PACKAGE_FIND_NAME STREQUAL "@PROJECT_NAME@")
|
||||
# Check package name (in particular, because of the way cmake finds
|
||||
# package config files, the capitalization could easily be "wrong").
|
||||
# This is necessary to ensure that the automatically generated
|
||||
# variables, e.g., <package>_FOUND, are consistently spelled.
|
||||
set (REASON "package = @PROJECT_VARIANT_NAME@, NOT ${PACKAGE_FIND_NAME}")
|
||||
set (REASON "package = @PROJECT_NAME@, NOT ${PACKAGE_FIND_NAME}")
|
||||
set (PACKAGE_VERSION_UNSUITABLE TRUE)
|
||||
elseif (NOT (APPLE OR (NOT DEFINED CMAKE_SIZEOF_VOID_P) OR
|
||||
CMAKE_SIZEOF_VOID_P EQUAL "@CMAKE_SIZEOF_VOID_P@"))
|
||||
CMAKE_SIZEOF_VOID_P EQUAL @CMAKE_SIZEOF_VOID_P@))
|
||||
# Reject if there's a 32-bit/64-bit mismatch (not necessary with Apple
|
||||
# since a multi-architecture library is built for that platform).
|
||||
set (REASON "sizeof(*void) = @CMAKE_SIZEOF_VOID_P@")
|
||||
set (REASON "sizeof(*void) = @CMAKE_SIZEOF_VOID_P@")
|
||||
set (PACKAGE_VERSION_UNSUITABLE TRUE)
|
||||
elseif (MSVC AND NOT (
|
||||
# toolset version must be at least as great as @PROJECT_NAME@'s
|
||||
MSVC_TOOLSET_VERSION GREATER_EQUAL @MSVC_TOOLSET_VERSION@
|
||||
# and major versions must match
|
||||
AND MSVC_TOOLSET_MAJOR EQUAL @MSVC_TOOLSET_MAJOR@ ))
|
||||
elseif (MSVC AND NOT MSVC_VERSION STREQUAL "@MSVC_VERSION@")
|
||||
# Reject if there's a mismatch in MSVC compiler versions
|
||||
set (REASON "MSVC_TOOLSET_VERSION = @MSVC_TOOLSET_VERSION@")
|
||||
set (REASON "_MSC_VER = @MSVC_VERSION@")
|
||||
set (PACKAGE_VERSION_UNSUITABLE TRUE)
|
||||
elseif (NOT CMAKE_CROSSCOMPILING STREQUAL "@CMAKE_CROSSCOMPILING@")
|
||||
# Reject if there's a mismatch in ${CMAKE_CROSSCOMPILING}
|
||||
set (REASON "cross-compiling = @CMAKE_CROSSCOMPILING@")
|
||||
set (PACKAGE_VERSION_UNSUITABLE TRUE)
|
||||
elseif (CMAKE_CROSSCOMPILING AND
|
||||
NOT (CMAKE_SYSTEM_NAME STREQUAL "@CMAKE_SYSTEM_NAME@" AND
|
||||
CMAKE_SYSTEM_PROCESSOR STREQUAL "@CMAKE_SYSTEM_PROCESSOR@"))
|
||||
# Reject if cross-compiling and there's a mismatch in the target system
|
||||
set (REASON "target = @CMAKE_SYSTEM_NAME@-@CMAKE_SYSTEM_PROCESSOR@")
|
||||
set (PACKAGE_VERSION_UNSUITABLE TRUE)
|
||||
elseif (PACKAGE_FIND_VERSION)
|
||||
if (PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION)
|
||||
|
||||
@@ -1,71 +1,32 @@
|
||||
# Configure @PROJECT_NAME@
|
||||
#
|
||||
# Set
|
||||
# @PROJECT_VARIANT_NAME@_FOUND = 1
|
||||
# @PROJECT_VARIANT_NAME@_INCLUDE_DIRS = /usr/local/include
|
||||
# @PROJECT_VARIANT_NAME@_LIBRARIES = @PROJECT_VARIANT_NAME@::proj
|
||||
# @PROJECT_VARIANT_NAME@_LIBRARY_DIRS = /usr/local/lib
|
||||
# @PROJECT_VARIANT_NAME@_BINARY_DIRS = /usr/local/bin
|
||||
# @PROJECT_VARIANT_NAME@_VERSION = 4.9.1 (for example)
|
||||
if(@PROJECT_VARIANT_NAME@ STREQUAL "PROJ4")
|
||||
message(DEPRECATION "find_package(PROJ4) is deprecated and will be retired soon. Please use find_package(PROJ) instead.")
|
||||
endif()
|
||||
# @PROJECT_NAME@_FOUND = 1
|
||||
# @PROJECT_NAME@_INCLUDE_DIRS = /usr/local/include
|
||||
# @PROJECT_NAME@_LIBRARIES = proj
|
||||
# @PROJECT_NAME@_LIBRARY_DIRS = /usr/local/lib
|
||||
# @PROJECT_NAME@_BINARY_DIRS = /usr/local/bin
|
||||
# @PROJECT_NAME@_VERSION = 4.9.1 (for example)
|
||||
|
||||
include(CMakeFindDependencyMacro)
|
||||
|
||||
# We cannot have a find_dependency() call between cmake_policy(PUSH)/cmake_policy(POP)
|
||||
# because find_dependency() issues a return() on failure, which results in
|
||||
# imbalanced push/pop
|
||||
# Cf https://gitlab.kitware.com/cmake/cmake/-/issues/17612
|
||||
cmake_policy(PUSH)
|
||||
cmake_policy(SET CMP0012 NEW)
|
||||
if("@ENABLE_TIFF@")
|
||||
set(PROJ_CONFIG_FIND_TIFF_DEP ON)
|
||||
endif()
|
||||
if("@CURL_ENABLED@")
|
||||
set(PROJ_CONFIG_FIND_CURL_DEP ON)
|
||||
endif()
|
||||
cmake_policy(POP)
|
||||
|
||||
find_dependency(SQLite3)
|
||||
|
||||
if(DEFINED PROJ_CONFIG_FIND_TIFF_DEP)
|
||||
find_dependency(TIFF)
|
||||
endif()
|
||||
|
||||
if(DEFINED PROJ_CONFIG_FIND_CURL_DEP)
|
||||
# Chainload CURL usage requirements
|
||||
find_dependency(CURL)
|
||||
endif()
|
||||
|
||||
function(set_variable_from_rel_or_absolute_path var root rel_or_abs_path)
|
||||
if(IS_ABSOLUTE "${rel_or_abs_path}")
|
||||
set(${var} "${rel_or_abs_path}" PARENT_SCOPE)
|
||||
else()
|
||||
set(${var} "${root}/${rel_or_abs_path}" PARENT_SCOPE)
|
||||
endif()
|
||||
endfunction()
|
||||
message (STATUS "Reading ${CMAKE_CURRENT_LIST_FILE}")
|
||||
# @PROJECT_NAME@_VERSION is set by version file
|
||||
message (STATUS
|
||||
"@PROJECT_NAME@ configuration, version ${@PROJECT_NAME@_VERSION}")
|
||||
|
||||
# Tell the user project where to find our headers and libraries
|
||||
get_filename_component (_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
|
||||
get_filename_component (_ROOT "${_DIR}/@PROJECT_ROOT_DIR@" ABSOLUTE)
|
||||
# Use _ROOT as prefix here for the possibility of relocation after installation.
|
||||
set_variable_from_rel_or_absolute_path("@PROJECT_VARIANT_NAME@_INCLUDE_DIRS" "${_ROOT}" "@CMAKE_INSTALL_INCLUDEDIR@")
|
||||
set_variable_from_rel_or_absolute_path("@PROJECT_VARIANT_NAME@_LIBRARY_DIRS" "${_ROOT}" "@CMAKE_INSTALL_LIBDIR@")
|
||||
set_variable_from_rel_or_absolute_path("@PROJECT_VARIANT_NAME@_BINARY_DIRS" "${_ROOT}" "@CMAKE_INSTALL_BINDIR@")
|
||||
set (@PROJECT_NAME@_INCLUDE_DIRS "${_ROOT}/@INCLUDEDIR@")
|
||||
set (@PROJECT_NAME@_LIBRARY_DIRS "${_ROOT}/@LIBDIR@")
|
||||
set (@PROJECT_NAME@_BINARY_DIRS "${_ROOT}/@BINDIR@")
|
||||
|
||||
set (@PROJECT_VARIANT_NAME@_LIBRARIES @PROJECT_VARIANT_NAME@::proj)
|
||||
set (@PROJECT_NAME@_LIBRARIES proj)
|
||||
# Read in the exported definition of the library
|
||||
include ("${_DIR}/@PROJECT_NAME_LOWER@-targets.cmake")
|
||||
if (@INSTALL_LEGACY_CMAKE_FILES@)
|
||||
include ("${_DIR}/@PROJECT_LEGACY_LOWER@-targets.cmake")
|
||||
endif()
|
||||
include ("${_DIR}/@PROJECT_NAME_LOWER@-namespace-targets.cmake")
|
||||
|
||||
unset (_ROOT)
|
||||
unset (_DIR)
|
||||
|
||||
if ("@PROJECT_VARIANT_NAME@" STREQUAL "PROJ4")
|
||||
# For backward compatibility with old releases of libgeotiff
|
||||
set (@PROJECT_VARIANT_NAME@_INCLUDE_DIR
|
||||
${@PROJECT_VARIANT_NAME@_INCLUDE_DIRS})
|
||||
endif ()
|
||||
# For backward compatibility with old releases of libgeotiff
|
||||
set (@PROJECT_NAME@_INCLUDE_DIR ${@PROJECT_NAME@_INCLUDE_DIRS})
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
# install_manifest.txt is created in the top build tree, not the project one
|
||||
if (NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt")
|
||||
message(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_BINARY_DIR@/install_manifest.txt\"")
|
||||
endif()
|
||||
|
||||
set(uninstall_file_list "@CMAKE_BINARY_DIR@/install_manifest.txt")
|
||||
if(EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest_extra.txt")
|
||||
list(APPEND uninstall_file_list "@CMAKE_CURRENT_BINARY_DIR@/install_manifest_extra.txt")
|
||||
endif()
|
||||
|
||||
set(dir_list)
|
||||
foreach (manifest_file IN ITEMS ${uninstall_file_list})
|
||||
file(READ "${manifest_file}" files)
|
||||
string(REGEX REPLACE "\n$" "" files "${files}")
|
||||
string(REGEX REPLACE "\n" ";" files "${files}")
|
||||
list(REVERSE files)
|
||||
foreach (file ${files})
|
||||
message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
|
||||
if (IS_DIRECTORY "$ENV{DESTDIR}${file}")
|
||||
list(APPEND dir_list "${file}")
|
||||
elseif (EXISTS "$ENV{DESTDIR}${file}")
|
||||
get_filename_component(dir "${file}" DIRECTORY)
|
||||
list(APPEND dir_list "${dir}")
|
||||
execute_process(
|
||||
COMMAND @CMAKE_COMMAND@ -E remove "$ENV{DESTDIR}${file}"
|
||||
OUTPUT_VARIABLE rm_out
|
||||
RESULT_VARIABLE rm_retval
|
||||
)
|
||||
if(NOT ${rm_retval} EQUAL 0)
|
||||
message(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
|
||||
endif (NOT ${rm_retval} EQUAL 0)
|
||||
else ()
|
||||
message(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.")
|
||||
endif ()
|
||||
endforeach(file)
|
||||
endforeach()
|
||||
|
||||
while(NOT "${dir_list}" STREQUAL "")
|
||||
list(REMOVE_DUPLICATES dir_list)
|
||||
set(new_dir_list)
|
||||
foreach (file IN ITEMS ${dir_list})
|
||||
if (IS_DIRECTORY "$ENV{DESTDIR}${file}" AND "${file}" MATCHES "@CMAKE_INSTALL_PREFIX@[/\\].+")
|
||||
file(GLOB file_list "$ENV{DESTDIR}${file}/*")
|
||||
list(LENGTH file_list file_list_len)
|
||||
# Only remove empty directories
|
||||
if(file_list_len EQUAL 0)
|
||||
message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
|
||||
execute_process(
|
||||
COMMAND @CMAKE_COMMAND@ -E remove_directory "$ENV{DESTDIR}${file}"
|
||||
OUTPUT_VARIABLE rm_out
|
||||
RESULT_VARIABLE rm_retval
|
||||
)
|
||||
if(${rm_retval} EQUAL 0)
|
||||
get_filename_component(upper_dir "${file}" DIRECTORY)
|
||||
list(APPEND new_dir_list "${upper_dir}")
|
||||
else()
|
||||
message(STATUS "Problem when removing directory \"$ENV{DESTDIR}${file}\"")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
set(dir_list "${new_dir_list}")
|
||||
endwhile()
|
||||
|
||||
|
||||
+149
@@ -0,0 +1,149 @@
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_PREREQ(2.59)
|
||||
AC_INIT([PROJ.4 Projections], 5.0.1, [https://github.com/OSGeo/proj.4/issues], proj)
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
AC_LANG(C)
|
||||
|
||||
AC_CONFIG_AUX_DIR([.])
|
||||
AM_INIT_AUTOMAKE
|
||||
AM_CONFIG_HEADER(src/proj_config.h)
|
||||
|
||||
dnl Enable as much warnings as possible
|
||||
AX_CFLAGS_WARN_ALL(C_WFLAGS)
|
||||
AC_SUBST(C_WFLAGS,$C_WFLAGS)
|
||||
|
||||
dnl Checks for programs.
|
||||
AC_PROG_CC
|
||||
AC_PROG_INSTALL
|
||||
AC_PROG_LN_S
|
||||
AC_PROG_MAKE_SET
|
||||
AM_PROG_LIBTOOL
|
||||
|
||||
dnl Checks for libraries.
|
||||
save_CFLAGS="$CFLAGS"
|
||||
CFLAGS=`echo "$CFLAGS" | sed "s/-Werror/ /"`
|
||||
AC_CHECK_LIB(m,exp,,,)
|
||||
CFLAGS="$save_CFLAGS"
|
||||
|
||||
dnl We check for headers
|
||||
AC_HEADER_STDC
|
||||
|
||||
dnl Check flag for accurate arithmetic with Intel compiler. This is
|
||||
dnl needed to stop the compiler from ignoring parentheses in expressions
|
||||
dnl like (a + b) + c and from simplifying 0.0 + x to x (which is wrong if
|
||||
dnl x = -0.0).
|
||||
AX_CHECK_COMPILE_FLAG([-fp-model precise],
|
||||
[CFLAGS="$CFLAGS -fp-model precise"],,[-Werror])
|
||||
dnl Check for C99 math functions
|
||||
save_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$CFLAGS -Wall -Werror"
|
||||
AC_MSG_CHECKING([for C99 math functions])
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM(
|
||||
[#include <math.h>],
|
||||
[int q;
|
||||
return (int)(hypot(3.0, 4.0) + atanh(0.8) + cbrt(8.0) +
|
||||
remquo(100.0, 90.0, &q) +
|
||||
remainder(100.0, 90.0) + copysign(1.0, -0.0));])],
|
||||
[AC_MSG_RESULT([yes]);C99_MATH="-DHAVE_C99_MATH=1"],
|
||||
[AC_MSG_RESULT([no]);C99_MATH="-DHAVE_C99_MATH=0"])
|
||||
CFLAGS="$save_CFLAGS $C99_MATH"
|
||||
|
||||
AC_SEARCH_LIBS([sqrt], [m])
|
||||
|
||||
AC_CHECK_FUNC(localeconv, [AC_DEFINE(HAVE_LOCALECONV,1,[Define to 1 if you have localeconv])])
|
||||
|
||||
dnl ---------------------------------------------------------------------------
|
||||
dnl Check for JNI support.
|
||||
dnl ---------------------------------------------------------------------------
|
||||
|
||||
JNI_INCLUDE=
|
||||
export JNI_INCLUDE
|
||||
|
||||
AC_ARG_WITH(jni,
|
||||
[AS_HELP_STRING([--with-jni=dir],
|
||||
[Include Java/JNI support, add optional include dir])
|
||||
],,)
|
||||
|
||||
if test "$with_jni" = "yes" ; then
|
||||
|
||||
AC_DEFINE(JNI_ENABLED,1,[Enabled for Java/JNI Support])
|
||||
|
||||
AC_MSG_CHECKING(whether to enable Java/JNI support)
|
||||
|
||||
AC_MSG_RESULT([enabled])
|
||||
|
||||
elif test "$with_jni" != "no" -a "$with_jni" != "" ; then
|
||||
|
||||
AC_MSG_CHECKING(whether to enable Java/JNI support)
|
||||
|
||||
if test \! -r "$with_jni/jni.h" ; then
|
||||
AC_MSG_ERROR(Did not find $with_jni/jni.h)
|
||||
fi
|
||||
|
||||
AC_DEFINE(JNI_ENABLED,1,[Enabled for Java/JNI Support])
|
||||
|
||||
AC_MSG_RESULT([enabled])
|
||||
|
||||
JNI_INCLUDE="-I$with_jni"
|
||||
|
||||
elif test "$with_jni" = "" ; then
|
||||
AC_CHECK_HEADERS(jni.h)
|
||||
|
||||
AC_MSG_CHECKING(whether to enable Java/JNI support)
|
||||
|
||||
if test "$ac_cv_header_jni_h" = "no" ; then
|
||||
AC_MSG_RESULT([disabled])
|
||||
else
|
||||
AC_MSG_RESULT([enabled])
|
||||
AC_DEFINE(JNI_ENABLED,1,[Enabled for Java/JNI Support])
|
||||
fi
|
||||
|
||||
else
|
||||
AC_MSG_CHECKING(whether to enable Java/JNI support)
|
||||
|
||||
AC_MSG_RESULT([disabled])
|
||||
fi
|
||||
|
||||
AC_SUBST(JNI_INCLUDE,$JNI_INCLUDE)
|
||||
|
||||
dnl ---------------------------------------------------------------------------
|
||||
dnl Provide a mechanism to disable real mutex support (if lacking win32 or
|
||||
dnl posix mutexes for instance).
|
||||
dnl ---------------------------------------------------------------------------
|
||||
|
||||
AC_ARG_WITH([mutex],
|
||||
AS_HELP_STRING([--without-mutex],
|
||||
[Disable real mutex locks (lacking pthreads)]),,)
|
||||
|
||||
AC_MSG_CHECKING([for mutexes])
|
||||
THREAD_LIB=""
|
||||
if test "$with_mutex" = yes -o x"$with_mutex" = x ; then
|
||||
MUTEX_SETTING=pthread
|
||||
AC_CHECK_LIB(pthread,pthread_create,PTHREAD_EXISTS=YES,,,)
|
||||
if test -n "$PTHREAD_EXISTS" ; then
|
||||
THREAD_LIB="-lpthread"
|
||||
fi
|
||||
AC_CHECK_LIB(pthread,pthread_mutexattr_settype,,,)
|
||||
AC_CHECK_DECL(PTHREAD_MUTEX_RECURSIVE,
|
||||
AC_DEFINE(HAVE_PTHREAD_MUTEX_RECURSIVE, [], [Define if your pthreads implementation have PTHREAD_MUTEX_RECURSIVE]),
|
||||
,
|
||||
[#include <pthread.h>])
|
||||
AC_MSG_RESULT([enabled, pthread])
|
||||
else
|
||||
MUTEX_SETTING=stub
|
||||
AC_MSG_RESULT([disabled by user])
|
||||
fi
|
||||
|
||||
AC_SUBST(MUTEX_SETTING,$MUTEX_SETTING)
|
||||
AC_SUBST(THREAD_LIB,$THREAD_LIB)
|
||||
|
||||
AC_CONFIG_FILES([Makefile cmake/Makefile src/Makefile
|
||||
test/Makefile test/gie/Makefile test/gigs/Makefile
|
||||
man/Makefile man/man1/Makefile man/man3/Makefile nad/Makefile
|
||||
jniwrap/Makefile jniwrap/org/Makefile jniwrap/org/proj4/Makefile])
|
||||
AC_CONFIG_FILES([nad/install], [chmod +x nad/install])
|
||||
|
||||
AC_CONFIG_FILES([proj.pc])
|
||||
|
||||
AC_OUTPUT
|
||||
@@ -1,115 +0,0 @@
|
||||
#
|
||||
# files containing dictionary of useful projection
|
||||
#
|
||||
|
||||
set(PROJ_DB_CACHE_DIR "" CACHE PATH "Directory used to cache proj.db")
|
||||
if(NOT IS_DIRECTORY ${PROJ_DB_CACHE_DIR})
|
||||
if(NOT "${PROJ_DB_CACHE_DIR}" STREQUAL "")
|
||||
message(WARNING
|
||||
"PROJ_DB_CACHE_DIR (${PROJ_DB_CACHE_DIR}) not set to a directory")
|
||||
set(PROJ_DB_CACHE_DIR "")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(PROJ_INI
|
||||
proj.ini
|
||||
)
|
||||
|
||||
#
|
||||
# gridshift file
|
||||
#
|
||||
|
||||
file(GLOB GSB_FILES *.gsb)
|
||||
file(GLOB GTX_FILES *.gtx)
|
||||
set(GRIDSHIFT_FILES ${GSB_FILES} ${GTX_FILES})
|
||||
|
||||
file(GLOB SCHEMA_FILES *.json)
|
||||
|
||||
file(GLOB GEOTIFF_FILES *.tif)
|
||||
|
||||
set(ALL_SQL_IN "${CMAKE_CURRENT_BINARY_DIR}/all.sql.in")
|
||||
set(PROJ_DB "${CMAKE_CURRENT_BINARY_DIR}/proj.db")
|
||||
include(sql_filelist.cmake)
|
||||
|
||||
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS
|
||||
"${CMAKE_CURRENT_LIST_DIR}/sql/proj.db.sql.expected.md5"
|
||||
)
|
||||
file(STRINGS "${CMAKE_CURRENT_LIST_DIR}/sql/proj.db.sql.expected.md5" PROJ_DB_SQL_EXPECTED_MD5 LIMIT_COUNT 1)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${PROJ_DB}
|
||||
COMMAND ${CMAKE_COMMAND} -E remove -f ${PROJ_DB}
|
||||
COMMAND ${CMAKE_COMMAND} "-DALL_SQL_IN=${ALL_SQL_IN}" "-DEXE_SQLITE3=${EXE_SQLITE3}" "-DPROJ_DB=${PROJ_DB}" "-DPROJ_VERSION=${PROJ_VERSION}" "-DPROJ_DB_CACHE_DIR=${PROJ_DB_CACHE_DIR}" "-DPROJ_DB_SQL_EXPECTED_MD5=${PROJ_DB_SQL_EXPECTED_MD5}" "-DDATA_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}"
|
||||
-P "${CMAKE_CURRENT_SOURCE_DIR}/generate_proj_db.cmake"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${PROJ_DB} ${CMAKE_CURRENT_BINARY_DIR}/for_tests
|
||||
DEPENDS ${SQL_FILES} "${CMAKE_CURRENT_SOURCE_DIR}/generate_proj_db.cmake"
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
COMMENT "Generating proj.db"
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
add_custom_target(generate_proj_db ALL DEPENDS ${PROJ_DB})
|
||||
|
||||
if(NOT "${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
foreach(FILE ${PROJ_INI} ${PROJ_DICTIONARY} ${GRIDSHIFT_FILES})
|
||||
configure_file(${FILE} ${FILE} COPYONLY)
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
# Copy select resource files in a for_tests subdirectory so that we are not
|
||||
# influenced by the presence of other grids
|
||||
# Note: this is done at configure/cmake time, not build time.
|
||||
# So if you install new grids in the source data/ subdirectory, run cmake again
|
||||
set(DATA_FOR_TESTS
|
||||
GL27
|
||||
nad27
|
||||
nad83
|
||||
ITRF2000)
|
||||
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/for_tests)
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/for_tests/tests)
|
||||
|
||||
foreach(FILE ${DATA_FOR_TESTS} ${PROJ_INI})
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${FILE} ${CMAKE_CURRENT_BINARY_DIR}/for_tests/${FILE} COPYONLY)
|
||||
endforeach()
|
||||
|
||||
file(GLOB DATA_TESTS tests/*)
|
||||
foreach(FILE ${DATA_TESTS})
|
||||
get_filename_component(FILENAME ${FILE} NAME)
|
||||
configure_file(${FILE} ${CMAKE_CURRENT_BINARY_DIR}/for_tests/tests/${FILENAME} COPYONLY)
|
||||
endforeach()
|
||||
|
||||
set(DATA_FOR_TESTS_FROM_TESTS_SUBDIR
|
||||
alaska
|
||||
BETA2007.gsb
|
||||
conus
|
||||
MD
|
||||
ntf_r93.gsb
|
||||
ntv1_can.dat)
|
||||
foreach(FILE ${DATA_FOR_TESTS_FROM_TESTS_SUBDIR})
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tests/${FILE} ${CMAKE_CURRENT_BINARY_DIR}/for_tests/${FILE} COPYONLY)
|
||||
endforeach()
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tests/egm96_15_downsampled.gtx ${CMAKE_CURRENT_BINARY_DIR}/for_tests/egm96_15.gtx COPYONLY)
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tests/ntv2_0_downsampled.gsb ${CMAKE_CURRENT_BINARY_DIR}/for_tests/ntv2_0.gsb COPYONLY)
|
||||
|
||||
# test_cs2cs_datumfile has a special case
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/for_tests/dir with space")
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tests/conus "${CMAKE_CURRENT_BINARY_DIR}/for_tests/dir with space/myconus" COPYONLY)
|
||||
|
||||
#
|
||||
#install
|
||||
#
|
||||
set(ALL_DATA_FILE
|
||||
${GRIDSHIFT_FILES}
|
||||
${SCHEMA_FILES}
|
||||
${GEOTIFF_FILES}
|
||||
)
|
||||
|
||||
if (NOT USE_ONLY_EMBEDDED_RESOURCE_FILES)
|
||||
list(APPEND ALL_DATA_FILE ${PROJ_INI} ${PROJ_DB} ${PROJ_DICTIONARY})
|
||||
endif()
|
||||
|
||||
install(
|
||||
FILES ${ALL_DATA_FILE}
|
||||
DESTINATION ${CMAKE_INSTALL_DATADIR}/proj
|
||||
)
|
||||
@@ -1,94 +0,0 @@
|
||||
# ITRF2008 params are in mm/year, PJ_helmert uses m/year
|
||||
<metadata> +version=1.0.0 +origin=http://itrf.ign.fr/doc_ITRF/Transfo-ITRF2008_ITRFs.txt +lastupdate=2017-07-26
|
||||
|
||||
<ITRF2005> +proj=helmert +x=-0.002 +y=-0.0009 +z=-0.0047 +s=0.00094 +dx=0.0003 +t_epoch=2000.0 +convention=position_vector
|
||||
|
||||
<ITRF2000> +proj=helmert +x=-0.0019 +y=-0.0017 +z=-0.0105 +s=0.00134 +dx=0.0001 +dy=0.0001 +dz=-0.0018 +ds=0.00008 +t_epoch=2000.0 +convention=position_vector
|
||||
|
||||
<ITRF97> +proj=helmert +x=0.0048 +y=0.0026 +z=-0.0332 +s=0.00292 +rz=0.00006 +dx=0.0001 +dy=-0.0005 +dz=-0.0032 +ds=0.00009 +drz=0.00002 +t_epoch=2000.0 +convention=position_vector
|
||||
|
||||
<ITRF96> +proj=helmert +x=0.0048 +y=0.0026 +z=-0.0332 +s=0.00292 +rz=0.00006 +dx=0.0001 +dy=-0.0005 +dz=-0.0032 +ds=0.00009 +drz=0.00002 +t_epoch=2000.0 +convention=position_vector
|
||||
|
||||
<ITRF94> +proj=helmert +x=0.0048 +y=0.0026 +z=-0.0332 +s=0.00292 +rz=0.00006 +dx=0.0001 +dy=-0.0005 +dz=-0.0032 +ds=0.00009 +drz=0.00002 +t_epoch=2000.0 +convention=position_vector
|
||||
|
||||
<ITRF93> +proj=helmert +x=-0.024 +y=0.0024 +z=-0.00386 +s=0.00341 +rx=-0.00171 +ry=-0.00148 +rz=-0.0003 +dx=-0.0028 +dy=-0.0001 +dz=-0.0024 +ds=0.00009 +drx=-0.00011 +dry=-0.00019 +drz=0.00007 +t_epoch=2000.0 +convention=position_vector
|
||||
|
||||
<ITRF92> +proj=helmert +x=0.0128 +y=0.0046 +z=-0.0412 +s=0.00221 +rz=0.00006 +dx=0.0001 +dy=-0.0005 +dz=-0.0032 +ds=0.00009 +drz=0.00002 +t_epoch=2000.0 +convention=position_vector
|
||||
|
||||
<ITRF91> +proj=helmert +x=0.0248 +y=0.0186 +z=-0.0472 +s=0.00361 +rz=0.00006 +dx=0.0001 +dy=-0.0005 +dz=-0.0032 +ds=0.00009 +drz=0.00002 +t_epoch=2000.0 +convention=position_vector
|
||||
|
||||
<ITRF90> +proj=helmert +x=0.0228 +y=0.0146 +z=-0.0632 +s=0.00391 +rz=0.00006 +dx=0.0001 +dy=-0.0005 +dz=-0.0032 +ds=0.00009 +drz=0.00002 +t_epoch=2000.0 +convention=position_vector
|
||||
|
||||
<ITRF89> +proj=helmert +x=0.0278 +y=0.0386 +z=-0.1012 +s=0.00731 +rz=0.00006 +dx=0.0001 +dy=-0.0005 +dz=-0.0032 +ds=0.00009 +drz=0.00002 +t_epoch=2000.0 +convention=position_vector
|
||||
|
||||
<ITRF88> +proj=helmert +x=0.0228 +y=0.0026 +z=-0.1252 +s=0.01041 +rz=0.00006 +dx=0.0001 +dy=-0.0005 +dz=-0.0032 +ds=0.00009 +drz=0.00002 +t_epoch=2000.0 +convention=position_vector
|
||||
|
||||
|
||||
# ITRF2008 Plate Motion Model parameters
|
||||
#
|
||||
# As described in
|
||||
#
|
||||
# Altamimi, Z., L. Métivier, and X. Collilieux (2012), ITRF2008 plate motion model,
|
||||
# J. Geophys. Res., 117, B07402, doi:10.1029/2011JB008930.
|
||||
|
||||
|
||||
<AMUR> +proj=helmert +drx=-0.000190 +dry=-0.000442 +drz=0.000915 +convention=position_vector
|
||||
|
||||
<ANTA> +proj=helmert +drx=-0.000252 +dry=-0.000302 +drz=0.000643 +convention=position_vector
|
||||
|
||||
<ARAB> +proj=helmert +drx=0.001202 +dry=-0.000054 +drz=0.001485 +convention=position_vector
|
||||
|
||||
<AUST> +proj=helmert +drx=0.001504 +dry=0.001172 +drz=0.001228 +convention=position_vector
|
||||
|
||||
<CARB> +proj=helmert +drx=0.000049 +dry=-0.001088 +drz=0.000664 +convention=position_vector
|
||||
|
||||
<EURA> +proj=helmert +drx=-0.000083 +dry=-0.000534 +drz=0.000750 +convention=position_vector
|
||||
|
||||
<INDI> +proj=helmert +drx=0.001232 +dry=0.000303 +drz=0.001540 +convention=position_vector
|
||||
|
||||
<NAZC> +proj=helmert +drx=-0.000330 +dry=-0.001551 +drz=0.001625 +convention=position_vector
|
||||
|
||||
<NOAM> +proj=helmert +drx=0.000035 +dry=-0.000662 +drz=-0.0001 +convention=position_vector
|
||||
|
||||
<NUBI> +proj=helmert +drx=0.000095 +dry=-0.000598 +drz=0.000723 +convention=position_vector
|
||||
|
||||
<PCFC> +proj=helmert +drx=-0.000411 +dry=0.001036 +drz=-0.002166 +convention=position_vector
|
||||
|
||||
<SOAM> +proj=helmert +drx=-0.000243 +dry=-0.000311 +drz=-0.000154 +convention=position_vector
|
||||
|
||||
<SOMA> +proj=helmert +drx=-0.000080 +dry=-0.000745 +drz=0.000897 +convention=position_vector
|
||||
|
||||
<SUND> +proj=helmert +drx=0.000047 +dry=-0.001 +drz=0.000975 +convention=position_vector
|
||||
|
||||
|
||||
# Plate names suffixed by _T (for Translation) that includes the translation
|
||||
# rates +dx=0.00041 +dy=0.00022 +dz=0.00041 given by Table 2 of the ITRF2008 plate motion model
|
||||
# paper
|
||||
|
||||
<AMUR_T> +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=-0.000190 +dry=-0.000442 +drz=0.000915 +convention=position_vector
|
||||
|
||||
<ANTA_T> +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=-0.000252 +dry=-0.000302 +drz=0.000643 +convention=position_vector
|
||||
|
||||
<ARAB_T> +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=0.001202 +dry=-0.000054 +drz=0.001485 +convention=position_vector
|
||||
|
||||
<AUST_T> +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=0.001504 +dry=0.001172 +drz=0.001228 +convention=position_vector
|
||||
|
||||
<CARB_T> +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=0.000049 +dry=-0.001088 +drz=0.000664 +convention=position_vector
|
||||
|
||||
<EURA_T> +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=-0.000083 +dry=-0.000534 +drz=0.000750 +convention=position_vector
|
||||
|
||||
<INDI_T> +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=0.001232 +dry=0.000303 +drz=0.001540 +convention=position_vector
|
||||
|
||||
<NAZC_T> +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=-0.000330 +dry=-0.001551 +drz=0.001625 +convention=position_vector
|
||||
|
||||
<NOAM_T> +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=0.000035 +dry=-0.000662 +drz=-0.0001 +convention=position_vector
|
||||
|
||||
<NUBI_T> +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=0.000095 +dry=-0.000598 +drz=0.000723 +convention=position_vector
|
||||
|
||||
<PCFC_T> +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=-0.000411 +dry=0.001036 +drz=-0.002166 +convention=position_vector
|
||||
|
||||
<SOAM_T> +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=-0.000243 +dry=-0.000311 +drz=-0.000154 +convention=position_vector
|
||||
|
||||
<SOMA_T> +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=-0.000080 +dry=-0.000745 +drz=0.000897 +convention=position_vector
|
||||
|
||||
<SUND_T> +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=0.000047 +dry=-0.001 +drz=0.000975 +convention=position_vector
|
||||
@@ -1,55 +0,0 @@
|
||||
# ITRF2014 params are in mm/year, PJ_helmert uses m/year
|
||||
<metadata> +version=1.0.0 +origin=http://itrf.ign.fr/doc_ITRF/Transfo-ITRF2014_ITRFs.txt +lastupdate=2017-07-26
|
||||
|
||||
<ITRF2008> +proj=helmert +x=0.0016 +y=0.0019 +z=0.0024 +s=-0.00002 +dz=-0.0001 +ds=0.00003 +t_epoch=2010.0 +convention=position_vector
|
||||
|
||||
<ITRF2005> +proj=helmert +x=0.0026 +y=0.001 +z=-0.0023 +s=0.00092 +dx=0.0003 +dz=-0.0001 +ds=0.00003 +t_epoch=2010.0 +convention=position_vector
|
||||
|
||||
<ITRF2000> +proj=helmert +x=0.0007 +y=0.0012 +z=-0.0261 +s=0.00212 +dx=0.0001 +dy=0.0001 +dz=-0.0019 +ds=0.00011 +t_epoch=2010.0 +convention=position_vector
|
||||
|
||||
<ITRF97> +proj=helmert +x=0.0074 +y=-0.0005 +z=-0.0628 +s=0.0038 +rz=0.00026 +dx=0.0001 +dy=-0.0005 +dz=-0.0033 +ds=0.00012 +drz=0.00002 +t_epoch=2010.0 +convention=position_vector
|
||||
|
||||
<ITRF96> +proj=helmert +x=0.0074 +y=-0.0005 +z=-0.0628 +s=0.0038 +rz=0.00026 +dx=0.0001 +dy=-0.0005 +dz=-0.0033 +ds=0.00012 +drz=0.00002 +t_epoch=2010.0 +convention=position_vector
|
||||
|
||||
<ITRF94> +proj=helmert +x=0.0074 +y=-0.0005 +z=-0.0628 +s=0.0038 +rz=0.00026 +dx=0.0001 +dy=-0.0005 +dz=-0.0033 +ds=0.00012 +drz=0.00002 +t_epoch=2010.0 +convention=position_vector
|
||||
|
||||
<ITRF93> +proj=helmert +x=-0.0504 +y=0.0033 +z=-0.0602 +s=0.00429 +rx=-0.00281 +ry=-0.00338 +rz=0.0004 +dx=-0.0028 +dy=-0.0001 +dz=-0.0025 +ds=0.00012 +drx=-0.00011 +dry=-0.00019 +drz=0.00007 +t_epoch=2010.0 +convention=position_vector
|
||||
|
||||
<ITRF92> +proj=helmert +x=0.0154 +y=0.0015 +z=-0.0708 +s=0.00309 +rz=0.00026 +dx=0.0001 +dy=-0.0005 +dz=-0.0033 +ds=0.00012 +drz=0.00002 +t_epoch=2010.0 +convention=position_vector
|
||||
|
||||
<ITRF91> +proj=helmert +x=0.0274 +y=0.0155 +z=-0.0768 +s=0.00449 +rz=0.00026 +dx=0.0001 +dy=-0.0005 +dz=-0.0033 +ds=0.00012 +drz=0.00002 +t_epoch=2010.0 +convention=position_vector
|
||||
|
||||
<ITRF90> +proj=helmert +x=0.0254 +y=0.0115 +z=-0.0928 +s=0.00479 +rz=0.00026 +dx=0.0001 +dy=-0.0005 +dz=-0.0033 +ds=0.00012 +drz=0.00002 +t_epoch=2010.0 +convention=position_vector
|
||||
|
||||
<ITRF89> +proj=helmert +x=0.0304 +y=0.0355 +z=-0.1308 +s=0.00819 +rz=0.00026 +dx=0.0001 +dy=-0.0005 +dz=-0.0033 +ds=0.00012 +drz=0.00002 +t_epoch=2010.0 +convention=position_vector
|
||||
|
||||
<ITRF88> +proj=helmert +x=0.0254 +y=-0.0005 +z=-0.1548 +s=0.01129 +rx=0.0001 +rz=0.00026 +dx=0.0001 +dy=-0.0005 +dz=-0.0033 +ds=0.00012 +drz=0.00002 +t_epoch=2010.0 +convention=position_vector
|
||||
|
||||
# ITRF2014 Plate Motion Model parameters
|
||||
#
|
||||
# As described in
|
||||
#
|
||||
# Z. Altamimi et al, 2017, ITRF2014 plate motion model,
|
||||
# doi: 10.1093/gji/ggx136
|
||||
|
||||
<ANTA> +proj=helmert +drx=-0.000248 +dry=-0.000324 +drz=0.000675 +convention=position_vector
|
||||
|
||||
<ARAB> +proj=helmert +drx=0.001154 +dry=-0.000136 +drz=0.001444 +convention=position_vector
|
||||
|
||||
<AUST> +proj=helmert +drx=0.001510 +dry=0.001182 +drz=0.001215 +convention=position_vector
|
||||
|
||||
<EURA> +proj=helmert +drx=-0.000085 +dry=-0.000531 +drz=0.000770 +convention=position_vector
|
||||
|
||||
<INDI> +proj=helmert +drx=0.001154 +dry=-0.000005 +drz=0.001454 +convention=position_vector
|
||||
|
||||
<NAZC> +proj=helmert +drx=-0.000333 +dry=-0.001544 +drz=0.001623 +convention=position_vector
|
||||
|
||||
<NOAM> +proj=helmert +drx=0.000024 +dry=-0.000694 +drz=-0.000063 +convention=position_vector
|
||||
|
||||
<NUBI> +proj=helmert +drx=0.000099 +dry=-0.000614 +drz=0.000733 +convention=position_vector
|
||||
|
||||
<PCFC> +proj=helmert +drx=-0.000409 +dry=0.001047 +drz=-0.002169 +convention=position_vector
|
||||
|
||||
<SOAM> +proj=helmert +drx=-0.000270 +dry=-0.000301 +drz=-0.000140 +convention=position_vector
|
||||
|
||||
<SOMA> +proj=helmert +drx=-0.000121 +dry=-0.000794 +drz=0.000884 +convention=position_vector
|
||||
@@ -1,91 +0,0 @@
|
||||
# ITRF2020 params are in mm/year, PJ_helmert uses m/year
|
||||
|
||||
# Generated with generate_itrf2020.py from EPSG database
|
||||
|
||||
<ITRF2014> +proj=helmert +x=-0.0014 +y=-0.0009 +z=0.0014 +s=-0.00042 +dy=-0.0001 +dz=0.0002 +t_epoch=2015 +convention=position_vector
|
||||
|
||||
<ITRF2008> +proj=helmert +x=0.0002 +y=0.001 +z=0.0033 +s=-0.00029 +dy=-0.0001 +dz=0.0001 +ds=3e-05 +t_epoch=2015 +convention=position_vector
|
||||
|
||||
<ITRF2005> +proj=helmert +x=0.0027 +y=0.0001 +z=-0.0014 +s=0.00065 +dx=0.0003 +dy=-0.0001 +dz=0.0001 +ds=3e-05 +t_epoch=2015 +convention=position_vector
|
||||
|
||||
<ITRF2000> +proj=helmert +x=-0.0002 +y=0.0008 +z=-0.0342 +s=0.00225 +dx=0.0001 +dz=-0.0017 +ds=0.00011 +t_epoch=2015 +convention=position_vector
|
||||
|
||||
<ITRF97> +proj=helmert +x=0.0065 +y=-0.0039 +z=-0.0779 +rz=0.00036 +s=0.00398 +dx=0.0001 +dy=-0.0006 +dz=-0.0031 +drz=2e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector
|
||||
|
||||
<ITRF96> +proj=helmert +x=0.0065 +y=-0.0039 +z=-0.0779 +rz=0.00036 +s=0.00398 +dx=0.0001 +dy=-0.0006 +dz=-0.0031 +drz=2e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector
|
||||
|
||||
<ITRF94> +proj=helmert +x=0.0065 +y=-0.0039 +z=-0.0779 +rz=0.00036 +s=0.00398 +dx=0.0001 +dy=-0.0006 +dz=-0.0031 +drz=2e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector
|
||||
|
||||
<ITRF93> +proj=helmert +x=-0.0658 +y=0.0019 +z=-0.0713 +rx=-0.00336 +ry=-0.00433 +rz=0.00075 +s=0.00447 +dx=-0.0028 +dy=-0.0002 +dz=-0.0023 +drx=-0.00011 +dry=-0.00019 +drz=7e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector
|
||||
|
||||
<ITRF92> +proj=helmert +x=0.0145 +y=-0.0019 +z=-0.0859 +rz=0.00036 +s=0.00327 +dx=0.0001 +dy=-0.0006 +dz=-0.0031 +drz=2e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector
|
||||
|
||||
<ITRF91> +proj=helmert +x=0.0265 +y=0.0121 +z=-0.0919 +rz=0.00036 +s=0.00467 +dx=0.0001 +dy=-0.0006 +dz=-0.0031 +drz=2e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector
|
||||
|
||||
<ITRF90> +proj=helmert +x=0.0245 +y=0.0081 +z=-0.1079 +rz=0.00036 +s=0.00497 +dx=0.0001 +dy=-0.0006 +dz=-0.0031 +drz=2e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector
|
||||
|
||||
<ITRF89> +proj=helmert +x=0.0295 +y=0.0321 +z=-0.1459 +rz=0.00036 +s=0.00837 +dx=0.0001 +dy=-0.0006 +dz=-0.0031 +drz=2e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector
|
||||
|
||||
<ITRF88> +proj=helmert +x=0.0245 +y=-0.0039 +z=-0.1699 +rx=0.0001 +rz=0.00036 +s=0.01147 +dx=0.0001 +dy=-0.0006 +dz=-0.0031 +drz=2e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector
|
||||
|
||||
# ITRF2020 Plate Motion Model parameters
|
||||
#
|
||||
# As described in https://agupubs.onlinelibrary.wiley.com/doi/full/10.1029/2023GL106373
|
||||
# (and also in https://itrf.ign.fr/docs/solutions/itrf2020/ITRF2020-PMM.dat, but with
|
||||
# different units)
|
||||
|
||||
<AMUR> +proj=helmert +drx=-0.000131 +dry=-0.000551 +drz=0.000837 +convention=position_vector
|
||||
|
||||
<ANTA> +proj=helmert +drx=-0.000269 +dry=-0.000312 +drz=0.000678 +convention=position_vector
|
||||
|
||||
<ARAB> +proj=helmert +drx=0.001129 +dry=-0.000146 +drz=0.001438 +convention=position_vector
|
||||
|
||||
<AUST> +proj=helmert +drx=0.001487 +dry=0.001175 +drz=0.001223 +convention=position_vector
|
||||
|
||||
<CARB> +proj=helmert +drx=0.000207 +dry=-0.001422 +drz=0.000726 +convention=position_vector
|
||||
|
||||
<EURA> +proj=helmert +drx=-0.000085 +dry=-0.000519 +drz=0.000753 +convention=position_vector
|
||||
|
||||
<INDI> +proj=helmert +drx=0.001137 +dry=0.000013 +drz=0.001444 +convention=position_vector
|
||||
|
||||
<NAZC> +proj=helmert +drx=-0.000327 +dry=-0.001561 +drz=0.001605 +convention=position_vector
|
||||
|
||||
<NOAM> +proj=helmert +drx=0.000045 +dry=-0.000666 +drz=-0.000098 +convention=position_vector
|
||||
|
||||
<NUBI> +proj=helmert +drx=0.000090 +dry=-0.000585 +drz=0.000717 +convention=position_vector
|
||||
|
||||
<PCFC> +proj=helmert +drx=-0.000404 +dry=0.001021 +drz=-0.002154 +convention=position_vector
|
||||
|
||||
<SOAM> +proj=helmert +drx=-0.000261 +dry=-0.000282 +drz=-0.000157 +convention=position_vector
|
||||
|
||||
<SOMA> +proj=helmert +drx=-0.000081 +dry=-0.000719 +drz=0.000864 +convention=position_vector
|
||||
|
||||
# Plate names suffixed by _T (for Translation) that includes the translation
|
||||
# rates +dx=0.00037 +dy=0.00035 +dz=0.00074 given by Table 2 of the ITRF2020 plate motion model
|
||||
# paper
|
||||
|
||||
<AMUR_T> +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=-0.000131 +dry=-0.000551 +drz=0.000837 +convention=position_vector
|
||||
|
||||
<ANTA_T> +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=-0.000269 +dry=-0.000312 +drz=0.000678 +convention=position_vector
|
||||
|
||||
<ARAB_T> +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=0.001129 +dry=-0.000146 +drz=0.001438 +convention=position_vector
|
||||
|
||||
<AUST_T> +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=0.001487 +dry=0.001175 +drz=0.001223 +convention=position_vector
|
||||
|
||||
<CARB_T> +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=0.000207 +dry=-0.001422 +drz=0.000726 +convention=position_vector
|
||||
|
||||
<EURA_T> +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=-0.000085 +dry=-0.000519 +drz=0.000753 +convention=position_vector
|
||||
|
||||
<INDI_T> +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=0.001137 +dry=0.000013 +drz=0.001444 +convention=position_vector
|
||||
|
||||
<NAZC_T> +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=-0.000327 +dry=-0.001561 +drz=0.001605 +convention=position_vector
|
||||
|
||||
<NOAM_T> +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=0.000045 +dry=-0.000666 +drz=-0.000098 +convention=position_vector
|
||||
|
||||
<NUBI_T> +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=0.000090 +dry=-0.000585 +drz=0.000717 +convention=position_vector
|
||||
|
||||
<PCFC_T> +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=-0.000404 +dry=0.001021 +drz=-0.002154 +convention=position_vector
|
||||
|
||||
<SOAM_T> +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=-0.000261 +dry=-0.000282 +drz=-0.000157 +convention=position_vector
|
||||
|
||||
<SOMA_T> +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=-0.000081 +dry=-0.000719 +drz=0.000864 +convention=position_vector
|
||||
-18
@@ -1,18 +0,0 @@
|
||||
The files in this directory are support data for PROJ programs.
|
||||
|
||||
File Contents:
|
||||
|
||||
README --- This file
|
||||
|
||||
nad27 --- North American Datum 1927 for "init=" definition of
|
||||
State Plane Coordinate Systems (SPCS).
|
||||
|
||||
nad83 --- North American Datum 1983 for "init=" definition of SPCS.
|
||||
|
||||
GL27 --- Great Lakes Survey grids, NAD27
|
||||
|
||||
world --- Proj specifications for several international grid systems.
|
||||
|
||||
nad.lst --- Reference list of SPCS States and NGS datum identifiers
|
||||
|
||||
Additional data files are available in https://github.com/OSGeo/PROJ-data
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user