Compare commits

..
25 Commits
Author SHA1 Message Date
Kristian Evers 62200ce6a3 bump man3 version numbers 2018-04-01 13:14:16 +02:00
Kristian Evers f18c3bba8c Update man-pages (created from docs in master) 2018-03-21 16:17:35 +01:00
Kristian Evers 5ad2227c56 Bump version numbers 2018-03-21 16:17:35 +01:00
Kristian Evers 8d7d07544d Merge pull request #869 from kbevers/sphinx-man-pages
Auto-generate man pages from Sphinx docs
2018-03-21 15:50:40 +01:00
Kristian Evers 819140eb23 Update NEWS for 5.0.1 2018-03-21 15:39:27 +01:00
Kristian Evers cfbfea466e Merge branch '5.0' of https://github.com/OSGeo/proj.4 into 5.0 2018-03-21 15:35:17 +01:00
Mike Toews d42b48479b Avoid shadowed declaration errors with old gcc 2018-03-21 13:03:49 +01:00
Even Rouault c49fcf76a8 Take into account +towgs84=0,0,0 in pipeline to still imply geodetic->cartesian->geodetic (fixes #881) 2018-03-21 11:35:41 +01:00
Kristian Evers 11396b45a0 Merge branch 'master' into ctable-null 2018-03-21 10:12:06 +01:00
Mike Toews 4b65baf477 Avoid shadowed declaration errors with old gcc 2018-03-21 09:12:09 +01:00
Kristian Evers 35a2b5cbe6 Introduce late expansion of +datum parameters. Fixes #872. 2018-03-20 22:47:47 +01:00
Kurt Schwehr 8e0c5db704 Track the header size read in pj_gridinfo_init
Fixes #875

Found with autofuzz using MSAN: use-of-uninitialized-value
2018-03-20 22:45:26 +01:00
Charles Karney 4cc3d912e3 For the Intel compiler use "-fp-model precise" on all platforms. 2018-03-20 22:44:49 +01:00
Kristian Evers ae3527d4d5 Add 'exact' flag to Helmert operation when doing cs2cs emulation. Fixes #871. (#873) 2018-03-20 20:06:25 +01:00
Kristian Evers 23a028ffa0 Fix spelling error in gie error code. Closes #861. 2018-03-19 15:13:02 +01:00
Charles Karney bb69e6e578 Merge pull request #868 from cffk/geod-1.49.3
Patch 1.49.3 for geodesic package.

Closes #826, partially closes #843.
2018-03-19 15:07:21 +01:00
Kristian Evers 061e32f575 Use version numbers from proj.h in pj_release string 2018-03-16 14:48:24 +01:00
Kristian Evers c4895fdf89 Merge pull request #857 from kbevers/return-error-instead-of-zeros
Make sure that transient errors are returned correctly
2018-03-12 13:58:49 +01:00
Kristian Evers 9312b5c147 Remove 'pj_' prefix from static functions
Functions should only be prefixed with 'pj_' when they can be used in
other parts of the code base and not just within a single file.

Takes care of the last step in #675.
2018-03-12 13:57:33 +01:00
Thomas Knudsen 2b143b4829 Remove angle brackets for proj headers (#849)
* Avoid using angle brackets for PROJ headers.

Switching from #include <proj.h> to #include "proj.h",
and correspondingly for projects.h and proj_api.h,
reduces the risk of accidentally picking up a system
installed older version of the header while building
a new version of PROJ.

* Also handle geodesic.h
2018-03-11 13:19:09 +01:00
Thomas Knudsen 7e9d6d6fdd Repair PR #845: Scale vertical coords properly. (#848)
Thanks to Bas Couwenberg <sebastic@debian.org> for spotting this horrible bug!
2018-03-09 14:22:45 +01:00
Thomas Knudsen 847b58e85f Refactor pj_transform, reintroduce support for vertical scaling (#845)
* Refactor pj_transform, reintroduce support for vertical scaling
2018-03-09 13:43:21 +01:00
Kristian Evers 6f0b7a6eee Use consistent names for PJ_COORD's in declarations
Changes use of 'PJ_COORD coo' to 'PJ_COORD coord' so that variable names in
public function prototypes are consistent.

Closes #842.
2018-03-09 13:42:37 +01:00
Thomas Knudsen f7a47b01a7 Remove angle brackets in include proj.h
The #include <proj.h> in proj_internal.h has been changed to #include "proj.h" in order to avoid accidentally including an old installed proj.h file while building a new version of libproj.
2018-03-09 13:41:25 +01:00
Kristian Evers 2e179f25d2 Revert fix to #22
The fix in #22 solved the problem at hand and doing what was expected
from the specified parameters. Unfortunately it also removed the slightly
hacky "feature" that makes the web mercator work in pj_transform. The
web mercator is special since the latitude is computed on the ellipsoid,
but behaves as if if was defined on a sphere. Hence it is problematic to
change the ellipsoid parameters when using the web mercator, even though
that is the geodetically correct thing to do. The web mercator is used in
more or less any web mapping application and is thus one of the most
frequently used transformations in PROJ. This justifies re-introducing
the minor bug reported in #22.

The problem will have to be taken care of properly when pj_transform
is removed from the library in favour of the transformation pipelines
based API.
2018-03-05 11:35:07 +01:00
1571 changed files with 140826 additions and 445490 deletions
-29
View File
@@ -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)
-2
View File
@@ -1,2 +0,0 @@
BasedOnStyle: llvm
IndentWidth: 4
-2
View File
@@ -1,2 +0,0 @@
# Auto-generated file.
src/proj_symbol_rename.h
-2
View File
@@ -1,2 +0,0 @@
.git
build
-2
View File
@@ -1,2 +0,0 @@
f090353792c0530a7aa5d02e44ad9b236986757b
aa818d6772887453432ce607410b784ff56308a1
-8
View File
@@ -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
-42
View File
@@ -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. -->
-7
View File
@@ -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
-12
View File
@@ -1,12 +0,0 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
cooldown:
default-days: 7
groups:
all-actions:
patterns:
- "*"
-47
View File
@@ -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
-19
View File
@@ -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 }}
-36
View File
@@ -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
-57
View File
@@ -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
-100
View File
@@ -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
-104
View File
@@ -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}}"
-57
View File
@@ -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/
-54
View File
@@ -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 }}
-59
View File
@@ -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
-244
View File
@@ -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
-90
View File
@@ -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
-37
View File
@@ -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
-37
View File
@@ -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
-64
View File
@@ -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
-37
View File
@@ -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
-93
View File
@@ -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
-224
View File
@@ -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
View File
@@ -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
-30
View File
@@ -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>
-26
View File
@@ -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
-23
View File
@@ -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
)
-41
View File
@@ -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
View File
@@ -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
#
+19
View File
@@ -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
View File
@@ -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>
-18
View File
@@ -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},
}
-70
View File
@@ -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
View File
@@ -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}")
-76
View File
@@ -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
View File
@@ -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)
+9 -9
View File
@@ -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.
+7 -7
View File
@@ -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
View File
@@ -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/
-2365
View File
File diff suppressed because it is too large Load Diff
+75
View File
@@ -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.
-229
View File
@@ -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.
+175 -9
View File
@@ -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
View File
@@ -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 "[![" $< > $@
clean-local:
$(RM) README
+642
View File
@@ -0,0 +1,642 @@
5.0.1 Release Notes
-------------------
BUG FIXES
------------
All bug fix numbers refer to issues or pull requests indexed at
https://github.com/OSGeo/proj.4/
o Handle ellipsoid change correctly in pipelines when
+towgs84=0,0,0 is set #881
o Handle the case where nad_ctable2_init returns NULL #883
o Avoid shadowed declaration errors with old gcc #880
o Expand +datum properly +datum in pipelines #872
o Fail gracefully when incorrect headers are encountered in grid
files #875
o Improve roundtrip stability in pipelines using +towgs84 #871
o Fixed typo in gie error codes #861
o Numerical stability fixes to the geodesic package #826 #843
o Make sure that transient errors are returned correctly #857
o Make sure that locally installed header files are not used when
building PROJ #849
o Fix inconsistent parameter names in proj.h/proj_4D_api.c #842
o Make sure +vunits is applied #833
o Fix incorrect Web Mercator transformations #834
THANKS TO
------------
Version 5.0.1 is made possible by the following contributors:
Mike Toews
Kurt Schwehr
Even Rouault
Charles Karney
Thomas Knudsen
Kristian Evers
5.0.0 Release Notes
-------------------
This version of PROJ introduces some significant extensions and
improvements to (primarily) the geodetic functionality of the system.
The main driver for introducing the new features is the emergence of
dynamic reference frames, the increasing use of high accuracy GNSS,
and the related growing demand for accurate coordinate
transformations. While older versions of PROJ included some geodetic
functionality, the new framework lays the foundation for turning PROJ
into a generic geospatial coordinate transformation engine.
The core of the library is still the well established projection code.
The new functionality is primarily exposed in a new programming
interface and a new command line utility, "cct" (for "Coordinate
Conversion and Transformation"). The old programming interface is
still available and can - to some extent - use the new geodetic
transformation features.
The internal architecture has also seen many changes and much
improvement. So far, these improvements respect the existing
programming interface. But the process has revealed a need to simplify
and reduce the code base, in order to support sustained active
development.
!!!
!!! Therefore we have scheduled regular releases over the coming years
!!! which will gradually remove the old programming interface.
!!!
!!! This will cause breaking changes with the next two major version
!!! releases, which will affect all projects that depend on PROJ
!!! (cf. section "deprecations" below).
!!!
The decision to break the existing API has not been easy, but has
ultimately been deemed necessary to ensure the long term survival of
the project. Not only by improving the maintainability immensely, but
also by extending the potential user (and hence developer) community.
The end goal is to deliver a generic coordinate transformation
software package with a clean and concise code base appealing to
both users and developers.
VERSIONING AND NAMING
---------------------
For the first time in more than 25 years the major version number of
the software is changed. The decision to do this is based on the many
new features and new API. While backwards compatibility remains -
except in a few rare corner cases - the addition of a new and improved
programming interface warrants a new major release.
The new major version number unfortunately leaves the project in a bit
of a conundrum regarding the name. For the majority of the life-time
of the product it has been known as PROJ.4, but since we have now
reached version 5 the name is no longer aligned with the version
number.
Hence we have decided to decouple the name from the version number and
from this version and onwards the product will simply be called PROJ.
In recognition of the history of the software we are keeping PROJ.4 as
the *name of the organizing project*. The same project team also
produces the datum-grid package.
In summary:
o The PROJ.4 project provides the product PROJ, which is now at
version 5.0.0.
o The foundational component of PROJ is the library libproj.
o Other PROJ components include the application proj, which provides
a command line interface to libproj.
o The PROJ.4 project also distributes the datum-grid package,
which at the time of writing is at version 1.6.0.
UPDATES
-------
o Introduced new API in proj.h.
- The new API is orthogonal to the existing proj_api.h API and the
internally used projects.h API.
- The new API adds the ability to transform spatiotemporal (4D)
coordinates.
- Functions in the new API use the "proj_" namespace.
- Data types in the new API use the "PJ_" namespace, with a few
historic exceptions such as XY, XYZ, LP and LPZ.
o Introduced the concept of "transformation pipelines" that makes it
possible to do complex geodetic transformations of spatiotemporal
coordinates by daisy chaining simple coordinate operations.
o Introduced cct, the Coordinate Conversion and Transformation
application.
o Introduced gie, the Geospatial Integrity Investigation Environment.
- Selftest invoked by -C flag in proj has been removed
- Ported approx. 1300 built-in selftests to gie format
- Ported approx. 1000 tests from the gigs test framework
- Added approx. 200 new tests
o Adopted terminology from the OGC/ISO-19100 geospatial standards
series. Key definitions are:
- At the most generic level, a *coordinate operation* is a change
of coordinates, based on a one-to-one relationship, from one
coordinate reference system to another.
- A *transformation* is a coordinate operation in which the two
coordinate reference systems are based on different datums, e.g.
a change from a global reference frame to a regional frame.
- A *conversion* is a coordinate operation in which both
coordinate reference systems are based on the same datum,
e.g. change of units of coordinates.
- A *projection* is a coordinate conversion from an ellipsoidal
coordinate system to a plane. Although projections are simply
conversions according to the standard, they are treated as
separate entities in PROJ as they make up the vast majority
of operations in the library.
o New operations:
- The pipeline operator (pipeline)
- Transformations:
+ Helmert transform (helmert)
+ Horner real and complex polynomial evaluation (horner)
+ Horizontal gridshift (hgridshift)
+ Vertical gridshift (vgridshift)
+ Molodensky transform (molodensky)
+ Kinematic gridshift with deformation model (deformation)
- Conversions:
+ Unit conversion (unitconvert)
+ Axis swap (axisswap)
- Projections:
+ Central Conic projection (ccon)
o Significant documentation updates, including
- Overhaul of the structure of the documentation
- A better introduction to the use of PROJ
- A complete reference to the new proj.h API
- a complete rewrite of the section on geodesic calculations
- Figures for all projections
o New "free format" option for operation definitions, which
permits separating tokens by whitespace when specifying key/value-
pairs, e.g. "proj = merc lat_0 = 45".
o Added metadata to init-files that can be read with the
proj_init_info() function in the new proj.h API.
o Added ITRF2000, ITRF2008 and ITRF2014 init-files with ITRF
transformation parameters, including plate motion model
parameters.
o Added ellipsoid parameters for GSK2011, PZ90 and "danish". The
latter is similar to the already supported andrae ellipsoid,
but has a slightly different semimajor axis.
o Added Copenhagen prime meridian.
o Updated EPSG database to version 9.2.0.
o Geodesic library updated to version 1.49.2-c.
o Support for analytical partial derivatives has been removed.
o Improved performance in Winkel Tripel and Aitoff.
o Introduced pj_has_inverse() function to proj_api.h. Checks if an
operation has an inverse. Use this instead of checking whether
P->inv exists, since that can no longer be relied on.
o ABI version number updated to 13:0:0.
o Removed support for Windows CE.
o Removed the VB6 COM interface.
BUG FIXES
------------
All bug fix numbers refer to issues indexed at
https://github.com/OSGeo/proj.4/issues/
o Fixed incorrect convergence calculation in Lambert Conformal
Conic. #16.
o Handle ellipsoid parameters correctly when using +nadgrids=@null.
#22.
o Return correct latitude when using negative northings in
Transverse Mercator (tmerc). #138.
o Return correct result at origin in inverse Mod. Stererographic
of Alaska. #161.
o Return correct result at origin in inverse Mod. Stererographic
of 48 U.S. #162.
o Return correct result at origin in inverse Mod. Stererographic
of 50 U.S. #163.
o Return correct result at origin in inverse Lee Oblated
Stereographic. #164.
o Return correct result at origin in inverse Miller Oblated
Stereographic. #164.
o Fixed scaling and wrap-around issues in Oblique Cylindrical
Equal Area. #166.
o Corrected a coefficient error in inverse Transverse Mercator. #174.
o Respect -r flag when calling proj with -V. #184.
o Remove multiplication by 2 at the equator error in Stereographic
projection. #194.
o Allow +alpha=0 and +gamma=0 when using Oblique Mercator. #195.
o Return correct result of inverse Oblique Mercator when alpha is
between 90 and 270. #331.
o Avoid segmentation fault when accessing point outside grid. #369.
o Avoid segmentation fault on NaN input in Robin inverse. #463.
o Very verbose use of proj (-V) on Windows is fixed. #484.
o Fixed memory leak in General Oblique Transformation. #497.
o Equations for meridian convergence and partial derivatives have
been corrected for non-conformal projections. #526.
o Fixed scaling of cartesian coordinates in pj_transform(). #726.
o Additional bug fixes courtesy of Google's OSS-Fuzz program:
https://bugs.chromium.org/p/oss-fuzz/issues/list?can=1&q=proj4
DEPRECATIONS
------------
o The projects.h header and the functions related to it is
considered deprecated from version 5.0.0 and onwards.
!!! PROJECTS.H WILL BE REMOVED FROM THE LIBRARY !!!
!!! WITH VERSION 6.0.0 !!!
o The nmake build system on Windows will not be supported from
version 6.0.0 on onwards. Use CMake instead.
!!! NMAKE BUILD SYSTEM WILL BE REMOVED FROM THE LIBRARY !!!
!!! WITH VERSION 6.0.0 !!!
o The proj_api.h header and the functions related to it is
consided deprecated from version 5.0.0 and onwards.
!!! PROJ_API.H WILL BE REMOVED FROM THE LIBRARY !!!
!!! WITH VERSION 7.0.0 !!!
THANKS TO
------------
Version 5.0.0 is made possible by the following contributors:
Lukasz Komsta
Maxim Churilin
edechaux
dusanjovic
Zoltan Siki
Tom Fili
Nicolas David
Mike Toews
Micah Cochran
Luke Campbell
Ilya Oshchepkov
Adam Wulkiewicz
Jonas Tittmann
Mateusz Loskot
Etienne Jacques
Bas Couwenberg
Elliott Sales de Andrade
Charles Karney
Aaron Puchert
Julien Moquet
Charles Karney
Howard Butler
Even Rouault
Thomas Knudsen
Kristian Evers
4.9.3 Release Notes
-------------------
o UTM now uses etmerc, following NGA recommendations. Tests adjusted
for tiny changes in values.
o new projections: Times, Natural Earth II, Compact Miller, Patterson
Cylindrical, and inverse for Hammer and Eckert-Greifendorff.
o runtime self tests are now opt-in instead of opt-out
o math constants moved to projects.h
o bugfixes
o New (optional) runtime self tests added to proj
4.9.2 Release Notes
-------------------
o proj_def.dat was missing from source distribution
see https://github.com/OSGeo/proj.4/issues/274 for more detail
o Update Geodesic library from GeographicLib
o Remove setlocale() use in pj_init_ctx()
o Renamed PVALUE in pj_param.c to prevent clash with Windows
4.9.1 Release Notes
-------------------
o 4.9.0RC2 release was abandoned because it was not promoted in a
timely fashion. Subsequent maintenance of tickets has continued,
and a new 4.9.1 release was issued in its place.
o Implement inverse solution for Winkel Tripel from Drazan Tutic #250
o More CMake configuration tweaks. The CMake configuration is probably
not at feature parity with the autotools builds at this point but it
is converging #256
o Tweak initialization ordering around setlocal which may have caused
issues #237
o Support out-of-tree autoconf builds more completely #247
o Fix NaN handling by geod_inverse and geod_polygon_addedge #251 & #253
o Update config.sub and config.guess #257
o Adapt Charles Karney's CMake patches for smoother build #258
o Define default PROJ_LIB location for CMake compilation #261
o Fix Windows compilation on PJ_aitoff.c
o Align CMake SOVERSION with autotools #263
o Regenerate nad/epsg with GDAL r28536 to avoid precision loss in TOWGS84
parameters, e.g. on Amersfoort / RD EPSG:4289 (#260)
o Add CMake project-config.cmake scripts (#264 from Charles Karney)
o Dial back test sensitivity #255
4.9.0 Release Notes
-------------------
o Implement CMake as an option for building PROJ.4
o Implement new virtual file api (projFileAPI) so that all access to grid
shift and init files can be hooked.
o Replace geodesic implementation with one from Charles Karney and add a
supported public interface (geodesic.h).
o Upgraded to EPSG 8.5.
o Removed old (deprecated) Java bindings in favor of the new api introduced
in 4.8.0.
o Implement the calcofi (Cal Coop Ocean Fish Invest Lines/Stations) projection
o Install projects.h again for applications that want access to internal
structures and functions despite the inherent fragility.
o Various bug fixes and cleanup.
o Added the CalCOFI pseudo-projection, #135
4.8.0 Release Notes
-------------------
o Added the Natural Earth projection.
o Added HEALPIX, rHEALPIX and Icosahedral Snyder Equal Area projections.
o nad2bin now produces "CTable2" format grid shift files by default which
are platform independent.
o nad2nad removed, use cs2cs for datum shift operations.
o projects.h no longer installed as a public include file. Please try to
only use proj_api.h.
o Add pj_get_spheroid_defn() accessor.
o Added an alternate version of pj_init() that takes a projCtx (execution
context) structure to address multithreading issues with error management
and to provide a support for application hookable error reporting and
logging.
o Upgrade to EPSG 7.9. Some changes in ideal datum selection.
o JNI bindings reworked, org.proj4.Projections deprecated in favor of
org.proj4.PJ.
o Added preliminary vertical datum support.
o Fix various multithreading issues, particular in datum grid handling code.
o Added support for the +axis= option for alternate axis orientations as
part of a coordinate system (used for TM South Orientated support).
o +proj=omerc implementatioin replaced with code from libproj4. +rot_conv
flag no longer works, and some coordinate systems (ie. Malaysian) will
need to use +gamma instead. "epsg" init file updated accordingly.
4.7.0 Release Notes
-------------------
o Added in memory caching of init file search results for substantial
acceleration in some application environments (like MapServer).
o Regenerated nad/epsg init file with EPSG 7.1 database, including new
support for Google Mercator (EPSG:3857).
o Various thread safety improvements, including preliminary support for
a mutex lock around some operations, like grid loading.
4.6.1 Release Notes
-------------------
o Upgraded to EPSG 6.17 version for nad/epsg. Also corrected the precision
problem introduced in the last version.
o Added logic for tmerc projection to fail rather than return crazy results
if more than 90 degrees away from the central meridian (#5). This change
may only be temporary till a more comprehensive solution is found.
o Fixed handling of extra text in cs2cs.
o Renamed INSTALL to INSTALL.TXT.
o The eqc projection has been generalized to include a latitude of origin.
o Added the glabsgm (Gauss Laborde / Sphere Geometric Mean) projection,
and gstmerc variation.
o nad/IGNF init catalogue created.
o added the ntf_r93.gsb datum shift file.
o Add /Op in nmake.opt compile options to avoid VC7 optimization bug (#12)
o Fix testvarious test script so it works properly when grid files available
4.6.0 Release Notes
-------------------
o MAJOR: Rework pj_transform() to avoid applying ellipsoid to ellipsoid
transformations as a datum shift when no datum info is available.
o Avoid applying "change of ellipsoid" during datum shifting based on
ellipsoids getting changed to spheres for spherical projections.
o Upgrade to EPSG 6.13
o Added "900913" "Google Mercator" code in nad/esri.extra.
o Avoid some static variable based multi-threading problems.
o Improve error recovery if ctable style datum shift grid fails to load.
o Support drive letters properly in PROJ_LIB paths for win32.
o Fix occasional problem with DMS parsing.
o Removed non-functional mpoly projection.
o add lonlat, and latlon as aliases for longlat.
4.5.0 Release Notes
-------------------
o Microsoft Visual Studio 8 compatibility changes.
o Upgraded to EPSG 6.11.1 database.
o Several bug fixes to pj_transform() to handle transient errors properly.
o Fix Krovak projection (include +czech flag)
o Added Roussilhe Stereographic projection from libproj4 (proj=rouss).
o Added experimental +lon_wrap flag for alternate pj_transform() longitude
wrapping behavior on output.
4.4.9 Release Notes
-------------------
o Win32 build uses proj.dll by default now.
o Added accessor functions for the datums, ellps, prime_meridians, units and
main projection definition lists so they can be used on windows where
data objects exported from the DLL don't work easily.
o Added JNI (Java Native Interface) support within the jniwrap directory,
and some supporting entry points directly in the proj dll/so. See
--with-jni configure switch, and jniwrap/README.
o Added the proj=stereoa and proj=geos projections, incorporated from
Gerald's libproj4.
o A few other bug fixes.
4.4.8 Release Notes
-------------------
o Updated epsg file to EPSG 6.5, added other.extra pseudo-EPSG WMS definitions
o Made significant fixes to prime meridian support.
o Substantially change pj_datum_transform(), so it and pj_transform() will
work between coordinate systems with different ellipsoids but no datum
shift information (assume +towgs84=0,0,0).
o Added pj_get_release() function.
o Ensure pj_transform() will try to transform all points in provided list if
even some might transform properly.
o Improved the accuracy of Geocentric_To_Geodetic() via an iterative
solution.
o Various other bug fixes.
4.4.7 Release Notes
-------------------
o Added NTv2 (.gsb) grid shift file support.
o Modified datum shift support so that data file data is only loaded if
needed. Also added 'null' grid as a fallback option, and support for
making grids optional (prefix with '@' in +nadgrids).
o Regenerated nad/epsg file with towgs84 parameters for non-greenwich prime
meridians.
o Updated nad/esri file with better generated form from Paul Ramsey.
o Various bug fixes.
4.4.6 Release Notes
-------------------
o Incorporated new lcca (Lambert Conformal Conic Alternate) projection from
Gerald.
o Updated 'espg' translation file for EPSG 6.2.2 with better support for
prime meridians.
o Added Prime Meridians via +pm command switch to cs2cs (and pj_transform).
o Fixed bug with 7 parameter transforms.
o Added 'esri' pseudo-epsg coordinate system file.
o Cleanup so that PROJ.4 compiles clean as C++ code.
o Added pj_get_def() to expand definitions of stuff like +init clauses.
o Added a Krovak implementation (proj=krov). Note this may change again
in the next release.
-3464
View File
File diff suppressed because it is too large Load Diff
+105 -45
View File
@@ -1,77 +1,137 @@
# PROJ
[![Coveralls Status](https://coveralls.io/repos/github/OSGeo/PROJ/badge.svg?branch=master)](https://coveralls.io/github/OSGeo/PROJ?branch=master)
[![CodeQL](https://github.com/OSGeo/PROJ/actions/workflows/codeql.yml/badge.svg)](https://github.com/OSGeo/PROJ/actions/workflows/codeql.yml)
[![Gitter](https://badges.gitter.im/OSGeo/proj.4.svg)](https://gitter.im/OSGeo/proj.4)
[![Mailing List](https://img.shields.io/badge/PROJ-mailing%20list-4eb899.svg)](http://lists.osgeo.org/mailman/listinfo/proj)
[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v1.4%20adopted-ff69b4.svg)](CODE_OF_CONDUCT.md)
[![Release](https://img.shields.io/github/v/release/OSGeo/PROJ)](https://github.com/OSGeo/PROJ/releases)
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5884394.svg)](https://doi.org/10.5281/zenodo.5884394)
[![Travis Status](https://travis-ci.org/OSGeo/proj.4.svg?branch=master)](https://travis-ci.org/OSGeo/proj.4)
[![AppVeyor Status](https://ci.appveyor.com/api/projects/status/584j49uguwoo5evi?svg=true)](https://ci.appveyor.com/project/OSGeo/proj-4)
[![Coveralls Status](https://coveralls.io/repos/github/OSGeo/proj.4/badge.svg?branch=master)](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)
+78
View File
@@ -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
View File
@@ -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 "======================================"
-7
View File
@@ -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
-9
View File
@@ -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
-34
View File
@@ -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)
-41
View File
@@ -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
-30
View File
@@ -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"
-14
View File
@@ -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
-25
View File
@@ -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"]
-365
View File
@@ -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}"
-252
View File
@@ -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);
});
}
-62
View File
@@ -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
View File
@@ -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
-52
View File
@@ -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)
-13
View File
@@ -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
-6
View File
@@ -1,6 +0,0 @@
#!/bin/bash
set -e
# -fno-use-cxa-atexit is needed to build with -coverage
./ci/install.sh
-5
View File
@@ -1,5 +0,0 @@
#!/bin/bash
set -e
mamba install --yes --quiet --only-deps proj
-20
View File
@@ -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
-7
View File
@@ -1,7 +0,0 @@
#!/bin/bash
set -e
ccache -M 200M
CC="clang" CXX="clang++" CMAKE_BUILD_TYPE=RelWithDebInfo ./ci/install.sh
-128
View File
@@ -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
View File
@@ -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}")
-63
View File
@@ -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()
-99
View File
@@ -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 ()
+14
View File
@@ -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
+41
View File
@@ -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)
+83
View File
@@ -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}")
+23
View File
@@ -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)
+89
View File
@@ -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()
+45
View File
@@ -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()
+456
View File
@@ -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()
+47
View File
@@ -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()
-89
View File
@@ -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)
-20
View File
@@ -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()
-31
View File
@@ -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()
-73
View File
@@ -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()
-100
View File
@@ -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()
-41
View File
@@ -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()
+3 -3
View File
@@ -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()
+40 -4
View File
@@ -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}"
+17 -21
View File
@@ -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)
+17 -56
View File
@@ -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})
-65
View File
@@ -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
View File
@@ -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
-115
View File
@@ -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
)
-94
View File
@@ -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
-55
View File
@@ -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
-91
View File
@@ -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
View File
@@ -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