[CMake] [PATCH] add support for component based spec header in RPM generator

Koecher, Rene Rene.Koecher at wincor-nixdorf.com
Mon Jun 27 05:38:58 EDT 2011


Hi,
while making excessive use of the RPM generator in CMake 2.8.5 I came across a requirement
it could not match out of the box: per-component spec headers.
As it is it seems not to be possible to add to or replace spec-file headers on a
component basis. The Patch below will add this support to CPackRPM.cmake for CMake 2.8.5.
Headers may be defined by setting CPACK_RPM_COMPONENT_<name>_<header>.

-- [snip]--

diff -ru a/Modules/CPackRPM.cmake b/Modules/CPackRPM.cmake
--- a/Modules/CPackRPM.cmake    2011-05-25 17:39:24.000000000 +0200
+++ b/Modules/CPackRPM.cmake    2011-06-27 11:32:33.000000000 +0200
@@ -379,6 +379,28 @@
   ENDIF(CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER})
 ENDFOREACH(_RPM_SPEC_HEADER)

+# check if additional fields for RPM spec header are given *for this component*
+FOREACH(_RPM_SPEC_HEADER URL REQUIRES SUGGESTS PROVIDES OBSOLETES PREFIX)
+  IF(CPACK_RPM_COMPONENT_${CPACK_RPM_PACKAGE_COMPONENT}_${_RPM_SPEC_HEADER})
+    STRING(LENGTH ${_RPM_SPEC_HEADER} _PACKAGE_HEADER_STRLENGTH)
+    MATH(EXPR _PACKAGE_HEADER_STRLENGTH "${_PACKAGE_HEADER_STRLENGTH} - 1")
+    STRING(SUBSTRING ${_RPM_SPEC_HEADER} 1 ${_PACKAGE_HEADER_STRLENGTH} _PACKAGE_HEADER_TAIL)
+    STRING(TOLOWER "${_PACKAGE_HEADER_TAIL}" _PACKAGE_HEADER_TAIL)
+    STRING(SUBSTRING ${_RPM_SPEC_HEADER} 0 1 _PACKAGE_HEADER_NAME)
+    SET(_PACKAGE_HEADER_NAME "${_PACKAGE_HEADER_NAME}${_PACKAGE_HEADER_TAIL}")
+    IF(CPACK_RPM_PACKAGE_DEBUG)
+      MESSAGE("CPackRPM:Debug: User defined ${_PACKAGE_HEADER_NAME} for ${CPACK_RPM_PACKAGE_COMPONENT}:\n ${CPACK_RPM_COMPONENT_${CPACK_RPM_PACKAGE_COMPONENT}_${_RPM_SPEC_HEADER}}")
+    ENDIF(CPACK_RPM_PACKAGE_DEBUG)
+    IF(TMP_RPM_${_RPM_SPEC_HEADER})
+      SET(TMP_RPM_${_RPM_SPEC_HEADER} "${TMP_RPM_${_RPM_SPEC_HEADER}} ${CPACK_RPM_COMPONENT_${CPACK_RPM_PACKAGE_COMPONENT}_${_RPM_SPEC_HEADER}}")
+    ELSE(TMP_RPM_${_RPM_SPEC_HEADER})
+      SET(TMP_RPM_${_RPM_SPEC_HEADER} "${_PACKAGE_HEADER_NAME}: ${CPACK_RPM_COMPONENT_${CPACK_RPM_PACKAGE_COMPONENT}_${_RPM_SPEC_HEADER}}")
+    ENDIF(TMP_RPM_${_RPM_SPEC_HEADER})
+  ENDIF(CPACK_RPM_COMPONENT_${CPACK_RPM_PACKAGE_COMPONENT}_${_RPM_SPEC_HEADER})
+ENDFOREACH(_RPM_SPEC_HEADER)
+
+
+
 # CPACK_RPM_SPEC_INSTALL_POST
 # May be used to define a RPM post intallation script
 # for example setting it to "/bin/true" may prevent

-- [snip]--

Mit freundlichen Grüßen / Best Regards

René Köcher

Forschung & Entwicklung
________________________________

WINCOR NIXDORF Technology GmbH
Am Vogelherd 67

D - 98693 Ilmenau, Germany

Tel.:       +49 (0) 36 77 862-233
Fax:        +49 (0) 36 77 862-199
E-Mail:     rene.koecher at wincor-nixdorf.com
            www.wincor-nixdorf.com
________________________________




WINCOR NIXDORF Technology GmbH
Sitz der Gesellschaft: Paderborn
Registergericht Paderborn HRB 3523
Geschäftsführer: Eckard Heidloff, Jörn Förster
Steuernummer: 339/5884/0020 - Ust-ID Nr.: DE243233085

Diese E-Mail enthält vertrauliche Informationen.
Wenn Sie nicht der richtige Adressat sind oder diese E-Mail irrtümlich erhalten haben,
informieren Sie bitte sofort den Absender und vernichten Sie diese E-Mail.
Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieser E-Mail ist nicht gestattet.

This e-mail may contain confidential information.
If you are not the intended recipient (or have received this e-mail in error)
please notify the sender immediately and destroy this e-mail.
Any unauthorised copying, disclosure or distribution of the material in this e-mail is strictly forbidden.


More information about the CMake mailing list