https://bugs.gentoo.org/870034 https://bugs.gentoo.org/829690 https://github.com/silnrsi/graphite/pull/44. https://raw.githubusercontent.com/chimera-linux/cports/6d3cabd18bac6f4caaea08eaa928840552711c0c/main/graphite2/patches/clang.patch Obsoletes graphite2-1.3.14-fix-nodefaultlibs.patch whose description was: """ Drop -nodefaultlibs: - graphite is written in C++ which makes avoiding libstdc++ (or libc++) a dubious goal; - this ends up breaking e.g. x86/musl because we need to inject -lssp_nonshared, but it wouldn't be surprising if it broke other exotic targets too. """ This patch is based on the linked one above from Chimera Linux. We have to adapt it a bit because GCC lacks -nostdlib++. Quoting it: "Clang has -nostdlib++, which can be used more effectively than disabling all and then hardcoding linking against libgcc (which we do not have)" --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -105,7 +105,6 @@ set_target_properties(graphite2 PROPERTIES PUBLIC_HEADER "${GRAPHITE_HEADERS}" if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") set_target_properties(graphite2 PROPERTIES COMPILE_FLAGS "-Wall -Wextra -Wno-unknown-pragmas -Wendif-labels -Wshadow -Wctor-dtor-privacy -Wnon-virtual-dtor -fno-rtti -fno-exceptions -fvisibility=hidden -fvisibility-inlines-hidden" - LINK_FLAGS "-nodefaultlibs ${GRAPHITE_LINK_FLAGS}" LINKER_LANGUAGE C) if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86|i.86") add_definitions(-mfpmath=sse -msse2) @@ -114,22 +113,32 @@ if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") add_definitions(-Wno-class-memaccess -Wdouble-promotion) endif() message(STATUS "Compiler ID is: ${CMAKE_CXX_COMPILER_ID}") - if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") - add_definitions(-Wimplicit-fallthrough -Wshorten-64-to-32) - endif() + + include(Graphite) + if (${CMAKE_CXX_COMPILER} MATCHES ".*mingw.*") target_link_libraries(graphite2 kernel32 msvcr90 mingw32 gcc user32) else (${CMAKE_CXX_COMPILER} MATCHES ".*mingw.*") - if (GRAPHITE2_SANITIZERS) - target_link_libraries(graphite2 c gcc_s) - else () - target_link_libraries(graphite2 c gcc) - endif () + if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") + add_definitions(-Wimplicit-fallthrough -Wshorten-64-to-32) + set_target_properties(graphite2 PROPERTIES + LINK_FLAGS "-nostdlib++ ${GRAPHITE_LINK_FLAGS}") + else() + set_target_properties(graphite2 PROPERTIES + LINK_FLAGS "-nodefaultlibs ${GRAPHITE_LINK_FLAGS}") + + if (GRAPHITE2_SANITIZERS) + target_link_libraries(graphite2 c gcc_s) + else() + target_link_libraries(graphite2 c gcc) + endif() + + if (BUILD_SHARED_LIBS) + nolib_test(stdc++ $) + endif () + endif() endif() - include(Graphite) - if (BUILD_SHARED_LIBS) - nolib_test(stdc++ $) - endif () + set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "") if (0) CREATE_LIBTOOL_FILE(graphite2 "/lib${LIB_SUFFIX}") --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -44,15 +44,25 @@ if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows") COMPILE_DEFINITIONS "GRAPHITE2_STATIC;GRAPHITE2_NTRACING${TELEMETRY};_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;UNICODE") else (${CMAKE_SYSTEM_NAME} STREQUAL "Windows") # don't -D GRAPHITE2_STATIC so that tests can see the API symbols in the static library + if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") + set_target_properties(graphite2-base PROPERTIES + LINK_FLAGS "-nostdlib++ ${GRAPHITE_LINK_FLAGS}") + set_target_properties(graphite2-file PROPERTIES + LINK_FLAGS "-nostdlib++ ${GRAPHITE_LINK_FLAGS}") + else() + set_target_properties(graphite2-base PROPERTIES + LINK_FLAGS "-nodefaultlibs ${GRAPHITE_LINK_FLAGS}") + set_target_properties(graphite2-file PROPERTIES + LINK_FLAGS "-nodefaultlibs ${GRAPHITE_LINK_FLAGS}") + endif() + set_target_properties(graphite2-base PROPERTIES COMPILE_FLAGS "-Wall -Wextra -Wno-class-memaccess -fno-rtti -fno-exceptions" COMPILE_DEFINITIONS "GRAPHITE2_NTRACING" - LINK_FLAGS "-nodefaultlibs ${GRAPHITE_LINK_FLAGS}" LINKER_LANGUAGE C) set_target_properties(graphite2-file PROPERTIES COMPILE_FLAGS "-Wall -Wextra -Wno-class-memaccess -fno-rtti -fno-exceptions" COMPILE_DEFINITIONS "GRAPHITE2_NTRACING${TELEMETRY}" - LINK_FLAGS "-nodefaultlibs ${GRAPHITE_LINK_FLAGS}" LINKER_LANGUAGE C) endif()