xref: /aosp_15_r20/external/libwebsockets/cmake/UseRPMTools.cmake (revision 1c60b9aca93fdbc9b5f19b2d2194c91294b22281)
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