diff --git a/package/exiv2/0001-cmake-compilerFlags.cmake-properly-detect-availabili.patch b/package/exiv2/0001-cmake-compilerFlags.cmake-properly-detect-availabili.patch new file mode 100644 index 0000000000..7b9fa48815 --- /dev/null +++ b/package/exiv2/0001-cmake-compilerFlags.cmake-properly-detect-availabili.patch @@ -0,0 +1,58 @@ +From 2f6d2e5795382f0d6e22f5aea52e8104110d24ad Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sun, 19 Jul 2020 16:29:15 +0200 +Subject: [PATCH] cmake/compilerFlags.cmake: properly detect availability of + flags + +Instead of relying on fragile and complex logic to decide if a +compiler flag is available or not, use the check_c_compiler_flag() +macro provided by the CMake standard library. + +This for example avoids using -fcf-protection on architectures that +don't support this option. + +[Upstream: https://github.com/Exiv2/exiv2/pull/1252. The submitted +patch is slightly different than this one, due to other changes +between 0.27.3 and master.] +Signed-off-by: Thomas Petazzoni +--- + cmake/compilerFlags.cmake | 18 +++++++++++------- + 1 file changed, 11 insertions(+), 7 deletions(-) + +diff --git a/cmake/compilerFlags.cmake b/cmake/compilerFlags.cmake +index 0418aa61..be430977 100644 +--- a/cmake/compilerFlags.cmake ++++ b/cmake/compilerFlags.cmake +@@ -1,4 +1,5 @@ + # These flags applies to exiv2lib, the applications, and to the xmp code ++include(CheckCCompilerFlag) + + if ( MINGW OR UNIX OR MSYS ) # MINGW, Linux, APPLE, CYGWIN + if (${CMAKE_CXX_COMPILER_ID} STREQUAL GNU) +@@ -25,13 +26,16 @@ if ( MINGW OR UNIX OR MSYS ) # MINGW, Linux, APPLE, CYGWIN + + # This fails under Fedora, MinGW GCC 8.3.0 and CYGWIN/MSYS 9.3.0 + if (NOT (MINGW OR CMAKE_HOST_SOLARIS OR CYGWIN OR MSYS) ) +- if (COMPILER_IS_GCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0) +- add_compile_options(-fstack-clash-protection -fcf-protection) +- endif() +- +- if( (COMPILER_IS_GCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 5.0) # Not in GCC 4.8 +- OR (COMPILER_IS_CLANG AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 3.7) # Not in Clang 3.4.2 +- ) ++ check_c_compiler_flag(-fstack-clash-protection HAS_FSTACK_CLASH_PROTECTION) ++ check_c_compiler_flag(-fcf-protection HAS_FCF_PROTECTION) ++ check_c_compiler_flag(-fstack-protector-strong HAS_FSTACK_PROTECTOR_STRONG) ++ if(HAS_FSTACK_CLASH_PROTECTION) ++ add_compile_options(-fstack-clash-protection) ++ endif() ++ if(GCC_HAS_FCF_PROTECTION) ++ add_compile_options(-fcf-protection) ++ endif() ++ if(GCC_HAS_FSTACK_PROTECTOR_STRONG) + add_compile_options(-fstack-protector-strong) + endif() + endif() +--- +2.26.2 +