blob: bb2dd1927392d5fb6735843beebe7fc828fefba2 [file] [log] [blame]
# RPM generation, maintaining (remove old rpm) and verification (rpmlint).
#
# To use: INCLUDE(RPM)
# Included: SourceTarball
#
#===================================================================
# Variables:
# DIST_TAG: Current distribution tag such as el5, fc10.
# Default: Distribution tag from rpm --showrc
#
# RPM_BUILD_TOPDIR: Directory of the rpm topdir.
# Default: ${CMAKE_BINARY_DIR}
# RPM_BUILD_SPECS: Directory of spec files.
# Default: ${RPM_BUILD_TOPDIR}/SPECS
# RPM_BUILD_SOURCES: Directory of source (tar.gz or zip) files.
# Default: ${RPM_BUILD_TOPDIR}/SOURCES
# RPM_BUILD_SRPMS: Directory of source rpm files.
# Default: ${RPM_BUILD_TOPDIR}/SRPMS
# RPM_BUILD_RPMS: Directory of generated rpm files.
# Default: ${RPM_BUILD_TOPDIR}/RPMS
# RPM_BUILD_BUILD: Directory for RPM build.
# Default: ${RPM_BUILD_TOPDIR}/BUILD
# RPM_BUILD_BUILDROOT: Directory for RPM build.
# Default: ${RPM_BUILD_TOPDIR}/BUILDROOT
#
# RPM_SOURCE_FILES: Source and patch file for RPM build.
# Default: ${RPM_BUILD_SOURCES}/${PROJECT_NAME}-${PRJ_VER}-Source
# with suffix of either tar.gz, tar.bz2, tgz, tbz, zip
# SRPM_FILE: Generated srpm file.
# Default: ${RPM_BUILD_SRPMS}/${PROJECT_NAME}-${PRJ_VER_FULL}.${DIST_TAG}.src.rpm
# RPM_IS_NO_ARCH: Set it if this rpm is noarch, it also
# hide rpm_mock_i386 and rpm_mock_x86_64 for noarch package
#
# MOCK_DIST_TAG: Prefix of mock configure file, such as "fedora-11", "fedora-rawhide", "epel-5"/
# Default: Convert from DIST_TAG
#
#===================================================================
# Macros:
# GENERATE_SPEC(spec_in)
# spec_in: Spec input file
#
# Generate a RPM spec file using an input file, spec_in
#===================================================================
# Targets:
# srpm: Build srpm (rpmbuild -bs).
# Depends on pack_src.
#
# rpm: Build rpm and srpm (rpmbuild -ba)
# Depends on pack_src.
#
# rpmlint: Run rpmlint to generated rpms.
#
# rpm_mock_i386: Use mock to build i386/i586 rpms.
# Depends on srpm.
#
# rpm_mock_x86_64: Use mock to build x86_64 rpms.
# Depends on srpm.
#
# rpm_remove_old: Remove old rpms.
#
# pkg_remove_old: Remove old source tarballs and rpms.
# Depends on rpm_remove_old
#
INCLUDE(SourceTarball)
SET (SPEC_FILE_WARNING "This file is generated, please modified the .spec.in file instead!")
IF(NOT DEFINED DIST_TAG)
EXECUTE_PROCESS(COMMAND rpm --showrc
COMMAND grep -E "dist[[:space:]]*\\."
COMMAND sed -e "s/^.*dist\\s*\\.//"
COMMAND tr \\n \\t
COMMAND sed -e s/\\t//
OUTPUT_VARIABLE DIST_TAG)
ENDIF(NOT DEFINED DIST_TAG)
IF(NOT DEFINED RPM_BUILD_TOPDIR)
SET(RPM_BUILD_TOPDIR ${CMAKE_BINARY_DIR})
ENDIF(NOT DEFINED RPM_BUILD_TOPDIR)
IF(NOT DEFINED RPM_BUILD_SPECS)
SET(RPM_BUILD_SPECS "${RPM_BUILD_TOPDIR}/SPECS")
ENDIF(NOT DEFINED RPM_BUILD_SPECS)
IF(NOT DEFINED RPM_BUILD_SOURCES)
SET(RPM_BUILD_SOURCES "${RPM_BUILD_TOPDIR}/SOURCES")
ENDIF(NOT DEFINED RPM_BUILD_SOURCES)
IF(NOT DEFINED RPM_BUILD_SRPMS)
SET(RPM_BUILD_SRPMS "${RPM_BUILD_TOPDIR}/SRPMS")
ENDIF(NOT DEFINED RPM_BUILD_SRPMS)
IF(NOT DEFINED RPM_BUILD_RPMS)
SET(RPM_BUILD_RPMS "${RPM_BUILD_TOPDIR}/RPMS")
ENDIF(NOT DEFINED RPM_BUILD_RPMS)
IF(NOT DEFINED RPM_BUILD_BUILD)
SET(RPM_BUILD_BUILD "${RPM_BUILD_TOPDIR}/BUILD")
ENDIF(NOT DEFINED RPM_BUILD_BUILD)
IF(NOT DEFINED RPM_BUILD_BUILDROOT)
SET(RPM_BUILD_BUILDROOT "${RPM_BUILD_TOPDIR}/BUILDROOT")
ENDIF(NOT DEFINED RPM_BUILD_BUILDROOT)
MACRO(GENERATE_SPEC spec_in)
CONFIGURE_FILE(${spec_in} ${RPM_BUILD_SPECS}/${PROJECT_NAME}.spec)
SET_SOURCE_FILES_PROPERTIES(${RPM_BUILD_SPECS}/${PROJECT_NAME}.spec
PROPERTIES GENERATED TRUE
)
ENDMACRO(GENERATE_SPEC spec_in)
IF(NOT DEFINED RPM_SOURCE_FILES)
SET(RPM_SOURCE_FILES ${SOURCE_TARBALL_OUTPUT})
#MESSAGE("RPM_SOURCE_FILES=${RPM_SOURCE_FILES}")
ENDIF(NOT DEFINED RPM_SOURCE_FILES)
IF(NOT DEFINED SRPM_FILE)
SET (SRPM_FILE ${RPM_BUILD_SRPMS}/${PROJECT_NAME}-${PRJ_VER_FULL}.${DIST_TAG}.src.rpm)
ENDIF(NOT DEFINED SRPM_FILE)
IF(NOT DEFINED MOCK_DIST_TAG)
STRING(REGEX MATCH "^fc([1-9][0-9]*)" _fedora_mock_dist "${DIST_TAG}")
STRING(REGEX MATCH "^el([1-9][0-9]*)" _el_mock_dist "${DIST_TAG}")
IF (_fedora_mock_dist)
STRING(REGEX REPLACE "^fc([1-9][0-9]*)" "fedora-\\1" MOCK_DIST_TAG "${DIST_TAG}")
ELSEIF (_el_mock_dist)
STRING(REGEX REPLACE "^el([1-9][0-9]*)" "epel-\\1" MOCK_DIST_TAG "${DIST_TAG}")
ELSE (_fedora_mock_dist)
SET(MOCK_DIST_TAG "fedora-devel")
ENDIF(_fedora_mock_dist)
#MESSAGE ("MOCK_DIST_TAG=${MOCK_DIST_TAG}")
ENDIF(NOT DEFINED MOCK_DIST_TAG)
GET_FILENAME_COMPONENT(rpm_build_sources_basename ${RPM_BUILD_SOURCES} NAME)
GET_FILENAME_COMPONENT(rpm_build_srpms_basename ${RPM_BUILD_SRPMS} NAME)
GET_FILENAME_COMPONENT(rpm_build_rpms_basename ${RPM_BUILD_RPMS} NAME)
GET_FILENAME_COMPONENT(rpm_build_build_basename ${RPM_BUILD_BUILD} NAME)
SET(RPM_IGNORE_FILES "\\\\.rpm$"
"/${rpm_build_sources_basename}/" "/${rpm_build_srpms_basename}/" "/${rpm_build_rpms_basename}/" "/${rpm_build_build_basename}/" "debug.*s.list")
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_NAME}: ${PROJECT_SUMMARY}")
SET(CPACK_SOURCE_IGNORE_FILES ${CPACK_SOURCE_IGNORE_FILES}
${RPM_IGNORE_FILES})
SET(CPACK_PACKAGE_IGNORE_FILES ${CPACK_PACKAGE_IGNORE_FILES}
${RPM_IGNORE_FILES})
#MESSAGE("RPM_IGNORE_FILES=${RPM_IGNORE_FILES}")
#-------------------------------------------------------------------
# RPM build targets
ADD_CUSTOM_TARGET(srpm
COMMAND ${CMAKE_COMMAND} -E make_directory SRPMS
COMMAND rpmbuild-md5 -bs ${RPM_BUILD_SPECS}/${PROJECT_NAME}.spec
--define '_sourcedir ${RPM_BUILD_SOURCES}'
--define '_builddir ${RPM_BUILD_BUILD}'
--define '_srcrpmdir ${RPM_BUILD_SRPMS}'
--define '_rpmdir ${RPM_BUILD_RPMS}'
--define '_specdir ${RPM_BUILD_SPECS}'
DEPENDS ${RPM_BUILD_SPECS}/${PROJECT_NAME}.spec ${RPM_SOURCE_FILES}
)
ADD_CUSTOM_TARGET(rpm
COMMAND ${CMAKE_COMMAND} -E make_directory ${RPM_BUILD_SRPMS}
COMMAND ${CMAKE_COMMAND} -E make_directory ${RPM_BUILD_RPMS}/i386
COMMAND ${CMAKE_COMMAND} -E make_directory ${RPM_BUILD_RPMS}/i586
COMMAND ${CMAKE_COMMAND} -E make_directory ${RPM_BUILD_RPMS}/x86_64
COMMAND ${CMAKE_COMMAND} -E make_directory ${RPM_BUILD_RPMS}/noarch
COMMAND ${CMAKE_COMMAND} -E make_directory ${RPM_BUILD_BUILD}
COMMAND ${CMAKE_COMMAND} -E make_directory ${RPM_BUILD_BUILDROOT}
COMMAND rpmbuild-md5 -ba --buildroot ${RPM_BUILD_BUILDROOT} ${RPM_BUILD_SPECS}/${PROJECT_NAME}.spec
--define '_sourcedir ${RPM_BUILD_SOURCES}'
--define '_builddir ${RPM_BUILD_BUILD}'
--define '_srcrpmdir ${RPM_BUILD_SRPMS}'
--define '_rpmdir ${RPM_BUILD_RPMS}'
--define '_specdir ${RPM_BUILD_SPECS}'
DEPENDS ${RPM_BUILD_SPECS}/${PROJECT_NAME}.spec ${RPM_SOURCE_FILES}
)
ADD_DEPENDENCIES(srpm pack_src)
ADD_DEPENDENCIES(rpm pack_src)
IF(NOT RPM_IS_NOARCH)
ADD_CUSTOM_TARGET(rpm_mock_i386
COMMAND ${CMAKE_COMMAND} -E make_directory RPMS/i386
COMMAND mock -r "${MOCK_DIST_TAG}-i386" --resultdir="${RPM_BUILD_RPMS}/i386" ${SRPM_FILE}
)
ADD_CUSTOM_TARGET(rpm_mock_x86_64
COMMAND ${CMAKE_COMMAND} -E make_directory RPMS/x86_64
COMMAND mock -r "${MOCK_DIST_TAG}-x86_64" --resultdir="${RPM_BUILD_RPMS}/x86_64" ${SRPM_FILE}
)
ADD_DEPENDENCIES(rpm_mock_i386 srpm)
ADD_DEPENDENCIES(rpm_mock_x86_64 srpm)
ENDIF(NOT RPM_IS_NOARCH)
ADD_CUSTOM_TARGET(rpmlint find .
-name '${PROJECT_NAME}*-${PRJ_VER_FULL}.*.rpm'
-print -exec rpmlint '{}' '\\;'
)
ADD_CUSTOM_TARGET(rpm_remove_old
COMMAND find .
-name '${PROJECT_NAME}*.rpm' ! -name '${PROJECT_NAME}*-${PRJ_VER_FULL}.*.rpm'
-print -delete
COMMENT "Removing the old rpms.."
)
ADD_CUSTOM_TARGET(pkg_remove_old
COMMAND find .
-name '${PROJECT_NAME}*.tar.[bg]z*' ! -name '${PROJECT_NAME}-${PRJ_VER}-*.${SOURCE_TARBALL_POSTFIX}'
-print -delete
COMMENT "Removing the old tarballs .."
)
ADD_DEPENDENCIES(pkg_remove_old rpm_remove_old)