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

Last change on this file since 114119 was 114119, checked in by jmr@…, 5 years ago

libsdl dependents: use port: depspec - there's now only one port that provides sdl.pc, and most of these never worked with libsdl-devel in the first place

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