* gnu/packages/geo.scm (xygrib)[source]: Add upstream patch to build with newer version of proj. [inputs]: Replace proj-7 with proj. * gnu/packages/patches/xygrib-newer-proj.patch: New file. * gnu/local.mk (dist_patch_DATA): Register it.
		
			
				
	
	
		
			600 lines
		
	
	
	
		
			19 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			600 lines
		
	
	
	
		
			19 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| These two patches are already applied upstream.
 | |
| https://patch-diff.githubusercontent.com/raw/opengribs/XyGrib/pull/289.patch
 | |
| 
 | |
| removing cmake/FindPROJ4.cmake removed since it didn't apply cleanly.
 | |
| 
 | |
| From 95aa7b47bfe83ee276806acd8ce08867fd7a28d9 Mon Sep 17 00:00:00 2001
 | |
| From: Fyleo <fyleo45@gmail.com>
 | |
| Date: Tue, 7 Sep 2021 18:10:39 +0200
 | |
| Subject: [PATCH 1/2] port to PROJ 8.0 API
 | |
| 
 | |
| ---
 | |
|  CMakeLists.txt                 | 14 +++----
 | |
|  cmake/FindPROJ4.cmake          | 77 ----------------------------------
 | |
|  cmake/FindPROJ8.cmake          | 76 +++++++++++++++++++++++++++++++++
 | |
|  src/CMakeLists.txt             |  2 +-
 | |
|  src/map/Projection.h           |  7 +---
 | |
|  src/map/Projection_libproj.cpp | 30 ++++++-------
 | |
|  6 files changed, 101 insertions(+), 105 deletions(-)
 | |
|  delete mode 100644 cmake/FindPROJ4.cmake
 | |
|  create mode 100644 cmake/FindPROJ8.cmake
 | |
| 
 | |
| diff --git a/CMakeLists.txt b/CMakeLists.txt
 | |
| index b066a044..77633a21 100644
 | |
| --- a/CMakeLists.txt
 | |
| +++ b/CMakeLists.txt
 | |
