aboutsummaryrefslogtreecommitdiff
path: root/test/postinstall/testappprojinfo
diff options
context:
space:
mode:
authorMike Taves <mwtoews@gmail.com>2020-03-21 14:16:00 +1300
committerGitHub <noreply@github.com>2020-03-21 14:16:00 +1300
commitb76acd354ca376194fb1fb682e5347dbf2e20f8d (patch)
tree2112c2a945ab8470373bbc1539b5d5e01c686885 /test/postinstall/testappprojinfo
parent56b0d6c5066205be5a046b6a999681b9197246bf (diff)
downloadPROJ-b76acd354ca376194fb1fb682e5347dbf2e20f8d.tar.gz
PROJ-b76acd354ca376194fb1fb682e5347dbf2e20f8d.zip
Add post-install checks for CMake and Autotools/pkg-config (#2077)
* Checks CMake's find_package(PROJ) and find_package(PROJ4) * Checks pkg-config used with a Makefile (Linux and macOS only) * Use proj.h / libproj with a simple 'testappprojinfo'
Diffstat (limited to 'test/postinstall/testappprojinfo')
-rw-r--r--test/postinstall/testappprojinfo/CMakeLists.txt58
-rw-r--r--test/postinstall/testappprojinfo/Makefile15
-rw-r--r--test/postinstall/testappprojinfo/testappprojinfo.c19
3 files changed, 92 insertions, 0 deletions
diff --git a/test/postinstall/testappprojinfo/CMakeLists.txt b/test/postinstall/testappprojinfo/CMakeLists.txt
new file mode 100644
index 00000000..2405bc8c
--- /dev/null
+++ b/test/postinstall/testappprojinfo/CMakeLists.txt
@@ -0,0 +1,58 @@
+cmake_minimum_required(VERSION 3.5)
+project(testappprojinfo LANGUAGES C)
+
+set(USE_PROJ_NAME "PROJ"
+ CACHE STRING "Either PROJ (default) or PROJ4")
+
+find_package(${USE_PROJ_NAME})
+
+# Show some target properties
+get_cmake_property(_variableNames VARIABLES)
+list(SORT _variableNames)
+foreach(_variableName ${_variableNames})
+ string(REGEX MATCH "^${USE_PROJ_NAME}_" _matched ${_variableName})
+ if(NOT ${_matched} STREQUAL "")
+ message(STATUS "${_variableName}=${${_variableName}}")
+ endif()
+endforeach()
+
+add_executable(testappprojinfo testappprojinfo.c)
+target_link_libraries(testappprojinfo ${${USE_PROJ_NAME}_LIBRARIES})
+
+include(CTest)
+
+if(APPLE)
+ set(LDD_CL "otool -L")
+ set(EXPECTED_LDD_CL_OUT "@rpath/libproj")
+elseif(UNIX)
+ set(LDD_CL "ldd")
+ set(EXPECTED_LDD_CL_OUT "${CMAKE_PREFIX_PATH}/lib/libproj")
+endif()
+
+if(LDD_CL)
+ add_test(NAME test_ldd
+ COMMAND sh -c "${LDD_CL} ${CMAKE_BINARY_DIR}/testappprojinfo | grep proj")
+ set_tests_properties(test_ldd PROPERTIES
+ PASS_REGULAR_EXPRESSION ${EXPECTED_LDD_CL_OUT}
+ )
+else()
+ add_test(NAME test_ldd COMMAND testappprojinfo)
+ set_tests_properties(test_ldd PROPERTIES SKIP_RETURN_CODE 1)
+endif()
+
+# data directory property not available, so recreate one
+get_filename_component(EXPECTED_DATADIR
+ "${${USE_PROJ_NAME}_DIR}/../../../share/proj" ABSOLUTE)
+if(WIN32)
+ # Match each '/' with either '\' or '/'
+ string(REPLACE "/" "[\\/]" EXPECTED_DATADIR ${EXPECTED_DATADIR})
+endif()
+add_test(NAME test_searchpath COMMAND testappprojinfo -s)
+set_tests_properties(test_searchpath PROPERTIES
+ PASS_REGULAR_EXPRESSION "${EXPECTED_DATADIR}"
+)
+
+add_test(NAME test_version COMMAND testappprojinfo -v)
+set_tests_properties(test_version PROPERTIES
+ PASS_REGULAR_EXPRESSION "${${USE_PROJ_NAME}_VERSION}"
+)
diff --git a/test/postinstall/testappprojinfo/Makefile b/test/postinstall/testappprojinfo/Makefile
new file mode 100644
index 00000000..98c47f28
--- /dev/null
+++ b/test/postinstall/testappprojinfo/Makefile
@@ -0,0 +1,15 @@
+PROGRAM = testappprojinfo
+OBJECTS = $(addsuffix .o,$(PROGRAM))
+
+override CFLAGS += -g -Wall -Werror $(shell pkg-config proj --cflags)
+override LDFLAGS += $(shell pkg-config proj --libs)
+
+all: $(PROGRAM)
+
+$(PROGRAM): $(OBJECTS)
+ $(CC) -o $@ $< $(LDFLAGS)
+
+clean:
+ $(RM) $(PROGRAM) $(OBJECTS)
+
+.PHONY: clean
diff --git a/test/postinstall/testappprojinfo/testappprojinfo.c b/test/postinstall/testappprojinfo/testappprojinfo.c
new file mode 100644
index 00000000..64b5d665
--- /dev/null
+++ b/test/postinstall/testappprojinfo/testappprojinfo.c
@@ -0,0 +1,19 @@
+#include <stdio.h>
+#include <proj.h>
+
+int main(int argc, char *argv[]) {
+ PJ_INFO info;
+ info = proj_info();
+ if(argc == 2 && argv[1][0] == '-') {
+ switch(argv[1][1]) {
+ case 's':
+ printf("%s\n", info.searchpath);
+ return(0);
+ case 'v':
+ printf("%d.%d.%d\n", info.major, info.minor, info.patch);
+ return(0);
+ }
+ }
+ printf("Use option -v or -s\n");
+ return(1);
+}