source: trunk/dports/emulators/virtualbox/Portfile @ 107839

Last change on this file since 107839 was 107839, checked in by royliu@…, 6 years ago

virtualbox: update to 4.2.16 (#39643)

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 11.4 KB
Line 
1# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
2# $Id: Portfile 107839 2013-07-06 23:29:23Z royliu@macports.org $
3
4PortSystem          1.0
5
6name                virtualbox
7version             4.2.16
8# Note: On virtualbox version changes please update the checksums of all
9# subports, and update extension_pack_build to match the current build
10# of the extension pack.
11set extension_pack_build   86992
12
13categories          emulators
14platforms           darwin
15license             GPL-2
16maintainers         nomaintainer
17
18description         open source virtualization technology from Oracle
19long_description \
20    VirtualBox is a powerful x86 and AMD64/Intel64 virtualization product for \
21    enterprise as well as home use. Not only is VirtualBox an extremely \
22    feature rich, high performance product for enterprise customers, it is \
23    also the only professional solution that is freely available as Open \
24    Source Software.
25
26homepage            http://www.virtualbox.org/
27master_sites        http://download.virtualbox.org/virtualbox/${version}
28
29if {${name} == ${subport}} {
30
31    PortGroup           qt4 1.0
32    # virtualbox installs a kernel extension so it has to build
33    # for the same architecture as the kernel
34    set kernel_arch [exec uname -m]
35    switch ${kernel_arch} {
36        i386 -
37        x86_64 {
38            supported_archs ${kernel_arch}
39        }
40        default {
41            supported_archs i386 x86_64
42        }
43    }
44
45    universal_variant   no
46
47    distname            VirtualBox-${version}
48    use_bzip2           yes
49
50    checksums           rmd160  a49d044f6935199a71f6bdf94fd9082f9888d2d6 \
51                        sha256  ff0f8916d039120554d9d73c7cae1863d6161933374374ec2f5313892046d45a
52
53    depends_lib-append          port:curl \
54                                port:libidl \
55                                path:lib/pkgconfig/libxml-2.0.pc:libxml2 \
56                                path:lib/pkgconfig/libxslt.pc:libxslt \
57                                path:lib/pkgconfig/openssl.pc:openssl \
58                                path:lib/pkgconfig/sdl.pc:libsdl
59
60    patchfiles                  patch-build.diff \
61                                patch-startup.diff
62    platform darwin 11 {
63        patchfiles-append patch-src-VBox-GuestHost-OpenGL-include-GL-glext.h.diff
64    }
65
66    configure.compiler          gcc-4.2
67
68    # Use the apple-gcc-4.2 compiler because Xcode 4.2 no longer
69    # provides gcc-4.2 and builds with llvm-gcc-4.2 crash.
70    if {![file executable ${configure.cc}]} {
71
72        depends_build-append    port:apple-gcc42
73        depends_skip_archcheck-append apple-gcc42
74        patchfiles-append       patch-apple-gcc42.diff
75        configure.compiler      apple-gcc-4.2
76    }
77
78    configure.pre_args-delete   --prefix=${prefix}
79
80    configure.args              --with-qt-dir=${prefix} \
81                                --with-openssl-dir=${prefix} \
82                                --with-gcc=${configure.cc} \
83                                --with-g++=${configure.cxx}
84
85    # VirtualBox uses kBuild.
86    build.cmd                   ". env.sh && kmk"
87    build.env-append            VERBOSE=1
88    build.args-append           KBUILD_VERBOSE=full
89
90    # This is the open source edition of VirtualBox.
91    worksrcdir                  VirtualBox-${version}
92
93    set kext_dir                /Library/Extensions
94    set startup_items_dir       /Library/StartupItems
95
96    post-patch {
97        if {[vercmp $xcodeversion "4.4"] >= 0} {
98            set oldest_supported_SDK 10.7
99        } elseif {[vercmp $xcodeversion "4.1"] >= 0} {
100            set oldest_supported_SDK 10.6
101        } else {
102            set oldest_supported_SDK "10.[expr [lindex [split ${macosx_deployment_target} "."] 1] - 1]"
103        }
104
105        reinplace "s|@APPLICATIONS_DIR@|${applications_dir}|g" \
106            ${worksrcpath}/LocalConfig.kmk
107        reinplace "s|@MACOSX_DEPLOYMENT_TARGET@|${oldest_supported_SDK}|g" \
108           ${worksrcpath}/LocalConfig.kmk
109        reinplace "s|@KEXT_DIR@|${prefix}${kext_dir}|g" \
110            ${worksrcpath}/src/VBox/Installer/darwin/VBoxStartupItems/VirtualBox/VirtualBox
111
112        if {[variant_isset vde2]} {
113            reinplace "s|@PREFIX@|${prefix}|g" ${worksrcpath}/include/VBox/VDEPlugSymDefs.h
114        }
115    }
116
117    destroot {
118
119        set release_dir [lindex [glob -- ${worksrcpath}/out/darwin.*/release/dist] 0]
120
121        xinstall -m 755 -d ${destroot}${applications_dir}
122        copy ${release_dir}/VirtualBox.app ${destroot}${applications_dir}
123        copy ${release_dir}/sdk ${destroot}${applications_dir}/VirtualBox.app
124
125        # Set the owner and group to root:wheel, which is required for kernel extensions
126        # and possibly startup items.
127
128        xinstall -m 755 -o root -g wheel -d ${destroot}${prefix}${kext_dir}
129
130        foreach kext [glob -- ${release_dir}/*.kext] {
131            copy ${kext} ${destroot}${prefix}${kext_dir}
132        }
133
134        xinstall -m 755 -o root -g wheel -d ${destroot}${prefix}${startup_items_dir}
135        copy ${worksrcpath}/src/VBox/Installer/darwin/VBoxStartupItems/VirtualBox ${destroot}${prefix}${startup_items_dir}
136
137        # Create proxies for binaries bundled with VirtualBox.app.
138
139        foreach app_proxy [list VirtualBox VBoxBalloonCtrl VBoxManage VBoxHeadless] {
140
141            set app_proxy_file [open ${destroot}${prefix}/bin/${app_proxy} w]
142
143            puts $app_proxy_file "#!/usr/bin/env bash"
144            puts $app_proxy_file "exec -- ${applications_dir}/VirtualBox.app/Contents/MacOS/${app_proxy} \"\$@\""
145
146            close $app_proxy_file
147
148            file attributes ${destroot}${prefix}/bin/${app_proxy} -permissions "+x"
149        }
150
151        foreach executable [list VirtualBox VirtualBoxVM VBoxHeadless VBoxNetAdpCtl VBoxNetDHCP] {
152            file attributes ${destroot}${applications_dir}/VirtualBox.app/Contents/MacOS/${executable} -permissions "u+s"
153        }
154    }
155
156    pre-activate {
157
158        set head_path ${applications_dir}
159
160        while {${head_path} != "/"} {
161
162            if {[file attributes ${head_path} -owner] != "root" || [file attributes ${head_path} -group] != "admin"
163                || [expr [file attributes ${head_path} -permissions] & 00002] != 0} {
164                error "VirtualBox requires the \"${applications_dir}\" directory and its parent directories to be\
165root:admin owned and not world writeable."
166            }
167
168            set head_path [file dirname ${head_path}]
169        }
170    }
171
172    variant vde2 description {Enable support for VDE} {
173
174        depends_lib-append      port:vde2
175        patchfiles-append       patch-vde.diff
176        configure.args-append   --enable-vde
177    }
178
179    variant vnc description {Enable support for VNC} {
180
181        depends_lib-append      path:lib/pkgconfig/libvncserver.pc:LibVNCServer
182        configure.args-append   --enable-vnc
183    }
184
185    default_variants            +vde2 +vnc
186
187    startupitem.create          yes
188    startupitem.name            VirtualBox
189    startupitem.start           "${prefix}${startup_items_dir}/VirtualBox/VirtualBox start"
190    startupitem.stop            "${prefix}${startup_items_dir}/VirtualBox/VirtualBox stop"
191    startupitem.restart         "${prefix}${startup_items_dir}/VirtualBox/VirtualBox restart"
192    startupitem.pidfile         none
193
194    livecheck.type              regex
195    if {[lindex [split ${version} .] 2] == 0} {
196        livecheck.version       [join [lrange [split ${version} .] 0 1] .]
197    }
198    livecheck.url               ${homepage}
199    livecheck.regex             "VirtualBox (\\d+\\.\\d+(?:\\.\\d+)?) released!"
200
201}
202
203subport virtualbox-guest-additions {
204
205    license                 VirtualBoxPUEL
206
207    description             guest additions for VirtualBox
208
209    long_description        ${description}
210
211    supported_archs         noarch
212
213    distfiles               VBoxGuestAdditions_${version}.iso
214
215    checksums               rmd160  335365fbe7406aa0a0d3c0b886f0330b611b6ece \
216                            sha256  cf2b0722da984a5f41a7814ee288262cbdf4c785630b2a7726c3daa6c5caa0c5
217
218    depends_run             port:virtualbox
219
220    extract.only
221
222    use_configure           no
223
224    build {}
225
226    destroot {
227        set dir ${destroot}${applications_dir}/VirtualBox.app/Contents/MacOS/additions
228        xinstall -d ${dir}
229        copy ${distpath}/${distfiles} ${dir}/VBoxGuestAdditions.iso
230    }
231
232    livecheck.type          none
233}
234
235subport virtualbox-extension-pack {
236
237    # We want to match the supported arch
238    set kernel_arch [exec uname -m]
239    switch ${kernel_arch} {
240        i386 -
241        x86_64 {
242            supported_archs ${kernel_arch}
243        }
244        default {
245            supported_archs i386 x86_64
246        }
247    }
248    array set archs_map {
249         i386       "darwin.x86"
250         x86_64     "darwin.amd64"
251    }
252    set extension_archs {}
253    foreach {arch} ${supported_archs} {
254        lappend extension_archs $archs_map($arch)
255    }
256    set name_extpack    Oracle_VM_VirtualBox_Extension_Pack
257    set app_dir VirtualBox.app
258    set lib_dir ${app_dir}/Contents/MacOS
259    set ext_dir ${lib_dir}/ExtensionPacks
260
261    version             ${version}-${extension_pack_build}
262
263    license             VirtualBoxPUEL
264
265    description         Oracle VM VirtualBox Extension Pack
266    long_description    ${description}
267
268    depends_run         port:virtualbox
269
270    distname            ${name_extpack}-${version}
271
272    checksums           rmd160  b41596eba7d8b402e0030eaa651898cacc8b1d3b \
273                        sha256  8f88b1ebe69b770103e9151bebf6681c5e049eb5fac45ae8d52c43440aa0fa0d
274
275    worksrcdir          ${name_extpack}
276    extract.suffix      .vbox-extpack
277    extract.mkdir       yes
278
279    use_configure       no
280
281    build {
282
283        # The pre-built libraries use weird prefixes and Oracle recommends setting
284        # DYLD_LIBRARY_PATH to deal with this. I would rather fix the paths in the
285        # libraries at install time.
286        foreach {arch} $extension_archs {
287
288            foreach lib [glob -directory ${worksrcpath}/${arch} *.dylib*] {
289
290                system "install_name_tool -id ${applications_dir}/${ext_dir}/${name_extpack}/${arch}/[strsed ${lib} /^.*\\///] ${lib}"
291
292                # Then for each dependent dylib with a weird path that this dylib
293                # references, fix the reference to use ${lib_dir}.
294                foreach dep [exec otool -L ${lib}] {
295
296                    if [string match "/Applications/${lib_dir}/*" ${dep}] {
297
298                        system "install_name_tool -change ${dep} ${applications_dir}/${lib_dir}/[strsed ${dep} /^.*\\///] ${lib}"
299                    }
300                }
301            }
302        }
303    }
304
305    destroot {
306
307        xinstall -d -o root -g admin -m 755 ${destroot}${applications_dir}/${ext_dir}/${name_extpack}
308        foreach {f} [glob -directory ${worksrcpath} -type f *] {
309
310            xinstall -o "root" -g "admin" -m 0644 ${f} \
311                ${destroot}${applications_dir}/${ext_dir}/${name_extpack}
312        }
313        foreach {arch} $extension_archs {
314
315            xinstall -o "root" -g "admin" -m 0755 -d \
316                ${destroot}${applications_dir}/${ext_dir}/${name_extpack}/${arch}
317            foreach {f} [glob -directory ${worksrcpath}/${arch} *] {
318
319                xinstall -o "root" -g "admin" -m 0644 ${f} \
320                    ${destroot}${applications_dir}/${ext_dir}/${name_extpack}/${arch}
321            }
322        }
323    }
324
325    livecheck.type      regex
326    livecheck.url       https://www.virtualbox.org/wiki/Downloads
327    livecheck.regex     "/Oracle_VM_VirtualBox_Extension_Pack-(\\d(?!\\${extract.suffix}).*)\\${extract.suffix}"
328}
Note: See TracBrowser for help on using the repository browser.