From c54e7c974beb59153ad90234e1ea7a9bdc2b2dc8 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Tue, 2 Apr 2019 10:29:01 +0200 Subject: [PATCH 01/11] Fix AppleClang -Wnull-pointer-arithmetic warning --- STL_Extension/include/CGAL/Compact_container.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/STL_Extension/include/CGAL/Compact_container.h b/STL_Extension/include/CGAL/Compact_container.h index b4960af00c4..c1927dd9c3f 100644 --- a/STL_Extension/include/CGAL/Compact_container.h +++ b/STL_Extension/include/CGAL/Compact_container.h @@ -815,7 +815,7 @@ private: static char * clean_pointer(char * p) { - return ((p - (char *) NULL) & ~ (std::ptrdiff_t) START_END) + (char *) NULL; + return reinterpret_cast((p - (char *) NULL) & ~ (std::ptrdiff_t) START_END); } // Returns the pointee, cleaned up from the squatted bits. From aed5a55354dcd7451d787c46a7a731dfd3ae7768 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 3 Apr 2019 14:10:27 +0200 Subject: [PATCH 02/11] Fix the syntax of find_path --- Polyhedron/demo/Polyhedron/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/CMakeLists.txt b/Polyhedron/demo/Polyhedron/CMakeLists.txt index 519f73f74fb..ee89a2b7adc 100644 --- a/Polyhedron/demo/Polyhedron/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/CMakeLists.txt @@ -142,7 +142,7 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND ) qt5_add_resources ( CGAL_Qt5_RESOURCE_FILES Polyhedron_3.qrc ) find_path(CGAL_THREE_HEADERS_PATH - NAME CGAL/Three/Scene_item.h + NAMES CGAL/Three/Scene_item.h HINTS ${CGAL_INCLUDE_DIRS} NO_DEFAULT_PATH DOC "Path to CGAL/Three/Scene_item.h") From bba76c20f399524fd3faf9b994c77bed60d20c1a Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 3 Apr 2019 14:10:42 +0200 Subject: [PATCH 03/11] Fix that find_path in case of cross-compilation --- Polyhedron/demo/Polyhedron/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/Polyhedron/demo/Polyhedron/CMakeLists.txt b/Polyhedron/demo/Polyhedron/CMakeLists.txt index ee89a2b7adc..b231e97b148 100644 --- a/Polyhedron/demo/Polyhedron/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/CMakeLists.txt @@ -145,6 +145,7 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND ) NAMES CGAL/Three/Scene_item.h HINTS ${CGAL_INCLUDE_DIRS} NO_DEFAULT_PATH + NO_CMAKE_FIND_ROOT_PATH DOC "Path to CGAL/Three/Scene_item.h") if(CGAL_THREE_HEADERS_PATH) From eb769f13fd5d43c81454cb10dedc161ef15543ef Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 3 Apr 2019 14:10:57 +0200 Subject: [PATCH 04/11] Fix the error message --- Polyhedron/demo/Polyhedron/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/CMakeLists.txt b/Polyhedron/demo/Polyhedron/CMakeLists.txt index b231e97b148..7d6f9ca4207 100644 --- a/Polyhedron/demo/Polyhedron/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/CMakeLists.txt @@ -160,7 +160,7 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND ) qt5_generate_moc( "${CGAL_THREE_HEADERS_PATH}/CGAL/Three/TextRenderer.h" "${CMAKE_CURRENT_BINARY_DIR}/TextRenderer_moc.cpp" ) else() - message(FATAL_ERROR "Cannot find ") + message(FATAL_ERROR "Cannot find ") endif() unset(CGAL_THREE_HEADERS_PATH CACHE) From 85047bcb613794425d405beeb9e317a681fbe5ab Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 3 Apr 2019 14:11:50 +0200 Subject: [PATCH 05/11] Sneak a new feature in this branch: detect unused .cpp files For the moment, the feature is far from being ready: - in case of header-only, the .cpp sources files of CGAL libraries are reported, - when a dependency for a test/examples is missing, the corresponding .cpp files is reported, - and I have no clue which CMake version is required. But I found real issues. By default, the feature is OFF. It will only be activated if the CMake variable or cache variable `CGAL_CHECK_UNUSED_CPP_FILES` is true. We might activate it on a per-directory basis... or have it by default, and deactivate it per-directory. We'll see. For the moment, let's keep it deactivated. --- ...GAL_enable_end_of_configuration_hook.cmake | 42 +++++++++++++++++-- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/Installation/cmake/modules/CGAL_enable_end_of_configuration_hook.cmake b/Installation/cmake/modules/CGAL_enable_end_of_configuration_hook.cmake index 2401063a25f..6f8e423af1d 100644 --- a/Installation/cmake/modules/CGAL_enable_end_of_configuration_hook.cmake +++ b/Installation/cmake/modules/CGAL_enable_end_of_configuration_hook.cmake @@ -14,11 +14,47 @@ if(PROPERTY_CGAL_run_at_the_end_of_configuration_INCLUDED) endif() function(CGAL_run_at_the_end_of_configuration variable access value current_list_file stack) - if(NOT access STREQUAL "MODIFIED_ACCESS" OR value) - # Only do something at the end of the CMake process, when the value of - # variable CMAKE_CURRENT_LIST_DIR is changed to the empty string. + if(NOT access STREQUAL "MODIFIED_ACCESS") return() endif() + if(CGAL_CHECK_UNUSED_CPP_FILES + AND NOT current_list_file STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt" + AND stack STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt") + file(GLOB _cppfiles ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp) + get_property(_targets DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY BUILDSYSTEM_TARGETS) + if(_targets AND _cppfiles) + set(_sources) + foreach(_target ${_targets}) + get_property(_target_type TARGET ${_target} PROPERTY TYPE) + if(_target_type STREQUAL INTERFACE_LIBRARY) + continue() + endif() + get_property(_target_sources TARGET ${_target} PROPERTY SOURCES) + list(APPEND _sources ${_target_sources}) + endforeach() + if(_sources) + list(REMOVE_ITEM _cppfiles ${_sources}) + endif() + if(_cppfiles) + set(_warning "In ${CMAKE_CURRENT_SOURCE_DIR}, the following files are unused:") + foreach(_cppfile ${_cppfiles}) + set(_warning "${_warning} + ${_cppfile}") + endforeach() + set(_warning "${_warning} +") + message(AUTHOR_WARNING "${_warning}") + endif() + endif() + endif() + + if(value) + # Only do the following at the end of the CMake process, when the + # value of variable CMAKE_CURRENT_LIST_DIR is changed to the empty + # string. + return() + endif() + # Warn when CMAKE_BUILD_TYPE is empty or Debug if(DEFINED CMAKE_BUILD_TYPE AND ( NOT CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE STREQUAL "Debug") ) set(keyword WARNING) From 5a67ea92fcf75f3f25cea2b832590ab1af52b501 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 3 Apr 2019 14:15:00 +0200 Subject: [PATCH 06/11] Fix the verinfo of CGAL DLLs, on Windows And fix the test files. --- Installation/src/CGAL_libs_verinfo.rc.in | 2 +- Installation/test/Installation/CMakeLists.txt | 9 ++++++--- .../test/Installation/display_dll_version_info.cpp | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Installation/src/CGAL_libs_verinfo.rc.in b/Installation/src/CGAL_libs_verinfo.rc.in index d1f838e8db6..56a65021857 100644 --- a/Installation/src/CGAL_libs_verinfo.rc.in +++ b/Installation/src/CGAL_libs_verinfo.rc.in @@ -25,7 +25,7 @@ #define CGAL_VER_str(s) CGAL_VER_xstr(s) #define CGAL_VER_VERSION CGAL_VERSION_MAJOR,CGAL_VERSION_MINOR,CGAL_VERSION_PATCH,CGAL_VERSION_BUILD -#define CGAL_VER_VERSION_STR CGAL_VER_str(CGAL_VERSION) +#define CGAL_VER_VERSION_STR CGAL_VER_str(CGAL_VERSION_MAJOR) "." CGAL_VER_str(CGAL_VERSION_MINOR) "." CGAL_VER_str(CGAL_VERSION_PATCH) "." CGAL_VER_str(CGAL_VERSION_BUILD) #define CGAL_VER_COMPANYNAME_STR "The CGAL Project, https://www.cgal.org/\0" #define CGAL_VER_FILEDESCRIPTION_STR "@LIBRARY_NAME@ Library\0" #define CGAL_VER_FILEVERSION_STR CGAL_VER_VERSION_STR diff --git a/Installation/test/Installation/CMakeLists.txt b/Installation/test/Installation/CMakeLists.txt index ce85c54f412..4727106e2e6 100644 --- a/Installation/test/Installation/CMakeLists.txt +++ b/Installation/test/Installation/CMakeLists.txt @@ -79,10 +79,13 @@ if ( CGAL_FOUND ) endif() endif() - if(WIN32) + if(WIN32 OR CMAKE_SYSTEM_NAME STREQUAL Windows) + add_executable(display_dll_version_info display_dll_version_info.cpp) + target_link_libraries(display_dll_version_info version) add_executable(test_gmp_mpfr_dll test_gmp_mpfr_dll.cpp) - target_link_libraries(test_gmp_mpfr_dll Version) - endif(WIN32) + target_link_libraries(test_gmp_mpfr_dll version) + CGAL_add_test(test_gmp_mpfr_dll) + endif() find_package( LEDA QUIET) if(LEDA_FOUND) diff --git a/Installation/test/Installation/display_dll_version_info.cpp b/Installation/test/Installation/display_dll_version_info.cpp index 985e2ed15af..2ed4da4742c 100644 --- a/Installation/test/Installation/display_dll_version_info.cpp +++ b/Installation/test/Installation/display_dll_version_info.cpp @@ -49,7 +49,7 @@ int main(int argc, char** argv) { } else { std::cerr << "Usage:\n" << " display_dll_version_info /path/to/a.dll\n"; - return 0; } + return 0; } #endif From 68f6ebf42d74e99c0397803825d7909bbcd4ed42 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 3 Apr 2019 14:52:12 +0200 Subject: [PATCH 07/11] More reinterpret_cast to avoid undefined behavior --- STL_Extension/include/CGAL/Compact_container.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/STL_Extension/include/CGAL/Compact_container.h b/STL_Extension/include/CGAL/Compact_container.h index c1927dd9c3f..1b7ea962e78 100644 --- a/STL_Extension/include/CGAL/Compact_container.h +++ b/STL_Extension/include/CGAL/Compact_container.h @@ -28,6 +28,7 @@ #include #include +#include #include #include #include @@ -815,7 +816,8 @@ private: static char * clean_pointer(char * p) { - return reinterpret_cast((p - (char *) NULL) & ~ (std::ptrdiff_t) START_END); + return reinterpret_cast(reinterpret_cast(p) & + ~ (std::uintptr_t) START_END); } // Returns the pointee, cleaned up from the squatted bits. @@ -828,7 +830,8 @@ private: static Type type(const_pointer ptr) { char * p = (char *) Traits::pointer(*ptr); - return (Type) (p - clean_pointer(p)); + return (Type) (reinterpret_cast(p) - + reinterpret_cast(clean_pointer(p))); } // Sets the pointer part and the type of the pointee. @@ -837,7 +840,8 @@ private: // This out of range compare is always true and causes lots of // unnecessary warnings. // CGAL_precondition(0 <= t && t < 4); - Traits::pointer(*ptr) = (void *) ((clean_pointer((char *) p)) + (int) t); + Traits::pointer(*ptr) = reinterpret_cast + (reinterpret_cast(clean_pointer((char *) p)) + (int) t); } public: From 34cf27b47e9d3218a2cdd240dea10338793049ba Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 3 Apr 2019 14:56:21 +0200 Subject: [PATCH 08/11] Use std::ptrdiff_t, because the target branch is not C++11 `std::uintptr_t` was introduced by C++11, but the target branch if CGAL-4.13-branch, does not require C++11. --- STL_Extension/include/CGAL/Compact_container.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/STL_Extension/include/CGAL/Compact_container.h b/STL_Extension/include/CGAL/Compact_container.h index 1b7ea962e78..6064a81c6d9 100644 --- a/STL_Extension/include/CGAL/Compact_container.h +++ b/STL_Extension/include/CGAL/Compact_container.h @@ -28,7 +28,7 @@ #include #include -#include +#include #include #include #include @@ -816,8 +816,8 @@ private: static char * clean_pointer(char * p) { - return reinterpret_cast(reinterpret_cast(p) & - ~ (std::uintptr_t) START_END); + return reinterpret_cast(reinterpret_cast(p) & + ~ (std::ptrdiff_t) START_END); } // Returns the pointee, cleaned up from the squatted bits. @@ -830,8 +830,8 @@ private: static Type type(const_pointer ptr) { char * p = (char *) Traits::pointer(*ptr); - return (Type) (reinterpret_cast(p) - - reinterpret_cast(clean_pointer(p))); + return (Type) (reinterpret_cast(p) - + reinterpret_cast(clean_pointer(p))); } // Sets the pointer part and the type of the pointee. @@ -841,7 +841,7 @@ private: // unnecessary warnings. // CGAL_precondition(0 <= t && t < 4); Traits::pointer(*ptr) = reinterpret_cast - (reinterpret_cast(clean_pointer((char *) p)) + (int) t); + (reinterpret_cast(clean_pointer((char *) p)) + (int) t); } public: From d07a2c918440cb2589f8d0df633b6215d729c588 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 4 Apr 2019 15:25:01 +0200 Subject: [PATCH 09/11] Remove (GMP|MPFR)_IN_CGAL_AUXILIARY There was a bug in `FindGMP.cmake` and `FindMPFR.cmake`: they were using the undefined macro `cache_set`. I have removed those variables definitions, and wrote the code differently where they were used. --- Installation/CMakeLists.txt | 2 +- Installation/cmake/modules/CGAL_SetupGMP.cmake | 4 ++-- Installation/cmake/modules/FindGMP.cmake | 6 ------ Installation/cmake/modules/FindMPFR.cmake | 5 ----- 4 files changed, 3 insertions(+), 14 deletions(-) diff --git a/Installation/CMakeLists.txt b/Installation/CMakeLists.txt index 4a45bf89485..70d6cae5330 100644 --- a/Installation/CMakeLists.txt +++ b/Installation/CMakeLists.txt @@ -901,7 +901,7 @@ install(PROGRAMS ${scripts} DESTINATION ${CGAL_INSTALL_BIN_DIR}) install(DIRECTORY ${CGAL_MODULES_REL_DIR}/ DESTINATION ${CGAL_INSTALL_CMAKE_DIR} ) install(FILES ${CGAL_MODULES_REL_DIR}/UseCGAL.cmake DESTINATION ${CGAL_INSTALL_CMAKE_DIR} ) -if ( GMP_IN_CGAL_AUXILIARY OR MPFR_IN_CGAL_AUXILIARY ) +if ( IS_DIRECTORY auxiliary/gmp/include AND IS_DIRECTORY auxiliary/gmp/lib ) install(DIRECTORY auxiliary/gmp/include/ DESTINATION ${CGAL_INSTALL_INC_DIR} ) install(DIRECTORY auxiliary/gmp/lib/ DESTINATION ${CGAL_INSTALL_LIB_DIR} ) endif() diff --git a/Installation/cmake/modules/CGAL_SetupGMP.cmake b/Installation/cmake/modules/CGAL_SetupGMP.cmake index 0cfe429e48e..e43737c6abf 100644 --- a/Installation/cmake/modules/CGAL_SetupGMP.cmake +++ b/Installation/cmake/modules/CGAL_SetupGMP.cmake @@ -54,14 +54,14 @@ function(use_CGAL_GMP_support target) return() endif() - if(NOT GMP_IN_CGAL_AUXILIARY) + if(NOT GMP_INCLUDE_DIR STREQUAL "${CGAL_INSTALLATION_PACKAGE_DIR}/auxiliary/gmp/include") target_include_directories(${target} SYSTEM ${keyword} ${GMP_INCLUDE_DIR}) else() target_include_directories(${target} SYSTEM ${keyword} $ $) endif() - if(NOT MPFR_IN_CGAL_AUXILIARY) + if(NOT MPFR_INCLUDE_DIR STREQUAL "${CGAL_INSTALLATION_PACKAGE_DIR}/auxiliary/gmp/include") target_include_directories(${target} SYSTEM ${keyword} ${MPFR_INCLUDE_DIR}) else() target_include_directories(${target} SYSTEM ${keyword} diff --git a/Installation/cmake/modules/FindGMP.cmake b/Installation/cmake/modules/FindGMP.cmake index f3084cc72f7..663203d11c9 100644 --- a/Installation/cmake/modules/FindGMP.cmake +++ b/Installation/cmake/modules/FindGMP.cmake @@ -4,7 +4,6 @@ # GMP_INCLUDE_DIR - the GMP include directory # GMP_LIBRARIES_DIR - directory where the GMP libraries are located # GMP_LIBRARIES - Link these to use GMP -# GMP_IN_CGAL_AUXILIARY - TRUE if the GMP found is the one distributed with CGAL in the auxiliary folder # TODO: support MacOSX @@ -52,8 +51,3 @@ if( NOT GMP_in_cache ) endif() find_package_handle_standard_args(GMP "DEFAULT_MSG" GMP_LIBRARIES GMP_INCLUDE_DIR) - -if ( GMP_INCLUDE_DIR STREQUAL "${CGAL_INSTALLATION_PACKAGE_DIR}/auxiliary/gmp/include" ) - cache_set( GMP_IN_CGAL_AUXILIARY TRUE ) -endif() - diff --git a/Installation/cmake/modules/FindMPFR.cmake b/Installation/cmake/modules/FindMPFR.cmake index cb3c0fc1c73..b21fb1f678e 100644 --- a/Installation/cmake/modules/FindMPFR.cmake +++ b/Installation/cmake/modules/FindMPFR.cmake @@ -3,7 +3,6 @@ # MPFR_INCLUDE_DIR - the MPFR include directory # MPFR_LIBRARIES_DIR - Directory where the MPFR libraries are located # MPFR_LIBRARIES - the MPFR libraries -# MPFR_IN_CGAL_AUXILIARY - TRUE if the MPFR found is the one distributed with CGAL in the auxiliary folder # TODO: support MacOSX @@ -51,7 +50,3 @@ if (NOT MPFR_in_cache) endif() find_package_handle_standard_args(MPFR "DEFAULT_MSG" MPFR_LIBRARIES MPFR_INCLUDE_DIR) - -if ( MPFR_INCLUDE_DIR STREQUAL "${CGAL_INSTALLATION_PACKAGE_DIR}/auxiliary/gmp/include" ) - cache_set( MPFR_IN_CGAL_AUXILIARY TRUE ) -endif() From b1a747b514bf897d3808f4476a545f521cc253d6 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Tue, 2 Apr 2019 16:32:37 +0200 Subject: [PATCH 10/11] Add an conversion operator to tuple into Iterator_range to satisfy all versions of clang. --- STL_Extension/include/CGAL/Iterator_range.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/STL_Extension/include/CGAL/Iterator_range.h b/STL_Extension/include/CGAL/Iterator_range.h index 677aa9c44d2..20a2bc8458b 100644 --- a/STL_Extension/include/CGAL/Iterator_range.h +++ b/STL_Extension/include/CGAL/Iterator_range.h @@ -78,6 +78,15 @@ namespace CGAL { return begin()==end(); } + operator std::tuple() + { + return std::tuple{this->first, this->second}; + } + + operator std::tuple() const + { + return std::tuple{this->first, this->second}; + } }; template From 0cace864cdbbe387a33a2d6b9568b7e64b06378c Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Thu, 4 Apr 2019 15:59:02 +0200 Subject: [PATCH 11/11] Protect new code --- STL_Extension/include/CGAL/Iterator_range.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/STL_Extension/include/CGAL/Iterator_range.h b/STL_Extension/include/CGAL/Iterator_range.h index 20a2bc8458b..708c5c142e3 100644 --- a/STL_Extension/include/CGAL/Iterator_range.h +++ b/STL_Extension/include/CGAL/Iterator_range.h @@ -77,6 +77,7 @@ namespace CGAL { { return begin()==end(); } +#ifndef CGAL_CFG_NO_CPP0X_TUPLE operator std::tuple() { @@ -87,6 +88,8 @@ namespace CGAL { { return std::tuple{this->first, this->second}; } +#endif + }; template