From 949321762b65f2f35829cb1c141482d25092e8ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Sun, 3 Jun 2018 22:54:01 +0200 Subject: [PATCH 1/5] Verify compilability of headers on Travis v2 Using approach described in https://github.com/OpenRCT2/OpenRCT2/pull/7369#issuecomment-393973857 with updates to ease readability and maintenance. Submitted as different PR, to keep history of the old approach. Supersedes #7369. --- src/openrct2/CMakeLists.txt | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/openrct2/CMakeLists.txt b/src/openrct2/CMakeLists.txt index 1d59906fa2..9235d29131 100644 --- a/src/openrct2/CMakeLists.txt +++ b/src/openrct2/CMakeLists.txt @@ -59,8 +59,8 @@ if (NOT DISABLE_TTF) endif () # Sources -file(GLOB_RECURSE OPENRCT2_CORE_SOURCES "${CMAKE_CURRENT_LIST_DIR}/*.cpp" - "${CMAKE_CURRENT_LIST_DIR}/*.h" +file(GLOB_RECURSE OPENRCT2_CORE_SOURCES "${CMAKE_CURRENT_LIST_DIR}/*.cpp") +file(GLOB_RECURSE OPENRCT2_CORE_HEADERS "${CMAKE_CURRENT_LIST_DIR}/*.h" "${CMAKE_CURRENT_LIST_DIR}/*.hpp") if (APPLE) file(GLOB_RECURSE OPENRCT2_CORE_MM_SOURCES "${CMAKE_CURRENT_LIST_DIR}/*.mm") @@ -179,3 +179,19 @@ if((X86 OR X86_64) AND NOT MSVC) set_source_files_properties(${CMAKE_CURRENT_LIST_DIR}/drawing/SSE41Drawing.cpp PROPERTIES COMPILE_FLAGS -msse4.1) set_source_files_properties(${CMAKE_CURRENT_LIST_DIR}/drawing/AVX2Drawing.cpp PROPERTIES COMPILE_FLAGS -mavx2) endif() + +# Add headers check to verify all headers carry their dependencies. +# Only valid for Clang for now: +# - GCC 8 does not support -Wno-pragma-once-outside-header +# - Other compilers status unknown +if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + add_library(${PROJECT}-headers-check ${OPENRCT2_CORE_HEADERS}) + set_target_properties(${PROJECT}-headers-check PROPERTIES LINKER_LANGUAGE CXX) + set_source_files_properties(${OPENRCT2_CORE_HEADERS} PROPERTIES LANGUAGE CXX) + add_definitions("-x c++ -Wno-pragma-once-outside-header -Wno-unused-const-variable") + get_target_property(LIBOPENRCT2_INCLUDE_DIRS ${PROJECT} INCLUDE_DIRECTORIES) + set_target_properties(${PROJECT}-headers-check PROPERTIES INCLUDE_DIRECTORIES ${LIBOPENRCT2_INCLUDE_DIRS}) +else () + # Dummy target to ease invocation + add_custom_target(${PROJECT}-headers-check) +endif () From 32b419c8684f1d2ffe8c176f8d64dac5218b868c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Sun, 3 Jun 2018 23:20:58 +0200 Subject: [PATCH 2/5] Mark set_format_arg_body as maybe_unused --- src/openrct2/localisation/Localisation.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openrct2/localisation/Localisation.h b/src/openrct2/localisation/Localisation.h index 7ec140d222..70eb7adb48 100644 --- a/src/openrct2/localisation/Localisation.h +++ b/src/openrct2/localisation/Localisation.h @@ -84,7 +84,7 @@ extern const rct_string_id DateDayNames[31]; extern const rct_string_id DateGameMonthNames[MONTH_COUNT]; extern const rct_string_id DateGameShortMonthNames[MONTH_COUNT]; -static inline void set_format_arg_body(uint8 *args, size_t offset, uintptr_t value, size_t size) +[[maybe_unused]] static inline void set_format_arg_body(uint8 *args, size_t offset, uintptr_t value, size_t size) { memcpy(args + offset, &value, size); } From 6307d3532b441d646f9d5130a17596cc322dabd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Mon, 4 Jun 2018 07:49:29 +0200 Subject: [PATCH 3/5] Make headers-check an object library This will skip linking step --- src/openrct2/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openrct2/CMakeLists.txt b/src/openrct2/CMakeLists.txt index 9235d29131..61811ce0fc 100644 --- a/src/openrct2/CMakeLists.txt +++ b/src/openrct2/CMakeLists.txt @@ -185,7 +185,7 @@ endif() # - GCC 8 does not support -Wno-pragma-once-outside-header # - Other compilers status unknown if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - add_library(${PROJECT}-headers-check ${OPENRCT2_CORE_HEADERS}) + add_library(${PROJECT}-headers-check OBJECT ${OPENRCT2_CORE_HEADERS}) set_target_properties(${PROJECT}-headers-check PROPERTIES LINKER_LANGUAGE CXX) set_source_files_properties(${OPENRCT2_CORE_HEADERS} PROPERTIES LANGUAGE CXX) add_definitions("-x c++ -Wno-pragma-once-outside-header -Wno-unused-const-variable") From 798a4fe1a749b0dab9c199bdddb8b3c1a94e7b61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Mon, 4 Jun 2018 11:10:52 +0200 Subject: [PATCH 4/5] Add header verification for openrct2-ui --- src/openrct2-ui/CMakeLists.txt | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/openrct2-ui/CMakeLists.txt b/src/openrct2-ui/CMakeLists.txt index d6f5cff0ff..dfa13bd909 100644 --- a/src/openrct2-ui/CMakeLists.txt +++ b/src/openrct2-ui/CMakeLists.txt @@ -35,7 +35,8 @@ endif () # Sources file(GLOB_RECURSE OPENRCT2_UI_SOURCES - "${CMAKE_CURRENT_LIST_DIR}/*.cpp" + "${CMAKE_CURRENT_LIST_DIR}/*.cpp") +file(GLOB_RECURSE OPENRCT2_UI_HEADERS "${CMAKE_CURRENT_LIST_DIR}/*.h" "${CMAKE_CURRENT_LIST_DIR}/*.hpp") @@ -97,3 +98,16 @@ endif () if (MSVC) add_definitions(-D__DISABLE_DLL_PROXY__) endif () + +# Add headers check to verify all headers carry their dependencies. +# Only valid for Clang for now: +# - GCC 8 does not support -Wno-pragma-once-outside-header +# - Other compilers status unknown +if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + add_library(${PROJECT}-headers-check OBJECT ${OPENRCT2_UI_HEADERS}) + set_target_properties(${PROJECT}-headers-check PROPERTIES LINKER_LANGUAGE CXX) + set_source_files_properties(${OPENRCT2_UI_HEADERS} PROPERTIES LANGUAGE CXX) + add_definitions("-x c++ -Wno-pragma-once-outside-header -Wno-unused-const-variable") + get_target_property(OPENRCT2_INCLUDE_DIRS ${PROJECT} INCLUDE_DIRECTORIES) + set_target_properties(${PROJECT}-headers-check PROPERTIES INCLUDE_DIRECTORIES ${OPENRCT2_INCLUDE_DIRS}) +endif () From 30e6cf17876ff058786b246d23e89f0318536cf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Mon, 4 Jun 2018 12:01:56 +0200 Subject: [PATCH 5/5] Remove OpenGLAPIProc.h from headers check target --- src/openrct2-ui/CMakeLists.txt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/openrct2-ui/CMakeLists.txt b/src/openrct2-ui/CMakeLists.txt index dfa13bd909..d009c4122d 100644 --- a/src/openrct2-ui/CMakeLists.txt +++ b/src/openrct2-ui/CMakeLists.txt @@ -104,9 +104,12 @@ endif () # - GCC 8 does not support -Wno-pragma-once-outside-header # - Other compilers status unknown if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - add_library(${PROJECT}-headers-check OBJECT ${OPENRCT2_UI_HEADERS}) + set(OPENRCT2_HEADERS_CHECK ${OPENRCT2_UI_HEADERS}) + # OpenGLAPIProc.h is not meant to be included directly. + list(REMOVE_ITEM OPENRCT2_HEADERS_CHECK "${CMAKE_CURRENT_LIST_DIR}/drawing/engines/opengl/OpenGLAPIProc.h") + add_library(${PROJECT}-headers-check OBJECT ${OPENRCT2_HEADERS_CHECK}) set_target_properties(${PROJECT}-headers-check PROPERTIES LINKER_LANGUAGE CXX) - set_source_files_properties(${OPENRCT2_UI_HEADERS} PROPERTIES LANGUAGE CXX) + set_source_files_properties(${OPENRCT2_HEADERS_CHECK} PROPERTIES LANGUAGE CXX) add_definitions("-x c++ -Wno-pragma-once-outside-header -Wno-unused-const-variable") get_target_property(OPENRCT2_INCLUDE_DIRS ${PROJECT} INCLUDE_DIRECTORIES) set_target_properties(${PROJECT}-headers-check PROPERTIES INCLUDE_DIRECTORIES ${OPENRCT2_INCLUDE_DIRS})