diff options
| author | Mike Taves <mwtoews@gmail.com> | 2020-03-21 14:16:00 +1300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-03-21 14:16:00 +1300 |
| commit | b76acd354ca376194fb1fb682e5347dbf2e20f8d (patch) | |
| tree | 2112c2a945ab8470373bbc1539b5d5e01c686885 /test/postinstall/testappprojinfo | |
| parent | 56b0d6c5066205be5a046b6a999681b9197246bf (diff) | |
| download | PROJ-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.txt | 58 | ||||
| -rw-r--r-- | test/postinstall/testappprojinfo/Makefile | 15 | ||||
| -rw-r--r-- | test/postinstall/testappprojinfo/testappprojinfo.c | 19 |
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); +} |
