summaryrefslogtreecommitdiffstats
path: root/cmake/Internal/CPack/CPackRPM.cmake
blob: cd1d3e22a52be2fef17a47cb905daf7b6652d604 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#
# Wrapper for CPackRPM.cmake
#

IF(NOT DEFINED RPM_RECOMMENDS)
  EXECUTE_PROCESS(COMMAND rpm --recommends ERROR_QUIET RESULT_VARIABLE RPM_RECOMMENDS)
  MESSAGE("CPackRPM:Debug: Testing rpm --recommends: ${RPM_RECOMMENDS}")
ENDIF()

#
# Support for per-component LICENSE and VENDOR
#
# per component values, if present, are copied into global CPACK_RPM_PACKAGE_xxx
#
macro(set_from_component WHAT)
  set(orig_CPACK_RPM_PACKAGE_${WHAT} ${CPACK_RPM_PACKAGE_${WHAT}})
  if(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_${WHAT})
    set(CPACK_RPM_PACKAGE_${WHAT} ${CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_${WHAT}})
  endif()
endmacro()
macro(restore WHAT)
  set(CPACK_RPM_PACKAGE_${WHAT} ${orig_CPACK_RPM_PACKAGE_${WHAT}})
endmacro()

foreach (WHAT SUMMARY DESCRIPTION)
  if(CPACK_RPM_PACKAGE_COMPONENT AND
     NOT CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_${WHAT})
    message(FATAL_ERROR "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_${WHAT} is not defined")
  endif()
endforeach()

set_from_component(LICENSE)
set_from_component(VENDOR)
set_from_component(VERSION)

#
# Support for the %posttrans scriptlet
#
# the scriptlet, if present, is appended (together with the %posttrans tag)
# to the pre-uninstall scriptlet
#
if(CMAKE_VERSION VERSION_LESS 3.18)
  set(base_time "PRE")
  set(base_type "UNINSTALL")
  set(base_var CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_${base_time}_${base_type}_SCRIPT_FILE)
  set(acc)

  macro(read_one_file time_ type_ tag_)
    set(var CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_${time_}_${type_}_SCRIPT_FILE)
    if (${var})
      file(READ ${${var}} content)
      set(acc "${tag_}\n${content}\n\n${acc}")
    endif()
  endmacro()

  read_one_file("POST" "TRANS" "%posttrans")
  if (acc)
    set(orig_${base_var} ${${base_var}})
    read_one_file(${base_time} ${base_type} "")
    set(${base_var} ${CPACK_TOPLEVEL_DIRECTORY}/SPECS/${CPACK_RPM_PACKAGE_COMPONENT}_${base_time}_${base_type}.scriptlet)
    file(WRITE ${${base_var}} "${acc}")
  endif()
endif(CMAKE_VERSION VERSION_LESS 3.18)

#
# Support for the Recommends: tag.
# We don't use Suggests: so here he hijack Suggests: variable
# to implement Recommends:
#
IF (CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_RECOMMENDS)
  IF (RPM_RECOMMENDS EQUAL 0) # exit code 0 means ok
    SET(TMP_RPM_SUGGESTS "Recommends: ${CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_RECOMMENDS}")
  ELSE() # rpm is too old to recommend
    SET(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_REQUIRES
     "${CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_REQUIRES} ${CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_RECOMMENDS}")
  ENDIF()
ENDIF()

# load the original CPackRPM.cmake
set(orig_CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH})
unset(CMAKE_MODULE_PATH)
if (CMAKE_VERSION VERSION_GREATER "3.12.99")
  include(Internal/CPack/CPackRPM)
else()
  include(CPackRPM)
endif()
set(CMAKE_MODULE_PATH ${orig_CMAKE_MODULE_PATH})

restore(LICENSE)
restore(VENDOR)
restore(VERSION)
if(${orig_${base_var}})
  set(${base_var} ${orig_${base_var}})
endif()

# per-component cleanup
foreach(_RPM_SPEC_HEADER URL REQUIRES SUGGESTS PROVIDES OBSOLETES PREFIX CONFLICTS AUTOPROV AUTOREQ AUTOREQPROV)
  unset(TMP_RPM_${_RPM_SPEC_HEADER})
  unset(CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP)
endforeach()