aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt63
-rw-r--r--src/bin_cct.cmake2
-rw-r--r--src/bin_cs2cs.cmake2
-rw-r--r--src/bin_geod.cmake3
-rw-r--r--src/bin_geodtest.cmake5
-rw-r--r--src/bin_gie.cmake2
-rw-r--r--src/bin_proj.cmake3
-rw-r--r--src/bin_projinfo.cmake3
-rw-r--r--src/lib_proj.cmake18
-rw-r--r--test/unit/CMakeLists.txt15
10 files changed, 68 insertions, 48 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 258599c9..68c941c6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -34,30 +34,45 @@ message(STATUS "Requiring C++${CMAKE_CXX_STANDARD} - done")
set(CMAKE_C_VISIBILITY_PRESET hidden)
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
-# Set warnings
-if("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
- # Suppress warning 4706 about assignment within conditional expression
- # Suppress warning 4996 about sprintf, etc., being unsafe
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \
-/W4 /wd4706 /wd4996 /D_CRT_SECURE_NO_WARNINGS")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \
-/EHsc /W4 /wd4706 /wd4996 /D_CRT_SECURE_NO_WARNINGS")
-elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \
--Wall -Wextra -Wswitch -Wshadow -Wunused-parameter \
--Wmissing-prototypes -Wmissing-declarations -Wformat -Wformat-security")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \
--Wall -Wextra -Wswitch -Wshadow -Wunused-parameter \
--Wmissing-declarations -Wformat -Wformat-security")
+# Set warnings as variables, then store as cache options
+set(PROJ_common_WARN_FLAGS # common only to GNU/Clang C/C++
+ -Wall
+ -Wextra
+ -Wswitch
+ -Wshadow
+ -Wunused-parameter
+ -Wmissing-declarations
+ -Wformat
+ -Wformat-security
+)
+if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
+ set(PROJ_C_WARN_FLAGS ${PROJ_common_WARN_FLAGS}
+ -Wmissing-prototypes
+ )
+ set(PROJ_CXX_WARN_FLAGS ${PROJ_common_WARN_FLAGS})
elseif("${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \
--Wall -Wextra -Wswitch -Wshadow -Wunused-parameter \
--Wmissing-prototypes -Wmissing-declarations -Wformat -Wformat-security \
--Wfloat-conversion -Wc99-extensions -Wc11-extensions")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \
--Wall -Wextra -Wswitch -Wshadow -Wunused-parameter \
--Wmissing-declarations -Wformat -Wformat-security -Wfloat-conversion")
+ set(PROJ_C_WARN_FLAGS ${PROJ_common_WARN_FLAGS}
+ -Wmissing-prototypes
+ -Wfloat-conversion
+ -Wc99-extensions
+ -Wc11-extensions
+ )
+ set(PROJ_CXX_WARN_FLAGS ${PROJ_common_WARN_FLAGS}
+ -Wfloat-conversion
+ )
+elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
+ add_definitions(/D_CRT_SECURE_NO_WARNINGS) # Eliminate deprecation warnings
+ set(PROJ_C_WARN_FLAGS
+ /W4
+ /wd4706 # Suppress warning about assignment within conditional expression
+ /wd4996 # Suppress warning about sprintf, etc., being unsafe
+ )
+ set(PROJ_CXX_WARN_FLAGS /EHsc ${PROJ_C_WARN_FLAGS})
endif()
+set(PROJ_C_WARN_FLAGS "${PROJ_C_WARN_FLAGS}"
+ CACHE STRING "C flags used to compile PROJ targets")
+set(PROJ_CXX_WARN_FLAGS "${PROJ_CXX_WARN_FLAGS}"
+ CACHE STRING "C++ flags used to compile PROJ targets")
# Tell Intel compiler to do arithmetic accurately. This is needed to
# stop the compiler from ignoring parentheses in expressions like
@@ -121,10 +136,10 @@ include(CheckIncludeFiles)
include(CheckCSourceCompiles)
if(MSVC)
- set(CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} /WX")
+ set(CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} /WX /W4")
else()
set(CMAKE_REQUIRED_LIBRARIES m)
- set(CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} -Werror")
+ set(CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} -Werror -Wall")
endif()
# Check whether the C99 math function: hypot, atanh, etc. are available.
check_c_source_compiles("
diff --git a/src/bin_cct.cmake b/src/bin_cct.cmake
index 9c4b0804..d2d61cf5 100644
--- a/src/bin_cct.cmake
+++ b/src/bin_cct.cmake
@@ -9,6 +9,8 @@ source_group("Source Files\\Bin" FILES ${CCT_SRC})
add_executable(cct ${CCT_SRC} ${CCT_INCLUDE})
target_link_libraries(cct ${PROJ_LIBRARIES})
+target_compile_options(cct PRIVATE ${PROJ_CXX_WARN_FLAGS})
+
install(TARGETS cct
RUNTIME DESTINATION ${BINDIR})
diff --git a/src/bin_cs2cs.cmake b/src/bin_cs2cs.cmake
index 9b2f2f4f..7ee26673 100644
--- a/src/bin_cs2cs.cmake
+++ b/src/bin_cs2cs.cmake
@@ -7,6 +7,8 @@ source_group("Source Files\\Bin" FILES ${CS2CS_SRC})
add_executable(cs2cs ${CS2CS_SRC} ${CS2CS_INCLUDE})
target_link_libraries(cs2cs ${PROJ_LIBRARIES})
+target_compile_options(cs2cs PRIVATE ${PROJ_CXX_WARN_FLAGS})
+
install(TARGETS cs2cs
RUNTIME DESTINATION ${BINDIR})
diff --git a/src/bin_geod.cmake b/src/bin_geod.cmake
index 7221958a..84d2cd5b 100644
--- a/src/bin_geod.cmake
+++ b/src/bin_geod.cmake
@@ -8,9 +8,10 @@ set(GEOD_INCLUDE apps/geod_interface.h)
source_group("Source Files\\Bin" FILES ${GEOD_SRC} ${GEOD_INCLUDE})
-#Executable
add_executable(geod ${GEOD_SRC} ${GEOD_INCLUDE})
target_link_libraries(geod ${PROJ_LIBRARIES})
+target_compile_options(geod PRIVATE ${PROJ_CXX_WARN_FLAGS})
+
install(TARGETS geod
RUNTIME DESTINATION ${BINDIR})
diff --git a/src/bin_geodtest.cmake b/src/bin_geodtest.cmake
index 4cc98197..c911e95f 100644
--- a/src/bin_geodtest.cmake
+++ b/src/bin_geodtest.cmake
@@ -3,12 +3,11 @@ set(GEODTEST_INCLUDE)
source_group("Source Files\\Bin" FILES ${GEODTEST_SRC} ${GEODTEST_INCLUDE})
-#Executable
add_executable(geodtest ${GEODTEST_SRC} ${GEODTEST_INCLUDE})
target_link_libraries(geodtest ${PROJ_LIBRARIES})
-# Do not install
+target_compile_options(geodtest PRIVATE ${PROJ_CXX_WARN_FLAGS})
-# Instead run as a test
+# Do not install, instead run as a test
add_test(NAME geodesic-test COMMAND geodtest)
if(MSVC AND BUILD_LIBPROJ_SHARED)
diff --git a/src/bin_gie.cmake b/src/bin_gie.cmake
index a96c4c1c..49c57483 100644
--- a/src/bin_gie.cmake
+++ b/src/bin_gie.cmake
@@ -9,6 +9,8 @@ source_group("Source Files\\Bin" FILES ${GIE_SRC})
add_executable(gie ${GIE_SRC} ${GIE_INCLUDE})
target_link_libraries(gie ${PROJ_LIBRARIES})
+target_compile_options(gie PRIVATE ${PROJ_CXX_WARN_FLAGS})
+
install(TARGETS gie
RUNTIME DESTINATION ${BINDIR})
diff --git a/src/bin_proj.cmake b/src/bin_proj.cmake
index c55ccfda..b9ae03e5 100644
--- a/src/bin_proj.cmake
+++ b/src/bin_proj.cmake
@@ -5,12 +5,13 @@ set(PROJ_SRC
source_group("Source Files\\Bin" FILES ${PROJ_SRC})
-#Executable
add_executable(binproj ${PROJ_SRC})
set_target_properties(binproj
PROPERTIES
OUTPUT_NAME proj)
target_link_libraries(binproj ${PROJ_LIBRARIES})
+target_compile_options(binproj PRIVATE ${PROJ_CXX_WARN_FLAGS})
+
install(TARGETS binproj
RUNTIME DESTINATION ${BINDIR})
diff --git a/src/bin_projinfo.cmake b/src/bin_projinfo.cmake
index 0691d739..c2447262 100644
--- a/src/bin_projinfo.cmake
+++ b/src/bin_projinfo.cmake
@@ -2,12 +2,13 @@ set(PROJINFO_SRC apps/projinfo.cpp)
source_group("Source Files\\Bin" FILES ${PROJINFO_SRC})
-#Executable
add_executable(binprojinfo ${PROJINFO_SRC})
set_target_properties(binprojinfo
PROPERTIES
OUTPUT_NAME projinfo)
target_link_libraries(binprojinfo ${PROJ_LIBRARIES})
+target_compile_options(binprojinfo PRIVATE ${PROJ_CXX_WARN_FLAGS})
+
install(TARGETS binprojinfo
RUNTIME DESTINATION ${BINDIR})
diff --git a/src/lib_proj.cmake b/src/lib_proj.cmake
index 38bc05d8..635992e4 100644
--- a/src/lib_proj.cmake
+++ b/src/lib_proj.cmake
@@ -42,15 +42,9 @@ if(ENABLE_LTO)
set(CMAKE_REQUIRED_FLAGS "-Wl,-flto")
check_cxx_source_compiles("int main(){ return 0; }"
COMPILER_SUPPORTS_FLTO_FLAG)
- if(COMPILER_SUPPORTS_FLTO_FLAG)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto")
- endif()
else()
include(CheckCXXCompilerFlag)
check_cxx_compiler_flag("-flto" COMPILER_SUPPORTS_FLTO_FLAG)
- if(COMPILER_SUPPORTS_FLTO_FLAG)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto")
- endif()
endif()
endif()
@@ -351,6 +345,18 @@ add_library(
${ALL_LIBPROJ_HEADERS}
${PROJ_RESOURCES}
)
+target_compile_options(${PROJ_CORE_TARGET}
+ PRIVATE $<$<COMPILE_LANGUAGE:C>:${PROJ_C_WARN_FLAGS}>
+ PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${PROJ_CXX_WARN_FLAGS}>
+)
+
+if(COMPILER_SUPPORTS_FLTO_FLAG)
+ # See https://gitlab.kitware.com/cmake/cmake/issues/15245
+ # CMake v3.9:
+ # set_property(TARGET ${PROJ_CORE_TARGET}
+ # PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
+ target_compile_options(${PROJ_CORE_TARGET} PRIVATE -flto)
+endif()
if(NOT CMAKE_VERSION VERSION_LESS 2.8.11)
target_include_directories(${PROJ_CORE_TARGET} INTERFACE
diff --git a/test/unit/CMakeLists.txt b/test/unit/CMakeLists.txt
index 66a69c3f..40a3dd06 100644
--- a/test/unit/CMakeLists.txt
+++ b/test/unit/CMakeLists.txt
@@ -11,12 +11,6 @@ else()
message(STATUS "Using internal GTest")
-# FIXME: Deal with our old-school CMakeLists.txt behaving badly
-set(_save_c_flags "${CMAKE_C_FLAGS}")
-set(_save_cxx_flags "${CMAKE_CXX_FLAGS}")
-string(REGEX REPLACE "\\-W[a-z\\-]+" "" CMAKE_C_FLAGS ${CMAKE_C_FLAGS})
-string(REGEX REPLACE "\\-W[a-z\\-]+" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
-
#
# Build Google Test
#
@@ -48,12 +42,6 @@ add_subdirectory(
${CMAKE_BINARY_DIR}/googletest-build
EXCLUDE_FROM_ALL)
-# FIXME: Deal with our old-school CMakeLists.txt behaving badly
-set(CMAKE_C_FLAGS "${_save_c_flags}")
-set(CMAKE_CXX_FLAGS "${_save_cxx_flags}")
-unset(_save_c_flags)
-unset(_save_cxx_flags)
-
# Provide the same target name as find_package(GTest)
add_library(GTest::gtest ALIAS gtest)
@@ -72,6 +60,9 @@ include_directories(${SQLITE3_INCLUDE_DIR})
# Add the directory containing proj_config.h
include_directories(${CMAKE_BINARY_DIR}/src)
+# Apply to targets in the current directory and below
+add_compile_options(${PROJ_CXX_WARN_FLAGS})
+
add_executable(proj_pj_transform_test
main.cpp
pj_transform_test.cpp)