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