>From 7a15d1c9a908afe429c1aba1c27516d18bdea299 Mon Sep 17 00:00:00 2001 From: DRC Date: Tue, 26 Feb 2013 03:37:12 -0600 Subject: [PATCH 1/4] Add BUILD_STATIC feature from TigerVNC to (optionally) prevent FLTK from depending on libgcc and libstdc++ --- CMakeLists.txt | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index a1ee285..7d9d94b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -150,6 +150,49 @@ mark_as_advanced(LIB_CAIRO LIB_fontconfig LIB_freetype) mark_as_advanced(LIB_GL LIB_MesaGL) mark_as_advanced(LIB_jpeg LIB_png LIB_zlib) +# This ensures that we don't depend on libstdc++ or libgcc +if(CMAKE_COMPILER_IS_GNUCXX AND NOT APPLE AND NOT CYGWIN) + option(BUILD_STATIC + "Link statically against libgcc and libstdc++, if possible" OFF) + if(BUILD_STATIC) + # For some reason, simply passing ${CMAKE_CXX_FLAGS} to the compiler in + # execute_process() doesn't work. Grrr... + if(CMAKE_SIZEOF_VOID_P MATCHES 8) + execute_process(COMMAND ${CMAKE_CXX_COMPILER} -m64 + --print-file-name=libstdc++.a OUTPUT_VARIABLE LIBSTDCPLUSPLUS + RESULT_VARIABLE RESULT) + else() + execute_process(COMMAND ${CMAKE_CXX_COMPILER} -m32 + --print-file-name=libstdc++.a OUTPUT_VARIABLE LIBSTDCPLUSPLUS + RESULT_VARIABLE RESULT) + endif() + string(REGEX REPLACE "\n" "" LIBSTDCPLUSPLUS ${LIBSTDCPLUSPLUS}) + if(RESULT MATCHES 0 AND LIBSTDCPLUSPLUS) + message(STATUS "Linking with static libstdc++:\n ${LIBSTDCPLUSPLUS}") + file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/staticlib) + execute_process(COMMAND ${CMAKE_COMMAND} -E remove + ${CMAKE_BINARY_DIR}/staticlib/libstdc++.a) + if(MINGW) + execute_process(COMMAND ${CMAKE_COMMAND} -E copy + ${LIBSTDCPLUSPLUS} ${CMAKE_BINARY_DIR}/staticlib/libstdc++.a) + else() + execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink + ${LIBSTDCPLUSPLUS} ${CMAKE_BINARY_DIR}/staticlib/libstdc++.a) + endif() + set(CMAKE_EXE_LINKER_FLAGS + "${CMAKE_EXE_LINKER_FLAGS} -L${CMAKE_BINARY_DIR}/staticlib") + set(CMAKE_SHARED_LINKER_FLAGS + "${CMAKE_SHARED_LINKER_FLAGS} -L${CMAKE_BINARY_DIR}/staticlib") + else() + message(WARNING Cannot find static libstdc++. TigerVNC will depend on dynamic libstdc++.) + endif() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc") + set(CMAKE_SHARED_LINKER_FLAGS + "${CMAKE_SHARED_LINKER_FLAGS} -static-libgcc") + endif() +endif() + ####################################################################### # functions include(CheckFunctionExists) -- 1.8.1.3