VirtualBox

source: vbox/trunk/src/VBox/Additions/Makefile.kmk@ 39789

Last change on this file since 39789 was 39749, checked in by vboxsync, 13 years ago

Ship VBoxCertUtil and the public part of the code signing certificate with the guest additions.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 12.9 KB
Line 
1# $Id: Makefile.kmk 39749 2012-01-11 14:49:40Z vboxsync $
2## @file
3# Top-level makefile for the VirtualBox Guest Additions.
4#
5
6#
7# Copyright (C) 2006-2010 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# Globals
23#
24VBOX_PATH_ADDITIONS_SRC := $(PATH_SUB_CURRENT)
25
26#
27# Cross building of the additions is generally done by remote building
28# by means of smbfs, cifs, VBOX_ONLY_ADDITIONS=1 and setting KBUILD_TARGET
29# and KBUILD_TARGET_ARCH to the desired target and architecture.
30#
31# Limited support for cross building the windows additions using wine
32# is provided. There are a couple of issues with the approach (lack of
33# signing, no VC++ 8 support, ++) that makes it unsuitable for releases.
34#
35#
36# Note! VBOX_WITH_ADDITIONS is checked for by our parent makefile.
37#
38# Note! VBOX_WITH_X11_ADDITIONS is set in Config.kmk
39#
40# Note! The additions build box will set the VBOX_WITH_ADDITIONS_ISO.win.x86
41# variables before invoking us from the root makefile.
42#
43# ==> All we have to worry about is what to do on the target we're on.
44#
45VBOX_WITH_ADDITIONS_ISO.$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH) = 1
46
47# Include sub-makefiles.
48include $(PATH_SUB_CURRENT)/common/Makefile.kmk
49
50ifndef VBOX_ONLY_TESTSUITE
51 ifdef VBOX_WITH_X11_ADDITIONS
52 include $(PATH_SUB_CURRENT)/x11/Makefile.kmk
53 endif
54
55 ifeq ($(KBUILD_TARGET),freebsd)
56 include $(PATH_SUB_CURRENT)/freebsd/Makefile.kmk
57 endif
58 ifeq ($(KBUILD_TARGET),linux)
59 include $(PATH_SUB_CURRENT)/linux/Makefile.kmk
60 endif
61 #ifeq ($(KBUILD_TARGET),os2)
62 # include $(PATH_SUB_CURRENT)/os2/Makefile.kmk
63 #endif
64 ifeq ($(KBUILD_TARGET),solaris)
65 include $(PATH_SUB_CURRENT)/solaris/Makefile.kmk
66 endif
67 ifeq ($(KBUILD_TARGET),win)
68 include $(PATH_SUB_CURRENT)/WINNT/Makefile.kmk
69 endif
70 ifeq ($(KBUILD_TARGET),darwin)
71 include $(PATH_SUB_CURRENT)/darwin/Makefile.kmk
72 endif
73
74 ifeq ($(KBUILD_TARGET),linux)
75 INSTALLS += LnxAddIso-scripts
76 LnxAddIso-scripts_INST = $(INST_ADDITIONS)
77 LnxAddIso-scripts_MODE = a+rx,u+w
78 LnxAddIso-scripts_SOURCES = \
79 $(LnxAddIso-scripts_0_OUTDIR)/runasroot.sh \
80 $(LnxAddIso-scripts_0_OUTDIR)/autorun.sh
81 LnxAddIso-scripts_CLEAN = \
82 $(LnxAddIso-scripts_0_OUTDIR)/runasroot.sh \
83 $(LnxAddIso-scripts_0_OUTDIR)/autorun.sh
84
85 $$(LnxAddIso-scripts_0_OUTDIR)/runasroot.sh: \
86 $(PATH_SUB_CURRENT)/../Installer/linux/runasroot.sh \
87 $(PATH_SUB_CURRENT)/../Installer/linux/sh-utils.sh \
88 | $$(dir $$@)
89 $(QUIET)$(SED) \
90 -e '/#include sh-utils.sh/ {' \
91 -e "r $(PATH_ROOT)/src/VBox/Installer/linux/sh-utils.sh" \
92 -e 'd' \
93 -e '}' \
94 --output $@ \
95 $<
96 $(QUIET)$(CHMOD) a+rx,u+w $@
97
98 $$(LnxAddIso-scripts_0_OUTDIR)/autorun.sh: \
99 $(PATH_SUB_CURRENT)/linux/installer/autorun.sh \
100 $(PATH_SUB_CURRENT)/../Installer/linux/sh-utils.sh \
101 | $$(dir $$@)
102 $(QUIET)$(SED) \
103 -e '/#include sh-utils.sh/ {' \
104 -e "r $(PATH_ROOT)/src/VBox/Installer/linux/sh-utils.sh" \
105 -e 'd' \
106 -e '}' \
107 --output $@ \
108 $<
109 $(QUIET)$(CHMOD) a+rx,u+w $@
110 endif # KBUILD_TARGET == linux
111 ifeq ($(KBUILD_TARGET),win)
112 #
113 # Inf2Cat requires all the files referenced in the .inf file
114 # to be present in the directory, so we have to do this from here,
115 # since VBoxGuest.sys is being built from the common sources.
116 #
117 INSTALLS += VBoxGuest-inf
118 VBoxGuest-inf_INST = $(INST_ADDITIONS)
119 VBoxGuest-inf_MODE = a+r,u+w
120 VBoxGuest-inf_SOURCES = \
121 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.inf
122 ifdef VBOX_SIGN_ADDITIONS
123 VBoxGuest-inf_SOURCES += \
124 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.cat \
125 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.sys \
126 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxControl.exe \
127 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxTray.exe
128 endif # signing
129 VBoxGuest-inf_CLEAN = $(VBoxGuest-inf_SOURCES)
130 VBoxGuest-inf_BLDDIRS = \
131 $(PATH_TARGET)/VBoxGuestCat.dir
132
133 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.inf: $(PATH_SUB_CURRENT)/common/VBoxGuest/win/VBoxGuest.inf $(MAKEFILE_CURRENT) | $$(dir $$@)
134 $(call MSG_GENERATE,VBoxGuest-inf,$@,$<)
135 $(call VBOX_EDIT_INF_FN,$<,$@)
136
137 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.sys: $$(VBoxGuest_1_TARGET) | $$(dir $$@)
138 $(INSTALL) -m 644 $< $(@D)
139
140 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxControl.exe: $$(VBoxControl_1_TARGET) | $$(dir $$@)
141 $(INSTALL) -m 755 $< $(@D)
142
143 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxTray.exe: $$(VBoxTray_1_TARGET) | $$(dir $$@)
144 $(INSTALL) -m 755 $< $(@D)
145
146 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.cat: \
147 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.inf \
148 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.sys \
149 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxControl.exe \
150 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxTray.exe
151 $(call MSG_TOOL,Inf2Cat,VBoxGuest-inf,$@,$<)
152 $(call VBOX_MAKE_CAT_FN, $(@D),$@)
153 endif # KBUILD_TARGET == win
154
155 # The packing target rule, but only if we're on the local build box.
156 # (VBOX_WITHOUT_ADDITIONS_ISO is used by the additions build box, see the root makefile.)
157 ifndef VBOX_WITHOUT_ADDITIONS_ISO
158 PACKING += $(PATH_STAGE_BIN)/additions/VBoxGuestAdditions.iso
159 endif
160endif # !VBOX_ONLY_TESTSUITE
161
162include $(KBUILD_PATH)/subfooter.kmk
163
164#
165# File per-OS/arch file specs for the additions iso (alphabetical order).
166#
167# We test for the VBOX_WITH_ADDITIONS_ISO.os.arch so that we don't have to
168# do the $(if )'ing down where the GUESTADDITIONS_FILESPEC.os.arch down
169# in the dependency list and mkisofs command.
170#
171
172ifdef VBOX_WITH_ADDITIONS_ISO.freebsd.amd64
173 VBOX_PATH_ADDITIONS.freebsd.amd64 = $(PATH_OUT_BASE)/freebsd.amd64/$(KBUILD_TYPE)/bin/additions
174 GUESTADDITIONS_FILESPEC.freebsd.amd64 = \
175 VBoxFreeBSDAdditions-amd64.tbz=$(VBOX_PATH_ADDITIONS.freebsd.amd64)/VBoxFreeBSDAdditions.tbz
176endif
177ifdef VBOX_WITH_ADDITIONS_ISO.freebsd.x86
178 VBOX_PATH_ADDITIONS.freebsd.x86 = $(PATH_OUT_BASE)/freebsd.x86/$(KBUILD_TYPE)/bin/additions
179 GUESTADDITIONS_FILESPEC.freebsd.x86 = \
180 VBoxFreeBSDAdditions-x86.tbz=$(VBOX_PATH_ADDITIONS.freebsd.x86)/VBoxFreeBSDAdditions.tbz
181endif
182
183
184ifdef VBOX_WITH_ADDITIONS_ISO.os2.x86
185 VBOX_PATH_ADDITIONS.os2.x86 = $(PATH_OUT_BASE)/os2.x86/$(KBUILD_TYPE)/bin/additions
186 GUESTADDITIONS_FILESPEC.os2.x86 = \
187 32Bit/OS2/VBoxGuest.sys=$(VBOX_PATH_ADDITIONS.os2.x86)/VBoxGuest.sys \
188 32Bit/OS2/VBoxService.exe=$(VBOX_PATH_ADDITIONS.os2.x86)/VBoxService.exe \
189 32Bit/OS2/gengradd.dll=$(VBOX_PATH_ADDITIONS.os2.x86)/gengradd.dll \
190 32Bit/OS2/libc063.dll=$(VBOX_PATH_ADDITIONS_SRC)/os2/Bin/libc063.dll \
191 32Bit/OS2/readme.txt=$(VBOX_PATH_ADDITIONS_SRC)/os2/Bin/readme.txt \
192 32Bit/OS2/vboxmouse.sys=$(VBOX_PATH_ADDITIONS.os2.x86)/vboxmouse.sys
193else ifdef VBOX_WITH_OS2_ADDITIONS_BIN
194 GUESTADDITIONS_FILESPEC.os2.x86 = \
195 32Bit/OS2/VBoxGuest.sys=$(VBOX_PATH_ADDITIONS_SRC)/os2/Bin/VBoxGuest.sys \
196 32Bit/OS2/VBoxService.exe=$(VBOX_PATH_ADDITIONS_SRC)/os2/Bin/VBoxService.exe \
197 32Bit/OS2/gengradd.dll=$(VBOX_PATH_ADDITIONS_SRC)/os2/Bin/gengradd.dll \
198 32Bit/OS2/libc063.dll=$(VBOX_PATH_ADDITIONS_SRC)/os2/Bin/libc063.dll \
199 32Bit/OS2/readme.txt=$(VBOX_PATH_ADDITIONS_SRC)/os2/Bin/readme.txt \
200 32Bit/OS2/vboxmouse.sys=$(VBOX_PATH_ADDITIONS_SRC)/os2/Bin/vboxmouse.sys
201endif
202
203
204ifdef VBOX_WITH_ADDITIONS_ISO.linux.amd64
205 VBOX_PATH_ADDITIONS.linux.amd64 = $(PATH_OUT_BASE)/linux.amd64/$(KBUILD_TYPE)/bin/additions
206 ifdef VBOX_WITH_COMBINED_LINUX_GUEST_PACKAGE
207 VBOX_LNX_ADD_AMD64_RUN_PKG=VBoxLinuxAdditions.run
208 else
209 VBOX_LNX_ADD_AMD64_RUN_PKG=VBoxLinuxAdditions-amd64.run
210 endif
211 GUESTADDITIONS_FILESPEC.linux.amd64 = \
212 $(VBOX_LNX_ADD_AMD64_RUN_PKG)=$(VBOX_PATH_ADDITIONS.linux.amd64)/VBoxLinuxAdditions.run
213endif
214ifdef VBOX_WITH_ADDITIONS_ISO.linux.x86
215 VBOX_PATH_ADDITIONS.linux.x86 = $(PATH_OUT_BASE)/linux.x86/$(KBUILD_TYPE)/bin/additions
216## @todo 64-bit additions: rename this package, update docs (?) and tests (?). create wrapper? create gnome/kde autorun app (xplatform) ?
217 ifdef VBOX_WITH_COMBINED_LINUX_GUEST_PACKAGE
218 VBOX_LNX_ADD_X86_RUN_PKG=VBoxLinuxAdditions.run
219 else
220 VBOX_LNX_ADD_X86_RUN_PKG=VBoxLinuxAdditions-x86.run
221 endif
222 GUESTADDITIONS_FILESPEC.linux.x86 = \
223 $(VBOX_LNX_ADD_X86_RUN_PKG)=$(VBOX_PATH_ADDITIONS.linux.x86)/VBoxLinuxAdditions.run \
224 runasroot.sh=$(VBOX_PATH_ADDITIONS.linux.x86)/runasroot.sh \
225 autorun.sh=$(VBOX_PATH_ADDITIONS.linux.x86)/autorun.sh
226endif
227
228ifdef VBOX_WITH_ADDITIONS_ISO.solaris.amd64
229 VBOX_PATH_ADDITIONS.solaris.amd64 = $(PATH_OUT_BASE)/solaris.amd64/$(KBUILD_TYPE)/bin/additions
230 GUESTADDITIONS_FILESPEC.solaris.amd64 = \
231 VBoxSolarisAdditions-amd64.pkg=$(VBOX_PATH_ADDITIONS.solaris.amd64)/VBoxSolarisAdditions.pkg
232endif
233ifdef VBOX_WITH_ADDITIONS_ISO.solaris.x86
234 VBOX_PATH_ADDITIONS.solaris.x86 = $(PATH_OUT_BASE)/solaris.x86/$(KBUILD_TYPE)/bin/additions
235 GUESTADDITIONS_FILESPEC.solaris.x86 = \
236 VBoxSolarisAdditions-x86.pkg=$(VBOX_PATH_ADDITIONS.solaris.x86)/VBoxSolarisAdditions.pkg
237endif
238ifdef VBOX_WITH_COMBINED_SOLARIS_GUEST_PACKAGE
239 # Build combined 32bit and 64bit solaris additions, not just a single arch.
240 # This assumes that the 32bit build directory contains the combined additions
241 # for 32bit and 64bit solaris. This just modifies variables set above.
242 GUESTADDITIONS_FILESPEC.solaris.x86 = \
243 VBoxSolarisAdditions.pkg=$(VBOX_PATH_ADDITIONS.solaris.x86)/VBoxSolarisAdditions.pkg
244 GUESTADDITIONS_FILESPEC.solaris.amd64 =
245endif
246
247ifdef VBOX_WITH_ADDITIONS_ISO.win.amd64
248 VBOX_PATH_ADDITIONS.win.amd64 = $(PATH_OUT_BASE)/win.amd64/$(KBUILD_TYPE)/bin/additions
249 GUESTADDITIONS_FILESPEC.win.amd64 = \
250 VBoxWindowsAdditions-amd64.exe=$(VBOX_PATH_ADDITIONS.win.amd64)/VBoxWindowsAdditions-amd64.exe
251 ifndef VBOX_WITH_ADDITIONS_ISO.win.x86
252 GUESTADDITIONS_FILESPEC.win.amd64 += \
253 cert/oracle-vbox.cer=$(VBOX_PATH_ADDITIONS_SRC)/WINNT/tools/oracle-vbox.cer \
254 cert/VBoxCertUtil.exe=$(VBOX_PATH_ADDITIONS.win.amd64)/VBoxCertUtil.exe
255 endif
256endif
257
258ifdef VBOX_WITH_ADDITIONS_ISO.win.x86
259 VBOX_PATH_ADDITIONS.win.x86 = $(PATH_OUT_BASE)/win.x86/$(KBUILD_TYPE)/bin/additions
260 GUESTADDITIONS_FILESPEC.win.x86 = \
261 VBoxWindowsAdditions-x86.exe=$(VBOX_PATH_ADDITIONS.win.x86)/VBoxWindowsAdditions-x86.exe \
262 VBoxWindowsAdditions.exe=$(VBOX_PATH_ADDITIONS.win.x86)/VBoxWindowsAdditions.exe \
263 AUTORUN.INF=$(VBOX_PATH_ADDITIONS_SRC)/WINNT/Installer/ISO/AUTORUN.INF \
264 32Bit/Readme.txt=$(VBOX_PATH_ADDITIONS_SRC)/WINNT/Installer/ISO/ReadmeDrivers.txt \
265 64Bit/Readme.txt=$(VBOX_PATH_ADDITIONS_SRC)/WINNT/Installer/ISO/ReadmeDrivers.txt \
266 cert/oracle-vbox.cer=$(VBOX_PATH_ADDITIONS_SRC)/WINNT/tools/oracle-vbox.cer \
267 cert/VBoxCertUtil.exe=$(VBOX_PATH_ADDITIONS.win.x86)/VBoxCertUtil.exe
268endif # win.x86
269
270ifdef VBOX_WITH_ADDITIONS_ISO.darwin.x86
271 VBOX_PATH_ADDITIONS.darwin.x86 = $(PATH_OUT_BASE)/darwin.x86/$(KBUILD_TYPE)/bin/additions
272 # or dmg?
273 GUESTADDITIONS_FILESPEC.darwin.x86 = \
274 VBoxDarwinAdditions-x86.run=$(VBOX_PATH_ADDITIONS.darwin.x86)/VBoxDarwinAdditions-x86.run
275endif
276
277ifdef VBOX_WITH_ADDITIONS_ISO.darwin.amd64
278 VBOX_PATH_ADDITIONS.darwin.amd64 = $(PATH_OUT_BASE)/darwin.amd64/$(KBUILD_TYPE)/bin/additions
279 GUESTADDITIONS_FILESPEC.darwin.amd64 = \
280 VBoxDarwinAdditions-amd64.run=$(VBOX_PATH_ADDITIONS.darwin.amd64)/VBoxDarwinAdditions-amd64.run
281endif
282
283#
284# Build the Guest Additions ISO image.
285#
286ifndef VBOX_WITHOUT_ADDITIONS_ISO
287$(VBOX_PATH_ADDITIONS_ISO)/VBoxGuestAdditions.iso: \
288 $(filter-out %=deleteme=,\
289 $(subst =,=deleteme= ,\
290 $(GUESTADDITIONS_FILESPEC.win.x86) \
291 $(GUESTADDITIONS_FILESPEC.win.amd64) \
292 $(GUESTADDITIONS_FILESPEC.solaris.x86) \
293 $(GUESTADDITIONS_FILESPEC.solaris.amd64) \
294 $(GUESTADDITIONS_FILESPEC.os2.x86) \
295 $(GUESTADDITIONS_FILESPEC.linux.x86) \
296 $(GUESTADDITIONS_FILESPEC.linux.amd64) \
297 $(GUESTADDITIONS_FILESPEC.freebsd.x86) \
298 $(GUESTADDITIONS_FILESPEC.freebsd.amd64) \
299 $(GUESTADDITIONS_FILESPEC.darwin.x86) \
300 $(GUESTADDITIONS_FILESPEC.darwin.amd64) \
301 )\
302 ) \
303 $(VBOX_SVN_REV_KMK) \
304 $(VBOX_PATH_ADDITIONS_SRC)/Makefile.kmk
305 $(call MSG_TOOL,mkisofs,,$@)
306 $(QUIET)$(MKDIR) -p $(@D)
307 @# use iso-level 3 which is the most ISO conforming level with least restrictions; iso-level 4 maps to iso-level 2
308 @# with some extra restrictions removal (not conforming to ISO9660) which some platforms like Solaris 10 does not like.
309 $(VBOX_MKISOFS) -rational-rock -joliet -iso-level 3 \
310 -volid "VBOXADDITIONS_$(VBOX_VERSION_STRING_RAW)_$(VBOX_SVN_REV)" -l -graft-points -o $@ \
311 $(GUESTADDITIONS_FILESPEC.win) \
312 $(GUESTADDITIONS_FILESPEC.win.x86) \
313 $(GUESTADDITIONS_FILESPEC.win.amd64) \
314 $(GUESTADDITIONS_FILESPEC.solaris.x86) \
315 $(GUESTADDITIONS_FILESPEC.solaris.amd64) \
316 $(GUESTADDITIONS_FILESPEC.os2.x86) \
317 $(GUESTADDITIONS_FILESPEC.linux.x86) \
318 $(GUESTADDITIONS_FILESPEC.linux.amd64) \
319 $(GUESTADDITIONS_FILESPEC.freebsd.x86) \
320 $(GUESTADDITIONS_FILESPEC.freebsd.amd64) \
321 $(GUESTADDITIONS_FILESPEC.darwin.x86) \
322 $(GUESTADDITIONS_FILESPEC.darwin.amd64)
323
324
325# Alias for creating the iso.
326.PHONY: additions-iso
327additions-iso: $(VBOX_PATH_ADDITIONS_ISO)/VBoxGuestAdditions.iso
328
329endif
330
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