From f80b11a701cb395e9201f384bc9198d3703669b7 Mon Sep 17 00:00:00 2001 From: Anel Husakovic Date: Thu, 28 May 2020 12:23:09 +0200 Subject: MDEV-14899: CMake: Missing BYPRODUCT or OUTPUT - Multiconfiguration build - Patch is applying `CMAKE_CFG_INTDIR` variable used for multiconfiguraiton during the build. It is related to Ninja only, make shouldn't be affected since configuration variable is evaluated to `.` only. - Culprit for this MDEV is `TOKUDB` plugin. - Patch is using proper configuration option in case of `Ninja` and out-of-source: 1. command `cmake ../../10.1/ -DCMAKE_BUILD_TYPE=Debug -DCMAKE_{C_COMPILER=gcc,CXX_COMPILER=g++}-9 -G Ninja` or 2. command `cmake ../10.1 -DPLUGIN_TOKUDB=DYNAMIC -G Ninja` on the clean workspace will generate output: ``` storage/tokudb/PerconaFT/Debug/snappy/lib/libsnappy.a storage/tokudb/PerconaFT/Debug/xz/lib/liblzma.a ``` In case without multiconfiguration above will be evaluted to of `.`: ``` storage/tokudb/PerconaFT/./snappy/lib/libsnappy.a storage/tokudb/PerconaFT/./xz/lib/liblzma.a ``` So here is changed `PREFIX` of libdir to proper option (at has to be some in case predefined (Debug, Release) in Ninja case. - Result of the patch: There is no warning any more during compilation: ``` REST support is ON CMake Deprecation Warning at cmake/for_clients.cmake:15 (CMAKE_POLICY): The OLD behavior for policy CMP0007 will be removed from a future version of CMake. The cmake-policies(7) manual explains that the OLD behaviors of all policies are deprecated and that a policy should be set to OLD only under specific short-term circumstances. Projects should be ported to the NEW behavior and not rely on setting a policy to OLD. Call Stack (most recent call first): CMakeLists.txt:447 (INCLUDE) -- Configuring done -- Generating done -- Build files have been written to: /home/anel/mariadb/builds/10.1 ``` And during the build phase libraries are created as well: ``` ---------------------------------------------------------------------- Libraries have been installed in: /home/anel/mariadb/builds/test-before-push-10.1/storage/tokudb/PerconaFT/Debug/xz/lib If you ever happen to want to link against installed libraries in a given directory, LIBDIR, you must either use libtool, and specify the full pathname of the library, or use the `-LLIBDIR' flag during linking and do at least one of the following: - add LIBDIR to the `LD_LIBRARY_PATH' environment variable during execution - add LIBDIR to the `LD_RUN_PATH' environment variable during linking - use the `-Wl,-rpath -Wl,LIBDIR' linker flag - have your system administrator add LIBDIR to `/etc/ld.so.conf' See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages. ---------------------------------------------------------------------- test -z "/home/anel/mariadb/builds/test-before-push-10.1/storage/tokudb/PerconaFT/Debug/xz/share/doc/xz" || /bin/mkdir -p "/home/anel/mariadb/builds/test-before-push-10.1/storage/tokudb/PerconaFT/Debug/xz/share/doc/xz" test -z "/home/anel/mariadb/builds/test-before-push-10.1/storage/tokudb/PerconaFT/Debug/xz/lib/pkgconfig" || /bin/mkdir -p "/home/anel/mariadb/builds/test-before-push-10.1/storage/tokudb/PerconaFT/Debug/xz/lib/pkgconfig" /usr/bin/install -c -m 644 liblzma.pc '/home/anel/mariadb/builds/test-before-push-10.1/storage/tokudb/PerconaFT/Debug/xz/lib/pkgconfig' make[2]: Leaving directory '/home/anel/mariadb/builds/test-before-push-10.1/storage/tokudb/PerconaFT/Debug/xz/src/build_lzma-build/src/liblzma' make[1]: Leaving directory '/home/anel/mariadb/builds/test-before-push-10.1/storage/tokudb/PerconaFT/Debug/xz/src/build_lzma-build/src/liblzma' make: Leaving directory '/home/anel/mariadb/builds/test-before-push-10.1/storage/tokudb/PerconaFT/Debug/xz/src/build_lzma-build/src/liblzma' [50/50] Linking CXX executable storage/tokudb/PerconaFT/tools/ftverify ``` --- .../PerconaFT/cmake_modules/TokuThirdParty.cmake | 51 ++++++++++++---------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/storage/tokudb/PerconaFT/cmake_modules/TokuThirdParty.cmake b/storage/tokudb/PerconaFT/cmake_modules/TokuThirdParty.cmake index b312111a3a2..0c87d1bc805 100644 --- a/storage/tokudb/PerconaFT/cmake_modules/TokuThirdParty.cmake +++ b/storage/tokudb/PerconaFT/cmake_modules/TokuThirdParty.cmake @@ -16,10 +16,13 @@ set(XZ_SOURCE_DIR "${TokuDB_SOURCE_DIR}/third_party/xz-4.999.9beta" CACHE FILEPA if (NOT EXISTS "${XZ_SOURCE_DIR}/configure") message(FATAL_ERROR "Can't find the xz sources. Please check them out to ${XZ_SOURCE_DIR} or modify XZ_SOURCE_DIR.") endif () +set(MY_CFG_INTDIR ${CMAKE_CFG_INTDIR}) if (CMAKE_GENERATOR STREQUAL Ninja) ## ninja doesn't understand "$(MAKE)" set(SUBMAKE_COMMAND make) + ## CMAKE_CFG_INTDIR is evaluated to '.', use ${CMAKE_BUILD_TYPE} for out of source + set(MY_CFG_INTDIR ${CMAKE_BUILD_TYPE}) else () ## use "$(MAKE)" for submakes so they can use the jobserver, doesn't ## seem to break Xcode... @@ -28,17 +31,18 @@ endif () FILE(GLOB XZ_ALL_FILES ${XZ_SOURCE_DIR}/*) ExternalProject_Add(build_lzma - PREFIX xz + PREFIX "${MY_CFG_INTDIR}/xz" DOWNLOAD_COMMAND cp -a "${XZ_ALL_FILES}" "/" CONFIGURE_COMMAND "/configure" ${xz_configure_opts} - "--prefix=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz" - "--libdir=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/lib" + "--prefix=${CMAKE_CURRENT_BINARY_DIR}/${MY_CFG_INTDIR}/xz" + "--libdir=${CMAKE_CURRENT_BINARY_DIR}/${MY_CFG_INTDIR}/xz/lib" BUILD_COMMAND ${SUBMAKE_COMMAND} -C src/liblzma INSTALL_COMMAND ${SUBMAKE_COMMAND} -C src/liblzma install + BUILD_BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/${MY_CFG_INTDIR}/xz/lib/liblzma.a" ) FILE(GLOB_RECURSE XZ_ALL_FILES_RECURSIVE ${XZ_SOURCE_DIR}/*) ExternalProject_Add_Step(build_lzma reclone_src # Names of project and custom step @@ -48,28 +52,28 @@ ExternalProject_Add_Step(build_lzma reclone_src # Names of project and custom st ) set_source_files_properties( - "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma.h" - "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/base.h" - "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/bcj.h" - "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/block.h" - "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/check.h" - "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/container.h" - "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/delta.h" - "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/filter.h" - "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/index.h" - "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/index_hash.h" - "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/lzma.h" - "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/stream_flags.h" - "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/subblock.h" - "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/version.h" - "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/vli.h" + "${CMAKE_CURRENT_BINARY_DIR}/${MY_CFG_INTDIR}/xz/include/lzma.h" + "${CMAKE_CURRENT_BINARY_DIR}/${MY_CFG_INTDIR}/xz/include/lzma/base.h" + "${CMAKE_CURRENT_BINARY_DIR}/${MY_CFG_INTDIR}/xz/include/lzma/bcj.h" + "${CMAKE_CURRENT_BINARY_DIR}/${MY_CFG_INTDIR}/xz/include/lzma/block.h" + "${CMAKE_CURRENT_BINARY_DIR}/${MY_CFG_INTDIR}/xz/include/lzma/check.h" + "${CMAKE_CURRENT_BINARY_DIR}/${MY_CFG_INTDIR}/xz/include/lzma/container.h" + "${CMAKE_CURRENT_BINARY_DIR}/${MY_CFG_INTDIR}/xz/include/lzma/delta.h" + "${CMAKE_CURRENT_BINARY_DIR}/${MY_CFG_INTDIR}/xz/include/lzma/filter.h" + "${CMAKE_CURRENT_BINARY_DIR}/${MY_CFG_INTDIR}/xz/include/lzma/index.h" + "${CMAKE_CURRENT_BINARY_DIR}/${MY_CFG_INTDIR}/xz/include/lzma/index_hash.h" + "${CMAKE_CURRENT_BINARY_DIR}/${MY_CFG_INTDIR}/xz/include/lzma/lzma.h" + "${CMAKE_CURRENT_BINARY_DIR}/${MY_CFG_INTDIR}/xz/include/lzma/stream_flags.h" + "${CMAKE_CURRENT_BINARY_DIR}/${MY_CFG_INTDIR}/xz/include/lzma/subblock.h" + "${CMAKE_CURRENT_BINARY_DIR}/${MY_CFG_INTDIR}/xz/include/lzma/version.h" + "${CMAKE_CURRENT_BINARY_DIR}/${MY_CFG_INTDIR}/xz/include/lzma/vli.h" PROPERTIES GENERATED TRUE) -include_directories("${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include") +include_directories("${CMAKE_CURRENT_BINARY_DIR}/${MY_CFG_INTDIR}/xz/include") add_library(lzma STATIC IMPORTED) set_target_properties(lzma PROPERTIES IMPORTED_LOCATION - "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/lib/liblzma.a") + "${CMAKE_CURRENT_BINARY_DIR}/${MY_CFG_INTDIR}/xz/lib/liblzma.a") add_dependencies(lzma build_lzma) @@ -81,7 +85,7 @@ endif () FILE(GLOB SNAPPY_ALL_FILES ${SNAPPY_SOURCE_DIR}/*) ExternalProject_Add(build_snappy - PREFIX snappy + PREFIX "${MY_CFG_INTDIR}/snappy" DOWNLOAD_COMMAND cp -a "${SNAPPY_ALL_FILES}" "/" CMAKE_ARGS @@ -95,6 +99,7 @@ ExternalProject_Add(build_snappy -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} ${USE_PROJECT_CMAKE_MODULE_PATH} + BUILD_BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/${MY_CFG_INTDIR}/snappy/lib/libsnappy.a" ) FILE(GLOB_RECURSE SNAPPY_ALL_FILES_RECURSIVE ${SNAPPY_SOURCE_DIR}/*) ExternalProject_Add_Step(build_snappy reclone_src # Names of project and custom step @@ -103,9 +108,9 @@ ExternalProject_Add_Step(build_snappy reclone_src # Names of project and custom DEPENDS ${SNAPPY_ALL_FILES_RECURSIVE} # Files on which this step depends ) -include_directories("${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/snappy/include") +include_directories("${CMAKE_CURRENT_BINARY_DIR}/${MY_CFG_INTDIR}/snappy/include") add_library(snappy STATIC IMPORTED) set_target_properties(snappy PROPERTIES IMPORTED_LOCATION - "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/snappy/lib/libsnappy.a") + "${CMAKE_CURRENT_BINARY_DIR}/${MY_CFG_INTDIR}/snappy/lib/libsnappy.a") add_dependencies(snappy build_snappy) -- cgit v1.2.1