| @@ -122,22 +122,22 @@ find_path(OPENJPEG_INCLUDE_DIR
 | |
|  include_directories(${OPENJPEG_INCLUDE_DIR})
 | |
|  
 | |
|  if(NOT WIN32)
 | |
| -    include(cmake/FindPROJ4.cmake)
 | |
| -    if(NOT PROJ4_FOUND)
 | |
| -      message(FATAL_ERROR "PROJ.4 library not found!")
 | |
| +    include(cmake/FindPROJ8.cmake)
 | |
| +    if(NOT PROJ8_FOUND)
 | |
| +      message(FATAL_ERROR "PROJ.8 library not found!")
 | |
|      endif()
 | |
| -    include_directories(${PROJ4_INCLUDE_DIRS})
 | |
| +    include_directories(${PROJ8_INCLUDE_DIRS})
 | |
|  endif()
 | |
|  if(WIN32)
 | |
| -    find_library(PROJ4_LIBRARIES
 | |
| +    find_library(PROJ8_LIBRARIES
 | |
|          NAME "libproj.a"
 | |
|          PATHS
 | |
|          $ENV{EXTERNLIBS}/lib
 | |
|           /opt/lib
 | |
|          REQUIRED
 | |
|      )
 | |
| -    find_path(PROJ4_INCLUDE_DIRS
 | |
| -         NAMES "proj_api.h"
 | |
| +    find_path(PROJ8_INCLUDE_DIRS
 | |
| +         NAMES "proj.h"
 | |
|           PATHS
 | |
|           $ENV{EXTERNLIBS}/include
 | |
|           /opt/include
 | |
| diff --git a/cmake/FindPROJ8.cmake b/cmake/FindPROJ8.cmake
 | |
| new file mode 100644
 | |
| index 00000000..33470ac2
 | |
| --- /dev/null
 | |
| +++ b/cmake/FindPROJ8.cmake
 | |
| @@ -0,0 +1,76 @@
 | |
| +# - Find PROJ8
 | |
| +# Find the PROJ8 includes and library
 | |
| +#
 | |
| +#  PROJ8_INCLUDE_DIR - Where to find PROJ8 includes
 | |
| +#  PROJ8_LIBRARIES   - List of libraries when using PROJ8
 | |
| +#  PROJ8_FOUND       - True if PROJ8 was found
 | |
| +
 | |
| +IF(PROJ8_INCLUDE_DIR)
 | |
| +  SET(PROJ8_FIND_QUIETLY TRUE)
 | |
| +ENDIF(PROJ8_INCLUDE_DIR)
 | |
| +
 | |
| +FIND_PATH(PROJ8_INCLUDE_DIR "proj.h"
 | |
| +  PATHS
 | |
| +  $ENV{EXTERNLIBS}/include
 | |
| +  $ENV{EXTERNLIBS}/PROJ8/include
 | |
| +  ~/Library/Frameworks/include
 | |
| +  /Library/Frameworks/include
 | |
| +  /usr/local/include
 | |
| +  /usr/include
 | |
| +  /sw/include # Fink
 | |
| +  /opt/local/include # DarwinPorts
 | |
| +  /opt/csw/include # Blastwave
 | |
| +  /opt/include
 | |
| +  DOC "PROJ8 - Headers"
 | |
| +)
 | |
| +
 | |
| +SET(PROJ8_NAMES PROJ8 proj proj_8_0)
 | |
| +SET(PROJ8_DBG_NAMES PROJ8D projD proj_8_0_1)
 | |
| +
 | |
| +FIND_LIBRARY(PROJ8_LIBRARY NAMES ${PROJ8_NAMES}
 | |
| +  PATHS
 | |
| +  $ENV{EXTERNLIBS}
 | |
| +  $ENV{EXTERNLIBS}/PROJ8
 | |
| +  ~/Library/Frameworks
 | |
| +  /Library/Frameworks
 | |
| +  /usr/local
 | |
| +  /usr
 | |
| +  /sw
 | |
| +  /opt/local
 | |
| +  /opt/csw
 | |
| +  /opt
 | |
| +  PATH_SUFFIXES lib lib64
 | |
| +  DOC "PROJ8 - Library"
 | |
| +)
 | |
| +
 | |
| +INCLUDE(FindPackageHandleStandardArgs)
 | |
| +
 | |
| +IF(MSVC)
 | |
| +  # VisualStudio needs a debug version
 | |
| +  FIND_LIBRARY(PROJ8_LIBRARY_DEBUG NAMES ${PROJ8_DBG_NAMES}
 | |
| +    PATHS
 | |
| +    $ENV{EXTERNLIBS}/PROJ8/lib
 | |
| +    DOC "PROJ8 - Library (Debug)"
 | |
| +  )
 | |
| +  
 | |
| +  IF(PROJ8_LIBRARY_DEBUG AND PROJ8_LIBRARY)
 | |
| +    SET(PROJ8_LIBRARIES optimized ${PROJ8_LIBRARY} debug ${PROJ8_LIBRARY_DEBUG})
 | |
| +  ENDIF(PROJ8_LIBRARY_DEBUG AND PROJ8_LIBRARY)
 | |
| +
 | |
| +  FIND_PACKAGE_HANDLE_STANDARD_ARGS(PROJ8 DEFAULT_MSG PROJ8_LIBRARY PROJ8_LIBRARY_DEBUG PROJ8_INCLUDE_DIR)
 | |
| +
 | |
| +  MARK_AS_ADVANCED(PROJ8_LIBRARY PROJ8_LIBRARY_DEBUG PROJ8_INCLUDE_DIR)
 | |
| +  
 | |
| +ELSE(MSVC)
 | |
| +  # rest of the world
 | |
| +  SET(PROJ8_LIBRARIES ${PROJ8_LIBRARY})
 | |
| +
 | |
| +  FIND_PACKAGE_HANDLE_STANDARD_ARGS(PROJ8 DEFAULT_MSG PROJ8_LIBRARY PROJ8_INCLUDE_DIR)
 | |
| +  
 | |
| +  MARK_AS_ADVANCED(PROJ8_LIBRARY PROJ8_INCLUDE_DIR)
 | |
| +  
 | |
| +ENDIF(MSVC)
 | |
| +
 | |
| +IF(PROJ8_FOUND)
 | |
| +  SET(PROJ8_INCLUDE_DIRS ${PROJ8_INCLUDE_DIR})
 | |
| +ENDIF(PROJ8_FOUND)
 | |
| diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
 | |
| index 2e5dbde4..9c96d49f 100644
 | |
| --- a/src/CMakeLists.txt
 | |
| +++ b/src/CMakeLists.txt
 | |
| @@ -118,7 +118,7 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/util)
 | |
|  include_directories(${CMAKE_CURRENT_SOURCE_DIR}/map ${MAP_GENERATED_HEADERS})
 | |
|  include_directories(${CMAKE_CURRENT_SOURCE_DIR}/GUI ${GUI_GENERATED_HEADERS})
 | |
|  
 | |
| -target_link_libraries(${CMAKE_PROJECT_NAME} g2clib gui util map ${LIBNOVA_LIBRARY} ${OPENJPEG_LIBRARIES} ${Qt5Core_LIBRARIES} ${Qt5Gui_LIBRARIES} ${Qt5Widgets_LIBRARIES} ${Qt5Network_LIBRARIES} ${Qt5Xml_LIBRARIES} ${Qt5PrintSupport_LIBRARIES} ${BZIP2_LIBRARIES} ${ZLIB_LIBRARIES} ${PROJ4_LIBRARIES} ${PNG_LIBRARIES})
 | |
| +target_link_libraries(${CMAKE_PROJECT_NAME} g2clib gui util map ${LIBNOVA_LIBRARY} ${OPENJPEG_LIBRARIES} ${Qt5Core_LIBRARIES} ${Qt5Gui_LIBRARIES} ${Qt5Widgets_LIBRARIES} ${Qt5Network_LIBRARIES} ${Qt5Xml_LIBRARIES} ${Qt5PrintSupport_LIBRARIES} ${BZIP2_LIBRARIES} ${ZLIB_LIBRARIES} ${PROJ8_LIBRARIES} ${PNG_LIBRARIES})
 | |
|  
 | |
|  # Sanitizers, part 2/2
 | |
|  if ( CMAKE_VERSION VERSION_GREATER 3.4 )
 | |
| diff --git a/src/map/Projection.h b/src/map/Projection.h
 | |
| index b4ca7f5b..d482e0dd 100644
 | |
| --- a/src/map/Projection.h
 | |
| +++ b/src/map/Projection.h
 | |
| @@ -21,10 +21,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | |
|  #include <QObject>
 | |
|  #include <cstdio>
 | |
|  
 | |
| -#ifndef ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
 | |
| -#define ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
 | |
| -#endif
 | |
| -#include "proj_api.h"
 | |
| +#include "proj.h"
 | |
|  
 | |
|  class Projection : public QObject
 | |
|  {
 | |
| @@ -141,7 +138,7 @@ class Projection_libproj : public Projection
 | |
|  		int   getProjection()   {return currentProj;}
 | |
|  
 | |
|  	private :
 | |
| -		projPJ libProj;
 | |
| +		PJ * libProj;
 | |
|  		int  currentProj;
 | |
|  };
 | |
|  
 | |
| diff --git a/src/map/Projection_libproj.cpp b/src/map/Projection_libproj.cpp
 | |
| index 1dcbd540..0299714e 100644
 | |
| --- a/src/map/Projection_libproj.cpp
 | |
| +++ b/src/map/Projection_libproj.cpp
 | |
| @@ -93,9 +93,9 @@ void Projection_libproj::setProjection(int code)
 | |
|      params[nbpar++] = "no_defs";
 | |
|      params[nbpar++] = "over";	// allow longitude > 180°
 | |
|      // XXX ouch pj_init
 | |
| -    libProj = pj_init(nbpar, (char **)params);
 | |
| +    libProj = proj_create_argv(PJ_DEFAULT_CTX, nbpar, (char **)params);
 | |
|  	if (!libProj)
 | |
| -		printf("proj error: %s\n", pj_strerrno(pj_errno));
 | |
| +		printf("proj error: %s\n", proj_errno_string(proj_errno(libProj)));
 | |
|  	assert(libProj);
 | |
|  	currentProj = code;
 | |
|  //	libProj->over = 1;		// allow longitude > 180°
 | |
| @@ -106,23 +106,23 @@ void Projection_libproj::setProjection(int code)
 | |
|  Projection_libproj::~Projection_libproj()
 | |
|  {
 | |
|      if (libProj != nullptr) {
 | |
| -		pj_free(libProj);
 | |
| +		proj_destroy(libProj);
 | |
|  	}
 | |
|  }
 | |
|  
 | |
|  //-------------------------------------------------------------------------------
 | |
|  void Projection_libproj::map2screen(double x, double y, int *i, int *j) const
 | |
|  {
 | |
| -	projUV data, res;
 | |
| +	PJ_COORD data, res;
 | |
|  	if (y <= -90.0)
 | |
|  		y = -90.0+1e-5;
 | |
|  	if (y >= 90.0)
 | |
|  		y = 90.0-1e-5;
 | |
| -	data.v =  y * DEG_TO_RAD;
 | |
| -	data.u =  x * DEG_TO_RAD;
 | |
| -	res = pj_fwd(data, libProj);
 | |
| -	*i =  (int) (W/2.0 + scale * (res.u/111319.0-CX) + 0.5);
 | |
| -	*j =  (int) (H/2.0 - scale * (res.v/111319.0-CY) + 0.5);
 | |
| +	data.uv.v =  y;
 | |
| +	data.uv.u =  x;
 | |
| +	res = proj_trans(libProj, PJ_FWD, data);
 | |
| +	*i =  (int) (W/2.0 + scale * (res.uv.u/111319.0-CX) + 0.5);
 | |
| +	*j =  (int) (H/2.0 - scale * (res.uv.v/111319.0-CY) + 0.5);
 | |
|  	//printf("PROJ   map2screen (%f %f) -> (%3d %3d)\n", x,y, *i,*j);
 | |
|  }
 | |
|  
 | |
| @@ -130,12 +130,12 @@ void Projection_libproj::map2screen(double x, double y, int *i, int *j) const
 | |
|  //-------------------------------------------------------------------------------
 | |
|  void Projection_libproj::screen2map(int i, int j, double *x, double *y) const
 | |
|  {
 | |
| -	projUV data, res;
 | |
| -	data.u =  ((i-W/2.0)/scale+ CX)*111319.0 ;
 | |
| -	data.v =  ((H/2.0-j)/scale+ CY)*111319.0 ;
 | |
| -	res = pj_inv(data, libProj);
 | |
| -	*x = (double)(res.u*RAD_TO_DEG);
 | |
| -	*y = (double)(res.v*RAD_TO_DEG);
 | |
| +	PJ_COORD data, res;
 | |
| +	data.uv.u =  ((i-W/2.0)/scale+ CX)*111319.0 ;
 | |
| +	data.uv.v =  ((H/2.0-j)/scale+ CY)*111319.0 ;
 | |
| +	res = proj_trans(libProj, PJ_INV, data);
 | |
| +	*x = (double)(res.uv.u);
 | |
| +	*y = (double)(res.uv.v);
 | |
|  	//printf("PROJ   screen2map (%3d %3d) -> (%f %f)\n", i,j, *x,*y);
 | |
|  }
 | |
|  //--------------------------------------------------------------
 | |
| 
 | |
| From 720a2db307f5c93c0079f9811a3c35cfe8bb12f5 Mon Sep 17 00:00:00 2001
 | |
| From: didier <didier@users.sourceforge.net>
 | |
| Date: Mon, 24 Jan 2022 13:13:42 +0100
 | |
| Subject: [PATCH 2/2] Use new libproj API if available
 | |
| 
 | |
| ---
 | |
|  CMakeLists.txt                 | 12 ++---
 | |
|  cmake/FindPROJ.cmake           | 96 ++++++++++++++++++++++++++++++++++
 | |
|  cmake/FindPROJ8.cmake          | 76 ---------------------------
 | |
|  src/CMakeLists.txt             |  2 +-
 | |
|  src/map/Projection.h           |  9 ++++
 | |
|  src/map/Projection_libproj.cpp | 32 +++++++++++-
 | |
|  6 files changed, 143 insertions(+), 84 deletions(-)
 | |
|  create mode 100644 cmake/FindPROJ.cmake
 | |
|  delete mode 100644 cmake/FindPROJ8.cmake
 | |
| 
 | |
| diff --git a/CMakeLists.txt b/CMakeLists.txt
 | |
| index 77633a21..358a87a2 100644
 | |
| --- a/CMakeLists.txt
 | |
| +++ b/CMakeLists.txt
 | |
| @@ -122,21 +122,21 @@ find_path(OPENJPEG_INCLUDE_DIR
 | |
|  include_directories(${OPENJPEG_INCLUDE_DIR})
 | |
|  
 | |
|  if(NOT WIN32)
 | |
| -    include(cmake/FindPROJ8.cmake)
 | |
| -    if(NOT PROJ8_FOUND)
 | |
| -      message(FATAL_ERROR "PROJ.8 library not found!")
 | |
| +    include(cmake/FindPROJ.cmake)
 | |
| +    if(NOT PROJ_FOUND)
 | |
| +      message(FATAL_ERROR "PROJ library not found!")
 | |
|      endif()
 | |
| -    include_directories(${PROJ8_INCLUDE_DIRS})
 | |
| +    include_directories(${PROJ_INCLUDE_DIRS})
 | |
|  endif()
 | |
|  if(WIN32)
 | |
| -    find_library(PROJ8_LIBRARIES
 | |
| +    find_library(PROJ_LIBRARIES
 | |
|          NAME "libproj.a"
 | |
|          PATHS
 | |
|          $ENV{EXTERNLIBS}/lib
 | |
|           /opt/lib
 | |
|          REQUIRED
 | |
|      )
 | |
| -    find_path(PROJ8_INCLUDE_DIRS
 | |
| +    find_path(PROJ_INCLUDE_DIRS
 | |
|           NAMES "proj.h"
 | |
|           PATHS
 | |
|           $ENV{EXTERNLIBS}/include
 | |
| diff --git a/cmake/FindPROJ.cmake b/cmake/FindPROJ.cmake
 | |
| new file mode 100644
 | |
| index 00000000..33b53000
 | |
| --- /dev/null
 | |
| +++ b/cmake/FindPROJ.cmake
 | |
| @@ -0,0 +1,96 @@
 | |
| +# - Find PROJ
 | |
| +# Find the PROJ includes and library
 | |
| +#
 | |
| +#  PROJ_INCLUDE_DIR - Where to find PROJ includes
 | |
| +#  PROJ_LIBRARIES   - List of libraries when using PROJ
 | |
| +#  PROJ_FOUND       - True if PROJ was found
 | |
| +
 | |
| +IF(PROJ_INCLUDE_DIR)
 | |
| +  SET(PROJ_FIND_QUIETLY TRUE)
 | |
| +ENDIF(PROJ_INCLUDE_DIR)
 | |
| +
 | |
| +FIND_PATH(PROJ_INCLUDE_DIR "proj.h"
 | |
| +  PATHS
 | |
| +  $ENV{EXTERNLIBS}/include
 | |
| +  $ENV{EXTERNLIBS}/PROJ/include
 | |
| +  ~/Library/Frameworks/include
 | |
| +  /Library/Frameworks/include
 | |
| +  /usr/local/include
 | |
| +  /usr/include
 | |
| +  /sw/include # Fink
 | |
| +  /opt/local/include # DarwinPorts
 | |
| +  /opt/csw/include # Blastwave
 | |
| +  /opt/include
 | |
| +  DOC "PROJ - Headers"
 | |
| +)
 | |
| +
 | |
| +IF(PROJ_INCLUDE_DIR)
 | |
| +    SET(PROJ_NAMES PROJ proj proj_8_0)
 | |
| +    SET(PROJ_DBG_NAMES PROJD projD proj_8_0_1)
 | |
| +ELSE(PROJ_INCLUDE_DIR)
 | |
| +    FIND_PATH(PROJ_INCLUDE_DIR "proj_api.h"
 | |
| +      PATHS
 | |
| +      $ENV{EXTERNLIBS}/include
 | |
| +      $ENV{EXTERNLIBS}/PROJ/include
 | |
| +      ~/Library/Frameworks/include
 | |
| +      /Library/Frameworks/include
 | |
| +      /usr/local/include
 | |
| +      /usr/include
 | |
| +      /sw/include # Fink
 | |
| +      /opt/local/include # DarwinPorts
 | |
| +      /opt/csw/include # Blastwave
 | |
| +      /opt/include
 | |
| +      DOC "PROJ - Headers"
 | |
| +    )
 | |
| +    ADD_DEFINITIONS(-DACCEPT_USE_OF_DEPRECATED_PROJ_API_H=1)
 | |
| +    SET(PROJ_NAMES PROJ proj proj_4_9)
 | |
| +    SET(PROJ_DBG_NAMES PROJD projD proj_4_9_D)
 | |
| +ENDIF(PROJ_INCLUDE_DIR)
 | |
| +
 | |
| +FIND_LIBRARY(PROJ_LIBRARY NAMES ${PROJ_NAMES}
 | |
| +  PATHS
 | |
| +  $ENV{EXTERNLIBS}
 | |
| +  $ENV{EXTERNLIBS}/PROJ
 | |
| +  ~/Library/Frameworks
 | |
| +  /Library/Frameworks
 | |
| +  /usr/local
 | |
| +  /usr
 | |
| +  /sw
 | |
| +  /opt/local
 | |
| +  /opt/csw
 | |
| +  /opt
 | |
| +  PATH_SUFFIXES lib lib64
 | |
| +  DOC "PROJ - Library"
 | |
| +)
 | |
| +
 | |
| +INCLUDE(FindPackageHandleStandardArgs)
 | |
| +
 | |
| +IF(MSVC)
 | |
| +  # VisualStudio needs a debug version
 | |
| +  FIND_LIBRARY(PROJ_LIBRARY_DEBUG NAMES ${PROJ_DBG_NAMES}
 | |
| +    PATHS
 | |
| +    $ENV{EXTERNLIBS}/PROJ/lib
 | |
| +    DOC "PROJ - Library (Debug)"
 | |
| +  )
 | |
| +  
 | |
| +  IF(PROJ_LIBRARY_DEBUG AND PROJ_LIBRARY)
 | |
| +    SET(PROJ_LIBRARIES optimized ${PROJ_LIBRARY} debug ${PROJ_LIBRARY_DEBUG})
 | |
| +  ENDIF(PROJ_LIBRARY_DEBUG AND PROJ_LIBRARY)
 | |
| +
 | |
| +  FIND_PACKAGE_HANDLE_STANDARD_ARGS(PROJ DEFAULT_MSG PROJ_LIBRARY PROJ_LIBRARY_DEBUG PROJ_INCLUDE_DIR)
 | |
| +
 | |
| +  MARK_AS_ADVANCED(PROJ_LIBRARY PROJ_LIBRARY_DEBUG PROJ_INCLUDE_DIR)
 | |
| +  
 | |
| +ELSE(MSVC)
 | |
| +  # rest of the world
 | |
| +  SET(PROJ_LIBRARIES ${PROJ_LIBRARY})
 | |
| +
 | |
| +  FIND_PACKAGE_HANDLE_STANDARD_ARGS(PROJ DEFAULT_MSG PROJ_LIBRARY PROJ_INCLUDE_DIR)
 | |
| +  
 | |
| +  MARK_AS_ADVANCED(PROJ_LIBRARY PROJ_INCLUDE_DIR)
 | |
| +  
 | |
| +ENDIF(MSVC)
 | |
| +
 | |
| +IF(PROJ_FOUND)
 | |
| +  SET(PROJ_INCLUDE_DIRS ${PROJ_INCLUDE_DIR})
 | |
| +ENDIF(PROJ_FOUND)
 | |
| diff --git a/cmake/FindPROJ8.cmake b/cmake/FindPROJ8.cmake
 | |
| deleted file mode 100644
 | |
| index 33470ac2..00000000
 | |
| --- a/cmake/FindPROJ8.cmake
 | |
| +++ /dev/null
 | |
| @@ -1,76 +0,0 @@
 | |
| -# - Find PROJ8
 | |
| -# Find the PROJ8 includes and library
 | |
| -#
 | |
| -#  PROJ8_INCLUDE_DIR - Where to find PROJ8 includes
 | |
| -#  PROJ8_LIBRARIES   - List of libraries when using PROJ8
 | |
| -#  PROJ8_FOUND       - True if PROJ8 was found
 | |
| -
 | |
| -IF(PROJ8_INCLUDE_DIR)
 | |
| -  SET(PROJ8_FIND_QUIETLY TRUE)
 | |
| -ENDIF(PROJ8_INCLUDE_DIR)
 | |
| -
 | |
| -FIND_PATH(PROJ8_INCLUDE_DIR "proj.h"
 | |
| -  PATHS
 | |
| -  $ENV{EXTERNLIBS}/include
 | |
| -  $ENV{EXTERNLIBS}/PROJ8/include
 | |
| -  ~/Library/Frameworks/include
 | |
| -  /Library/Frameworks/include
 | |
| -  /usr/local/include
 | |
| -  /usr/include
 | |
| -  /sw/include # Fink
 | |
| -  /opt/local/include # DarwinPorts
 | |
| -  /opt/csw/include # Blastwave
 | |
| -  /opt/include
 | |
| -  DOC "PROJ8 - Headers"
 | |
| -)
 | |
| -
 | |
| -SET(PROJ8_NAMES PROJ8 proj proj_8_0)
 | |
| -SET(PROJ8_DBG_NAMES PROJ8D projD proj_8_0_1)
 | |
| -
 | |
| -FIND_LIBRARY(PROJ8_LIBRARY NAMES ${PROJ8_NAMES}
 | |
| -  PATHS
 | |
| -  $ENV{EXTERNLIBS}
 | |
| -  $ENV{EXTERNLIBS}/PROJ8
 | |
| -  ~/Library/Frameworks
 | |
| -  /Library/Frameworks
 | |
| -  /usr/local
 | |
| -  /usr
 | |
| -  /sw
 | |
| -  /opt/local
 | |
| -  /opt/csw
 | |
| -  /opt
 | |
| -  PATH_SUFFIXES lib lib64
 | |
| -  DOC "PROJ8 - Library"
 | |
| -)
 | |
| -
 | |
| -INCLUDE(FindPackageHandleStandardArgs)
 | |
| -
 | |
| -IF(MSVC)
 | |
| -  # VisualStudio needs a debug version
 | |
| -  FIND_LIBRARY(PROJ8_LIBRARY_DEBUG NAMES ${PROJ8_DBG_NAMES}
 | |
| -    PATHS
 | |
| -    $ENV{EXTERNLIBS}/PROJ8/lib
 | |
| -    DOC "PROJ8 - Library (Debug)"
 | |
| -  )
 | |
| -  
 | |
| -  IF(PROJ8_LIBRARY_DEBUG AND PROJ8_LIBRARY)
 | |
| -    SET(PROJ8_LIBRARIES optimized ${PROJ8_LIBRARY} debug ${PROJ8_LIBRARY_DEBUG})
 | |
| -  ENDIF(PROJ8_LIBRARY_DEBUG AND PROJ8_LIBRARY)
 | |
| -
 | |
| -  FIND_PACKAGE_HANDLE_STANDARD_ARGS(PROJ8 DEFAULT_MSG PROJ8_LIBRARY PROJ8_LIBRARY_DEBUG PROJ8_INCLUDE_DIR)
 | |
| -
 | |
| -  MARK_AS_ADVANCED(PROJ8_LIBRARY PROJ8_LIBRARY_DEBUG PROJ8_INCLUDE_DIR)
 | |
| -  
 | |
| -ELSE(MSVC)
 | |
| -  # rest of the world
 | |
| -  SET(PROJ8_LIBRARIES ${PROJ8_LIBRARY})
 | |
| -
 | |
| -  FIND_PACKAGE_HANDLE_STANDARD_ARGS(PROJ8 DEFAULT_MSG PROJ8_LIBRARY PROJ8_INCLUDE_DIR)
 | |
| -  
 | |
| -  MARK_AS_ADVANCED(PROJ8_LIBRARY PROJ8_INCLUDE_DIR)
 | |
| -  
 | |
| -ENDIF(MSVC)
 | |
| -
 | |
| -IF(PROJ8_FOUND)
 | |
| -  SET(PROJ8_INCLUDE_DIRS ${PROJ8_INCLUDE_DIR})
 | |
| -ENDIF(PROJ8_FOUND)
 | |
| diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
 | |
| index 9c96d49f..d1c42f95 100644
 | |
| --- a/src/CMakeLists.txt
 | |
| +++ b/src/CMakeLists.txt
 | |
| @@ -118,7 +118,7 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/util)
 | |
|  include_directories(${CMAKE_CURRENT_SOURCE_DIR}/map ${MAP_GENERATED_HEADERS})
 | |
|  include_directories(${CMAKE_CURRENT_SOURCE_DIR}/GUI ${GUI_GENERATED_HEADERS})
 | |
|  
 | |
| -target_link_libraries(${CMAKE_PROJECT_NAME} g2clib gui util map ${LIBNOVA_LIBRARY} ${OPENJPEG_LIBRARIES} ${Qt5Core_LIBRARIES} ${Qt5Gui_LIBRARIES} ${Qt5Widgets_LIBRARIES} ${Qt5Network_LIBRARIES} ${Qt5Xml_LIBRARIES} ${Qt5PrintSupport_LIBRARIES} ${BZIP2_LIBRARIES} ${ZLIB_LIBRARIES} ${PROJ8_LIBRARIES} ${PNG_LIBRARIES})
 | |
| +target_link_libraries(${CMAKE_PROJECT_NAME} g2clib gui util map ${LIBNOVA_LIBRARY} ${OPENJPEG_LIBRARIES} ${Qt5Core_LIBRARIES} ${Qt5Gui_LIBRARIES} ${Qt5Widgets_LIBRARIES} ${Qt5Network_LIBRARIES} ${Qt5Xml_LIBRARIES} ${Qt5PrintSupport_LIBRARIES} ${BZIP2_LIBRARIES} ${ZLIB_LIBRARIES} ${PROJ_LIBRARIES} ${PNG_LIBRARIES})
 | |
|  
 | |
|  # Sanitizers, part 2/2
 | |
|  if ( CMAKE_VERSION VERSION_GREATER 3.4 )
 | |
| diff --git a/src/map/Projection.h b/src/map/Projection.h
 | |
| index d482e0dd..9ac13426 100644
 | |
| --- a/src/map/Projection.h
 | |
| +++ b/src/map/Projection.h
 | |
| @@ -20,8 +20,13 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | |
|  #define PROJECTION_H
 | |
|  #include <QObject>
 | |
|  #include <cstdio>
 | |
| +//#define ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
 | |
|  
 | |
| +#ifdef ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
 | |
| +#include "proj_api.h"
 | |
| +#else
 | |
|  #include "proj.h"
 | |
| +#endif
 | |
|  
 | |
|  class Projection : public QObject
 | |
|  {
 | |
| @@ -138,7 +143,11 @@ class Projection_libproj : public Projection
 | |
|  		int   getProjection()   {return currentProj;}
 | |
|  
 | |
|  	private :
 | |
| +#ifdef ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
 | |
| +		projPJ libProj;
 | |
| +#else
 | |
|  		PJ * libProj;
 | |
| +#endif
 | |
|  		int  currentProj;
 | |
|  };
 | |
|  
 | |
| diff --git a/src/map/Projection_libproj.cpp b/src/map/Projection_libproj.cpp
 | |
| index 0299714e..e2ea525c 100644
 | |
| --- a/src/map/Projection_libproj.cpp
 | |
| +++ b/src/map/Projection_libproj.cpp
 | |
| @@ -92,10 +92,15 @@ void Projection_libproj::setProjection(int code)
 | |
|      params[nbpar++] = "ellps=WGS84";
 | |
|      params[nbpar++] = "no_defs";
 | |
|      params[nbpar++] = "over";	// allow longitude > 180°
 | |
| -    // XXX ouch pj_init
 | |
| +#ifdef ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
 | |
| +    libProj = pj_init(nbpar, (char **)params);
 | |
| +	if (!libProj)
 | |
| +		printf("proj error: %s\n", pj_strerrno(pj_errno));
 | |
| +#else
 | |
|      libProj = proj_create_argv(PJ_DEFAULT_CTX, nbpar, (char **)params);
 | |
|  	if (!libProj)
 | |
|  		printf("proj error: %s\n", proj_errno_string(proj_errno(libProj)));
 | |
| +#endif
 | |
|  	assert(libProj);
 | |
|  	currentProj = code;
 | |
|  //	libProj->over = 1;		// allow longitude > 180°
 | |
| @@ -106,23 +111,39 @@ void Projection_libproj::setProjection(int code)
 | |
|  Projection_libproj::~Projection_libproj()
 | |
|  {
 | |
|      if (libProj != nullptr) {
 | |
| +#ifdef ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
 | |
| +		pj_free(libProj);
 | |
| +#else
 | |
|  		proj_destroy(libProj);
 | |
| +#endif
 | |
|  	}
 | |
|  }
 | |
|  
 | |
|  //-------------------------------------------------------------------------------
 | |
|  void Projection_libproj::map2screen(double x, double y, int *i, int *j) const
 | |
|  {
 | |
| +#ifdef ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
 | |
| +	projUV data, res;
 | |
| +#else
 | |
|  	PJ_COORD data, res;
 | |
| +#endif
 | |
|  	if (y <= -90.0)
 | |
|  		y = -90.0+1e-5;
 | |
|  	if (y >= 90.0)
 | |
|  		y = 90.0-1e-5;
 | |
| +#ifdef ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
 | |
| +	data.v =  y * DEG_TO_RAD;
 | |
| +	data.u =  x * DEG_TO_RAD;
 | |
| +	res = pj_fwd(data, libProj);
 | |
| +	*i =  (int) (W/2.0 + scale * (res.u/111319.0-CX) + 0.5);
 | |
| +	*j =  (int) (H/2.0 - scale * (res.v/111319.0-CY) + 0.5);
 | |
| +#else
 | |
|  	data.uv.v =  y;
 | |
|  	data.uv.u =  x;
 | |
|  	res = proj_trans(libProj, PJ_FWD, data);
 | |
|  	*i =  (int) (W/2.0 + scale * (res.uv.u/111319.0-CX) + 0.5);
 | |
|  	*j =  (int) (H/2.0 - scale * (res.uv.v/111319.0-CY) + 0.5);
 | |
| +#endif
 | |
|  	//printf("PROJ   map2screen (%f %f) -> (%3d %3d)\n", x,y, *i,*j);
 | |
|  }
 | |
|  
 | |
| @@ -130,12 +151,21 @@ void Projection_libproj::map2screen(double x, double y, int *i, int *j) const
 | |
|  //-------------------------------------------------------------------------------
 | |
|  void Projection_libproj::screen2map(int i, int j, double *x, double *y) const
 | |
|  {
 | |
| +#ifdef ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
 | |
| +	projUV data, res;
 | |
| +	data.u =  ((i-W/2.0)/scale+ CX)*111319.0 ;
 | |
| +	data.v =  ((H/2.0-j)/scale+ CY)*111319.0 ;
 | |
| +	res = pj_inv(data, libProj);
 | |
| +	*x = (double)(res.u*RAD_TO_DEG);
 | |
| +	*y = (double)(res.v*RAD_TO_DEG);
 | |
| +#else
 | |
|  	PJ_COORD data, res;
 | |
|  	data.uv.u =  ((i-W/2.0)/scale+ CX)*111319.0 ;
 | |
|  	data.uv.v =  ((H/2.0-j)/scale+ CY)*111319.0 ;
 | |
|  	res = proj_trans(libProj, PJ_INV, data);
 | |
|  	*x = (double)(res.uv.u);
 | |
|  	*y = (double)(res.uv.v);
 | |
| +#endif
 | |
|  	//printf("PROJ   screen2map (%3d %3d) -> (%f %f)\n", i,j, *x,*y);
 | |
|  }
 | |
|  //--------------------------------------------------------------
 |