VirtualBox

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

Last change on this file since 90354 was 90354, checked in by vboxsync, 3 years ago

configure, debian/rules, rpm/rules: Many bug fixes. Clean up the debian building to use purely the out directory (which needs relocating its files to the out directory, too, because the debhelper utilities can't deal with a separate temp directory structure). This un-breaks the debian package building which was caused by the incomplete previous change.

  • Property svn:eol-style set to LF
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 11.4 KB
Line 
1#!/usr/bin/make -f
2# $Id: rules 90354 2021-07-27 11:57:54Z vboxsync $
3## @file
4# VirtualBox rules.
5#
6
7#
8# Copyright (C) 2006-2020 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# maybe UserManual*.qch and UserManual*.qhc 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
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 be set if UserManual*.pdf, UserManual*.qch and UserManual*.qhc are
43# placed in $(vboxroot)/prebuild.
44# STAGEDISO will be set if VBoxGuestAdditions.iso is placed there.
45#
46# Wine will not be required if STAGEDISO is set.
47
48verpkg := VirtualBox-6.1
49vboxroot := $(shell while ! test -r configure && ! test "$$PWD" = "/"; do cd ..; done; pwd)
50instlin := $(vboxroot)/src/VBox/Installer/linux
51pkgdir := $(if $(PKGDIR),$(PKGDIR),$(shell cd $(vboxroot)/..; pwd))
52outdir := $(if $(PATH_OUT_BASE),$(PATH_OUT_BASE),$(vboxroot))/out
53bldbase := $(outdir)/rpm
54builddir := $(bldbase)/builddir
55stagedir := $(bldbase)/rpmbuild
56rpmlib := $(shell if [ `uname -m` = "x86_64" ]; then echo "lib64"; else echo "lib"; fi)
57verfile := $(builddir)/version-generated.mk
58ose := $(if $(OSE),1,$(if $(wildcard $(vboxroot)/src/VBox/RDP/server),,1))
59chrarch := $(shell if [ `uname -m` = "x86_64" ]; then echo "amd64"; else echo "x86"; fi)
60-include $(vboxroot)/SVN_REVISION
61svnrev := $(if $(svn_revision),$(svn_revision),)
62
63NOMODS ?= $(ose)
64NOQT ?= $(HEADLESS)
65NOSDL ?= $(HEADLESS)
66NOWEBSVC ?=
67EFI ?= $(if $(wildcard $(vboxroot)/prebuild/VBoxEFI32.fd $(vboxroot)/prebuild/VBoxEFI64.fd),1,)
68NODOCS ?= $(if $(wildcard $(addprefix $(vboxroot)/prebuild/,UserManual*.pdf UserManual*.qch UserManual.qhc)),1,)
69STAGEDISO ?= $(if $(wildcard $(vboxroot)/prebuild/VBoxGuestAdditions.iso),$(vboxroot)/prebuild,)
70NOWINE := $(if $(STAGEDISO),1,$(ose))
71
72ifneq ($(STAGEDISO),)
73 ifeq ($(wildcard $(STAGEDISO)/VBoxGuestAdditions.iso),)
74 $(error STAGEDISO='$(STAGEDISO)/VBoxGuestAdditions.iso' not found)
75 endif
76endif
77
78ifeq ($(wildcard rpm/rules),)
79$(error call rpm/rules from src/VBox/Installer/linux)
80endif
81
82ifneq ($(MAKECMDGOALS),clean)
83 # look for fedora
84 rpmrel := $(shell cat /etc/fedora-release 2> /dev/null | sed -e 's/^Fedora *release *\([1-9][0-9]*\) .*/fedora\1/')
85 ifeq ($(rpmrel),)
86 # look for OEL
87 rpmrel := $(shell cat /etc/enterprise-release 2> /dev/null | sed -ne 's/^Enterprise Linux[a-zA-Z ]*\([1-9][0-9]*\).*/el\1/p')
88 endif
89 ifeq ($(rpmrel),)
90 # look for OL
91 rpmrel := $(shell cat /etc/oracle-release 2> /dev/null | sed -ne 's/^Oracle Linux[a-zA-Z ]*\([1-9][0-9]*\).*/el\1/p')
92 endif
93 ifeq ($(rpmrel),)
94 # look for CentOS
95 rpmrel := $(shell cat /etc/redhat-release 2> /dev/null | sed -ne 's/^CentOS[a-zA-Z ]*\([1-9][0-9]*\).*/el\1/p')
96 endif
97 ifeq ($(rpmrel),)
98 # look for Red Hat
99 rpmrel := $(shell cat /etc/redhat-release 2> /dev/null | sed -ne 's/^Red Hat[a-zA-Z ]*\([1-9][0-9]*\).*/el\1/p')
100 endif
101 ifeq ($(rpmrel),)
102 # look for openSUSE
103 rpmrel := $(shell cat /etc/SUSE-brand 2> /dev/null | sed -ne 's/^VERSION *= *\([0-9]*\)\.\([0-9]*\)/openSUSE\1\2/p')
104 endif
105 # look for openSUSE Tumbleweed
106 ifeq ($(rpmrel),)
107 rpmrel := $(shell cat /etc/SUSE-brand 2> /dev/null | sed -ne 's/^VERSION *= *tumbleweed/openSUSETW/p')
108 endif
109 ifeq ($(rpmrel),)
110 $(error failed to detect the release type. Hack the detection.)
111 endif
112
113 rpmdist := $(strip $(shell grep $(rpmrel) $(instlin)/distributions_rpm | cut -d'=' -f2))
114 ifeq ($(rpmdist),)
115 $(error Cannot detect package distribution (rpmrel=$(rpmrel)))
116 endif
117
118 ifeq ($(filter-out el5 el6 el7 el8 fedora18 fedora19 fedora20 fedora21 fedora22 fedora24 fedora25 fedora26 fedora29 fedora31 fedora32 fedora33,$(rpmrel)),)
119 rpmspec := rpm_redhat
120 endif
121 ifeq ($(filter-out openSUSE110 openSUSE111 openSUSE112 openSUSE113 openSUSE114 openSUSE123 openSUSE131 openSUSE132 openSUSE150 openSUSETW,$(rpmrel)),)
122 rpmspec := rpm_suse
123 endif
124 ifeq ($(rpmspec),)
125 $(error failed to detect the .spec file (rpmrel=$(rpmrel)))
126 endif
127endif
128
129ifneq ($(wildcard $(verfile)),)
130include $(verfile)
131ver := $(VBOX_VERSION_STRING)
132svnver := $(if $(NOSUBVER),,$(if $(svn_revision),-$(svn_revision),$(shell if \
133 svn info $(vboxroot) > /dev/null 2>&1; then \
134 svn info $(vboxroot)|sed -e "s/^Revision: \(.*\)/-\1/;t;d"; else \
135 date +"-%Y%m%d"; fi)))
136rpmver := $(ver)$(subst -,_,$(svnver))$(VERSUFFIX)$(if $(HEADLESS),_headless,)$(if $(DEBUG),_dbg,)
137archdir := $(bldbase)/VirtualBox-$(ver)
138rpmname := $(verpkg)-$(rpmver)_$(rpmrel)
139endif
140
141# never ship any modules
142instmod :=
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
151ifeq ($(NOQT),)
152 ifeq ($(rpmrel),el7)
153 export PATH := /opt/rh/devtoolset-4/root/usr/bin:$(PATH)
154 endif
155endif
156
157# EL5 ships Python 2.4 while our Python support requires Python 2.6 or later
158cfg_flags := $(if $(NOQT),--disable-qt,) \
159 $(if $(NOSDL),--disable-vboxsdl,) \
160 $(if $(filter el5 el6,$(rpmrel)),--build-libvpx,) \
161 $(if $(filter el5 el6,$(rpmrel)),--build-libopus,) \
162 $(if $(filter el5 el6,$(rpmrel)),--build-libssl,) \
163 $(if $(filter el5,$(rpmrel)),--build-libcurl,) \
164 $(if $(filter el5,$(rpmrel)),--disable-sdl-ttf,) \
165 $(if $(filter el5,$(rpmrel)),--disable-pulse,) \
166 $(if $(filter el5,$(rpmrel)),--disable-python,) \
167 $(if $(ose),--ose,) $(if $(LINUX),--with-linux=$(LINUX),) \
168 $(if $(HEADLESS),--build-headless,) \
169 $(if $(DEBUG),--build-debug,) \
170 $(if $(NOWINE),,--setup-wine) \
171 $(if $(VNC),--enable-vnc,) \
172 $(if $(PATH_OUT_BASE),--out-base-dir=$(PATH_OUT_BASE),) \
173 --disable-extpack
174
175bld_flags := AUTOCFG=$(bldbase)/AutoConfig.kmk \
176 LOCALCFG=$(instlin)/rpm/LocalConfig.kmk \
177 PATH_OUT=$(builddir) \
178 VBOX_WITHOUT_EXTPACK_PUEL_PACKING=1 \
179 VBOX_WITHOUT_EXTPACK_VNC_PACKING=1 \
180 $(if $(filter el5 el6,$(rpmrel)),,VBOX_WITH_VMSVGA3D=1) \
181 VBOX_DO_STRIP= \
182 $(if $(filter el5,$(rpmrel)),VBOX_BLD_PYTHON=$(firstword $(wildcard \
183 /usr/local/bin/python2.7 /usr/bin/python2.7 /usr/bin/python2.6 /usr/bin/python2 /usr/bin/python)),) \
184 $(if $(filter el5,$(rpmrel)),,VBOX_WITH_SYSFS_BY_DEFAULT=1) \
185 $(doc_dir) \
186 VBOX_PACKAGE_DIST=$(rpmdist) \
187 $(if $(svnrev),VBOX_SVN_REV=$(svnrev),) \
188 $(if $(NODOCS),VBOX_WITH_DOCS= ,) \
189 $(if $(VERBOSE),--print-directory KBUILD_VERBOSE=2,--no-print-directory) \
190 $(if $(STAGEDISO),VBOX_WITHOUT_ADDITIONS=1,)
191
192configure: $(bldbase)/configure-stamp
193$(bldbase)/configure-stamp:
194 mkdir -p $(bldbase)
195 cd $(vboxroot) && ./configure --odir=$(bldbase) $(cfg_flags)
196 touch $@
197
198build: $(bldbase)/configure-stamp $(bldbase)/build-stamp
199$(bldbase)/build-stamp $(verfile): $(bldbase)/configure-stamp
200 . $(bldbase)/env.sh && kmk -C $(vboxroot) $(bld_flags) $(if $(NOPARALLEL),-j1,) all
201 # Files from prebuild go to (builddir)/bin to be used during the
202 # packing stage, overriding what the build did/would produce.
203 $(if $(NODOCS),cp $(addprefix $(vboxroot)/prebuild/,UserManual*.pdf UserManual*.qch UserManual.qhc) $(builddir)/bin,)
204 $(if $(EFI),cp $(vboxroot)/prebuild/VBoxEFI32.fd $(builddir)/bin,)
205 $(if $(EFI),cp $(vboxroot)/prebuild/VBoxEFI64.fd $(builddir)/bin,)
206 mkdir -p $(builddir)/bin/additions
207 $(if $(STAGEDISO),cp $(STAGEDISO)/VBoxGuestAdditions.iso $(builddir)/bin/additions,)
208 . $(bldbase)/env.sh && kmk -C $(vboxroot) $(bld_flags) \
209 VBOX_NO_LINUX_RUN_INSTALLER=1 \
210 VBOX_LNX_ADD_ARCHIVE.x86=$(builddir)/bin/additions/VBoxGuestAdditions-x86.tar.bz2 \
211 VBOX_LNX_ADD_ARCHIVE.amd64=$(builddir)/bin/additions/VBoxGuestAdditions-amd64.tar.bz2 \
212 VBOX_PATH_ADDITIONS.linux.x86=$(builddir)/bin/additions \
213 VBOX_PATH_ADDITIONS.linux.amd64=$(builddir)/bin/additions \
214 packing
215 touch $(bldbase)/build-stamp
216
217clean:
218 rm -rf $(archdir)
219 rm -rf $(stagedir)
220 rm -rf $(builddir)
221 rm -rf $(bldbase)/wine.*
222 rm -rf $(bldbase)/VirtualBox-*
223 rm -f $(bldbase)/VirtualBox.tar $(bldbase)/VirtualBox.tar.bz2
224 rm -f $(bldbase)/build-stamp $(bldbase)/configure-stamp
225 rm -f $(bldbase)/AutoConfig.kmk $(bldbase)/configure.log $(bldbase)/env.sh
226 rm -f $(bldbase)/VirtualBox.spec
227 if [ -d $(bldbase) ]; then rmdir $(bldbase); fi
228
229ifeq ($(VBOX_VERSION_MAJOR),)
230binary: build $(verfile)
231 +$(MAKE) -f rpm/rules binary
232
233else
234binary: build
235 rm -rf $(bldbase)/VirtualBox-*
236 tar -xf $(builddir)/bin/VirtualBox.tar -C $(bldbase)
237 sed \
238 -e 's|%VER%|$(ver)|g' \
239 -e 's|%NAME%|$(verpkg)|g' \
240 -e 's|%BUILDVER%|$(rpmver)|g' \
241 -e 's|%BUILDREL%|$(rpmrel)|g' \
242 -e 's|%BUILDROOT%|$(bldbase)/buildroot|g' \
243 -e 's|%OSE%|$(if $(ose),is_ose,not_ose)|g' \
244 -e 's|%SPEC%|$(rpmspec)|g' \
245 -e 's|%QHELP%|$(if $(STAGEDQHELP),with_qhelp,without_qhelp)|g' \
246 -e 's|%PYTHON%|$(if $(filter el5,$(rpmrel)),without_python,with_python)|g' \
247 -e 's|%MACROSPYTHON%|$(if $(wildcard /usr/lib/rpm/macros.d/macros.python3),,$(if $(wildcard /usr/lib/rpm/macros.python),%include /usr/lib/rpm/macros.python,))|g' \
248 -e 's|%INSTMOD%|$(instmod)|g' \
249 -e 's|%LIBASOUND%|$(if $(filter lib64,$(rpmlib)),libasound.so.2()(64bit),libasound.so.2)|g' \
250 -e 's|%INITSCRIPTS%|$(if $(filter fedora,$(rpmspec)),initscripts,)|g' \
251 -e 's|%NETTOOLS%|$(if $(filter fedora18 fedora19 fedora20 fedora21 el5 openSUSE110 openSUSE111 openSUSE112 openSUSE113 openSUSE114,$(rpmrel)),net-tools,iproute)|g' \
252 $(instlin)/rpm/VirtualBox.tmpl.spec > $(archdir)/VirtualBox.spec
253 mv $(bldbase)/VirtualBox-$(ver) $(bldbase)/$(rpmname)
254 cp ../../../../tools/linux.$(chrarch)/bin/chrpath $(bldbase)/$(rpmname) || true
255 tar -cf $(bldbase)/VirtualBox.tar -C $(bldbase) $(rpmname)
256 rm -f $(stagedir)/RPMS/*/VirtualBox*rpm
257 rm -f $(stagedir)/SPECS/*
258 mkdir -p $(stagedir)/BUILD $(stagedir)/RPMS/i386 $(stagedir)/RPMS/x86_64 $(stagedir)/SOURCES $(stagedir)/SPECS $(stagedir)/SRPMS
259 (cd $(bldbase); rpmbuild --define '_topdir $(stagedir)' -tb --clean VirtualBox.tar)
260 mv $(stagedir)/RPMS/*/$(verpkg)-debug* $(pkgdir) || true
261 file=`find $(stagedir)/RPMS -name $(verpkg)*rpm -print`; \
262 mv $$file $(pkgdir)
263# Note! if rpmbuild fails: sudo chmod a+rw /usr/src/redhat/* /usr/src/redhat/RPMS/*
264# Note! if find/mv fails: sudo ln -s redhat/ /usr/src/packages
265endif
266
267.PHONY: binary configure build 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