guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

03/08: gnu: xygrib: Build with newer proj.


From: guix-commits
Subject: 03/08: gnu: xygrib: Build with newer proj.
Date: Wed, 24 May 2023 04:43:16 -0400 (EDT)

efraim pushed a commit to branch master
in repository guix.

commit b02e7504b0ad3a448125e12f7c832f24b2559550
Author: Efraim Flashner <efraim@flashner.co.il>
AuthorDate: Wed May 24 10:14:02 2023 +0300

    gnu: xygrib: Build with newer proj.
    
    * 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.
---
 gnu/local.mk                                 |   1 +
 gnu/packages/geo.scm                         |   5 +-
 gnu/packages/patches/xygrib-newer-proj.patch | 600 +++++++++++++++++++++++++++
 3 files changed, 604 insertions(+), 2 deletions(-)

diff --git a/gnu/local.mk b/gnu/local.mk
index c10fb01bb3..1ba60693e5 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -2078,6 +2078,7 @@ dist_patch_DATA =                                         
\
   %D%/packages/patches/xsane-tighten-default-umask.patch       \
   %D%/packages/patches/xterm-370-explicit-xcursor.patch                \
   %D%/packages/patches/xygrib-fix-finding-data.patch           \
+  %D%/packages/patches/xygrib-newer-proj.patch                 \
   %D%/packages/patches/yggdrasil-extra-config.patch    \
   %D%/packages/patches/zig-do-not-link-against-librt.patch     \
   %D%/packages/patches/zig-use-system-paths.patch              \
diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index bff213d684..25805fe2e5 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -1651,10 +1651,11 @@ map display.  Downloads map data from a number of 
websites, including
                      (url "https://github.com/opengribs/XyGrib";)
                      (commit (string-append "v" version))))
               (file-name (git-file-name name version))
-              (patches (search-patches "xygrib-fix-finding-data.patch"))
               (sha256
                (base32
                 "0xzsm8pr0zjk3f8j880fg5n82jyxn8xf1330qmmq1fqv7rsrg9ia"))
+              (patches (search-patches "xygrib-fix-finding-data.patch"
+                                       "xygrib-newer-proj.patch"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -1695,7 +1696,7 @@ map display.  Downloads map data from a number of 
websites, including
            libnova
            libpng
            openjpeg
-           proj-7
+           proj
            qtbase-5
            zlib))
     (native-search-paths
diff --git a/gnu/packages/patches/xygrib-newer-proj.patch 
b/gnu/packages/patches/xygrib-newer-proj.patch
new file mode 100644
index 0000000000..740410557a
--- /dev/null
+++ b/gnu/packages/patches/xygrib-newer-proj.patch
@@ -0,0 +1,600 @@
+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);
+ }
+ //--------------------------------------------------------------



reply via email to

[Prev in Thread] Current Thread [Next in Thread]