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