1*1c60b9acSAndroid Build Coastguard Worker# 2*1c60b9acSAndroid Build Coastguard Worker# - Find tools needed for building RPM Packages 3*1c60b9acSAndroid Build Coastguard Worker# on Linux systems and defines macro that helps to 4*1c60b9acSAndroid Build Coastguard Worker# build source or binary RPM, the MACRO assumes 5*1c60b9acSAndroid Build Coastguard Worker# CMake 2.4.x which includes CPack support. 6*1c60b9acSAndroid Build Coastguard Worker# CPack is used to build tar.gz source tarball 7*1c60b9acSAndroid Build Coastguard Worker# which may be used by a custom user-made spec file. 8*1c60b9acSAndroid Build Coastguard Worker# 9*1c60b9acSAndroid Build Coastguard Worker# - Define RPMTools_ADD_RPM_TARGETS which defines 10*1c60b9acSAndroid Build Coastguard Worker# two (top-level) CUSTOM targets for building 11*1c60b9acSAndroid Build Coastguard Worker# source and binary RPMs 12*1c60b9acSAndroid Build Coastguard Worker# 13*1c60b9acSAndroid Build Coastguard Worker# Those CMake macros are provided by the TSP Developer Team 14*1c60b9acSAndroid Build Coastguard Worker# https://savannah.nongnu.org/projects/tsp 15*1c60b9acSAndroid Build Coastguard Worker# 16*1c60b9acSAndroid Build Coastguard Worker 17*1c60b9acSAndroid Build Coastguard WorkerIF (WIN32) 18*1c60b9acSAndroid Build Coastguard Worker MESSAGE(STATUS "RPM tools not available on Win32 systems") 19*1c60b9acSAndroid Build Coastguard WorkerENDIF(WIN32) 20*1c60b9acSAndroid Build Coastguard Worker 21*1c60b9acSAndroid Build Coastguard WorkerIF (UNIX) 22*1c60b9acSAndroid Build Coastguard Worker # Look for RPM builder executable 23*1c60b9acSAndroid Build Coastguard Worker FIND_PROGRAM(RPMTools_RPMBUILD_EXECUTABLE 24*1c60b9acSAndroid Build Coastguard Worker NAMES rpmbuild 25*1c60b9acSAndroid Build Coastguard Worker PATHS "/usr/bin;/usr/lib/rpm" 26*1c60b9acSAndroid Build Coastguard Worker PATH_SUFFIXES bin 27*1c60b9acSAndroid Build Coastguard Worker DOC "The RPM builder tool") 28*1c60b9acSAndroid Build Coastguard Worker 29*1c60b9acSAndroid Build Coastguard Worker IF (RPMTools_RPMBUILD_EXECUTABLE) 30*1c60b9acSAndroid Build Coastguard Worker MESSAGE(STATUS "Looking for RPMTools... - found rpmuild is ${RPMTools_RPMBUILD_EXECUTABLE}") 31*1c60b9acSAndroid Build Coastguard Worker SET(RPMTools_RPMBUILD_FOUND "YES") 32*1c60b9acSAndroid Build Coastguard Worker GET_FILENAME_COMPONENT(RPMTools_BINARY_DIRS ${RPMTools_RPMBUILD_EXECUTABLE} PATH) 33*1c60b9acSAndroid Build Coastguard Worker ELSE (RPMTools_RPMBUILD_EXECUTABLE) 34*1c60b9acSAndroid Build Coastguard Worker SET(RPMTools_RPMBUILD_FOUND "NO") 35*1c60b9acSAndroid Build Coastguard Worker MESSAGE(STATUS "Looking for RPMTools... - rpmbuild NOT FOUND") 36*1c60b9acSAndroid Build Coastguard Worker ENDIF (RPMTools_RPMBUILD_EXECUTABLE) 37*1c60b9acSAndroid Build Coastguard Worker 38*1c60b9acSAndroid Build Coastguard Worker # Detect if CPack was included or not 39*1c60b9acSAndroid Build Coastguard Worker IF (NOT DEFINED "CPACK_PACKAGE_NAME") 40*1c60b9acSAndroid Build Coastguard Worker MESSAGE(FATAL_ERROR "CPack was not included, you should include CPack before Using RPMTools") 41*1c60b9acSAndroid Build Coastguard Worker ENDIF (NOT DEFINED "CPACK_PACKAGE_NAME") 42*1c60b9acSAndroid Build Coastguard Worker 43*1c60b9acSAndroid Build Coastguard Worker IF (RPMTools_RPMBUILD_FOUND) 44*1c60b9acSAndroid Build Coastguard Worker SET(RPMTools_FOUND TRUE) 45*1c60b9acSAndroid Build Coastguard Worker # 46*1c60b9acSAndroid Build Coastguard Worker # - first arg (ARGV0) is RPM name 47*1c60b9acSAndroid Build Coastguard Worker # - second arg (ARGV1) is the RPM spec file path [optional] 48*1c60b9acSAndroid Build Coastguard Worker # - third arg (ARGV2) is the RPM ROOT DIRECTORY used to build RPMs [optional] 49*1c60b9acSAndroid Build Coastguard Worker # 50*1c60b9acSAndroid Build Coastguard Worker MACRO(RPMTools_ADD_RPM_TARGETS RPMNAME) 51*1c60b9acSAndroid Build Coastguard Worker 52*1c60b9acSAndroid Build Coastguard Worker # 53*1c60b9acSAndroid Build Coastguard Worker # If no spec file is provided create a minimal one 54*1c60b9acSAndroid Build Coastguard Worker # 55*1c60b9acSAndroid Build Coastguard Worker IF ("${ARGV1}" STREQUAL "") 56*1c60b9acSAndroid Build Coastguard Worker SET(SPECFILE_PATH "${CMAKE_BINARY_DIR}/${RPMNAME}.spec") 57*1c60b9acSAndroid Build Coastguard Worker ELSE ("${ARGV1}" STREQUAL "") 58*1c60b9acSAndroid Build Coastguard Worker SET(SPECFILE_PATH "${ARGV1}") 59*1c60b9acSAndroid Build Coastguard Worker ENDIF("${ARGV1}" STREQUAL "") 60*1c60b9acSAndroid Build Coastguard Worker 61*1c60b9acSAndroid Build Coastguard Worker # Verify whether if RPM_ROOTDIR was provided or not 62*1c60b9acSAndroid Build Coastguard Worker IF("${ARGV2}" STREQUAL "") 63*1c60b9acSAndroid Build Coastguard Worker SET(RPM_ROOTDIR ${CMAKE_BINARY_DIR}/RPM) 64*1c60b9acSAndroid Build Coastguard Worker ELSE ("${ARGV2}" STREQUAL "") 65*1c60b9acSAndroid Build Coastguard Worker SET(RPM_ROOTDIR "${ARGV2}") 66*1c60b9acSAndroid Build Coastguard Worker ENDIF("${ARGV2}" STREQUAL "") 67*1c60b9acSAndroid Build Coastguard Worker MESSAGE(STATUS "RPMTools:: Using RPM_ROOTDIR=${RPM_ROOTDIR}") 68*1c60b9acSAndroid Build Coastguard Worker 69*1c60b9acSAndroid Build Coastguard Worker # Prepare RPM build tree 70*1c60b9acSAndroid Build Coastguard Worker FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}) 71*1c60b9acSAndroid Build Coastguard Worker FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/tmp) 72*1c60b9acSAndroid Build Coastguard Worker FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/BUILD) 73*1c60b9acSAndroid Build Coastguard Worker FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/RPMS) 74*1c60b9acSAndroid Build Coastguard Worker FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/SOURCES) 75*1c60b9acSAndroid Build Coastguard Worker FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/SPECS) 76*1c60b9acSAndroid Build Coastguard Worker FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/SRPMS) 77*1c60b9acSAndroid Build Coastguard Worker 78*1c60b9acSAndroid Build Coastguard Worker # 79*1c60b9acSAndroid Build Coastguard Worker # We check whether if the provided spec file is 80*1c60b9acSAndroid Build Coastguard Worker # to be configure or not. 81*1c60b9acSAndroid Build Coastguard Worker # 82*1c60b9acSAndroid Build Coastguard Worker IF ("${ARGV1}" STREQUAL "") 83*1c60b9acSAndroid Build Coastguard Worker SET(SPECFILE_PATH "${RPM_ROOTDIR}/SPECS/${RPMNAME}.spec") 84*1c60b9acSAndroid Build Coastguard Worker SET(SPECFILE_NAME "${RPMNAME}.spec") 85*1c60b9acSAndroid Build Coastguard Worker MESSAGE(STATUS "No Spec file given generate a minimal one --> ${RPM_ROOTDIR}/SPECS/${RPMNAME}.spec") 86*1c60b9acSAndroid Build Coastguard Worker FILE(WRITE ${RPM_ROOTDIR}/SPECS/${RPMNAME}.spec 87*1c60b9acSAndroid Build Coastguard Worker "# -*- rpm-spec -*- 88*1c60b9acSAndroid Build Coastguard WorkerSummary: ${RPMNAME} 89*1c60b9acSAndroid Build Coastguard WorkerName: ${RPMNAME} 90*1c60b9acSAndroid Build Coastguard WorkerVersion: ${CPACK_PACKAGE_VERSION} 91*1c60b9acSAndroid Build Coastguard WorkerRelease: 1 92*1c60b9acSAndroid Build Coastguard WorkerLicense: Unknown 93*1c60b9acSAndroid Build Coastguard WorkerGroup: Unknown 94*1c60b9acSAndroid Build Coastguard WorkerSource: ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz 95*1c60b9acSAndroid Build Coastguard WorkerBuildRoot: %{_tmppath}/%{name}-%{CPACK_PACKAGE_VERSION}-1-root 96*1c60b9acSAndroid Build Coastguard WorkerBuildRequires: cmake 97*1c60b9acSAndroid Build Coastguard Worker 98*1c60b9acSAndroid Build Coastguard Worker%define prefix /opt/${RPMNAME}-%{version} 99*1c60b9acSAndroid Build Coastguard Worker%define rpmprefix $RPM_BUILD_ROOT%{prefix} 100*1c60b9acSAndroid Build Coastguard Worker%define srcdirname %{name}-%{version} 101*1c60b9acSAndroid Build Coastguard Worker 102*1c60b9acSAndroid Build Coastguard Worker%description 103*1c60b9acSAndroid Build Coastguard Worker${RPMNAME} : No description for now 104*1c60b9acSAndroid Build Coastguard Worker 105*1c60b9acSAndroid Build Coastguard Worker%prep 106*1c60b9acSAndroid Build Coastguard Worker%setup -q -n %{srcdirname} 107*1c60b9acSAndroid Build Coastguard Worker 108*1c60b9acSAndroid Build Coastguard Worker%build 109*1c60b9acSAndroid Build Coastguard Workercd .. 110*1c60b9acSAndroid Build Coastguard Workerrm -rf build_tree 111*1c60b9acSAndroid Build Coastguard Workermkdir build_tree 112*1c60b9acSAndroid Build Coastguard Workercd build_tree 113*1c60b9acSAndroid Build Coastguard Workercmake -DCMAKE_INSTALL_PREFIX=%{rpmprefix} ../%{srcdirname} 114*1c60b9acSAndroid Build Coastguard Workermake %{?_smp_mflags} 115*1c60b9acSAndroid Build Coastguard Worker 116*1c60b9acSAndroid Build Coastguard Worker%install 117*1c60b9acSAndroid Build Coastguard Workercd ../build_tree 118*1c60b9acSAndroid Build Coastguard Workermake install 119*1c60b9acSAndroid Build Coastguard Worker 120*1c60b9acSAndroid Build Coastguard Worker%clean 121*1c60b9acSAndroid Build Coastguard Workerrm -rf %{srcdirname} 122*1c60b9acSAndroid Build Coastguard Workerrm -rf build_tree 123*1c60b9acSAndroid Build Coastguard Worker 124*1c60b9acSAndroid Build Coastguard Worker%files 125*1c60b9acSAndroid Build Coastguard Worker%defattr(-,root,root,-) 126*1c60b9acSAndroid Build Coastguard Worker%dir %{prefix} 127*1c60b9acSAndroid Build Coastguard Worker%{prefix}/* 128*1c60b9acSAndroid Build Coastguard Worker 129*1c60b9acSAndroid Build Coastguard Worker%changelog 130*1c60b9acSAndroid Build Coastguard Worker* Wed Feb 28 2007 Erk <[email protected]> 131*1c60b9acSAndroid Build Coastguard Worker Generated by CMake UseRPMTools macros" 132*1c60b9acSAndroid Build Coastguard Worker ) 133*1c60b9acSAndroid Build Coastguard Worker 134*1c60b9acSAndroid Build Coastguard Worker ELSE ("${ARGV1}" STREQUAL "") 135*1c60b9acSAndroid Build Coastguard Worker SET(SPECFILE_PATH "${ARGV1}") 136*1c60b9acSAndroid Build Coastguard Worker 137*1c60b9acSAndroid Build Coastguard Worker GET_FILENAME_COMPONENT(SPECFILE_EXT ${SPECFILE_PATH} EXT) 138*1c60b9acSAndroid Build Coastguard Worker IF ("${SPECFILE_EXT}" STREQUAL ".spec") 139*1c60b9acSAndroid Build Coastguard Worker # This is a 'ready-to-use' spec file which does not need to be CONFIGURED 140*1c60b9acSAndroid Build Coastguard Worker GET_FILENAME_COMPONENT(SPECFILE_NAME ${SPECFILE_PATH} NAME) 141*1c60b9acSAndroid Build Coastguard Worker MESSAGE(STATUS "Simple copy spec file <${SPECFILE_PATH}> --> <${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME}>") 142*1c60b9acSAndroid Build Coastguard Worker CONFIGURE_FILE( 143*1c60b9acSAndroid Build Coastguard Worker ${SPECFILE_PATH} 144*1c60b9acSAndroid Build Coastguard Worker ${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME} 145*1c60b9acSAndroid Build Coastguard Worker COPYONLY) 146*1c60b9acSAndroid Build Coastguard Worker ELSE ("${SPECFILE_EXT}" STREQUAL ".spec") 147*1c60b9acSAndroid Build Coastguard Worker # This is a to-be-configured spec file 148*1c60b9acSAndroid Build Coastguard Worker GET_FILENAME_COMPONENT(SPECFILE_NAME ${SPECFILE_PATH} NAME_WE) 149*1c60b9acSAndroid Build Coastguard Worker SET(SPECFILE_NAME "${SPECFILE_NAME}.spec") 150*1c60b9acSAndroid Build Coastguard Worker MESSAGE(STATUS "Configuring spec file <${SPECFILE_PATH}> --> <${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME}>") 151*1c60b9acSAndroid Build Coastguard Worker CONFIGURE_FILE( 152*1c60b9acSAndroid Build Coastguard Worker ${SPECFILE_PATH} 153*1c60b9acSAndroid Build Coastguard Worker ${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME} 154*1c60b9acSAndroid Build Coastguard Worker @ONLY) 155*1c60b9acSAndroid Build Coastguard Worker ENDIF ("${SPECFILE_EXT}" STREQUAL ".spec") 156*1c60b9acSAndroid Build Coastguard Worker ENDIF("${ARGV1}" STREQUAL "") 157*1c60b9acSAndroid Build Coastguard Worker 158*1c60b9acSAndroid Build Coastguard Worker ADD_CUSTOM_TARGET(${RPMNAME}_srpm 159*1c60b9acSAndroid Build Coastguard Worker COMMAND cpack -G TGZ --config CPackSourceConfig.cmake 160*1c60b9acSAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E copy ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz ${RPM_ROOTDIR}/SOURCES 161*1c60b9acSAndroid Build Coastguard Worker COMMAND ${RPMTools_RPMBUILD_EXECUTABLE} -bs --define=\"_topdir ${RPM_ROOTDIR}\" --buildroot=${RPM_ROOTDIR}/tmp ${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME} 162*1c60b9acSAndroid Build Coastguard Worker ) 163*1c60b9acSAndroid Build Coastguard Worker 164*1c60b9acSAndroid Build Coastguard Worker ADD_CUSTOM_TARGET(${RPMNAME}_rpm 165*1c60b9acSAndroid Build Coastguard Worker COMMAND cpack -G TGZ --config CPackSourceConfig.cmake 166*1c60b9acSAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E copy ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz ${RPM_ROOTDIR}/SOURCES 167*1c60b9acSAndroid Build Coastguard Worker COMMAND ${RPMTools_RPMBUILD_EXECUTABLE} -bb --define=\"_topdir ${RPM_ROOTDIR}\" --buildroot=${RPM_ROOTDIR}/tmp ${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME} 168*1c60b9acSAndroid Build Coastguard Worker ) 169*1c60b9acSAndroid Build Coastguard Worker ENDMACRO(RPMTools_ADD_RPM_TARGETS) 170*1c60b9acSAndroid Build Coastguard Worker 171*1c60b9acSAndroid Build Coastguard Worker ELSE (RPMTools_RPMBUILD_FOUND) 172*1c60b9acSAndroid Build Coastguard Worker SET(RPMTools FALSE) 173*1c60b9acSAndroid Build Coastguard Worker ENDIF (RPMTools_RPMBUILD_FOUND) 174*1c60b9acSAndroid Build Coastguard Worker 175*1c60b9acSAndroid Build Coastguard WorkerENDIF (UNIX) 176*1c60b9acSAndroid Build Coastguard Worker 177