Skip to content

Commit b12f149

Browse files
committed
MDEV-7066 No Source RPMs ... (and so no "yum-builddep MariaDB-server" either)
automatic BuildRequires for source RPM: for every FILEPATH and "Have library XXX" cached variable, detect what rpm package it comes from and add it to the list of dependencies. That is, the source RPM will BuildRequire all those packages that were found by cmake when the source RPM was built. Presumably, our CMakeLists.txt won't check for libraries that aren't needed for a build. It supports libraries/executables/files found with FIND_LIBRARY FIND_FILE FIND_PROGRAM CHECK_LIBRARY_EXISTS
1 parent ecc2711 commit b12f149

File tree

3 files changed

+43
-2
lines changed

3 files changed

+43
-2
lines changed

CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,8 @@ IF(UNIX)
499499
INSTALL_DOCUMENTATION(Docs/INSTALL-BINARY Docs/README-wsrep COMPONENT Readme)
500500
ENDIF()
501501

502+
INCLUDE(build_depends)
503+
502504
INCLUDE(CPack)
503505

504506
IF(WIN32 AND SIGNCODE)

cmake/build_configurations/mysql_release.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,8 @@ IF(WIN32)
8989
ELSEIF(RPM)
9090
SET(WITH_SSL system CACHE STRING "")
9191
SET(WITH_ZLIB system CACHE STRING "")
92-
SET(CHECKMODULE /usr/bin/checkmodule CACHE STRING "")
93-
SET(SEMODULE_PACKAGE /usr/bin/semodule_package CACHE STRING "")
92+
SET(CHECKMODULE /usr/bin/checkmodule CACHE FILEPATH "")
93+
SET(SEMODULE_PACKAGE /usr/bin/semodule_package CACHE FILEPATH "")
9494
SET(WITH_LIBARCHIVE ON CACHE STRING "")
9595
ELSEIF(DEB)
9696
SET(WITH_SSL system CACHE STRING "")

cmake/build_depends.cmake

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
IF(RPM)
2+
MACRO(FIND_DEP V)
3+
SET(out ${V}_DEP)
4+
IF (NOT DEFINED ${out})
5+
IF(EXISTS ${${V}} AND NOT IS_DIRECTORY ${${V}})
6+
EXECUTE_PROCESS(COMMAND ${ARGN} RESULT_VARIABLE res OUTPUT_VARIABLE O OUTPUT_STRIP_TRAILING_WHITESPACE)
7+
ELSE()
8+
SET(res 1)
9+
ENDIF()
10+
IF (res)
11+
SET(O)
12+
ELSE()
13+
MESSAGE(STATUS "Need ${O} for ${${V}}")
14+
ENDIF()
15+
SET(${out} ${O} CACHE INTERNAL "Package that contains ${${V}}" FORCE)
16+
ENDIF()
17+
ENDMACRO()
18+
19+
GET_CMAKE_PROPERTY(ALL_VARS CACHE_VARIABLES)
20+
FOREACH (V ${ALL_VARS})
21+
GET_PROPERTY(H CACHE ${V} PROPERTY HELPSTRING)
22+
IF (H MATCHES "^Have library [^/]" AND ${V})
23+
STRING(REGEX REPLACE "^Have library " "" L ${H})
24+
SET(V ${L}_LIBRARY)
25+
FIND_LIBRARY(${V} ${L})
26+
ENDIF()
27+
GET_PROPERTY(T CACHE ${V} PROPERTY TYPE)
28+
IF ((T STREQUAL FILEPATH OR V MATCHES "^CMAKE_COMMAND$") AND ${V} MATCHES "^/")
29+
IF (RPM)
30+
FIND_DEP(${V} rpm -q --qf "%{NAME}" -f ${${V}})
31+
ELSE() # must be DEB
32+
MESSAGE(FATAL_ERROR "Not implemented")
33+
ENDIF ()
34+
SET(BUILD_DEPS ${BUILD_DEPS} ${${V}_DEP})
35+
ENDIF()
36+
ENDFOREACH()
37+
LIST(REMOVE_DUPLICATES BUILD_DEPS)
38+
STRING(REPLACE ";" " " CPACK_RPM_BUILDREQUIRES "${BUILD_DEPS}")
39+
ENDIF(RPM)

0 commit comments

Comments
 (0)