Skip to content

Commit

Permalink
apacheGH-39930: [C++] Use Requires instead of Libs for system RE2 in …
Browse files Browse the repository at this point in the history
…arrow.pc (apache#39932)

### Rationale for this change

We chose Libs{,.private} with libre2.a for system RE2 in apacheGH-10626. Because "Require{,.private} re2" may add "-std=c++11". If "-std=c++11" was added, users can't build Apache Arrow C++ because Apache Arrow C++ requires C++17 or later.

But this approach doesn't work with RE2 2024-06-01 or later because it at least requires Abseil. If we keep the Libs{,.private} approach, we also need to add Abseil libraries to Libs{,.private}. But it's unmaintainable.

### What changes are included in this PR?

Let's use "Requires{,.private} re2" instead of Libs{,.private}. I hope recent re2.pc doesn't add "-std=c++11".

### Are these changes tested?

Yes.

### Are there any user-facing changes?

Yes.
* Closes: apache#39930

Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
  • Loading branch information
kou authored and dgreiss committed Feb 17, 2024
1 parent 739a073 commit 3a41571
Showing 1 changed file with 5 additions and 10 deletions.
15 changes: 5 additions & 10 deletions cpp/cmake_modules/ThirdpartyToolchain.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -2594,16 +2594,11 @@ macro(build_re2)
endmacro()

if(ARROW_WITH_RE2)
# Don't specify "PC_PACKAGE_NAMES re2" here because re2.pc may
# include -std=c++11. It's not compatible with C source and C++
# source not uses C++ 11.
resolve_dependency(re2 HAVE_ALT TRUE)
if(${re2_SOURCE} STREQUAL "SYSTEM" AND ARROW_BUILD_STATIC)
get_target_property(RE2_TYPE re2::re2 TYPE)
if(NOT RE2_TYPE STREQUAL "INTERFACE_LIBRARY")
string(APPEND ARROW_PC_LIBS_PRIVATE " $<TARGET_FILE:re2::re2>")
endif()
endif()
resolve_dependency(re2
HAVE_ALT
TRUE
PC_PACKAGE_NAMES
re2)
add_definitions(-DARROW_WITH_RE2)
endif()

Expand Down

0 comments on commit 3a41571

Please sign in to comment.