VirtualBox

source: vbox/trunk/src/VBox/Installer/darwin/Makefile.kmk@ 54675

Last change on this file since 54675 was 54675, checked in by vboxsync, 10 years ago

Installer/darwin/Makefile.kmk: VBOX_WITH_COMBINED_PACKAGE has to go if we want to sign for mac os x 10.10 and 10.9.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 42.6 KB
Line 
1# $Id: Makefile.kmk 54675 2015-03-07 00:06:14Z vboxsync $
2## @file
3# Install misc stuff and create dist packages for Mac OS X.
4#
5
6#
7# Copyright (C) 2006-2012 Oracle Corporation
8#
9# This file is part of VirtualBox Open Source Edition (OSE), as
10# available from http://www.virtualbox.org. This file is free software;
11# you can redistribute it and/or modify it under the terms of the GNU
12# General Public License (GPL) as published by the Free Software
13# Foundation, in version 2 as it comes in the "COPYING" file of the
14# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16#
17
18SUB_DEPTH = ../../../..
19include $(KBUILD_PATH)/subheader.kmk
20
21
22#
23# Globals
24#
25VBOX_PATH_DI_SRC := $(PATH_SUB_CURRENT)
26VBOX_DI_OUT_DIR := $(PATH_TARGET)/Installer/darwin
27BLDDIRS += $(VBOX_DI_OUT_DIR)
28
29VBOX_DI_FN_DEP_BOTH = $(VBOX_PATH_DIST)/$1
30ifeq ($(KBUILD_TARGET_ARCH),x86)
31 VBOX_DI_FN_DEP_32 = $(VBOX_PATH_DIST)/$1
32 VBOX_DI_FN_DEP_64 =
33else
34 VBOX_DI_FN_DEP_64 = $(VBOX_PATH_DIST)/$1
35 VBOX_DI_FN_DEP_32 =
36endif
37VBOX_PATH_DIST_OTHER = $(error VBOX_PATH_DIST_OTHER used in a non-combined package deal)
38
39# Unset this to speed up things during makefile hacking.
40VBOX_DARWIN_INST_DEP_ON_MAKEFILE := $(MAKEFILE_CURRENT)
41
42# The location of the pkgbuild program.
43ifndef VBOX_PKGBUILD
44 VBOX_PKGBUILD := pkgbuild
45endif
46
47# The location of the productbuild program.
48ifndef VBOX_PRODUCTBUILD
49 VBOX_PRODUCTBUILD := productbuild
50endif
51
52# Where we do the packing (override this in LocalConfig.kmk if building on smbfs).
53ifndef VBOX_PATH_PACK_TMP
54 VBOX_PATH_PACK_TMP := $(VBOX_DI_OUT_DIR)
55endif
56
57
58#
59# Install the darwin docs/license.
60#
61INSTALLS += darwin-docs
62darwin-docs_INST = $(INST_DIST)
63darwin-docs_MODE = a+r,u+w
64darwin-docs_SOURCES = \
65 $(VBOX_BRAND_LICENSE_TXT)=>LICENSE
66
67
68#
69# The packing.
70#
71PACKING += $(VBOX_PATH_DIST)/VirtualBox-$(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)-r$(VBOX_SVN_REV).dmg
72#OTHER_CLEAN = TODO
73
74
75include $(FILE_KBUILD_SUB_FOOTER)
76
77
78#
79# We're running commands as root here, take some care and assertion
80# a sane environment.
81#
82ifeq ($(strip $(VBOX_PATH_DIST)),)
83 $(error VBOX_PATH_DIST=$(VBOX_PATH_DIST))
84endif
85ifeq ($(strip $(VBOX_PATH_DIST)),/)
86 $(error VBOX_PATH_DIST=$(VBOX_PATH_DIST))
87endif
88ifeq ($(strip $(VBOX_PATH_PACK_TMP)),)
89 $(error VBOX_PATH_PACK_TMP=$(VBOX_PATH_PACK_TMP))
90endif
91ifeq ($(strip $(VBOX_PATH_PACK_TMP)),/)
92 $(error VBOX_PATH_PACK_TMP=$(VBOX_PATH_PACK_TMP))
93endif
94
95
96# Check for additional manuals
97VBOX_ADD_MANUALS := $(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES),$(VBOX_PATH_DIST)/VirtualBox.app/Contents/MacOS/UserManual_$(f).pdf)
98
99VBOX_ADD_MANUAL_de_DE := $(filter $(VBOX_PATH_DIST)/VirtualBox.app/Contents/MacOS/UserManual_de_DE.pdf,$(VBOX_ADD_MANUALS))
100VBOX_ADD_MANUAL_fr_FR := $(filter $(VBOX_PATH_DIST)/VirtualBox.app/Contents/MacOS/UserManual_fr_FR.pdf,$(VBOX_ADD_MANUALS))
101
102#
103# The disk image.
104#
105$(VBOX_PATH_DIST)/VirtualBox-$(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)-r$(VBOX_SVN_REV).dmg: \
106 $(VBOX_PATH_PACK_TMP)/DiskImage/VirtualBox.pkg \
107 $(VBOX_BRAND_DARWIN_DISKIMAGE_BG) \
108 $(VBOX_BRAND_DARWIN_DISKIMAGE_DS_STORE) \
109 $$(wildcard $(VBOX_PATH_DI_SRC)/DiskImage/*) \
110 $(if $(VBOX_WITH_DOCS_PACKING), \
111 $(VBOX_PATH_DIST)/VirtualBox.app/Contents/MacOS/UserManual.pdf \
112 $(VBOX_ADD_MANUALS)) \
113 $(VBOX_DARWIN_INST_DEP_ON_MAKEFILE)
114 $(call MSG_TOOL,hdiutil,,,$@)
115 @# Cleanup any previously failed attempts and various trash.
116 sudo rm -Rf $(VBOX_PATH_PACK_TMP)/DiskImage.tmp
117 $(MKDIR) -p $(VBOX_PATH_PACK_TMP)/DiskImage.tmp/
118 sudo mv $(VBOX_PATH_PACK_TMP)/DiskImage/VirtualBox.pkg $(VBOX_PATH_PACK_TMP)/DiskImage.tmp/
119 sudo rm -Rf \
120 $@ \
121 $(VBOX_PATH_PACK_TMP)/DiskImage/
122 sudo mv $(VBOX_PATH_PACK_TMP)/DiskImage.tmp $(VBOX_PATH_PACK_TMP)/DiskImage
123 @# Remove .dmg packages from old depend builds
124 $(QUIET)$(RM) -f $(wildcard $(VBOX_PATH_DIST)/VirtualBox-*-r*.dmg)
125 @# Populate the image with uninstaller, readme, picture, and .VolumeIcon.icns. (TODO)
126 $(INSTALL) $(VBOX_PATH_DI_SRC)/DiskImage/VirtualBox_Uninstall.tool $(VBOX_PATH_PACK_TMP)/DiskImage/
127ifeq (1,1)
128 @# Pedantic mode...
129 $(INSTALL) -m 644 $(VBOX_BRAND_DARWIN_DISKIMAGE_DS_STORE) $(VBOX_PATH_PACK_TMP)/DiskImage/.DS_Store
130 $(MKDIR) $(VBOX_PATH_PACK_TMP)/DiskImage/.background
131 $(INSTALL) -m 644 $(VBOX_BRAND_DARWIN_DISKIMAGE_BG) $(VBOX_PATH_PACK_TMP)/DiskImage/.background/vbox_folder.tiff
132 ifdef VBOX_WITH_BUNDLED_INSTALLER
133 $(if $(VBOX_WITH_DOCS_PACKING), \
134 $(INSTALL) -m 644 $(VBOX_PATH_DIST)/VirtualBox.app/Contents/MacOS/UserManual.pdf $(VBOX_PATH_PACK_TMP)/DiskImage/User\ Manual.pdf$(NLTAB) \
135 $(if $(VBOX_ADD_MANUAL_de_DE),$(INSTALL) -m 644 $(VBOX_ADD_MANUAL_de_DE) "$(VBOX_PATH_PACK_TMP)/DiskImage/$(VBOX_BRAND_de_DE_MANUAL_NAME).pdf"$(NLTAB)) \
136 $(if $(VBOX_ADD_MANUAL_fr_FR),$(INSTALL) -m 644 $(VBOX_ADD_MANUAL_fr_FR) "$(VBOX_PATH_PACK_TMP)/DiskImage/$(VBOX_BRAND_fr_FR_MANUAL_NAME).pdf"$(NLTAB)))
137 # Rename the main package
138 else
139 $(if $(VBOX_WITH_DOCS_PACKING), $(INSTALL) $(VBOX_PATH_DIST)/VirtualBox.app/Contents/MacOS/UserManual.pdf $(VBOX_PATH_PACK_TMP)/DiskImage/)
140 $(LN) -s /Applications/ $(VBOX_PATH_PACK_TMP)/DiskImage/Applications
141 endif
142endif
143 @# Change the owners.
144 sudo chown -R root:admin $(VBOX_PATH_PACK_TMP)/DiskImage
145 @# Create the image.
146 sudo hdiutil create -format UDBZ -volname "VirtualBox" -srcfolder "$(VBOX_PATH_PACK_TMP)/DiskImage" "$@"
147 @# Change (back) the owner so it can be deleted by the user.
148 sudo chown "$(shell whoami)" "$@"
149 sudo chown -R "$(shell whoami)" $(VBOX_PATH_PACK_TMP)/DiskImage
150
151#
152# The meta-package.
153#
154$(VBOX_PATH_PACK_TMP)/DiskImage/VirtualBox.pkg: \
155 $(VBOX_PATH_PACK_TMP)/Packages/VBoxKEXTs.pkg \
156 $(VBOX_PATH_PACK_TMP)/Packages/VirtualBoxCLI.pkg \
157 $(VBOX_PATH_PACK_TMP)/Packages/VirtualBox.pkg \
158 $$(wildcard $(VBOX_PATH_DI_SRC)/VirtualBox_mpkg/* \
159 $(VBOX_PATH_DI_SRC)/VirtualBox_mpkg/*.lproj/*) \
160 $(foreach f,$(VBOX_INSTALLER_ADD_LANGUAGES), $(VBOX_BRAND_$(f)_VIRTUALBOX_WELCOME_RTF)) \
161 $(VBOX_DARWIN_INST_DEP_ON_MAKEFILE)
162 $(call MSG_TOOL,productbuild,,,$@)
163 @# Cleanup any previously failed attempts.
164 sudo rm -Rf \
165 $@ \
166 $(VBOX_PATH_PACK_TMP)/VirtualBox.dist.root \
167 $(VBOX_PATH_PACK_TMP)/VirtualBox.dist.desc \
168 $(VBOX_PATH_PACK_TMP)/VirtualBox.dist.res
169 @# Correct directory permissions are important.
170 $(MKDIR) -p \
171 $(@D) \
172 $(VBOX_PATH_PACK_TMP)/VirtualBox.dist.desc \
173 $(VBOX_PATH_PACK_TMP)/VirtualBox.dist.res \
174 $(VBOX_PATH_PACK_TMP)/VirtualBox.dist.res/English.lproj
175 @# Do keyword replacement in the package info and description files.
176 $(SED) \
177 -e 's/@VBOX_VERSION_STRING@/$(VBOX_VERSION_STRING)/g' \
178 -e 's/@VBOX_VERSION_MAJOR@/$(VBOX_VERSION_MAJOR)/g' \
179 -e 's/@VBOX_VERSION_MINOR@/$(VBOX_VERSION_MINOR)/g' \
180 -e 's/@VBOX_VERSION_BUILD@/$(VBOX_VERSION_BUILD)/g' \
181 -e 's/@VBOX_VENDOR@/$(VBOX_VENDOR)/g' \
182 -e 's/@VBOX_PRODUCT@/$(VBOX_PRODUCT)/g' \
183 -e 's/@VBOX_C_YEAR@/$(VBOX_C_YEAR)/g' \
184 --output $(VBOX_PATH_PACK_TMP)/VirtualBox.dist.res/English.lproj/Welcome.rtf \
185 $(VBOX_PATH_DI_SRC)/VirtualBox_mpkg/Welcome.rtf
186 @# Copy the resources.
187 $(INSTALL) -m 0644 $(VBOX_PATH_DI_SRC)/VirtualBox_mpkg/Conclusion.rtf $(VBOX_PATH_PACK_TMP)/VirtualBox.dist.res/English.lproj/Conclusion.rtf
188 $(SED) \
189 -e 's/@VBOX_VENDOR@/$(VBOX_VENDOR)/g' \
190 -e 's/@VBOX_PRODUCT@/$(VBOX_PRODUCT)/g' \
191 -e 's/@VBOX_C_YEAR@/$(VBOX_C_YEAR)/g' \
192 --output $(VBOX_PATH_PACK_TMP)/VirtualBox.dist.res/English.lproj/Localizable.strings \
193 $(VBOX_PATH_DI_SRC)/VirtualBox_mpkg/Localizable.strings
194 $(INSTALL) -m 0644 $(VBOX_BRAND_DARWIN_INSTALLER_BG) $(VBOX_PATH_PACK_TMP)/VirtualBox.dist.res/background.tif
195 $(foreach f,$(VBOX_INSTALLER_ADD_LANGUAGES), \
196 $(MKDIR) -p \
197 $(VBOX_PATH_PACK_TMP)/VirtualBox.dist.res/$(VBOX_INSTALLER_$(f)_DARWIN_TARGET).lproj$(NLTAB) \
198 $(SED) \
199 -e 's/@VBOX_VERSION_STRING@/$(VBOX_VERSION_STRING)/g' \
200 -e 's/@VBOX_VERSION_MAJOR@/$(VBOX_VERSION_MAJOR)/g' \
201 -e 's/@VBOX_VERSION_MINOR@/$(VBOX_VERSION_MINOR)/g' \
202 -e 's/@VBOX_VERSION_BUILD@/$(VBOX_VERSION_BUILD)/g' \
203 --output $(VBOX_PATH_PACK_TMP)/VirtualBox.dist.res/$(VBOX_INSTALLER_$(f)_DARWIN_TARGET).lproj/Welcome.rtf \
204 $(VBOX_BRAND_$(f)_VIRTUALBOX_WELCOME_RTF)$(NLTAB) \
205 $(INSTALL) -m 0644 $(VBOX_BRAND_$(f)_VIRTUALBOX_CONCLUSION_RTF) $(VBOX_PATH_PACK_TMP)/VirtualBox.dist.res/$(VBOX_INSTALLER_$(f)_DARWIN_TARGET).lproj/Conclusion.rtf$(NLTAB) \
206 $(SED) \
207 -e 's/@VBOX_VENDOR@/$(VBOX_VENDOR)/g' \
208 -e 's/@VBOX_PRODUCT@/$(VBOX_PRODUCT)/g' \
209 -e 's/@VBOX_C_YEAR@/$(VBOX_C_YEAR)/g' \
210 --output $(VBOX_PATH_PACK_TMP)/VirtualBox.dist.res/$(VBOX_INSTALLER_$(f)_DARWIN_TARGET).lproj/Localizable.strings \
211 $(VBOX_BRAND_$(f)_VIRTUALBOX_LOCALIZABLE_STRINGS)$(NLTAB) \
212 )
213 @# Build the package.
214 $(VBOX_PRODUCTBUILD) \
215 --distribution $(VBOX_PATH_DI_SRC)/VirtualBox_mpkg/distribution.dist \
216 --package-path $(VBOX_PATH_PACK_TMP)/Packages \
217 --resources $(VBOX_PATH_PACK_TMP)/VirtualBox.dist.res \
218 --identifier org.VirtualBox.mpkg.virtualbox \
219 --version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
220 $(if $(VBOX_MACOSX_INSTALLER_SIGN),--sign "$(VBOX_MACOSX_INSTALLER_SIGN)",) \
221 $@
222 @# Cleanup.
223 sudo rm -Rf \
224 $(VBOX_PATH_PACK_TMP)/VirtualBox.dist.root \
225 $(VBOX_PATH_PACK_TMP)/VirtualBox.dist.desc \
226 $(VBOX_PATH_PACK_TMP)/VirtualBox.dist.res
227
228
229#
230# The VirtualBox Kernel extensions.
231#
232VBOX_DI_KEXTS_UNIVERSAL = VBoxDrv VBoxNetFlt VBoxNetAdp VBoxUSB
233VBOX_DI_KEXTS = $(VBOX_DI_KEXTS_UNIVERSAL)
234
235$(VBOX_PATH_PACK_TMP)/Packages/VBoxKEXTs.pkg: \
236 $(foreach kext,$(VBOX_DI_KEXTS_UNIVERSAL), $(call VBOX_DI_FN_DEP_BOTH,$(kext).kext/Contents/MacOS/$(kext))) \
237 $(foreach kext,$(VBOX_DI_KEXTS), $(VBOX_PATH_DIST)/$(kext).kext/Contents/Info.plist) \
238 $$(wildcard $(VBOX_PATH_DI_SRC)/VBoxKEXTs/* \
239 $(VBOX_PATH_DI_SRC)/VBoxKEXTs/*.lproj/*) \
240 $(foreach f,$(VBOX_INSTALLER_ADD_LANGUAGES), \
241 $(VBOX_BRAND_$(f)_VBOXKEXTS_DESCRIPTION_PLIST) \
242 $(VBOX_BRAND_$(f)_VBOXKEXTS_README_HTML) \
243 $(VBOX_BRAND_$(f)_VBOXKEXTS_INSTALLATIONCHECK_STRINGS)) \
244 $(VBOX_DARWIN_INST_DEP_ON_MAKEFILE)
245 $(call MSG_TOOL,pkgbuild,,,$@)
246 @# Cleanup any previously failed attempts.
247 sudo rm -Rf \
248 $@ \
249 $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root \
250 $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.desc \
251 $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.res
252 @# Correct directory permissions are important.
253 $(MKDIR) -p \
254 $(@D) \
255 $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.desc \
256 $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.res \
257 $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.res/English.lproj
258 $(MKDIR) -p -m 0755 \
259 $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root \
260 $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/LaunchDaemons \
261 $(foreach kext,$(VBOX_DI_KEXTS), \
262 $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/$(kext).kext \
263 $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/$(kext).kext/Contents \
264 $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/$(kext).kext/Contents/MacOS )
265 @# Copy the launch daemon bits.
266 $(INSTALL) -m 0755 $(VBOX_PATH_DI_SRC)/VBoxKEXTs/VirtualBoxStartup.sh $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/LaunchDaemons/
267 $(INSTALL) -m 0644 $(VBOX_PATH_DI_SRC)/VBoxKEXTs/org.virtualbox.startup.plist $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/LaunchDaemons/
268 @# Copy the common files (Info.plist).
269 $(foreach kext,$(VBOX_DI_KEXTS), \
270 $(NLTAB)$(INSTALL) -m 0644 $(VBOX_PATH_DIST)/$(kext).kext/Contents/Info.plist $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/$(kext).kext/Contents/)
271 @# Copy the binaries and invoking lipo.
272 $(foreach kext,$(VBOX_DI_KEXTS), \
273 $(NLTAB)$(INSTALL) -m 0755 $(VBOX_PATH_DIST)/$(kext).kext/Contents/MacOS/$(kext) $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/$(kext).kext/Contents/MacOS/)
274 @# Signed the kext bundles.
275ifdef VBOX_SIGNING_MODE
276 $(foreach kext,$(VBOX_DI_KEXTS) \
277 ,$(NLTAB)$(call VBOX_SIGN_MACHO_FN,$(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/$(kext).kext/Contents/MacOS/$(kext),org.virtualbox.app.kext.$(kext)) )
278 $(foreach kext,$(VBOX_DI_KEXTS), \
279 $(NLTAB)$(call VBOX_SIGN_BUNDLE_FN,$(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/$(kext).kext,org.virtualbox.app.kext.$(kext)) )
280## @TODO check why this fails on the build box: $(foreach kext,$(VBOX_DI_KEXTS), $(NLTAB)codesign --verify --verbose=1 $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/$(kext).kext )
281endif
282 @# Set the correct owners.
283 sudo chown -R root:wheel $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/
284 @# Do keyword replacement in the package info and description files.
285 $(SED) \
286 -e 's/@VBOX_VERSION_STRING@/$(VBOX_VERSION_STRING)/g' \
287 -e 's/@VBOX_VERSION_MAJOR@/$(VBOX_VERSION_MAJOR)/g' \
288 -e 's/@VBOX_VERSION_MINOR@/$(VBOX_VERSION_MINOR)/g' \
289 -e 's/@VBOX_VERSION_BUILD@/$(VBOX_VERSION_BUILD)/g' \
290 -e 's/@VBOX_VENDOR@/$(VBOX_VENDOR)/g' \
291 -e 's/@VBOX_PRODUCT@/$(VBOX_PRODUCT)/g' \
292 -e 's/@VBOX_C_YEAR@/$(VBOX_C_YEAR)/g' \
293 --output $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.desc/PkgBuildComponent.plist \
294 $(VBOX_PATH_DI_SRC)/VBoxKEXTs/PkgBuildComponent.plist
295 @# Copy the resources.
296 $(INSTALL) -m 0755 $(VBOX_PATH_DI_SRC)/VBoxKEXTs/postflight $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.res/
297 @# Build the package.
298 $(VBOX_PKGBUILD) \
299 --root $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root/ \
300 --component-plist $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.desc/PkgBuildComponent.plist \
301 --script $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.res \
302 --identifier org.virtualbox.pkg.vboxkexts \
303 --version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
304 --install-location "/Library/Application Support/VirtualBox" \
305 --ownership preserve \
306 $(if $(VBOX_MACOSX_INSTALLER_SIGN),--sign "$(VBOX_MACOSX_INSTALLER_SIGN)",) \
307 $@
308 @# Cleanup
309 sudo chown -R "$(shell whoami)" \
310 $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root
311 sudo rm -Rf \
312 $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.root \
313 $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.desc \
314 $(VBOX_PATH_PACK_TMP)/VBoxKEXTs.pkg.res
315
316
317#
318# Figure out which languages that we support and construct
319# .qm and .lproj lists for these.
320#
321include $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/nls/ApprovedLanguages.kmk
322VBOX_INSTALL_LANG_FILES := $(foreach f,$(VBOX_APPROVED_GUI_LANGUAGES), VirtualBox_$(f).qm qt_$(f).qm)
323VBOX_INSTALL_LANG_LPROJ := $(addsuffix .lproj,$(VBOX_APPROVED_GUI_LANGUAGES))
324
325
326#
327# The VirtualBox Application.
328#
329
330VBOX_DI_VBAPP_DYLIBS = \
331 $(foreach qtmod, $(VBOX_QT4_MOD_NAMES), Frameworks/$(qtmod).framework/Versions/4/$(qtmod)) \
332 MacOS/VBoxDD.dylib \
333 MacOS/VBoxDD2.dylib \
334 MacOS/VBoxDDU.dylib \
335 MacOS/VBoxREM.dylib \
336 MacOS/VBoxRT.dylib \
337 $(if $(VBOX_WITH_SHARED_FOLDERS),MacOS/VBoxSharedFolders.dylib,) \
338 $(if $(VBOX_WITH_SHARED_CLIPBOARD),MacOS/VBoxSharedClipboard.dylib,) \
339 $(if $(VBOX_WITH_DRAG_AND_DROP),MacOS/VBoxDragAndDropSvc.dylib,) \
340 $(if $(VBOX_WITH_GUEST_PROPS),MacOS/VBoxGuestPropSvc.dylib,) \
341 MacOS/VBoxHostChannel.dylib \
342 MacOS/VBoxVMM.dylib \
343 MacOS/VBoxXPCOM.dylib \
344 MacOS/VBoxXPCOMC.dylib \
345 MacOS/components/VBoxC.dylib \
346 MacOS/components/VBoxSVCM.dylib \
347 MacOS/components/VBoxXPCOMIPCC.dylib \
348 MacOS/VBoxAuth.dylib \
349 MacOS/VBoxAuthSimple.dylib \
350 $(if $(VBOX_WITH_GUEST_CONTROL),MacOS/VBoxGuestControlSvc.dylib,)
351ifneq ($(wildcard $(VBOX_PATH_DIST)/VirtualBox.app/Contents/MacOS/accessible/libqtaccessiblewidgets.dylib),)
352 VBOX_DI_VBAPP_DYLIBS += \
353 MacOS/accessible/libqtaccessiblewidgets.dylib
354endif
355if defined(VBOX_WITH_VRDP) && !defined(VBOX_WITH_EXTPACK_PUEL)
356 VBOX_DI_VBAPP_DYLIBS += \
357 MacOS/VBoxVRDP.dylib
358endif
359ifdef VBOX_WITH_CROGL
360 VBOX_DI_VBAPP_DYLIBS += \
361 MacOS/VBoxOGLhostcrutil.dylib \
362 MacOS/VBoxOGLhosterrorspu.dylib \
363 MacOS/VBoxOGLrenderspu.dylib \
364 MacOS/VBoxSharedCrOpenGL.dylib
365endif
366ifdef VBOX_WITH_DEBUGGER_GUI
367 VBOX_DI_VBAPP_DYLIBS += \
368 MacOS/VBoxDbg.dylib
369endif
370ifdef VBOX_WITH_HARDENING
371 VBOX_DI_VBAPP_DYLIBS += \
372 MacOS/VirtualBox.dylib \
373 MacOS/VBoxNetDHCP.dylib \
374 MacOS/VBoxNetNAT.dylib \
375 MacOS/VBoxHeadless.dylib
376endif
377ifdef VBOX_WITH_HDDPARALLELS_INSTALL
378 VBOX_DI_VBAPP_DYLIBS += \
379 MacOS/VBoxHDDParallels.dylib
380endif
381if defined(VBOX_WITH_PYTHON) && !defined(VBOX_WITHOUT_VBOXPYTHON_FOR_OSX_10_6)
382 VBOX_DI_VBAPP_DYLIBS += \
383 MacOS/VBoxPython2_6.so
384endif
385if defined(VBOX_WITH_PYTHON) && !defined(VBOX_WITHOUT_VBOXPYTHON_FOR_OSX_10_7)
386 VBOX_DI_VBAPP_DYLIBS += \
387 MacOS/VBoxPython2_7.so
388endif
389ifdef VBOX_WITH_VMSVGA3D
390 VBOX_DI_VBAPP_DYLIBS += \
391 MacOS/VBoxSVGA3D.dylib \
392 MacOS/VBoxSVGA3DObjC.dylib
393endif
394
395VBOX_DI_VBAPP_DYLIBS.x86 := \
396 MacOS/VBoxREM32.dylib \
397 MacOS/VBoxREM64.dylib
398ifdef VBOX_WITH_PYTHON
399 VBOX_DI_VBAPP_DYLIBS.x86 += \
400 MacOS/VBoxPython2_5.so \
401 $(if-expr defined(VBOX_WITH_MAC_OS_X_10_4_SUPPORT),MacOS/VBoxPython2_3.so,)
402endif
403
404VBOX_DI_VBAPP_DYLIBS.amd64 :=
405if defined(VBOX_WITH_PYTHON) && defined(VBOX_WITHOUT_VBOXPYTHON_FOR_OSX_10_6)
406 VBOX_DI_VBAPP_DYLIBS.amd64 += \
407 MacOS/VBoxPython2_6.so
408endif
409
410if defined(VBOX_WITH_JXPCOM)
411 VBOX_DI_VBAPP_DYLIBS += \
412 MacOS/libvboxjxpcom.jnilib
413endif
414
415if1of ($(VBOX_DI_VBAPP_DYLIBS.amd64), $(VBOX_DI_VBAPP_DYLIBS.x86))
416 $(error Conflict.$(NLTAB)VBOX_DI_VBAPP_DYLIBS.amd64=$(VBOX_DI_VBAPP_DYLIBS.amd64)$(NLTAB)VBOX_DI_VBAPP_DYLIBS.x86 =$(VBOX_DI_VBAPP_DYLIBS.x86))
417endif
418if1of ($(VBOX_DI_VBAPP_DYLIBS.amd64) $(VBOX_DI_VBAPP_DYLIBS.x86),$(VBOX_DI_VBAPP_DYLIBS))
419 $(error Conflict.$(NLTAB)VBOX_DI_VBAPP_DYLIBS.amd64=$(VBOX_DI_VBAPP_DYLIBS.amd64)$(NLTAB)VBOX_DI_VBAPP_DYLIBS.x86 =$(VBOX_DI_VBAPP_DYLIBS.x86)$(NLTAB)VBOX_DI_VBAPP_DYLIBS=$(VBOX_DI_VBAPP_DYLIBS))
420endif
421
422VBOX_DI_VBAPP_PROGS = \
423 MacOS/VBoxManage \
424 MacOS/VBoxSVC \
425 MacOS/VBoxHeadless \
426 MacOS/VBoxXPCOMIPCD \
427 MacOS/VBoxNetAdpCtl \
428 MacOS/VBoxNetDHCP \
429 MacOS/VBoxNetNAT \
430 MacOS/VBoxExtPackHelperApp \
431 MacOS/VBoxBalloonCtrl \
432 MacOS/VBoxAutostart \
433 MacOS/VirtualBoxVM \
434 $(if $(VBOX_WITH_WEBSERVICES),MacOS/vboxwebsrv) \
435 MacOS/VirtualBox \
436 $(if $(VBOX_WITH_DTRACE),MacOS/VBoxDTrace,)
437
438VBOX_DI_VBAPP_UNIVERSAL_PROGS = \
439 MacOS/vmstarter \
440 $(if $(VBOX_WITH_VBOX_IMG)$(VBOX_WITH_TESTCASES),MacOS/vbox-img,)
441
442VBOX_DI_VBAPP_OTHER_UNIVERSAL_BINS = \
443 MacOS/VMMR0.r0 \
444 MacOS/VBoxDDR0.r0 \
445 MacOS/VBoxDD2R0.r0
446
447VBOX_DI_VBAPP_OTHER_BINS = \
448 MacOS/VMMGC.gc \
449 MacOS/VBoxDDGC.gc \
450 MacOS/VBoxDD2GC.gc
451
452VBOX_DI_VBAPP_DUPLICATED_RESOURCE_FILES = \
453 Resources/virtualbox.icns \
454 Resources/virtualbox.png \
455 Resources/virtualbox-vbox.icns \
456 Resources/virtualbox-vbox-extpack.icns \
457 Resources/virtualbox-ovf.icns \
458 Resources/virtualbox-ova.icns \
459 Resources/virtualbox-vdi.icns \
460 Resources/virtualbox-vmdk.icns \
461 Resources/virtualbox-vhd.icns \
462 Resources/virtualbox-hdd.icns
463
464VBOX_DI_VBAPP_MISC_FILES = \
465 Info.plist \
466 PkgInfo \
467 $(VBOX_DI_VBAPP_DUPLICATED_RESOURCE_FILES) \
468 MacOS/components/VBoxXPCOMBase.xpt \
469 MacOS/components/VirtualBox_XPCOM.xpt \
470 Resources/VirtualBoxVM.app/Contents/Info.plist \
471 Resources/VirtualBoxVM.app/Contents/PkgInfo \
472 $(addprefix Resources/VirtualBoxVM.app/Contents/,$(VBOX_DI_VBAPP_DUPLICATED_RESOURCE_FILES)) \
473 Resources/vmstarter.app/Contents/Info.plist \
474 Resources/vmstarter.app/Contents/PkgInfo \
475 $(addprefix Resources/vmstarter.app/Contents/,$(VBOX_DI_VBAPP_DUPLICATED_RESOURCE_FILES))
476ifdef VBOX_WITH_DOCS_PACKING
477VBOX_DI_VBAPP_MISC_FILES += \
478 MacOS/UserManual.pdf
479endif
480ifdef VBOX_WITH_ADDITIONS_PACKING
481 ifneq ($(wildcard $(VBOX_PATH_DIST)/VirtualBox.app/Contents/MacOS/VBoxGuestAdditions.iso),)
482 VBOX_DI_VBAPP_MISC_FILES += \
483 MacOS/VBoxGuestAdditions.iso
484 endif
485endif
486ifdef VBOX_WITH_EFIFW_PACKING
487VBOX_DI_VBAPP_MISC_FILES += \
488 MacOS/VBoxEFI32.fd \
489 MacOS/VBoxEFI64.fd
490endif
491VBOX_DI_VBAPP_MISC_FILES += \
492 Frameworks/QtGui$(VBOX_QT4_INFIX).framework/Versions/4/Resources/qt_menu.nib/classes.nib \
493 Frameworks/QtGui$(VBOX_QT4_INFIX).framework/Versions/4/Resources/qt_menu.nib/info.nib \
494 Frameworks/QtGui$(VBOX_QT4_INFIX).framework/Versions/4/Resources/qt_menu.nib/keyedobjects.nib
495
496VBOX_DI_VBAPP_SYMLINKS = \
497 Resources/VirtualBoxVM.app/Contents/MacOS=>../../../MacOS/ \
498 Resources/vmstarter.app/Contents/MacOS=>../../../MacOS/ \
499 $(foreach qtmod, $(VBOX_QT4_MOD_NAMES), Frameworks/$(qtmod).framework/$(qtmod)=>Versions/4/$(qtmod)) \
500 Frameworks/QtGui$(VBOX_QT4_INFIX).framework/Resources=>Versions/4/Resources/
501
502ifdef VBOX_WITH_PYTHON
503 # Python XPCOM glue
504 VBOX_DI_VBAPP_PYTHON_FILES = \
505 $(VBOXINST_SDK_BINDINGS_XPCOM_PYTHON_FILES) \
506 $(VBOXINST_SDK_INSTALLER_PYTHON_FILES)
507endif
508
509
510# (The dependencies are including way too much here because I'm lazy.)
511$(VBOX_PATH_PACK_TMP)/Packages/VirtualBox.pkg: \
512 $(foreach f,$(VBOX_INSTALLER_ADD_LANGUAGES), \
513 $(VBOX_BRAND_$(f)_VIRTUALBOX_DESCRIPTION_PLIST)) \
514 $(foreach f, $(VBOX_DI_VBAPP_DYLIBS) $(VBOX_DI_VBAPP_OTHER_UNIVERSAL_BINS) $(VBOX_DI_VBAPP_UNIVERSAL_PROGS) $(VBOX_DI_VBAPP_OTHER_BINS) $(VBOX_DI_VBAPP_PROGS) $(VBOX_DI_VBAPP_MISC_FILES)\
515 ,$(call VBOX_DI_FN_DEP_BOTH,VirtualBox.app/Contents/$(f)) ) \
516 $(foreach f, $(VBOX_DI_VBAPP_DYLIBS.x86) $(VBOX_DI_VBAPP_MISC_FILES.x86)\
517 ,$(call VBOX_DI_FN_DEP_32,VirtualBox.app/Contents/$(f)) ) \
518 $(foreach f, $(VBOX_DI_VBAPP_DYLIBS.amd64) $(VBOX_DI_VBAPP_MISC_FILES.amd64)\
519 ,$(call VBOX_DI_FN_DEP_64,VirtualBox.app/Contents/$(f)) ) \
520 \
521 $(if $(VBOX_WITH_DOCS_PACKING),$(VBOX_ADD_MANUALS),) \
522 $(VBOX_BRAND_LICENSE_TXT) \
523 $(wildcard $(VBOX_PATH_DI_SRC)/VirtualBox/*) \
524 $(wildcard $(VBOX_PATH_DI_SRC)/VirtualBox/*.lproj/*) \
525 $$(addprefix $(VBOX_PATH_DIST)/VirtualBox.app/Contents/MacOS/nls/,$(VBOX_INSTALL_LANG_FILES)) \
526 \
527 $$(wildcard $(VBOX_PATH_DIST)/VirtualBox.app/*) \
528 $(filter-out Disabled, $(wildcard $(VBOX_PATH_DIST)/VirtualBox.app/Contents/*)) \
529 $$(wildcard $(VBOX_PATH_DIST)/VirtualBox.app/Contents/Resources/*) \
530 $$(wildcard $(VBOX_PATH_DIST)/VirtualBox.app/Contents/Resources/VirtualBoxVM.app/Contents/*) \
531 $$(wildcard $(VBOX_PATH_DIST)/VirtualBox.app/Contents/Resources/VirtualBoxVM.app/Contents/Resources/*) \
532 $$(wildcard $(VBOX_PATH_DIST)/VirtualBox.app/Contents/Resources/VirtualBoxVM.app/Contents/Resources/*.lproj/*) \
533 $$(wildcard $(VBOX_PATH_DIST)/VirtualBox.app/Contents/Resources/vmstarter.app/Contents/*) \
534 $$(wildcard $(VBOX_PATH_DIST)/VirtualBox.app/Contents/Resources/vmstarter.app/Contents/Resources/*) \
535 $$(wildcard $(VBOX_PATH_DIST)/VirtualBox.app/Contents/Resources/vmstarter.app/Contents/Resources/*.lproj/*) \
536 $$(wildcard $(VBOX_PATH_DIST)/VirtualBox.app/Contents/Resources/*.lproj/*) \
537 $$(wildcard $(VBOX_PATH_DIST)/VirtualBox.app/Contents/MacOS/*) \
538 $$(wildcard $(VBOX_PATH_DIST)/VirtualBox.app/Contents/MacOS/additions/*) \
539 $$(wildcard $(VBOX_PATH_DIST)/VirtualBox.app/Contents/MacOS/components/*) \
540 $$(wildcard $(VBOX_PATH_DIST)/VirtualBox.app/Contents/MacOS/accessible/*) \
541 $(if-expr defined(VBOX_WITH_PYTHON), $(addprefix $(VBOX_PATH_DIST)/, $(VBOX_DI_VBAPP_PYTHON_FILES)),) \
542 $(if-expr defined(VBOX_WITH_JXPCOM), $(addprefix $(VBOX_PATH_DIST)/, sdk/bindings/xpcom/java/vboxjxpcom.jar),) \
543 $(if $(VBOX_WITH_WEBSERVICES),$(VBOX_PATH_DI_SRC)/VirtualBox/org.virtualbox.vboxwebsrv.plist,) \
544 $(VBOX_PATH_DI_SRC)/VirtualBox/org.virtualbox.vboxballoonctrl.plist \
545 $(VBOX_PATH_DI_SRC)/VirtualBox/org.virtualbox.vboxautostart.plist \
546 $(VBOX_PATH_DI_SRC)/VirtualBox/VBoxAutostartDarwin.sh \
547 $(if-expr defined(VBOX_WITH_DTRACE), \
548 $(foreach f, $(VBOXINST_DTRACE_LIB_ARCH_FILES), \
549 $(call VBOX_DI_FN_DEP_32,VirtualBox.app/Contents/MacOS/dtrace/lib/x86/$f) \
550 $(call VBOX_DI_FN_DEP_64,VirtualBox.app/Contents/MacOS/dtrace/lib/amd64/$f)) \
551 $(foreach f, $(VBOXINST_DTRACE_TESTCASE_ARCH_FILES), \
552 $(call VBOX_DI_FN_DEP_32,VirtualBox.app/Contents/MacOS/dtrace/testcase/x86/$f) \
553 $(call VBOX_DI_FN_DEP_64,VirtualBox.app/Contents/MacOS/dtrace/testcase/amd64/$f)) \
554 $(addprefix $(VBOX_PATH_DIST)/VirtualBox.app/Contents/MacOS/dtrace/scripts/,$(VBOXINST_DTRACE_SCRIPTS_FILES)) \
555 ,) \
556 $(VBOX_DARWIN_INST_DEP_ON_MAKEFILE)
557 $(call MSG_TOOL,pkgbuild,,,$@)
558 @# Cleanup any previously failed attempts.
559 sudo rm -Rf \
560 $@ \
561 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root \
562 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.desc \
563 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.res
564 @# Correct directory permissions are important.
565 $(MKDIR) -p \
566 $(@D) \
567 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.desc \
568 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.res \
569 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.res/English.lproj
570 $(MKDIR) -p -m 0775 \
571 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications
572 $(MKDIR) -p -m 0755 $(sort \
573 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents \
574 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS \
575 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/components \
576 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/nls \
577 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/accessible \
578 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/Resources \
579 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/Resources/VirtualBoxVM.app \
580 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/Resources/VirtualBoxVM.app/Contents \
581 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/Resources/vmstarter.app \
582 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/Resources/vmstarter.app/Contents \
583 $(if-expr defined(VBOX_WITH_PYTHON), \
584 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/sdk \
585 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/sdk/installer \
586 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/sdk/installer/vboxapi \
587 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/sdk/bindings/ \
588 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/sdk/bindings/xpcom \
589 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/sdk/bindings/xpcom/python \
590 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/sdk/bindings/xpcom/python/xpcom \
591 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/sdk/bindings/xpcom/python/xpcom/client \
592 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/sdk/bindings/xpcom/python/xpcom/server,) \
593 $(if-expr defined(VBOX_WITH_JXPCOM), \
594 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/sdk/bindings/xpcom/java,) \
595 $(addprefix $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/,$(dir \
596 $(VBOX_DI_VBAPP_DYLIBS) \
597 $(VBOX_DI_VBAPP_OTHER_UNIVERSAL_BINS) \
598 $(VBOX_DI_VBAPP_UNIVERSAL_PROGS) \
599 $(VBOX_DI_VBAPP_OTHER_BINS) \
600 $(VBOX_DI_VBAPP_PROGS) \
601 $(VBOX_DI_VBAPP_MISC_FILES) \
602 $(VBOX_DI_VBAPP_DYLIBS.$(KBUILD_TARGET_ARCH)) \
603 $(VBOX_DI_VBAPP_MISC_FILES.$(KBUILD_TARGET_ARCH)) \
604 ))\
605 )
606 @# Create the .lproj language directories
607 $(MKDIR) -p -m 0755 \
608 $(addprefix $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/Resources/,$(VBOX_INSTALL_LANG_LPROJ))
609 @# Install all supported language files
610 $(foreach f, $(VBOX_INSTALL_LANG_FILES) \
611 ,$(INSTALL) -m 0644 $(VBOX_PATH_DIST)/VirtualBox.app/Contents/MacOS/nls/$(f) $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/nls/$(f)$(NLTAB))
612ifdef VBOX_WITH_WEBSERVICES
613 $(INSTALL) -m 0644 $(VBOX_PATH_DI_SRC)/VirtualBox/org.virtualbox.vboxwebsrv.plist $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/
614endif
615 $(INSTALL) -m 0644 $(VBOX_PATH_DI_SRC)/VirtualBox/org.virtualbox.vboxballoonctrl.plist $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/
616 $(INSTALL) -m 0644 $(VBOX_PATH_DI_SRC)/VirtualBox/org.virtualbox.vboxautostart.plist $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/
617 $(INSTALL) -m 0755 $(VBOX_PATH_DI_SRC)/VirtualBox/VBoxAutostartDarwin.sh $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/
618 @# Install the python stuff
619ifdef VBOX_WITH_PYTHON
620 $(foreach f,$(VBOX_DI_VBAPP_PYTHON_FILES) \
621 ,$(INSTALL) -m 0644 $(VBOX_PATH_DIST)/$(f) $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/$(f)$(NLTAB) )
622 $(INSTALL) -m 0755 $(PATH_ROOT)/src/VBox/Frontends/VBoxShell/vboxshell.py $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS
623endif
624ifdef VBOX_WITH_JXPCOM
625 $(INSTALL) -m 0755 $(VBOX_PATH_DIST)/sdk/bindings/xpcom/java/vboxjxpcom.jar $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/sdk/bindings/xpcom/java/vboxjxpcom.jar
626endif
627 @# Copy misc files.
628 $(foreach f,$(VBOX_DI_VBAPP_MISC_FILES) \
629 ,$(INSTALL) -m 0644 $(VBOX_PATH_DIST)/VirtualBox.app/Contents/$(f) $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(f)$(NLTAB) )
630 $(INSTALL) -m 644 $(VBOX_BRAND_LICENSE_TXT) $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/Resources/LICENSE
631ifdef VBOX_WITH_DOCS_PACKING
632 $(foreach f,$(VBOX_ADD_MANUALS) \
633 ,$(INSTALL) -m 0644 $(f) $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/$(NLTAB))
634endif
635 @# Create symlinks.
636 $(foreach symlink,$(VBOX_DI_VBAPP_SYMLINKS) $(VBOX_DI_VBAPP_SYMLINKS.$(KBUILD_TARGET_ARCH)) \
637 ,$(LN) -s $(word 2,$(subst =>, ,$(symlink))) $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(word 1,$(subst =>, ,$(symlink)))$(NLTAB))
638 @# Copy the dylibs.
639 $(foreach dylib, $(VBOX_DI_VBAPP_DYLIBS) $(VBOX_DI_VBAPP_DYLIBS.$(KBUILD_TARGET_ARCH)) \
640 ,$(INSTALL) -m 0644 $(VBOX_PATH_DIST)/VirtualBox.app/Contents/$(dylib) $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(dylib)$(NLTAB))
641 @# Copy the other binaries.
642 $(foreach otherbin, $(VBOX_DI_VBAPP_OTHER_UNIVERSAL_BINS) \
643 ,$(INSTALL) -m 0644 $(VBOX_PATH_DIST)/VirtualBox.app/Contents/$(otherbin) $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(otherbin)$(NLTAB))
644 $(foreach otherbin, $(VBOX_DI_VBAPP_OTHER_BINS) \
645 ,$(INSTALL) -m 0644 $(VBOX_PATH_DIST)/VirtualBox.app/Contents/$(otherbin) $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(otherbin)-$(KBUILD_TARGET_ARCH)$(NLTAB))
646 @# Create/copy the universal executable binaries.
647 $(foreach otherbin, $(VBOX_DI_VBAPP_UNIVERSAL_PROGS) \
648 ,$(INSTALL) -m 0755 $(VBOX_PATH_DIST)/VirtualBox.app/Contents/$(otherbin) $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(otherbin)$(NLTAB))
649 @# Copy the binaries.
650 $(foreach prog, $(VBOX_DI_VBAPP_PROGS) \
651 ,$(INSTALL) -m 0755 $(VBOX_PATH_DIST)/VirtualBox.app/Contents/$(prog) $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(prog)-$(KBUILD_TARGET_ARCH)$(NLTAB))
652#ifdef VBOX_WITH_HARDENING - disabled temporarily
653if 1
654 @# We cannot use @executable_path together with setuid binaries, dyld gets upset about it. So, fix Qt libs and users.
655 $(foreach qtmod, $(VBOX_QT4_MOD_NAMES) \
656 ,install_name_tool -id /Applications/VirtualBox.app/Contents/Frameworks/$(qtmod).framework/Versions/4/$(qtmod) \
657 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/Frameworks/$(qtmod).framework/Versions/4/$(qtmod)$(NLTAB) )
658 $(foreach f, \
659 $(VBOX_DI_VBAPP_DYLIBS) \
660 $(VBOX_DI_VBAPP_DYLIBS.$(KBUILD_TARGET_ARCH)) \
661 $(addsuffix -$(KBUILD_TARGET_ARCH), $(VBOX_DI_VBAPP_PROGS)) \
662 ,install_name_tool \
663 $(foreach qtmod, $(VBOX_QT4_MOD_NAMES), \
664 -change @executable_path/../Frameworks/$(qtmod).framework/Versions/4/$(qtmod) \
665 /Applications/VirtualBox.app/Contents/Frameworks/$(qtmod).framework/Versions/4/$(qtmod) \
666 -change $(VBOX_PATH_QT4)/Frameworks/$(qtmod).framework/Versions/4/$(qtmod) \
667 /Applications/VirtualBox.app/Contents/Frameworks/$(qtmod).framework/Versions/4/$(qtmod) \
668 -change $(PATH_SDK_QT4)/$(qtmod).framework/Versions/4/$(qtmod) \
669 /Applications/VirtualBox.app/Contents/Frameworks/$(qtmod).framework/Versions/4/$(qtmod) \
670 -change $(qtmod).framework/Versions/4/$(qtmod) \
671 /Applications/VirtualBox.app/Contents/Frameworks/$(qtmod).framework/Versions/4/$(qtmod) \
672 ) \
673 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(f)$(NLTAB) )
674endif
675ifdef VBOX_WITH_DTRACE
676 @# DTrace library, testcases and scripts.
677 $(MKDIR) -p -m 0755 -- \
678 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/dtrace/lib/$(KBUILD_TARGET_ARCH)/ \
679 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/dtrace/testcase/$(KBUILD_TARGET_ARCH)/ \
680 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/dtrace/scripts/
681 $(foreach file, $(addprefix lib/$(KBUILD_TARGET_ARCH)/,$(VBOXINST_DTRACE_LIB_ARCH_FILES)) \
682 $(addprefix testcase/$(KBUILD_TARGET_ARCH)/,$(VBOXINST_DTRACE_TESTCASE_ARCH_FILES)) \
683 $(addprefix scripts/,$(VBOXINST_DTRACE_SCRIPTS_FILES)) \
684 ,$(INSTALL) -m 0655 $(VBOX_PATH_DIST)/VirtualBox.app/Contents/MacOS/dtrace/$(file) \
685 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/dtrace/$(file)$(NLTAB))
686endif
687
688 @# Signed the binaries and the application bundle.
689 @# Note #1 - We cannot sign the application binary here, since we switch to match the kernel bitness.
690 @# Note #2 - Must sign -amd64/-x86 suffixed binaries without the suffix, or verification fails. (Too lazy to do this for *.gc.)
691ifdef VBOX_SIGNING_MODE
692 $(foreach qtmod, $(VBOX_QT4_MOD_NAMES) \
693 ,$(NLTAB)$(call VBOX_SIGN_MACHO_FN,$(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/Frameworks/$(qtmod).framework/Versions/4/$(qtmod),org.virtualbox.app.frameworks.$(qtmod)) )
694 $(foreach dylib, \
695 $(VBOX_DI_VBAPP_DYLIBS) \
696 $(VBOX_DI_VBAPP_DYLIBS.$(KBUILD_TARGET_ARCH)) \
697 , $(NLTAB)$(call VBOX_SIGN_MACHO_FN,$(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(dylib),org.virtualbox.app.macos.$(notdir $(dylib))) )
698 $(foreach bin, $(VBOX_DI_VBAPP_UNIVERSAL_PROGS) \
699 , $(NLTAB)$(call VBOX_SIGN_MACHO_FN,$(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(bin),org.virtualbox.app.macos.$(notdir $(bin))) )
700 ifdef VBOX_NOT_OSX_105 # Still being hacked on, everything needs to be signed that lives in Contents/MacOS, guess we have to MOVE files out.
701 $(foreach other, $(VBOX_DI_VBAPP_OTHER_UNIVERSAL_BINS) \
702 , $(NLTAB)$(call VBOX_SIGN_MACHO_FN,$(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(other),org.virtualbox.app.macos.$(notdir $(other))) )
703 $(foreach arch, $(KBUILD_TARGET_ARCH) \
704 , $(foreach other, $(VBOX_DI_VBAPP_OTHER_BINS) \
705 , $(NLTAB)$(call VBOX_SIGN_MACHO_FN,$(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(other)-$(arch),org.virtualbox.app.macos.$(notdir $(other))-$(arch)) ) )
706 $(foreach other, $(filter MacOS/%,$(VBOX_DI_VBAPP_MISC_FILES)) \
707 $(if $(VBOX_WITH_PYTHON),MacOS/vboxshell.py,) \
708 MacOS/VBoxAutostartDarwin.sh \
709 , $(NLTAB)$(call VBOX_SIGN_VMM_MOD_FN,$(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(other),org.virtualbox.app.macos.$(notdir $(other))) )
710 else
711 $(foreach other, $(VBOX_DI_VBAPP_OTHER_UNIVERSAL_BINS) \
712 , $(NLTAB)$(call VBOX_SIGN_VMM_MOD_FN,$(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(other),org.virtualbox.app.macos.$(notdir $(other))) )
713 $(foreach arch, $(KBUILD_TARGET_ARCH) \
714 , $(foreach other, $(VBOX_DI_VBAPP_OTHER_BINS) \
715 , $(NLTAB)$(call VBOX_SIGN_VMM_MOD_FN,$(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(other)-$(arch),org.virtualbox.app.macos.$(notdir $(other))-$(arch)) ) )
716 endif
717 $(foreach arch, $(KBUILD_TARGET_ARCH) \
718 , $(foreach bin, $(if-expr defined(VBOX_NOT_OSX_105),$(filter-out MacOS/VirtualBox,$(VBOX_DI_VBAPP_PROGS)),$(VBOX_DI_VBAPP_PROGS)) \
719 , \
720 $(NLTAB)$(MV) -- $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(bin)-$(arch) $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(bin) \
721 $(NLTAB)$(call VBOX_SIGN_MACHO_FN,$(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(bin),org.virtualbox.app.macos.$(notdir $(bin))) \
722 $(NLTAB)$(MV) -- $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(bin) $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/$(bin)-$(arch) \
723 ))
724 ifdef VBOX_NOT_OSX_105 # requires codesign+framworks from Lion or later. Snow Leopard codesign says object file format invalid or unsuitable.
725 $(call VBOX_SIGN_BUNDLE_FN,$(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/Resources/VirtualBoxVM.app,)
726 $(call VBOX_SIGN_BUNDLE_FN,$(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/Resources/vmstarter.app,)
727 $(call VBOX_SIGN_BUNDLE_FN,$(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app,)
728 endif
729endif
730 @# Set the correct owner and set the set-user-ID-on-execution bit on the relevant executables.
731 sudo chown -R root:admin $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root
732ifdef VBOX_WITH_HARDENING
733 sudo chmod u+s \
734 $(foreach bin,VBoxHeadless VirtualBox VirtualBoxVM VBoxNetAdpCtl VBoxNetDHCP VBoxNetNAT,\
735 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/VirtualBox.app/Contents/MacOS/$(bin)-$(KBUILD_TARGET_ARCH))
736endif
737 @# Do keyword replacement in the package info and description files.
738 $(SED) \
739 -e 's/@VBOX_VERSION_STRING@/$(VBOX_VERSION_STRING)/g' \
740 -e 's/@VBOX_VERSION_MAJOR@/$(VBOX_VERSION_MAJOR)/g' \
741 -e 's/@VBOX_VERSION_MINOR@/$(VBOX_VERSION_MINOR)/g' \
742 -e 's/@VBOX_VERSION_BUILD@/$(VBOX_VERSION_BUILD)/g' \
743 -e 's/@VBOX_VENDOR@/$(VBOX_VENDOR)/g' \
744 -e 's/@VBOX_PRODUCT@/$(VBOX_PRODUCT)/g' \
745 -e 's/@VBOX_C_YEAR@/$(VBOX_C_YEAR)/g' \
746 --output $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.desc/PkgBuildComponent.plist \
747 $(VBOX_PATH_DI_SRC)/VirtualBox/PkgBuildComponent.plist
748 @# Copy the resources.
749 $(INSTALL) -m 0755 $(VBOX_PATH_DI_SRC)/VirtualBox/preflight $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.res/
750 $(INSTALL) -m 0755 $(VBOX_PATH_DI_SRC)/VirtualBox/postflight $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.res/
751 @# Build the package.
752 $(VBOX_PKGBUILD) \
753 --root $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root/Applications/ \
754 --component-plist $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.desc/PkgBuildComponent.plist \
755 --script $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.res \
756 --identifier org.virtualbox.pkg.virtualbox \
757 --version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
758 --install-location /Applications/ \
759 --ownership preserve \
760 $(if $(VBOX_MACOSX_INSTALLER_SIGN),--sign "$(VBOX_MACOSX_INSTALLER_SIGN)",) \
761 $@
762 @# Cleanup
763 sudo chown -R "$(shell whoami)" \
764 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root
765 sudo chmod -R a-s \
766 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root
767 sudo rm -Rf \
768 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.root \
769 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.desc \
770 $(VBOX_PATH_PACK_TMP)/VirtualBox.pkg.res
771
772#
773# The VirtualBox CLI wrapper scripts.
774#
775$(VBOX_PATH_PACK_TMP)/Packages/VirtualBoxCLI.pkg: \
776 $$(wildcard $(VBOX_PATH_DI_SRC)/VirtualBoxCLI/* \
777 $(VBOX_PATH_DI_SRC)/VirtualBoxCLI/*.lproj/*) \
778 $(foreach f,$(VBOX_INSTALLER_ADD_LANGUAGES) \
779 ,$(VBOX_BRAND_$(f)_VIRTUALBOXCLI_DESCRIPTION_PLIST)) \
780 $(VBOX_DARWIN_INST_DEP_ON_MAKEFILE)
781 $(call MSG_TOOL,pkgbuild,,,$@)
782 @# Cleanup any previously failed attempts.
783 sudo rm -Rf \
784 $@ \
785 $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root \
786 $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.desc \
787 $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.res
788 @# Correct directory permissions are important.
789 $(MKDIR) -p \
790 $(@D) \
791 $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.desc \
792 $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.res \
793 $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.res/English.lproj
794 $(MKDIR) -p -m 0755 \
795 $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr \
796 $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin
797 @# Generate the wrapper scripts.
798 $(APPEND) -tn $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/VirtualBox \
799 '#!/bin/bash' 'exec /Applications/VirtualBox.app/Contents/MacOS/VirtualBox "$$@"'
800 $(APPEND) -tn $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/VBoxManage \
801 '#!/bin/bash' 'exec /Applications/VirtualBox.app/Contents/MacOS/VBoxManage "$$@"'
802 $(APPEND) -tn $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/VBoxVRDP \
803 '#!/bin/bash' 'exec /Applications/VirtualBox.app/Contents/MacOS/VBoxHeadless "$$@"'
804 $(APPEND) -tn $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/VBoxHeadless \
805 '#!/bin/bash' 'exec /Applications/VirtualBox.app/Contents/MacOS/VBoxHeadless "$$@"'
806ifdef VBOX_WITH_WEBSERVICES
807 $(APPEND) -tn $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/vboxwebsrv \
808 '#!/bin/bash' 'exec /Applications/VirtualBox.app/Contents/MacOS/vboxwebsrv "$$@"'
809endif
810if defined(VBOX_WITH_VBOX_IMG) || defined(VBOX_WITH_TESTCASES)
811 $(APPEND) $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/vbox-img \
812 '#!/bin/bash' 'exec /Applications/VirtualBox.app/Contents/MacOS/vbox-img "$$@"'
813endif
814 $(APPEND) -tn $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/VBoxBalloonCtrl \
815 '#!/bin/bash' 'exec /Applications/VirtualBox.app/Contents/MacOS/VBoxBalloonCtrl "$$@"'
816 $(APPEND) -tn $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/VBoxAutostart \
817 '#!/bin/bash' 'exec /Applications/VirtualBox.app/Contents/MacOS/VBoxAutostart "$$@"'
818ifdef VBOX_WITH_DTRACE
819 $(APPEND) -tn $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/VBoxDTrace \
820 '#!/bin/bash' 'exec /Applications/VirtualBox.app/Contents/MacOS/VBoxDTrace "$$@"'
821endif
822 @# Set the correct owners and file permissions.
823 sudo chmod 0755 $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin/*
824 sudo chown root:admin $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root
825 sudo chown -R root:wheel $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr
826 @# Build the package.
827 $(VBOX_PKGBUILD) \
828 --root $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root/usr/bin \
829 --identifier org.virtualbox.pkg.virtualboxcli \
830 --version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
831 --install-location /usr/bin \
832 --ownership preserve \
833 $(if $(VBOX_MACOSX_INSTALLER_SIGN),--sign "$(VBOX_MACOSX_INSTALLER_SIGN)",) \
834 $@
835 @# Cleanup
836 sudo chown -R "$(shell whoami)" \
837 $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root
838 sudo rm -Rf \
839 $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.root \
840 $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.desc \
841 $(VBOX_PATH_PACK_TMP)/VirtualBoxCLI.pkg.res
842
843
844#
845# Aliases.
846#
847VBoxKEXTs.pkg: $(VBOX_PATH_PACK_TMP)/Packages/VBoxKEXTs.pkg
848VirtualBoxCLI.pkg: $(VBOX_PATH_PACK_TMP)/Packages/VirtualBoxCLI.pkg
849VirtualBox.pkg: $(VBOX_PATH_PACK_TMP)/Packages/VirtualBox.pkg
850VirtualBox.mpkg: $(VBOX_PATH_PACK_TMP)/DiskImage/VirtualBox.pkg
851VirtualBox.dmg: $(VBOX_PATH_DIST)/VirtualBox-$(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)-r$(VBOX_SVN_REV).dmg
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