Skip to content

Commit

Permalink
Add libproj 6.0 compatibility
Browse files Browse the repository at this point in the history
Closes #17554
  • Loading branch information
jschueller committed May 31, 2019
1 parent c9d6165 commit 297d1d8
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 15 deletions.
20 changes: 10 additions & 10 deletions CMake/FindLibPROJ.cmake
@@ -1,5 +1,5 @@
find_path(LibPROJ_INCLUDE_DIR
NAMES proj_api.h
NAMES proj_api.h proj.h
DOC "libproj include directories")
mark_as_advanced(LibPROJ_INCLUDE_DIR)

Expand All @@ -17,20 +17,20 @@ include(SelectLibraryConfigurations)
select_library_configurations(LibPROJ)

if (LibPROJ_INCLUDE_DIR)
file(STRINGS "${LibPROJ_INCLUDE_DIR}/proj_api.h" _libproj_version_lines
REGEX "#define[ \t]+PJ_VERSION")
string(REGEX REPLACE ".*PJ_VERSION *\([0-9]*\).*" "\\1" _libproj_version "${_libproj_version_lines}")
# Before 4.10, version is XYZ. Afterwards is zero-padded XXXYYYZZ.
if (_libproj_version LESS 500)
if (EXISTS "${LibPROJ_INCLUDE_DIR}/proj.h")
file(STRINGS "${LibPROJ_INCLUDE_DIR}/proj.h" _libproj_version_lines REGEX "#define[ \t]+PROJ_VERSION_(MAJOR|MINOR|PATCH)")
string(REGEX REPLACE ".*PROJ_VERSION_MAJOR *\([0-9]*\).*" "\\1" _libproj_version_major "${_libproj_version_lines}")
string(REGEX REPLACE ".*PROJ_VERSION_MINOR *\([0-9]*\).*" "\\1" _libproj_version_minor "${_libproj_version_lines}")
string(REGEX REPLACE ".*PROJ_VERSION_PATCH *\([0-9]*\).*" "\\1" _libproj_version_patch "${_libproj_version_lines}")
else ()
file(STRINGS "${LibPROJ_INCLUDE_DIR}/proj_api.h" _libproj_version_lines REGEX "#define[ \t]+PJ_VERSION")
string(REGEX REPLACE ".*PJ_VERSION *\([0-9]*\).*" "\\1" _libproj_version "${_libproj_version_lines}")
math(EXPR _libproj_version_major "${_libproj_version} / 100")
math(EXPR _libproj_version_minor "(${_libproj_version} % 100) / 10")
math(EXPR _libproj_version_patch "${_libproj_version} % 10")
else ()
math(EXPR _libproj_version_major "${_libproj_version} / 100000")
math(EXPR _libproj_version_minor "(${_libproj_version} % 100000) / 100")
math(EXPR _libproj_version_patch "${_libproj_version} % 100")
endif ()
set(LibPROJ_VERSION "${_libproj_version_major}.${_libproj_version_minor}.${_libproj_version_patch}")
set(LibPROJ_MAJOR_VERSION "${_libproj_version_major}")
unset(_libproj_version_major)
unset(_libproj_version_minor)
unset(_libproj_version_patch)
Expand Down
18 changes: 14 additions & 4 deletions Geovis/Core/vtkGeoProjection.cxx
Expand Up @@ -72,6 +72,9 @@ class vtkGeoProjection::vtkInternals
}

std::map< std::string, std::string > OptionalParameters;
#if PROJ_VERSION_MAJOR >= 5
PJ_PROJ_INFO ProjInfo;
#endif
};

//-----------------------------------------------------------------------------
Expand All @@ -80,7 +83,7 @@ int vtkGeoProjection::GetNumberOfProjections()
if ( vtkGeoProjectionNumProj < 0 )
{
vtkGeoProjectionNumProj = 0;
for ( const PJ_LIST* pj = pj_get_list_ref(); pj && pj->id; ++ pj )
for ( const PJ_LIST* pj = proj_list_operations(); pj && pj->id; ++ pj )
++ vtkGeoProjectionNumProj;
}
return vtkGeoProjectionNumProj;
Expand All @@ -91,15 +94,15 @@ const char* vtkGeoProjection::GetProjectionName( int projection )
if ( projection < 0 || projection >= vtkGeoProjection::GetNumberOfProjections() )
return nullptr;

