-find_path (SAFEC_INCLUDE_DIR
- NAMES libsafec/safe_lib.h
-)
-if (SAFEC_INCLUDE_DIR)
- find_library(SAFEC_LIBRARIES
- NAMES safec-1.0
- )
-else()
- set(SAFEC_INCLUDE_DIR "")
-endif()
+find_package(PkgConfig)
+
+# LibSafeC is currently incompatible with Clang - https://github.com/rurban/safeclib/issues/58
+if (PKG_CONFIG_EXECUTABLE AND NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+ execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --list-all
+ OUTPUT_VARIABLE _pkgconfig_list_result
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ string(REGEX MATCH "safec-([0-9]+\.[0-9])+" MATCHED ${_pkgconfig_list_result})
+ if (MATCHED)
+ set(SAFEC_VERSION ${CMAKE_MATCH_1})
+ pkg_check_modules(PC_SAFEC safec-${SAFEC_VERSION})
-if (SAFEC_LIBRARIES)
- set(HAVE_SAFEC "1")
+ find_path(SAFEC_INCLUDE_DIR
+ NAMES libsafec/safe_lib.h
+ HINTS ${PC_SAFEC_INCLUDEDIR} ${PC_SAFEC_INCLUDEDIRS}
+ NO_SYSTEM_ENVIRONMENT_PATH
+ )
+ find_library(SAFEC_LIBRARIES
+ NAMES safec-${SAFEC_VERSION}
+ HINTS ${PC_SAFEC_LIBDIR} ${PC-SAFEC_LIBRARY_DIRS}
+ )
+ endif()
endif()
include(FindPackageHandleStandardArgs)
-
find_package_handle_standard_args(SafeC
REQUIRED_VARS SAFEC_INCLUDE_DIR SAFEC_LIBRARIES
)
+mark_as_advanced(
+ SAFEC_INCLUDE_DIR
+ SAFEC_LIBRARIES
+)
find_package(DBLATEX QUIET)
find_package(Ruby QUIET 1.8.7)
find_package(HS QUIET 4.4.0)
-find_package(SafeC QUIET)
+if (ENABLE_SAFEC)
+ find_package(SafeC QUIET)
+endif (ENABLE_SAFEC)
find_package(Flatbuffers QUIET)
find_package(ICONV QUIET)
find_package(UUID QUIET)
* lzma >= 5.1.2 from http://tukaani.org/xz/ for decompression of SWF and
PDF files
-* safec from https://sourceforge.net/projects/safeclib/ for runtime bounds
+* safec from https://github.com/rurban/safeclib/ for runtime bounds
checks on certain legacy C-library calls
* source-highlight from http://www.gnu.org/software/src-highlite/ to
#ifndef UTILS_SAFEC_H
#define UTILS_SAFEC_H
-//FIXIT-M combine these macros in the build foo
-#if defined(HAVE_SAFEC) && defined(ENABLE_SAFEC)
+#ifdef HAVE_SAFEC
extern "C"
{
-#include <libsafec/safe_lib.h>
+#include <libsafec/safe_mem_lib.h>
+#include <libsafec/safe_str_lib.h>
}
#else