]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
cmake: include ${fmt_INCLUDE_DIR} instead 31761/head
authorKefu Chai <kchai@redhat.com>
Wed, 20 Nov 2019 14:00:12 +0000 (22:00 +0800)
committerKefu Chai <kchai@redhat.com>
Wed, 20 Nov 2019 16:35:52 +0000 (00:35 +0800)
we should not hardwire the include path to the fmt submodule,
there is chance that we are using libfmt installed in system.

in my case, crimson fails to link because the the ABI of libfmt
is not compatible with that of libfmt included as a submodule

: && ccache /usr/bin/g++-9 .... \
 -o bin/crimson-osd  -Wl,-rpath,::::::::::::::::::: lib/libcrimson-common.a lib/libcrimson-os.a lib/libcrimson.a \
  .... \
  /usr/lib/x86_64-linux-gnu/libfmt.a \
  ...

/usr/bin/ld: src/crimson/osd/CMakeFiles/crimson-osd.dir/main.cc.o: in function `void fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> >
>::write_double<double>(double, fmt::v5::basic_format_specs<char
> const&)':
/var/ssd/ceph/build/../src/fmt/include/fmt/format.h:2822: undefined reference to `bool fmt::v5::internal::grisu2_format<double, 0>(double, fmt::v5::internal::basic_buffer<char>&, int, bool, int&)'
/usr/bin/ld: src/crimson/osd/CMakeFiles/crimson-osd.dir/main.cc.o: in function `void fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::write_double<long
double>(long double, fmt::v5::basic_format_
specs<char> const&)':
/var/ssd/ceph/build/../src/fmt/include/fmt/format.h:2822: undefined reference to `bool fmt::v5::internal::grisu2_format<double, 0>(double, fmt::v5::internal::basic_buffer<char>&, int, bool, int&)'
/usr/bin/ld: src/crimson/osd/CMakeFiles/crimson-osd.dir/osd.cc.o: in function `void fmt::v5::basic_writer<fmt::v5::output_range<std::back_insert_iterator<fmt::v5::internal::basic_buffer<char> >, char>
>::write_double<double>(double, fmt::
v5::basic_format_specs<char> const&)':
/var/ssd/ceph/build/../src/fmt/include/fmt/format.h:2822: undefined reference to `bool fmt::v5::internal::grisu2_format<double, 0>(double, fmt::v5::internal::basic_buffer<char>&, int, bool, int&)'
/usr/bin/ld: src/crimson/osd/CMakeFiles/crimson-osd.dir/osd.cc.o: in function `void fmt::v5::basic_writer<fmt::v5::output_range<std::back_insert_iterator<fmt::v5::internal::basic_buffer<char> >, char>
>::write_double<long double>(long dou
ble, fmt::v5::basic_format_specs<char> const&)':
/var/ssd/ceph/build/../src/fmt/include/fmt/format.h:2822: undefined reference to `bool fmt::v5::internal::grisu2_format<double, 0>(double, fmt::v5::internal::basic_buffer<char>&, int, bool, int&)'
collect2: error: ld returned 1 exit status

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/CMakeLists.txt

index 9ccada1f53892f6974db84af2654e51c7264f7b7..9a6f48f6fd422d1692c12fbc16e7f9324f222cf9 100644 (file)
@@ -288,11 +288,13 @@ include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/src/xxHash")
 include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/src/rapidjson/include")
 
 find_package(fmt 5.2.1 QUIET)
-if(NOT fmt_FOUND)
+if(fmt_FOUND)
+  include_directories(SYSTEM "${fmt_INCLUDE_DIR}")
+else()
   message(STATUS "Could not find fmt, will build it")
   add_subdirectory(fmt)
+  include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/src/fmt/include")
 endif()
-include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/src/fmt/include")
 
 if(WITH_SEASTAR)
   find_package(c-ares 1.13.0 QUIET)