return pj_get_list_ref()[projection].id;
return proj_list_operations()[projection].id;
}
//-----------------------------------------------------------------------------
const char* vtkGeoProjection::GetProjectionDescription( int projection )
{
if ( projection < 0 || projection >= vtkGeoProjection::GetNumberOfProjections() )
return nullptr;

return pj_get_list_ref()[projection].descr[0];
return proj_list_operations()[projection].descr[0];
}
//-----------------------------------------------------------------------------
vtkGeoProjection::vtkGeoProjection()
Expand Down Expand Up @@ -144,7 +147,7 @@ void vtkGeoProjection::PrintSelf( ostream& os, vtkIndent indent )
int vtkGeoProjection::GetIndex()
{
int i = 0;
for ( const PJ_LIST* proj = pj_get_list_ref(); proj && proj->id; ++ proj, ++ i )
for ( const PJ_LIST* proj = proj_list_operations(); proj && proj->id; ++ proj, ++ i )
{
if ( ! strcmp( proj->id, this->Name ) )
{
Expand All @@ -161,7 +164,11 @@ const char* vtkGeoProjection::GetDescription()
{
return nullptr;
}
#if PROJ_VERSION_MAJOR >= 5
return this->Internals->ProjInfo.description;
#else
return this->Projection->descr;
#endif
}
//-----------------------------------------------------------------------------
projPJ vtkGeoProjection::GetProjection()
Expand Down Expand Up @@ -232,6 +239,9 @@ int vtkGeoProjection::UpdateProjection()
this->ProjectionMTime = this->GetMTime();
if ( this->Projection )
{
#if PROJ_VERSION_MAJOR >= 5
this->Internals->ProjInfo = proj_pj_info(this->Projection);
#endif
return 0;
}
return 1;
Expand Down
16 changes: 16 additions & 0 deletions Geovis/Core/vtkGeoTransform.cxx
Expand Up @@ -167,9 +167,17 @@ void vtkGeoTransform::InternalTransformPoints( double* x, vtkIdType numPts, int
double* coord = x;
for ( vtkIdType i = 0; i < numPts; ++ i )
{
#if PROJ_VERSION_MAJOR >= 5
xy.x = coord[0]; xy.y = coord[1];
#else
xy.u = coord[0]; xy.v = coord[1];
#endif
lp = pj_inv( xy, src );
#if PROJ_VERSION_MAJOR >= 5
coord[0] = lp.lam; coord[1] = lp.phi;
#else
coord[0] = lp.u; coord[1] = lp.v;
#endif
coord += stride;
}
}
Expand All @@ -191,9 +199,17 @@ void vtkGeoTransform::InternalTransformPoints( double* x, vtkIdType numPts, int
double* coord = x;
for ( vtkIdType i = 0; i < numPts; ++ i )
{
#if PROJ_VERSION_MAJOR >= 5
lp.lam = coord[0]; lp.phi = coord[1];
#else
lp.u = coord[0]; lp.v = coord[1];
#endif
xy = pj_fwd( lp, dst );
#if PROJ_VERSION_MAJOR >= 5
coord[0] = xy.x; coord[1] = xy.y;
#else
coord[0] = xy.u; coord[1] = xy.v;
#endif
coord += stride;
}
}
Expand Down
5 changes: 5 additions & 0 deletions ThirdParty/libproj/CMakeLists.txt
Expand Up @@ -6,8 +6,13 @@ vtk_module_third_party(
EXTERNAL
PACKAGE LibPROJ
TARGETS LibPROJ::LibPROJ
USE_VARIABLES LibPROJ_MAJOR_VERSION
STANDARD_INCLUDE_DIRS)

if (NOT VTK_MODULE_USE_EXTERNAL_VTK_libproj)
set(LibPROJ_MAJOR_VERSION "4")
endif ()

configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/vtk_libproj.h.in"
"${CMAKE_CURRENT_BINARY_DIR}/vtk_libproj.h")
Expand Down
17 changes: 16 additions & 1 deletion ThirdParty/libproj/vtk_libproj.h.in
Expand Up @@ -18,8 +18,23 @@
/* Use the libproj library configured for VTK. */
#cmakedefine01 VTK_MODULE_USE_EXTERNAL_vtklibproj

#define VTK_LibPROJ_MAJOR_VERSION @LibPROJ_MAJOR_VERSION@

#if VTK_LibPROJ_MAJOR_VERSION < 5
# define PROJ_VERSION_MAJOR @LibPROJ_MAJOR_VERSION@
# define proj_list_operations pj_get_list_ref
#endif

#if VTK_MODULE_USE_EXTERNAL_vtklibproj
# include <projects.h>
# if VTK_LibPROJ_MAJOR_VERSION >= 5
# include <proj.h>
# endif
# if VTK_LibPROJ_MAJOR_VERSION < 6
# include <projects.h>
# endif
# if VTK_LibPROJ_MAJOR_VERSION >= 6
# define ACCEPT_USE_OF_DEPRECATED_PROJ_API_H 1
# endif
# include <proj_api.h>
# include <geodesic.h>
#else
Expand Down

0 comments on commit 297d1d8

Please sign in to comment.