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 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
|
# Copyright (C) 2003-2008 TSP Developer Team <https://savannah.nongnu.org/projects/tsp>
# Copyright (C) 2018 Konstantin Pugin <ria.freelander@gmail.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 2.1 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# - Find tools needed for building RPM Packages
# on Linux systems and defines macro that helps to
# build source or binary RPM, the MACRO assumes
# CMake 2.4.x which includes CPack support.
# CPack is used to build tar.gz source tarball
# which may be used by a custom user-made spec file.
#
# - Define RPMTools_ADD_RPM_TARGETS which defines
# two (top-level) CUSTOM targets for building
# source and binary RPMs
#
IF (WIN32)
MESSAGE(STATUS "RPM tools not available on Win32 systems")
ENDIF(WIN32)
IF (UNIX)
# Look for RPM builder executable
FIND_PROGRAM(RPMTools_RPMBUILD_EXECUTABLE
NAMES rpmbuild
PATHS "/usr/bin;/usr/lib/rpm"
PATH_SUFFIXES bin
DOC "The RPM builder tool")
IF (RPMTools_RPMBUILD_EXECUTABLE)
MESSAGE(STATUS "Looking for RPMTools... - found rpmuild is ${RPMTools_RPMBUILD_EXECUTABLE}")
SET(RPMTools_RPMBUILD_FOUND "YES")
GET_FILENAME_COMPONENT(RPMTools_BINARY_DIRS ${RPMTools_RPMBUILD_EXECUTABLE} PATH)
ELSE (RPMTools_RPMBUILD_EXECUTABLE)
SET(RPMTools_RPMBUILD_FOUND "NO")
MESSAGE(STATUS "Looking for RPMTools... - rpmbuild NOT FOUND")
ENDIF (RPMTools_RPMBUILD_EXECUTABLE)
# Detect if CPack was included or not
IF (NOT DEFINED "CPACK_PACKAGE_NAME")
MESSAGE(FATAL_ERROR "CPack was not included, you should include CPack before Using RPMTools")
ENDIF (NOT DEFINED "CPACK_PACKAGE_NAME")
IF (RPMTools_RPMBUILD_FOUND)
SET(RPMTools_FOUND TRUE)
#
# - first arg (ARGV0) is RPM name
# - second arg (ARGV1) is the RPM spec file path [optional]
# - third arg (ARGV2) is the RPM ROOT DIRECTORY used to build RPMs [optional]
#
MACRO(RPMTools_ADD_RPM_TARGETS RPMNAME)
#
# If no spec file is provided create a minimal one
#
IF ("${ARGV1}" STREQUAL "")
SET(SPECFILE_PATH "${CMAKE_BINARY_DIR}/${RPMNAME}.spec")
ELSE ("${ARGV1}" STREQUAL "")
SET(SPECFILE_PATH "${ARGV1}")
ENDIF("${ARGV1}" STREQUAL "")
# Verify whether if RPM_ROOTDIR was provided or not
IF("${ARGV2}" STREQUAL "")
SET(RPM_ROOTDIR ${CMAKE_BINARY_DIR}/RPM)
ELSE ("${ARGV2}" STREQUAL "")
SET(RPM_ROOTDIR "${ARGV2}")
ENDIF("${ARGV2}" STREQUAL "")
MESSAGE(STATUS "RPMTools:: Using RPM_ROOTDIR=${RPM_ROOTDIR}")
# Prepare RPM build tree
FILE(MAKE_DIRECTORY ${RPM_ROOTDIR})
FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/tmp)
FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/BUILD)
FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/RPMS)
FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/SOURCES)
FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/SPECS)
FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/SRPMS)
#
# We check whether if the provided spec file is
# to be configure or not.
#
IF ("${ARGV1}" STREQUAL "")
SET(SPECFILE_PATH "${RPM_ROOTDIR}/SPECS/${RPMNAME}.spec")
SET(SPECFILE_NAME "${RPMNAME}.spec")
MESSAGE(STATUS "No Spec file given generate a minimal one --> ${RPM_ROOTDIR}/SPECS/${RPMNAME}.spec")
FILE(WRITE ${RPM_ROOTDIR}/SPECS/${RPMNAME}.spec
"# -*- rpm-spec -*-
Summary: ${RPMNAME}
Name: ${RPMNAME}
Version: ${PACKAGE_VERSION}
Release: 1
License: Unknown
Group: Unknown
Source: ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
BuildRequires: cmake
%define prefix /opt/${RPMNAME}-%{version}
%define rpmprefix $RPM_BUILD_ROOT%{prefix}
%define srcdirname %{name}-%{version}-Source
%description
${RPMNAME} : No description for now
%prep
%setup -q -n %{srcdirname}
%build
cd ..
rm -rf build_tree
mkdir build_tree
cd build_tree
cmake -DCMAKE_INSTALL_PREFIX=%{rpmprefix} ../%{srcdirname}
make
%install
cd ../build_tree
make install
%clean
rm -rf %{srcdirname}
rm -rf build_tree
%files
%defattr(-,root,root,-)
%dir %{prefix}
%{prefix}/*
%changelog
* Wed Feb 28 2007 Erk <eric.noulard@gmail.com>
Generated by CMake UseRPMTools macros"
)
ELSE ("${ARGV1}" STREQUAL "")
SET(SPECFILE_PATH "${ARGV1}")
GET_FILENAME_COMPONENT(SPECFILE_EXT ${SPECFILE_PATH} EXT)
IF ("${SPECFILE_EXT}" STREQUAL ".spec")
# This is a 'ready-to-use' spec file which does not need to be CONFIGURED
GET_FILENAME_COMPONENT(SPECFILE_NAME ${SPECFILE_PATH} NAME)
MESSAGE(STATUS "Simple copy spec file <${SPECFILE_PATH}> --> <${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME}>")
CONFIGURE_FILE(
${SPECFILE_PATH}
${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME}
COPYONLY)
ELSE ("${SPECFILE_EXT}" STREQUAL ".spec")
# This is a to-be-configured spec file
GET_FILENAME_COMPONENT(SPECFILE_NAME ${SPECFILE_PATH} NAME_WE)
SET(SPECFILE_NAME "${SPECFILE_NAME}.spec")
MESSAGE(STATUS "Configuring spec file <${SPECFILE_PATH}> --> <${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME}>")
CONFIGURE_FILE(
${SPECFILE_PATH}
${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME}
@ONLY)
ENDIF ("${SPECFILE_EXT}" STREQUAL ".spec")
ENDIF("${ARGV1}" STREQUAL "")
ADD_CUSTOM_TARGET(${RPMNAME}_srpm
COMMAND cpack -G TGZ --config CPackSourceConfig.cmake
COMMAND ${CMAKE_COMMAND} -E copy ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz ${RPM_ROOTDIR}/SOURCES
COMMAND ${RPMTools_RPMBUILD_EXECUTABLE} -bs --define=\"_topdir ${RPM_ROOTDIR}\" --buildroot=${RPM_ROOTDIR}/tmp ${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME}
)
ADD_CUSTOM_TARGET(${RPMNAME}_rpm
COMMAND cpack -G TGZ --config CPackSourceConfig.cmake
COMMAND ${CMAKE_COMMAND} -E copy ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz ${RPM_ROOTDIR}/SOURCES
COMMAND ${RPMTools_RPMBUILD_EXECUTABLE} -bb --define=\"_topdir ${RPM_ROOTDIR}\" --buildroot=${RPM_ROOTDIR}/tmp ${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME}
)
ENDMACRO(RPMTools_ADD_RPM_TARGETS)
ELSE (RPMTools_RPMBUILD_FOUND)
SET(RPMTools FALSE)
ENDIF (RPMTools_RPMBUILD_FOUND)
ENDIF (UNIX)
|