aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKristian Evers <kristianevers@gmail.com>2020-11-01 13:34:32 +0100
committerKristian Evers <kristianevers@gmail.com>2020-11-20 16:40:39 +0100
commit9419b42ade1f1d35a61c05f0f7ce9aab2eeff3c7 (patch)
treea35e99c8a19a4a8863e710833bd4dc5b466edd3e
parent4478eed4f5fe9d33fe7ef34126f98d3f7aa2daa5 (diff)
downloadPROJ-9419b42ade1f1d35a61c05f0f7ce9aab2eeff3c7.tar.gz
PROJ-9419b42ade1f1d35a61c05f0f7ce9aab2eeff3c7.zip
Remove proj_api.h
Removes proj_api.h from the public API. The contents of the header file has been moved to proj_internal.h verbatim and any references to proj_api.h has been changed to proj_internal.h. The documentation of proj_api.h has been removed. The only exception to this is the API migration guides which still mention the old API. Fixes #837
-rw-r--r--docs/source/development/index.rst5
-rw-r--r--docs/source/development/reference/deprecated.rst270
-rw-r--r--docs/source/development/reference/index.rst1
-rw-r--r--src/Makefile.am2
-rw-r--r--src/apps/emess.cpp2
-rw-r--r--src/iso19111/datum.cpp1
-rw-r--r--src/iso19111/factory.cpp1
-rw-r--r--src/iso19111/io.cpp1
-rw-r--r--src/lib_proj.cmake1
-rw-r--r--src/mutex.cpp5
-rw-r--r--src/proj.h4
-rw-r--r--src/proj_api.h227
-rw-r--r--src/proj_internal.h163
-rw-r--r--src/projections/calcofi.cpp1
-rw-r--r--src/tests/multistresstest.cpp2
-rw-r--r--src/tests/test228.cpp2
-rw-r--r--test/fuzzers/standard_fuzzer.cpp2
-rw-r--r--test/unit/pj_transform_test.cpp1
18 files changed, 164 insertions, 527 deletions
diff --git a/docs/source/development/index.rst b/docs/source/development/index.rst
index 85c10c6d..f985279f 100644
--- a/docs/source/development/index.rst
+++ b/docs/source/development/index.rst
@@ -39,9 +39,8 @@ are maintained in a `separate git repository <https://github.com/OSGeo/proj-datu
.. attention::
The ``proj_api.h`` header and the functions related to it is
- considered deprecated from version 5.0.0 and onwards. The header will be
- removed from PROJ in version 7.0.0 scheduled for release March 1st
- 2020.
+ considered deprecated from version 5.0.0 and onwards. The header has been
+ removed in version 8.0.0 released March 1st 2021.
.. attention::
diff --git a/docs/source/development/reference/deprecated.rst b/docs/source/development/reference/deprecated.rst
deleted file mode 100644
index 19f43b41..00000000
--- a/docs/source/development/reference/deprecated.rst
+++ /dev/null
@@ -1,270 +0,0 @@
-.. _api:
-
-********************************************************************************
-Deprecated API
-********************************************************************************
-
-.. contents:: Contents
- :depth: 3
- :backlinks: none
-
-Introduction
-------------
-
-Procedure ``pj_init()`` selects and initializes a cartographic
-projection with its argument control parameters. ``argc`` is the number
-of elements in the array of control strings argv that each contain
-individual cartographic control keyword assignments (+ proj arguments).
-The list must contain at least the proj=projection and Earth’s radius or
-elliptical parameters. If the initialization of the projection is
-successful a valid address is returned otherwise a NULL value.
-
-The ``pj_init_plus()`` function operates similarly to ``pj_init()`` but
-takes a single string containing the definition, with each parameter
-prefixed with a plus sign. For example
-``+proj=utm +zone=11 +ellps=WGS84``.
-
-Once initialization is performed either forward or inverse projections
-can be performed with the returned value of ``pj_init()`` used as the
-argument proj. The argument structure projUV values u and v contain
-respective longitude and latitude or x and y. Latitude and longitude are
-in radians. If a projection operation fails, both elements of projUV are
-set to ``HUGE_VAL`` (defined in ``math.h``).
-
-Note: all projections have a forward mode, but some do not have an
-inverse projection. If the projection does not have an inverse the
-projPJ structure element inv will be ``NULL``.
-
-The ``pj_transform`` function may be used to transform points between
-the two provided coordinate systems. In addition to converting between
-cartographic projection coordinates and geographic coordinates, this
-function also takes care of datum shifts if possible between the source
-and destination coordinate system. Unlike ``pj_fwd()`` and ``pj_inv()``
-it is also allowable for the coordinate system definitions
-``(projPJ *)`` to be geographic coordinate systems (defined as
-``+proj=latlong``).
-The x, y and z arrays contain the input values of the points, and are replaced with the output values.
-The function returns zero on success, or the error number (also in ``pj_errno``)
-on failure.
-
-Memory associated with the projection may be freed with ``pj_free()``.
-
-Example
--------
-
-The following program reads latitude and longitude values in decimal
-degrees, performs Mercator projection with a Clarke 1866 ellipsoid and a
-33° latitude of true scale and prints the projected cartesian values in
-meters:
-
-.. code::
-
- #include <proj_api.h>
-
- main(int argc, char **argv) {
- projPJ pj_merc, pj_latlong;
- double x, y;
-
- if (!(pj_merc = pj_init_plus("+proj=merc +ellps=clrk66 +lat_ts=33")) )
- exit(1);
- if (!(pj_latlong = pj_init_plus("+proj=latlong +ellps=clrk66")) )
- exit(1);
- while (scanf("%lf %lf", &x, &y) == 2) {
- x *= DEG_TO_RAD;
- y *= DEG_TO_RAD;
- p = pj_transform(pj_latlong, pj_merc, 1, 1, &x, &y, NULL );
- printf("%.2f\t%.2f\n", x, y);
- }
- exit(0);
- }
-
-
-For this program, an input of ``-16 20.25`` would give a result of
-``-1495284.21 1920596.79``.
-
-API Functions
--------------
-
-pj_transform
-============
-
-::
-
- int pj_transform( projPJ srcdefn,
- projPJ dstdefn,
- long point_count,
- int point_offset,
- double *x,
- double *y,
- double *z );
-
-
-Transform the x/y/z points from the source coordinate system to the
-destination coordinate system.
-
-``srcdefn``: source (input) coordinate system.
-
-``dstdefn``: destination (output) coordinate system.
-
-``point_count``: the number of points to be processed (the size of the
-x/y/z arrays).
-
-``point_offset``: the step size from value to value (measured in
-doubles) within the x/y/z arrays - normally 1 for a packed array. May be
-used to operate on xyz interleaved point arrays.
-
-``x``/``y``/``z``: The array of X, Y and Z coordinate values passed as
-input, and modified in place for output. The Z may optionally be NULL.
-
-``return``: The return is zero on success, or a PROJ.4 error code.
-
-The ``pj_transform()`` function transforms the passed in list of points
-from the source coordinate system to the destination coordinate system.
-Note that geographic locations need to be passed in radians, not decimal
-degrees, and will be returned similarly. The ``z`` array may be passed
-as NULL if Z values are not available.
-
-If there is an overall failure, an error code will be returned from the
-function. If individual points fail to transform - for instance due to
-being over the horizon - then those x/y/z values will be set to
-``HUGE_VAL`` on return. Input values that are ``HUGE_VAL`` will not be
-transformed.
-
-
-pj_init_plus
-============
-
-::
-
- projPJ pj_init_plus(const char *definition);
-
-This function converts a string representation of a coordinate system
-definition into a projPJ object suitable for use with other API
-functions. On failure the function will return NULL and set pj_errno.
-The definition should be of the general form
-``+proj=tmerc +lon_0 +datum=WGS84``. Refer to PROJ.4 documentation and
-the :ref:`transformation` notes for additional detail.
-
-Coordinate system objects allocated with ``pj_init_plus()`` should be
-deallocated with ``pj_free()``.
-
-
-pj_free
-=======
-
-::
-
- void pj_free( projPJ pj );
-
-Frees all resources associated with pj.
-
-
-pj_is_latlong
-=============
-
-::
-
- int pj_is_latlong( projPJ pj );
-
-Returns TRUE if the passed coordinate system is geographic
-(``proj=latlong``).
-
-
-pj_is_geocent
-=============
-
-::
-
- int pj_is_geocent( projPJ pj );``
-
-Returns TRUE if the coordinate system is geocentric (``proj=geocent``).
-
-pj_get_def
-==========
-
-::
-
- char *pj_get_def( projPJ pj, int options);``
-
-Returns the PROJ.4 initialization string suitable for use with
-``pj_init_plus()`` that would produce this coordinate system, but with
-the definition expanded as much as possible (for instance ``+init=`` and
-``+datum=`` definitions).
-
-pj_latlong_from_proj
-====================
-
-::
-
- projPJ pj_latlong_from_proj( projPJ pj_in );``
-
-Returns a new coordinate system definition which is the geographic
-coordinate (lat/long) system underlying ``pj_in``.
-
-pj_set_finder
-==============
-
-::
-
- void pj_set_finder( const char *(*new_finder)(const char *) );``
-
-Install a custom function for finding init and grid shift files.
-
-pj_set_searchpath
-=================
-
-::
-
- void pj_set_searchpath ( int count, const char **path );``
-
-Set a list of directories to search for init and grid shift files.
-
-
-pj_deallocate_grids
-===================
-
-::
-
- void pj_deallocate_grids( void );``
-
-Frees all resources associated with loaded and cached datum shift grids.
-
-
-pj_strerrno
-===========
-
-::
-
- char *pj_strerrno( int );``
-
-Returns the error text associated with the passed in error code.
-
-pj_get_errno_ref
-================
-
-::
-
- int *pj_get_errno_ref( void );``
-
-Returns a pointer to the global pj\_errno error variable.
-
-pj_get_release
-==============
-
-::
-
- const char *pj_get_release( void );``
-
-Returns an internal string describing the release version.
-
-Obsolete Functions
-~~~~~~~~~~~~~~~~~~
-
-``XY pj_fwd( LP lp, PJ *P );``
-
-``LP pj_inv( XY xy, PJ *P );``
-
-``projPJ pj_init(int argc, char **argv);``
-
-.. _more info: pj_transform
-
diff --git a/docs/source/development/reference/index.rst b/docs/source/development/reference/index.rst
index 1d39b1d0..caa893c3 100644
--- a/docs/source/development/reference/index.rst
+++ b/docs/source/development/reference/index.rst
@@ -10,4 +10,3 @@ Reference
datatypes
functions
cpp/index.rst
- deprecated
diff --git a/src/Makefile.am b/src/Makefile.am
index 5b36c8bd..62bff403 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -9,7 +9,7 @@ AM_CPPFLAGS = -DPROJ_LIB=\"$(pkgdatadir)\" \
-DMUTEX_@MUTEX_SETTING@ -I$(top_srcdir)/include @SQLITE3_CFLAGS@ @TIFF_CFLAGS@ @TIFF_ENABLED_FLAGS@ @CURL_CFLAGS@ @CURL_ENABLED_FLAGS@
AM_CXXFLAGS = @CXX_WFLAGS@ @FLTO_FLAG@
-include_HEADERS = proj.h proj_experimental.h proj_constants.h proj_api.h geodesic.h \
+include_HEADERS = proj.h proj_experimental.h proj_constants.h geodesic.h \
proj_symbol_rename.h
EXTRA_DIST = bin_cct.cmake bin_gie.cmake bin_cs2cs.cmake \
diff --git a/src/apps/emess.cpp b/src/apps/emess.cpp
index 53018ba8..138cbf01 100644
--- a/src/apps/emess.cpp
+++ b/src/apps/emess.cpp
@@ -19,7 +19,7 @@
#include <stdlib.h>
#include <string.h>
-#include "proj_api.h"
+#include "proj_internal.h"
#include "proj_config.h"
#define EMESS_ROUTINE
#include "emess.h"
diff --git a/src/iso19111/datum.cpp b/src/iso19111/datum.cpp
index e29f6319..28dbc462 100644
--- a/src/iso19111/datum.cpp
+++ b/src/iso19111/datum.cpp
@@ -43,7 +43,6 @@
// clang-format off
#include "proj.h"
#include "proj_internal.h"
-#include "proj_api.h"
// clang-format on
#include "proj_json_streaming_writer.hpp"
diff --git a/src/iso19111/factory.cpp b/src/iso19111/factory.cpp
index 0ccfefc1..03fd5267 100644
--- a/src/iso19111/factory.cpp
+++ b/src/iso19111/factory.cpp
@@ -65,7 +65,6 @@
// clang-format off
#include "proj.h"
#include "proj_internal.h"
-#include "proj_api.h"
// clang-format on
#include <sqlite3.h>
diff --git a/src/iso19111/io.cpp b/src/iso19111/io.cpp
index 623ad6f9..8c815f36 100644
--- a/src/iso19111/io.cpp
+++ b/src/iso19111/io.cpp
@@ -70,7 +70,6 @@
// clang-format off
#include "proj.h"
#include "proj_internal.h"
-#include "proj_api.h"
// clang-format on
using namespace NS_PROJ::common;
diff --git a/src/lib_proj.cmake b/src/lib_proj.cmake
index 67bc1f4e..95417004 100644
--- a/src/lib_proj.cmake
+++ b/src/lib_proj.cmake
@@ -275,7 +275,6 @@ set(SRC_LIBPROJ_CORE
)
set(HEADERS_LIBPROJ
- proj_api.h
proj.h
proj_experimental.h
proj_constants.h
diff --git a/src/mutex.cpp b/src/mutex.cpp
index da415e55..2cc4d0a1 100644
--- a/src/mutex.cpp
+++ b/src/mutex.cpp
@@ -34,11 +34,6 @@
#ifndef _WIN32
#include "proj_config.h"
#include "proj_internal.h"
-#else
-#ifndef ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
-#define ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
-#endif
-#include "proj_api.h"
#endif
/* on win32 we always use win32 mutexes, even if pthreads are available */
diff --git a/src/proj.h b/src/proj.h
index 4185ddbf..0597db26 100644
--- a/src/proj.h
+++ b/src/proj.h
@@ -119,10 +119,6 @@
#include <stddef.h> /* For size_t */
-#ifdef PROJ_API_H
-#error proj.h must be included before proj_api.h
-#endif
-
#ifdef PROJ_RENAME_SYMBOLS
#include "proj_symbol_rename.h"
#endif
diff --git a/src/proj_api.h b/src/proj_api.h
deleted file mode 100644
index a26088ca..00000000
--- a/src/proj_api.h
+++ /dev/null
@@ -1,227 +0,0 @@
-/******************************************************************************
- * Project: PROJ.4
- * Purpose: Public (application) include file for PROJ.4 API, and constants.
- * Author: Frank Warmerdam, <warmerdam@pobox.com>
- *
- ******************************************************************************
- * Copyright (c) 2001, Frank Warmerdam <warmerdam@pobox.com>
- *
- * 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
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * 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.
- *****************************************************************************/
-
-/*
- * This version number should be updated with every release!
- *
- * This file is expected to be removed from the PROJ distribution
- * when a few minor-version releases has been made.
- *
- */
-
-#ifndef ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
-#error 'To use the proj_api.h you must define the macro ACCEPT_USE_OF_DEPRECATED_PROJ_API_H'
-#endif
-
-#ifndef PJ_VERSION
-#define PJ_VERSION 800
-#endif
-
-#ifdef PROJ_RENAME_SYMBOLS
-#include "proj_symbol_rename.h"
-#endif
-
-
-/* If we're not asked for PJ_VERSION only, give them everything */
-#ifndef PROJ_API_INCLUDED_FOR_PJ_VERSION_ONLY
-/* General projections header file */
-#ifndef PROJ_API_H
-#define PROJ_API_H
-
-/* standard inclusions */
-#include <math.h>
-#include <stddef.h>
-#include <stdlib.h>
-
-#ifndef PROJ_DLL
-#ifdef PROJ_MSVC_DLL_EXPORT
-#define PROJ_DLL __declspec(dllexport)
-#elif defined(PROJ_MSVC_DLL_IMPORT)
-#define PROJ_DLL __declspec(dllimport)
-#elif defined(__GNUC__)
-#define PROJ_DLL __attribute__ ((visibility("default")))
-#else
-#define PROJ_DLL
-#endif
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* pj_init() and similar functions can be used with a non-C locale */
-/* Can be detected too at runtime if the symbol pj_atof exists */
-#define PJ_LOCALE_SAFE 1
-
-#define RAD_TO_DEG 57.295779513082321
-#define DEG_TO_RAD .017453292519943296
-
-
-#if defined(PROJ_H)
-#define PROJ_API_H_NOT_INVOKED_AS_PRIMARY_API
-#endif
-
-
-
-extern char const PROJ_DLL pj_release[]; /* global release id string */
-PROJ_DLL extern int pj_errno; /* global error return code */
-
-#ifndef PROJ_INTERNAL_H
-/* replaced by enum proj_log_level in proj_internal.h */
-#define PJ_LOG_NONE 0
-#define PJ_LOG_ERROR 1
-#define PJ_LOG_DEBUG_MAJOR 2
-#define PJ_LOG_DEBUG_MINOR 3
-#endif
-
-#ifdef PROJ_API_H_NOT_INVOKED_AS_PRIMARY_API
- /* These make the function declarations below conform with classic proj */
- typedef PJ *projPJ; /* projPJ is a pointer to PJ */
- typedef struct projCtx_t *projCtx; /* projCtx is a pointer to projCtx_t */
-# define projXY PJ_XY
-# define projLP PJ_LP
-# define projXYZ PJ_XYZ
-# define projLPZ PJ_LPZ
-
-#else
- /* i.e. proj_api invoked as primary API */
- typedef struct { double u, v; } projUV;
- typedef struct { double u, v, w; } projUVW;
- typedef void *projPJ;
- #define projXY projUV
- #define projLP projUV
- #define projXYZ projUVW
- #define projLPZ projUVW
- typedef void *projCtx;
-#endif
-
-
-/* If included *after* proj.h finishes, we have alternative names */
-/* file reading api, like stdio */
-typedef int *PAFile;
-typedef struct projFileAPI_t {
- PAFile (*FOpen)(projCtx ctx, const char *filename, const char *access);
- size_t (*FRead)(void *buffer, size_t size, size_t nmemb, PAFile file);
- int (*FSeek)(PAFile file, long offset, int whence);
- long (*FTell)(PAFile file);
- void (*FClose)(PAFile);
-} projFileAPI;
-
-
-
-/* procedure prototypes */
-
-projCtx PROJ_DLL pj_get_default_ctx(void);
-projCtx PROJ_DLL pj_get_ctx( projPJ );
-
-projXY PROJ_DLL pj_fwd(projLP, projPJ);
-projLP PROJ_DLL pj_inv(projXY, projPJ);
-
-projXYZ PROJ_DLL pj_fwd3d(projLPZ, projPJ);
-projLPZ PROJ_DLL pj_inv3d(projXYZ, projPJ);
-
-
-int PROJ_DLL pj_transform( projPJ src, projPJ dst, long point_count, int point_offset,
- double *x, double *y, double *z );
-int PROJ_DLL pj_datum_transform( projPJ src, projPJ dst, long point_count, int point_offset,
- double *x, double *y, double *z );
-int PROJ_DLL pj_geocentric_to_geodetic( double a, double es,
- long point_count, int point_offset,
- double *x, double *y, double *z );
-int PROJ_DLL pj_geodetic_to_geocentric( double a, double es,
- long point_count, int point_offset,
- double *x, double *y, double *z );
-int PROJ_DLL pj_compare_datums( projPJ srcdefn, projPJ dstdefn );
-int PROJ_DLL pj_apply_gridshift( projCtx, const char *, int,
- long point_count, int point_offset,
- double *x, double *y, double *z );
-void PROJ_DLL pj_deallocate_grids(void);
-void PROJ_DLL pj_clear_initcache(void);
-int PROJ_DLL pj_is_latlong(projPJ);
-int PROJ_DLL pj_is_geocent(projPJ);
-void PROJ_DLL pj_get_spheroid_defn(projPJ defn, double *major_axis, double *eccentricity_squared);
-void PROJ_DLL pj_pr_list(projPJ);
-void PROJ_DLL pj_free(projPJ);
-void PROJ_DLL pj_set_finder( const char *(*)(const char *) );
-void PROJ_DLL pj_set_searchpath ( int count, const char **path );
-projPJ PROJ_DLL pj_init(int, char **);
-projPJ PROJ_DLL pj_init_plus(const char *);
-projPJ PROJ_DLL pj_init_ctx( projCtx, int, char ** );
-projPJ PROJ_DLL pj_init_plus_ctx( projCtx, const char * );
-char PROJ_DLL *pj_get_def(projPJ, int);
-projPJ PROJ_DLL pj_latlong_from_proj( projPJ );
-int PROJ_DLL pj_has_inverse(projPJ);
-
-
-void PROJ_DLL *pj_malloc(size_t);
-void PROJ_DLL pj_dalloc(void *);
-void PROJ_DLL *pj_calloc (size_t n, size_t size);
-void PROJ_DLL *pj_dealloc (void *ptr);
-char PROJ_DLL *pj_strdup(const char *str);
-char PROJ_DLL *pj_strerrno(int);
-int PROJ_DLL *pj_get_errno_ref(void);
-const char PROJ_DLL *pj_get_release(void);
-void PROJ_DLL pj_acquire_lock(void);
-void PROJ_DLL pj_release_lock(void);
-void PROJ_DLL pj_cleanup_lock(void);
-
-void PROJ_DLL pj_set_ctx( projPJ, projCtx );
-projCtx PROJ_DLL pj_ctx_alloc(void);
-void PROJ_DLL pj_ctx_free( projCtx );
-int PROJ_DLL pj_ctx_get_errno( projCtx );
-void PROJ_DLL pj_ctx_set_errno( projCtx, int );
-void PROJ_DLL pj_ctx_set_debug( projCtx, int );
-void PROJ_DLL pj_ctx_set_logger( projCtx, void (*)(void *, int, const char *) );
-void PROJ_DLL pj_ctx_set_app_data( projCtx, void * );
-void PROJ_DLL *pj_ctx_get_app_data( projCtx );
-void PROJ_DLL pj_ctx_set_fileapi( projCtx, projFileAPI *);
-projFileAPI PROJ_DLL *pj_ctx_get_fileapi( projCtx );
-
-void PROJ_DLL pj_log( projCtx ctx, int level, const char *fmt, ... );
-void PROJ_DLL pj_stderr_logger( void *, int, const char * );
-
-/* file api */
-projFileAPI PROJ_DLL *pj_get_default_fileapi(void);
-
-PAFile PROJ_DLL pj_ctx_fopen(projCtx ctx, const char *filename, const char *access);
-size_t PROJ_DLL pj_ctx_fread(projCtx ctx, void *buffer, size_t size, size_t nmemb, PAFile file);
-int PROJ_DLL pj_ctx_fseek(projCtx ctx, PAFile file, long offset, int whence);
-long PROJ_DLL pj_ctx_ftell(projCtx ctx, PAFile file);
-void PROJ_DLL pj_ctx_fclose(projCtx ctx, PAFile file);
-char PROJ_DLL *pj_ctx_fgets(projCtx ctx, char *line, int size, PAFile file);
-
-PAFile PROJ_DLL pj_open_lib(projCtx, const char *, const char *);
-int PROJ_DLL pj_find_file(projCtx ctx, const char *short_filename,
- char* out_full_filename, size_t out_full_filename_size);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* ndef PROJ_API_H */
-#endif /* ndef PROJ_API_INCLUDED_FOR_PJ_VERSION_ONLY */
diff --git a/src/proj_internal.h b/src/proj_internal.h
index 203765a3..5a075088 100644
--- a/src/proj_internal.h
+++ b/src/proj_internal.h
@@ -66,10 +66,6 @@
#include "proj.h"
-#ifdef PROJ_API_H
-#error proj_internal.h must be included before proj_api.h
-#endif
-
#ifdef PROJ_RENAME_SYMBOLS
#include "proj_symbol_rename.h"
#endif
@@ -910,7 +906,162 @@ void pj_clear_vgridshift_knowngrids_cache();
PJ_LP pj_generic_inverse_2d(PJ_XY xy, PJ *P, PJ_LP lpInitial);
-/* classic public API */
-#include "proj_api.h"
+
+
+
+/*****************************************************************************/
+/* */
+/* proj_api.h */
+/* */
+/* The rest of this header file includes what used to be "proj_api.h" */
+/* */
+/*****************************************************************************/
+
+/* pj_init() and similar functions can be used with a non-C locale */
+/* Can be detected too at runtime if the symbol pj_atof exists */
+#define PJ_LOCALE_SAFE 1
+
+#define RAD_TO_DEG 57.295779513082321
+#define DEG_TO_RAD .017453292519943296
+
+
+#if defined(PROJ_H)
+#define PROJ_API_H_NOT_INVOKED_AS_PRIMARY_API
+#endif
+
+
+
+extern char const PROJ_DLL pj_release[]; /* global release id string */
+PROJ_DLL extern int pj_errno; /* global error return code */
+
+#ifndef PROJ_INTERNAL_H
+/* replaced by enum proj_log_level in proj_internal.h */
+#define PJ_LOG_NONE 0
+#define PJ_LOG_ERROR 1
+#define PJ_LOG_DEBUG_MAJOR 2
+#define PJ_LOG_DEBUG_MINOR 3
+#endif
+
+#ifdef PROJ_API_H_NOT_INVOKED_AS_PRIMARY_API
+ /* These make the function declarations below conform with classic proj */
+ typedef PJ *projPJ; /* projPJ is a pointer to PJ */
+ typedef struct projCtx_t *projCtx; /* projCtx is a pointer to projCtx_t */
+# define projXY PJ_XY
+# define projLP PJ_LP
+# define projXYZ PJ_XYZ
+# define projLPZ PJ_LPZ
+
+#else
+ /* i.e. proj_api invoked as primary API */
+ typedef struct { double u, v; } projUV;
+ typedef struct { double u, v, w; } projUVW;
+ typedef void *projPJ;
+ #define projXY projUV
+ #define projLP projUV
+ #define projXYZ projUVW
+ #define projLPZ projUVW
+ typedef void *projCtx;
+#endif
+
+
+/* If included *after* proj.h finishes, we have alternative names */
+/* file reading api, like stdio */
+typedef int *PAFile;
+typedef struct projFileAPI_t {
+ PAFile (*FOpen)(projCtx ctx, const char *filename, const char *access);
+ size_t (*FRead)(void *buffer, size_t size, size_t nmemb, PAFile file);
+ int (*FSeek)(PAFile file, long offset, int whence);
+ long (*FTell)(PAFile file);
+ void (*FClose)(PAFile);
+} projFileAPI;
+
+
+
+/* procedure prototypes */
+
+projCtx PROJ_DLL pj_get_default_ctx(void);
+projCtx PROJ_DLL pj_get_ctx( projPJ );
+
+projXY PROJ_DLL pj_fwd(projLP, projPJ);
+projLP PROJ_DLL pj_inv(projXY, projPJ);
+
+projXYZ PROJ_DLL pj_fwd3d(projLPZ, projPJ);
+projLPZ PROJ_DLL pj_inv3d(projXYZ, projPJ);
+
+
+int PROJ_DLL pj_transform( projPJ src, projPJ dst, long point_count, int point_offset,
+ double *x, double *y, double *z );
+int PROJ_DLL pj_datum_transform( projPJ src, projPJ dst, long point_count, int point_offset,
+ double *x, double *y, double *z );
+int PROJ_DLL pj_geocentric_to_geodetic( double a, double es,
+ long point_count, int point_offset,
+ double *x, double *y, double *z );
+int PROJ_DLL pj_geodetic_to_geocentric( double a, double es,
+ long point_count, int point_offset,
+ double *x, double *y, double *z );
+int PROJ_DLL pj_compare_datums( projPJ srcdefn, projPJ dstdefn );
+int PROJ_DLL pj_apply_gridshift( projCtx, const char *, int,
+ long point_count, int point_offset,
+ double *x, double *y, double *z );
+void PROJ_DLL pj_deallocate_grids(void);
+void PROJ_DLL pj_clear_initcache(void);
+int PROJ_DLL pj_is_latlong(projPJ);
+int PROJ_DLL pj_is_geocent(projPJ);
+void PROJ_DLL pj_get_spheroid_defn(projPJ defn, double *major_axis, double *eccentricity_squared);
+void PROJ_DLL pj_pr_list(projPJ);
+void PROJ_DLL pj_free(projPJ);
+void PROJ_DLL pj_set_finder( const char *(*)(const char *) );
+void PROJ_DLL pj_set_searchpath ( int count, const char **path );
+projPJ PROJ_DLL pj_init(int, char **);
+projPJ PROJ_DLL pj_init_plus(const char *);
+projPJ PROJ_DLL pj_init_ctx( projCtx, int, char ** );
+projPJ PROJ_DLL pj_init_plus_ctx( projCtx, const char * );
+char PROJ_DLL *pj_get_def(projPJ, int);
+projPJ PROJ_DLL pj_latlong_from_proj( projPJ );
+int PROJ_DLL pj_has_inverse(projPJ);
+
+
+void PROJ_DLL *pj_malloc(size_t);
+void PROJ_DLL pj_dalloc(void *);
+void PROJ_DLL *pj_calloc (size_t n, size_t size);
+void PROJ_DLL *pj_dealloc (void *ptr);
+char PROJ_DLL *pj_strdup(const char *str);
+char PROJ_DLL *pj_strerrno(int);
+int PROJ_DLL *pj_get_errno_ref(void);
+const char PROJ_DLL *pj_get_release(void);
+void PROJ_DLL pj_acquire_lock(void);
+void PROJ_DLL pj_release_lock(void);
+void PROJ_DLL pj_cleanup_lock(void);
+
+void PROJ_DLL pj_set_ctx( projPJ, projCtx );
+projCtx PROJ_DLL pj_ctx_alloc(void);
+void PROJ_DLL pj_ctx_free( projCtx );
+int PROJ_DLL pj_ctx_get_errno( projCtx );
+void PROJ_DLL pj_ctx_set_errno( projCtx, int );
+void PROJ_DLL pj_ctx_set_debug( projCtx, int );
+void PROJ_DLL pj_ctx_set_logger( projCtx, void (*)(void *, int, const char *) );
+void PROJ_DLL pj_ctx_set_app_data( projCtx, void * );
+void PROJ_DLL *pj_ctx_get_app_data( projCtx );
+void PROJ_DLL pj_ctx_set_fileapi( projCtx, projFileAPI *);
+projFileAPI PROJ_DLL *pj_ctx_get_fileapi( projCtx );
+
+void PROJ_DLL pj_log( projCtx ctx, int level, const char *fmt, ... );
+void PROJ_DLL pj_stderr_logger( void *, int, const char * );
+
+/* file api */
+projFileAPI PROJ_DLL *pj_get_default_fileapi(void);
+
+PAFile PROJ_DLL pj_ctx_fopen(projCtx ctx, const char *filename, const char *access);
+size_t PROJ_DLL pj_ctx_fread(projCtx ctx, void *buffer, size_t size, size_t nmemb, PAFile file);
+int PROJ_DLL pj_ctx_fseek(projCtx ctx, PAFile file, long offset, int whence);
+long PROJ_DLL pj_ctx_ftell(projCtx ctx, PAFile file);
+void PROJ_DLL pj_ctx_fclose(projCtx ctx, PAFile file);
+char PROJ_DLL *pj_ctx_fgets(projCtx ctx, char *line, int size, PAFile file);
+
+PAFile PROJ_DLL pj_open_lib(projCtx, const char *, const char *);
+int PROJ_DLL pj_find_file(projCtx ctx, const char *short_filename,
+ char* out_full_filename, size_t out_full_filename_size);
+
+
#endif /* ndef PROJ_INTERNAL_H */
diff --git a/src/projections/calcofi.cpp b/src/projections/calcofi.cpp
index 57c12dde..d1e96de8 100644
--- a/src/projections/calcofi.cpp
+++ b/src/projections/calcofi.cpp
@@ -4,7 +4,6 @@
#include "proj.h"
#include "proj_internal.h"
-#include "proj_api.h"
PROJ_HEAD(calcofi,
"Cal Coop Ocean Fish Invest Lines/Stations") "\n\tCyl, Sph&Ell";
diff --git a/src/tests/multistresstest.cpp b/src/tests/multistresstest.cpp
index 33d2d738..6af35979 100644
--- a/src/tests/multistresstest.cpp
+++ b/src/tests/multistresstest.cpp
@@ -34,7 +34,7 @@
#define ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
#endif
-#include "proj_api.h"
+#include "proj_internal.h"
#ifdef _WIN32
#include <windows.h>
diff --git a/src/tests/test228.cpp b/src/tests/test228.cpp
index 8ae17c87..b27ebf2f 100644
--- a/src/tests/test228.cpp
+++ b/src/tests/test228.cpp
@@ -30,7 +30,7 @@
#define ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
#endif
-#include "proj_api.h"
+#include "proj_internal.h"
#include <stdio.h> /* for printf declaration */
diff --git a/test/fuzzers/standard_fuzzer.cpp b/test/fuzzers/standard_fuzzer.cpp
index 468e8cbb..552ac781 100644
--- a/test/fuzzers/standard_fuzzer.cpp
+++ b/test/fuzzers/standard_fuzzer.cpp
@@ -36,7 +36,7 @@
#define ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
#include "proj.h"
-#include "proj_api.h"
+#include "proj_internal.h"
/* Standalone build:
g++ -g -std=c++11 standard_fuzzer.cpp -o standard_fuzzer -fvisibility=hidden -DSTANDALONE ../../src/.libs/libproj.a -lpthread -lsqlite3 -I../../src -I../../include
diff --git a/test/unit/pj_transform_test.cpp b/test/unit/pj_transform_test.cpp
index ddb054f0..5f390541 100644
--- a/test/unit/pj_transform_test.cpp
+++ b/test/unit/pj_transform_test.cpp
@@ -35,7 +35,6 @@
// clang-format off
#include <proj.h>
#include "proj_internal.h"
-#include <proj_api.h>
// clang-format on
namespace {