VirtualBox

source: vbox/trunk/src/VBox/Installer/linux/rpm/rules@ 72293

Last change on this file since 72293 was 72145, checked in by vboxsync, 7 years ago

rpm/rules: accept with Python 2.6 from EPEL for EL5 builds.
bugref:9165: webtools: create scripts for (re-)creating chroot build jails
Our current EL5 chroots seem to have custom Python 2.7 builds on them. Since
EPEL have Python 2.6 packages for EL5 which do the job with almost no hassle,
change the rules script to pick them up.

  • Property svn:eol-style set to LF
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 10.8 KB
Line 
1#!/usr/bin/make -f
2# $Id: rules 72145 2018-05-07 15:21:07Z vboxsync $
3## @file
4# VirtualBox rules.
5#
6
7#
8# Copyright (C) 2006-2017 Oracle Corporation
9#
10# This file is part of VirtualBox Open Source Edition (OSE), as
11# available from http://www.virtualbox.org. This file is free software;
12# you can redistribute it and/or modify it under the terms of the GNU
13# General Public License (GPL) as published by the Free Software
14# Foundation, in version 2 as it comes in the "COPYING" file of the
15# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
16# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
17#
18
19# possible overrides:
20# OSE=1 force VBOX_OSE
21# NOPARALLEL=1 compile with -j1
22# LINUX=<dir> compile vboxdrv against Linux found in <dir>
23# VERBOSE=1 verbose build
24# DEBUG=1 debug build
25# NOSUBVER=1 disable generation of the sub-version field (which is
26# either the subversion rev [if available] or the build date)
27# NODOCS=1 don't build docs, use precompiled UserManual.pdf and
28# VirtualBox.chm from $(vboxroot)/prebuild
29# NOMODS=1 don't build any module
30# NOQT=1 don't build the Qt GUI
31# NOSDL=1 don't build VBoxSDL
32# EFI=1 include the EFI binary from prebuild
33# VERSUFFIX=<suffix> set a particular package version suffix (e.g. _customer)
34# HEADLESS=1 build the headless version
35# VNC=1 build VNC code
36# NOWEBSVC=1 don't build the webservice API, default for OSE
37# STAGEDISO=<path> don't build the VBoxAdditions, use the precompiled .iso
38# PKGDIR=<path> where to store the final package(s)
39# svn_revision=xxx do not depend on subversion being available, but use this
40# hard-coded revision number instead
41#
42# NODOCS will also be set if UserManual*.pdf and VirtualBox*.chm are placed in
43# $(vboxroot)/prebuild. STAGEDISO will be set if VBoxGuestAdditions.iso is
44# placed there. Wine will not be required to be available if both NODOCS and
45# STAGEDISO are set.
46
47ifeq ($(wildcard rpm/rules),)
48$(error call rpm/rules from src/VBox/Installer/linux)
49endif
50
51ifneq ($(wildcard /usr/lib/rpm/find-requires.ksyms),)
52# don't allow to check for kernel syms, otherwise we depend on specific kernel versions!
53$(error /usr/lib/rpm/find-requires.ksyms must not be installed)
54endif
55ifneq ($(wildcard /usr/lib/rpm/find-supplements.ksyms),)
56# same for openSUSE
57$(error /usr/lib/rpm/find-supplements.ksyms must not be installed)
58endif
59ifeq ($(shell if grep -q '^/usr/lib/virtualbox' /etc/permissions* 2>/dev/null; then echo yes; fi),yes)
60# make sure openSUSE permissions fixes don't interfere with us
61$(error Fix /etc/permissions*)
62endif
63ifeq ($(shell if grep -q '^%disttag' /usr/lib/rpm/macros.d/mandriva 2>/dev/null; then echo yes; fi),yes)
64$(error Fix /usr/lib/rpm/macros.d/mandriva)
65endif
66
67verpkg := VirtualBox-5.2
68current := $(shell pwd)
69vboxroot := $(shell while ! test -r configure && ! test "$PWD" = "/"; do cd ..; done; pwd)
70pkgdir := $(if $(PKGDIR),$(PKGDIR),$(shell cd $(vboxroot)/..; pwd))
71builddir := $(vboxroot)/rpm/builddir
72rpmlib := $(shell if [ `uname -m` = "x86_64" ]; then echo "lib64"; else echo "lib"; fi)
73chrarch := $(shell if [ `uname -m` = "x86_64" ]; then echo "amd64"; else echo "x86"; fi)
74verfile := $(builddir)/version-generated.mk
75ose := $(if $(OSE),1,$(if $(wildcard $(vboxroot)/src/VBox/RDP/server),,1))
76-include $(vboxroot)/SVN_REVISION
77svnrev :=$(if $(svn_revision),$(svn_revision),)
78
79NOMODS ?= $(ose)
80NOQT ?= $(HEADLESS)
81NOWEBSVC ?= $(ose)
82NODOCS ?= $(if $(wildcard $(vboxroot)/prebuild/UserManual*.pdf),$(if $(wildcard $(vboxroot)/prebuild/VirtualBox*.chm),1,),)
83STAGEDISO ?= $(if $(wildcard $(vboxroot)/prebuild/VBoxGuestAdditions.iso),$(vboxroot)/prebuild,)
84NOWINE := $(if $(NODOCS),$(if $(STAGEDISO),1,),)$(ose)
85
86ifneq ($(MAKECMDGOALS),clean)
87 rpmrel := $(subst ol,el,$(subst rhel,el,$(subst centos,el,$(shell cat /etc/distname))))
88 ifeq ($(rpmrel),)
89 # look for fedora
90 rpmrel := $(shell cat /etc/fedora-release 2> /dev/null | sed -e 's/^Fedora *release *\([1-9][0-9]*\) .*/fedora\1/')
91 endif
92 ifeq ($(rpmrel),)
93 # look for OL
94 rpmrel := $(shell cat /etc/enterprise-release 2> /dev/null | sed -ne 's/^Enterprise Linux[a-zA-Z ]*\([1-9][0-9]*\).*/el\1/p')
95 endif
96 ifeq ($(rpmrel),)
97 # look for CentOS
98 rpmrel := $(shell cat /etc/redhat-release 2> /dev/null | sed -ne 's/^CentOS[a-zA-Z ]*\([1-9][0-9]*\).*/el\1/p')
99 endif
100 ifeq ($(rpmrel),)
101 # look for Red Hat
102 rpmrel := $(shell cat /etc/redhat-release 2> /dev/null | sed -ne 's/^Red Hat[a-zA-Z ]*\([1-9][0-9]*\).*/el\1/p')
103 endif
104 ifeq ($(rpmrel),)
105 $(error failed to detect the release type. Add /etc/distname or hack the detection.)
106 endif
107
108 rpmdist := $(strip $(shell grep $(rpmrel) $(current)/distributions_rpm | cut -d'=' -f2))
109 ifeq ($(rpmdist),)
110 $(error Cannot detect package distribution (rpmrel=$(rpmrel)))
111 endif
112
113 ifeq ($(filter-out el5 el6 el7 fedora18 fedora19 fedora20 fedora21 fedora22 fedora24 fedora25 fedora26,$(rpmrel)),)
114 rpmspec := rpm_redhat
115 endif
116 ifeq ($(filter-out openSUSE110 openSUSE111 openSUSE112 openSUSE113 openSUSE114 openSUSE123 openSUSE131 openSUSE132,$(rpmrel)),)
117 rpmspec := rpm_suse
118 endif
119 ifeq ($(rpmspec),)
120 $(error failed to detect the .spec file (rpmrel=$(rpmrel)))
121 endif
122
123 # contrary to debian we need the verfile earlier to get the correct rpmname into the bld_flags
124 include $(verfile)
125$(verfile): rpm/configure-stamp
126 . rpm/env.sh && kmk -C $(vboxroot) $(verfile) $(bld_flags)
127
128endif
129
130ver := $(VBOX_VERSION_STRING)
131rpmver :=$(ver)$(if $(NOSUBVER),,$(if $(svn_revision),_$(svn_revision),)$(VERSUFFIX)$(if $(HEADLESS),_headless,)$(if $(DEBUG),_dbg,))
132archdir := $(current)/rpm/VirtualBox-$(ver)
133rpmname := $(verpkg)-$(rpmver)_$(rpmrel)
134
135# never ship any modules
136instmod :=
137
138ifneq ($(STAGEDISO),)
139 ifeq ($(wildcard $(STAGEDISO)/VBoxGuestAdditions.iso),)
140 $(error STAGEDISO='$(STAGEDISO)/VBoxGuestAdditions.iso' not found)
141 endif
142endif
143
144ifeq ($(wildcard /usr/share/doc/packages/bash),)
145 doc_dir := VBOX_PATH_PACKAGE_DOCS="\"/usr/share/doc/$(verpkg)\""
146else
147 # Novell (OpenSUSE, SLES)
148 doc_dir := VBOX_PATH_PACKAGE_DOCS="\"/usr/share/doc/packages/$(verpkg)\""
149endif
150
151# EL5 ships Python 2.4 while our Python support requires Python 2.6 or later
152cfg_flags := $(if $(NOQT),--disable-qt,) \
153 $(if $(NOSDL),--disable-vboxsdl,) \
154 $(if $(filter el5 el6,$(rpmrel)),--build-libvpx,) \
155 $(if $(filter el5,$(rpmrel)),--build-libcurl,) \
156 $(if $(filter el5,$(rpmrel)),--disable-sdl-ttf,) \
157 $(if $(filter el5,$(rpmrel)),--disable-pulse,) \
158 $(if $(filter el5,$(rpmrel)),--disable-python,) \
159 $(if $(ose),--ose,) $(if $(LINUX),--with-linux=$(LINUX),) \
160 $(if $(HEADLESS),--build-headless,) \
161 $(if $(DEBUG),--build-debug,) \
162 $(if $(NOWINE),,--setup-wine) \
163 $(if $(NOWEBSVC),,$(if $(ose),--enable-webservice,)) \
164 $(if $(VNC),--enable-vnc,) \
165 --disable-extpack
166
167bld_flags := AUTOCFG=$(current)/rpm/AutoConfig.kmk \
168 LOCALCFG=$(current)/rpm/LocalConfig.kmk \
169 PATH_OUT=$(builddir) \
170 VBOX_WITHOUT_EXTPACK_PUEL_PACKING=1 \
171 VBOX_WITHOUT_EXTPACK_VNC_PACKING=1 \
172 $(if $(filter el5 el6,$(rpmrel)),,VBOX_WITH_VMSVGA3D=1) \
173 VBOX_DO_STRIP= \
174 $(if $(filter el5,$(rpmrel)),VBOX_BLD_PYTHON=$(strip \
175 $(firstword $(wildcard /usr/local/bin/python2.7) \
176 $(wildcard /usr/bin/python2.6) $(wildcard /usr/bin/python))),) \
177 $(doc_dir) \
178 $(if $(ose),,VBOX_WITH_DOCS_CHM=1) \
179 VBOX_PACKAGE_DIST=$(rpmdist) \
180 $(if $(svnrev),VBOX_SVN_REV=$(svnrev),) \
181 $(if $(NODOCS),VBOX_WITH_DOCS= ,) \
182 $(if $(VERBOSE),--print-directory KBUILD_VERBOSE=2,--no-print-directory) \
183 $(if $(STAGEDISO),VBOX_WITHOUT_ADDITIONS=1,) \
184 $(if $(filter el5,$(rpmrel)),,VBOX_WITH_SYSFS_BY_DEFAULT=1)
185
186rpm/configure-stamp:
187 cd $(vboxroot) && ./configure --odir=$(current)/rpm $(cfg_flags)
188 touch rpm/configure-stamp
189
190rpm/build-stamp: rpm/configure-stamp
191 . rpm/env.sh && kmk -C $(vboxroot) $(bld_flags) $(if $(NOPARALLEL),-j1,) all
192 $(if $(NODOCS),cp $(vboxroot)/prebuild/UserManual*.pdf $(builddir)/bin,)
193 $(if $(NODOCS),cp $(vboxroot)/prebuild/VirtualBox*.chm $(builddir)/bin,)
194 $(if $(EFI),cp $(vboxroot)/prebuild/VBoxEFI32.fd $(builddir)/bin,)
195 $(if $(EFI),cp $(vboxroot)/prebuild/VBoxEFI64.fd $(builddir)/bin,)
196 mkdir -p $(builddir)/bin/additions
197 $(if $(STAGEDISO),cp $(STAGEDISO)/VBoxGuestAdditions.iso $(builddir)/bin/additions,)
198 . rpm/env.sh && kmk -C $(vboxroot) $(bld_flags) \
199 VBOX_NO_LINUX_RUN_INSTALLER=1 \
200 VBOX_LNX_ADD_ARCHIVE.x86=$(builddir)/bin/additions/VBoxGuestAdditions-x86.tar.bz2 \
201 VBOX_LNX_ADD_ARCHIVE.amd64=$(builddir)/bin/additions/VBoxGuestAdditions-amd64.tar.bz2 \
202 VBOX_PATH_ADDITIONS.linux.x86=$(builddir)/bin/additions \
203 VBOX_PATH_ADDITIONS.linux.amd64=$(builddir)/bin/additions \
204 packing
205 touch rpm/build-stamp
206
207clean:
208 rm -rf $(archdir)
209 rm -rf $(builddir) rpm/VirtualBox-*
210 rm -f rpm/VirtualBox.tar
211 rm -f rpm/VirtualBox.tar.bz2
212 rm -f rpm/VirtualBox.spec
213 rm -f rpm/build-stamp rpm/configure-stamp rpm/configure.log
214 rm -f rpm/AutoConfig.kmk rpm/env.sh
215
216ifeq ($(VBOX_VERSION_MAJOR),)
217binary: rpm/build-stamp $(verfile)
218 $(MAKE) -f rpm/rules binary
219else
220binary: rpm/build-stamp
221 rm -rf rpm/VirtualBox-*
222 tar -xf $(builddir)/bin/VirtualBox.tar -C rpm
223 sed \
224 -e 's|%VER%|$(ver)|g' \
225 -e 's|%NAME%|$(verpkg)|g' \
226 -e 's|%BUILDVER%|$(rpmver)|g' \
227 -e 's|%BUILDREL%|$(rpmrel)|g' \
228 -e 's|%BUILDROOT%|$(current)/rpm/buildroot|g' \
229 -e 's|%LIB%|$(rpmlib)|g' \
230 -e 's|%OSE%|$(if $(ose),is_ose,not_ose)|g' \
231 -e 's|%SPEC%|$(rpmspec)|g' \
232 -e 's|%PYTHON%|$(if $(filter el5,$(rpmrel)),,with_python)|g' \
233 -e 's|%MACROSPYTHON%|$(if $(wildcard /usr/lib/rpm/macros.python),%include /usr/lib/rpm/macros.python,)|g' \
234 -e 's|%INSTMOD%|$(instmod)|g' \
235 -e 's|%LIBASOUND%|$(if $(filter lib64,$(rpmlib)),libasound.so.2()(64bit),libasound.so.2)|g' \
236 -e 's|%INITSCRIPTS%|$(if $(filter fedora,$(rpmspec)),initscripts,)|g' \
237 -e 's|%WEBSVC%|$(if $(NOWEBSVC),false,true)|g' \
238 -e 's|%NETTOOLS%|$(if $(filter fedora18 fedora19 fedora20 fedora21 el5 openSUSE110 openSUSE111 openSUSE112 openSUSE113 openSUSE114,$(rpmrel)),net-tools,iproute)|g' \
239 rpm/VirtualBox.tmpl.spec > $(archdir)/VirtualBox.spec
240 mv rpm/VirtualBox-$(ver) rpm/$(rpmname)
241 cp ../../../../tools/linux.$(chrarch)/bin/chrpath rpm/$(rpmname) || true
242 tar -cf rpm/VirtualBox.tar -C rpm $(rpmname)
243 rm -f rpmbuild/RPMS/*/VirtualBox*rpm
244 rm -f rpmbuild/SPECS/*
245 mkdir -p rpmbuild/BUILD rpmbuild/RPMS/i386 rpmbuild/RPMS/x86_64 rpmbuild/SOURCES rpmbuild/SPECS rpmbuild/SRPMS
246 (cd rpm; rpmbuild --define '_topdir $(current)/rpmbuild' -tb --clean VirtualBox.tar)
247 mv rpmbuild/RPMS/*/$(verpkg)-debug* $(pkgdir) || true
248 file=`find rpmbuild/RPMS -name $(verpkg)*rpm -print`; \
249 mv $$file $(pkgdir)
250# Note! if rpmbuild fails: sudo chmod a+rw /usr/src/redhat/* /usr/src/redhat/RPMS/*
251# Note! if find/mv fails: sudo ln -s redhat/ /usr/src/packages
252endif
253
254.PHONY: binary clean
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette