summaryrefslogtreecommitdiff
path: root/libre
diff options
context:
space:
mode:
Diffstat (limited to 'libre')
-rw-r--r--libre/atool-libre/PKGBUILD8
-rw-r--r--libre/atool-libre/atool.changelog18
-rw-r--r--libre/audacious-plugins-libre/PKGBUILD8
-rw-r--r--libre/blender-libre/PKGBUILD80
-rw-r--r--libre/blender-libre/boost-1.50.patch42
-rw-r--r--libre/blender-libre/ffmpeg-0.11.patch532
-rw-r--r--libre/cdfs-libre/PKGBUILD40
-rw-r--r--libre/cdfs-libre/cdfs-3.0.patch274
-rw-r--r--libre/cdfs-libre/cdfs-3.2.patch12
-rw-r--r--libre/cdfs-libre/cdfs-3.4.patch12
-rw-r--r--libre/cdfs-libre/cdfs.install14
-rw-r--r--libre/clementine-libre/PKGBUILD9
-rw-r--r--libre/clementine-libre/clementine-1.0.1-global-menu.patch17
-rw-r--r--libre/clementine-libre/imobiledevice.patch50
-rw-r--r--libre/crosstool-ng/PKGBUILD5
-rw-r--r--libre/cups-filters-libre/PKGBUILD28
-rw-r--r--libre/cups-filters-libre/buildfix_dlopen.diff31
-rw-r--r--libre/cups-filters-libre/buildfix_poppler.diff224
-rw-r--r--libre/doublecmd-libre/PKGBUILD62
-rw-r--r--libre/doublecmd-libre/doublecmd.install34
-rw-r--r--libre/dpkg/PKGBUILD8
-rw-r--r--libre/dvdrip-libre/PKGBUILD4
-rw-r--r--libre/epdfview-libre/PKGBUILD6
-rw-r--r--libre/epdfview-libre/glib2_headers.patch12
-rw-r--r--libre/filesystem/PKGBUILD26
-rw-r--r--libre/filesystem/crypttab36
-rw-r--r--libre/filesystem/locale.sh28
-rw-r--r--libre/filesystem/parabola.7.txt81
-rw-r--r--libre/foomatic-filters-libre/PKGBUILD6
-rw-r--r--libre/ghostscript-libre/PKGBUILD15
-rw-r--r--libre/grub-legacy/040_all_grub-0.96-nxstack.patch623
-rw-r--r--libre/grub-legacy/05-grub-0.97-initrdaddr.diff16
-rw-r--r--libre/grub-legacy/PKGBUILD107
-rw-r--r--libre/grub-legacy/ext4.patch263
-rw-r--r--libre/grub-legacy/grub-0.97-gpt.patch315
-rw-r--r--libre/grub-legacy/grub-0.97-ldflags-objcopy-remove-build-id.patch196
-rw-r--r--libre/grub-legacy/grub-inode-size.patch100
-rw-r--r--libre/grub-legacy/grub.install20
-rw-r--r--libre/grub-legacy/i2o.patch45
-rw-r--r--libre/grub-legacy/install-grub204
-rw-r--r--libre/grub-legacy/intelmac.patch67
-rw-r--r--libre/grub-legacy/menu.lst43
-rw-r--r--libre/grub-legacy/more-raid.patch100
-rw-r--r--libre/grub-legacy/rePKGBUILD37
-rw-r--r--libre/grub-legacy/special-devices.patch18
-rw-r--r--libre/grub/05_archtheme6
-rw-r--r--libre/grub/20_memtest86+29
-rw-r--r--libre/grub/PKGBUILD337
-rw-r--r--libre/grub/fix_stack_pointer_handling_16_relocator.patch13
-rw-r--r--libre/grub/grub-install.fix11
-rw-r--r--libre/grub/grub-mkconfig-Use_outside_GRUB_PREFIX_if_defined.patch15
-rw-r--r--libre/grub/grub.cfg139
-rw-r--r--libre/grub/grub.default47
-rw-r--r--libre/grub/grub.install27
-rw-r--r--libre/grub/grub2.install33
-rw-r--r--libre/grub/grub2_automake_1.11.2_pkglib_to_pkgdata.patch134
-rw-r--r--libre/grub/grub2_bzr_export.sh113
-rw-r--r--libre/grub/grub_bzr_export.sh113
-rw-r--r--libre/grub/grub_extras_lua_args_fix.patch13
-rw-r--r--libre/grub/parabola-mkconfig.patch32
-rw-r--r--libre/grub/parabola_grub_mkconfig_fixes.patch152
-rw-r--r--libre/h-client/PKGBUILD9
-rw-r--r--libre/hardinfo/PKGBUILD8
-rw-r--r--libre/iceape-i18n/PKGBUILD54
-rw-r--r--libre/iceape-libre/PKGBUILD14
-rw-r--r--libre/iceape-libre/libre.patch10
-rw-r--r--libre/icecat-i18n/PKGBUILD324
-rw-r--r--libre/icecat/PKGBUILD210
-rw-r--r--libre/icecat/cairo.patch14
-rw-r--r--libre/icecat/icecat-install-dir.patch13
-rw-r--r--libre/icecat/libre.patch502
-rw-r--r--libre/icecat/xulrunner-copy-stub.patch6
-rw-r--r--libre/iceweasel-i18n/PKGBUILD179
-rw-r--r--libre/iceweasel-libre/Bug-756390-Make-the-Reset-Firefox-feature-more-gener.patch245
-rw-r--r--libre/iceweasel-libre/PKGBUILD19
-rw-r--r--libre/iceweasel-libre/libre.patch81
-rw-r--r--libre/iceweasel-libre/shared-libs.patch12
-rw-r--r--libre/initscripts/0001-remove-run-nologin-before-leaving-rc.multi.patch29
-rw-r--r--libre/initscripts/PKGBUILD28
-rw-r--r--libre/kdebase-konqueror-libre/PKGBUILD8
-rw-r--r--libre/kdebase-runtime-libre/PKGBUILD57
-rw-r--r--libre/kdebase-runtime-libre/duckduckgo_lite.desktop113
-rw-r--r--libre/kdebase-runtime-libre/kdebase-runtime.install13
-rw-r--r--libre/kdelibs-libre/PKGBUILD20
-rw-r--r--libre/kdenetwork-kopete-libre/PKGBUILD16
-rw-r--r--libre/kdeutils-ark-libre/PKGBUILD10
-rw-r--r--libre/libcl-libre/PKGBUILD98
-rw-r--r--libre/libdrm-libre/COPYING48
-rw-r--r--libre/libdrm-libre/PKGBUILD90
-rw-r--r--libre/libquicktime-libre/PKGBUILD4
-rw-r--r--libre/licenses-libre/PKGBUILD6
-rw-r--r--libre/liferea-libre/PKGBUILD18
-rw-r--r--libre/liferea-libre/liferea.install6
-rw-r--r--libre/linux-libre-api-headers/PKGBUILD12
-rw-r--r--libre/linux-libre-lts/.directory3
-rw-r--r--libre/linux-libre-lts/PKGBUILD126
-rw-r--r--libre/linux-libre-lts/config.i68641
-rw-r--r--libre/linux-libre-lts/config.x86_6445
-rw-r--r--libre/linux-libre-lts/linux-libre-lts.install4
-rw-r--r--libre/linux-libre-manpages/PKGBUILD12
-rw-r--r--libre/linux-libre-tools/PKGBUILD93
-rw-r--r--libre/linux-libre-tools/cpupower.pmutils37
-rw-r--r--libre/linux-libre-tools/cpupower.rc34
-rw-r--r--libre/linux-libre-tools/cpupower.service2
-rw-r--r--libre/linux-libre-tools/cpupower.systemd32
-rw-r--r--libre/linux-libre-tools/usbipd.conf3
-rw-r--r--libre/linux-libre-tools/usbipd.rc34
-rw-r--r--libre/linux-libre-tools/usbipd.service8
-rw-r--r--libre/linux-libre/.directory3
-rw-r--r--libre/linux-libre/PKGBUILD176
-rw-r--r--libre/linux-libre/alsa-powersave-3.5.x.patch29
-rw-r--r--libre/linux-libre/avmfritz-only-few-bytes-are-transfered-on-a-conn.patch48
-rw-r--r--libre/linux-libre/config.i686257
-rw-r--r--libre/linux-libre/config.x86_64254
-rw-r--r--libre/linux-libre/i915-i2c-crash-3.5.x.patch47
-rw-r--r--libre/linux-libre/linux-libre.install4
-rw-r--r--libre/linux-libre/watchdog-3.5.x.patch60
-rw-r--r--libre/lirc-libre/PKGBUILD8
-rw-r--r--libre/lirc-libre/lirc.install2
-rw-r--r--libre/luxblend25/PKGBUILD44
-rw-r--r--libre/luxrays-libre/PKGBUILD6
-rw-r--r--libre/luxrender-libre/PKGBUILD16
-rw-r--r--libre/luxrender-libre/boost_1.50_fix.diff131
-rw-r--r--libre/mc-libre/PKGBUILD69
-rw-r--r--libre/mcomix-libre/PKGBUILD47
-rw-r--r--libre/mcomix-libre/mcomix.install32
-rw-r--r--libre/mozilla-devscripts/PKGBUILD9
-rw-r--r--libre/mplayer-libre/PKGBUILD30
-rw-r--r--libre/mplayer-vaapi-libre/PKGBUILD41
-rw-r--r--libre/mplayer-vaapi-libre/mplayer-vaapi.install8
-rw-r--r--libre/mplayer-vaapi-libre/tweak-desktop-file.patch22
-rw-r--r--libre/pacman/0001-Add-conflict-for-replacing-owned-empty-directory.patch152
-rw-r--r--libre/pacman/0002-Check-empty-subdirectory-ownership.patch61
-rw-r--r--libre/pacman/PKGBUILD38
-rw-r--r--libre/pacman/pacman.conf25
-rw-r--r--libre/pacman/pacman.conf.mips64el31
-rw-r--r--libre/pacman/pacman.conf.x86_6427
-rw-r--r--libre/pacman/pacman.install11
-rw-r--r--libre/pacman/rePKGBUILD37
-rw-r--r--libre/parabola-keyring/PKGBUILD20
-rw-r--r--libre/parabola-keyring/parabola-keyring.install11
-rw-r--r--libre/parabola-themes-slim/PKGBUILD2
-rw-r--r--libre/sdl-libre/PKGBUILD35
-rw-r--r--libre/sdl-libre/fix_joystick_misc_axes.diff13
-rw-r--r--libre/sdl-libre/libre.patch578
-rw-r--r--libre/spectrwm-libre/LICENSE47
-rw-r--r--libre/spectrwm-libre/PKGBUILD65
-rw-r--r--libre/spectrwm-libre/baraction.sh82
-rw-r--r--libre/syslinux/PKGBUILD30
-rw-r--r--libre/syslinux/avoid-using-ext2_fs.patch965
-rw-r--r--libre/syslinux/handle-ctors-dtors-via-init_array-and-fini_array.patch67
-rw-r--r--libre/syslinux/rePKGBUILD15
-rw-r--r--libre/texlive-bin-libre/PKGBUILD25
-rw-r--r--libre/texlive-bin-libre/luatex-r4449-radical-rule-thickness.patch23
-rw-r--r--libre/texlive-bin-libre/texlive.install16
-rw-r--r--libre/tp_smapi-libre/PKGBUILD63
-rw-r--r--libre/tp_smapi-libre/tp_smapi.install13
-rw-r--r--libre/vhba-module-libre/60-vhba.rules13
-rw-r--r--libre/vhba-module-libre/PKGBUILD48
-rw-r--r--libre/vhba-module-libre/vhba-module.install21
-rw-r--r--libre/virtualbox-libre-modules-lts/60-vboxguest.rules2
-rw-r--r--libre/virtualbox-libre-modules-lts/LocalConfig.kmk19
-rw-r--r--libre/virtualbox-libre-modules-lts/PKGBUILD153
-rw-r--r--libre/virtualbox-libre-modules-lts/free-distros.patch1383
-rw-r--r--libre/virtualbox-libre-modules-lts/libre.patch5765
-rw-r--r--libre/virtualbox-libre-modules-lts/os_blag.pngbin0 -> 1411 bytes
-rw-r--r--libre/virtualbox-libre-modules-lts/os_blag_64.pngbin0 -> 1549 bytes
-rw-r--r--libre/virtualbox-libre-modules-lts/os_dragora.pngbin0 -> 2375 bytes
-rw-r--r--libre/virtualbox-libre-modules-lts/os_dragora_64.pngbin0 -> 2430 bytes
-rw-r--r--libre/virtualbox-libre-modules-lts/os_dynebolic.pngbin0 -> 1621 bytes
-rw-r--r--libre/virtualbox-libre-modules-lts/os_gnewsense.pngbin0 -> 2315 bytes
-rw-r--r--libre/virtualbox-libre-modules-lts/os_gnewsense_64.pngbin0 -> 2470 bytes
-rw-r--r--libre/virtualbox-libre-modules-lts/os_gnu.pngbin0 -> 2728 bytes
-rw-r--r--libre/virtualbox-libre-modules-lts/os_gnu_64.pngbin0 -> 2705 bytes
-rw-r--r--libre/virtualbox-libre-modules-lts/os_gnuhurd.pngbin0 -> 2728 bytes
-rw-r--r--libre/virtualbox-libre-modules-lts/os_gnulinux.pngbin0 -> 2728 bytes
-rw-r--r--libre/virtualbox-libre-modules-lts/os_gnulinux_64.pngbin0 -> 2705 bytes
-rw-r--r--libre/virtualbox-libre-modules-lts/os_musix.pngbin0 -> 2451 bytes
-rw-r--r--libre/virtualbox-libre-modules-lts/os_musix_64.pngbin0 -> 2581 bytes
-rw-r--r--libre/virtualbox-libre-modules-lts/os_os64base.pngbin0 -> 1300 bytes
-rw-r--r--libre/virtualbox-libre-modules-lts/os_os64base.xcfbin0 -> 2844 bytes
-rw-r--r--libre/virtualbox-libre-modules-lts/os_osbase.pngbin0 -> 1042 bytes
-rw-r--r--libre/virtualbox-libre-modules-lts/os_osbase.xcfbin0 -> 2748 bytes
-rw-r--r--libre/virtualbox-libre-modules-lts/os_parabola.pngbin0 -> 1931 bytes
-rw-r--r--libre/virtualbox-libre-modules-lts/os_parabola_64.pngbin0 -> 2096 bytes
-rw-r--r--libre/virtualbox-libre-modules-lts/os_trisquel.pngbin0 -> 2451 bytes
-rw-r--r--libre/virtualbox-libre-modules-lts/os_trisquel_64.pngbin0 -> 2592 bytes
-rw-r--r--libre/virtualbox-libre-modules-lts/os_ututo.pngbin0 -> 2615 bytes
-rw-r--r--libre/virtualbox-libre-modules-lts/os_ututo_64.pngbin0 -> 2751 bytes
-rw-r--r--libre/virtualbox-libre-modules-lts/os_venenux.pngbin0 -> 1653 bytes
-rw-r--r--libre/virtualbox-libre-modules-lts/virtualbox-libre-modules-lts.install18
-rw-r--r--libre/virtualbox-libre-modules-lts/virtualbox-libre-parabola-modules-lts.install16
-rw-r--r--libre/virtualbox-libre-modules/.directory3
-rw-r--r--libre/virtualbox-libre-modules/60-vboxguest.rules2
-rw-r--r--libre/virtualbox-libre-modules/LocalConfig.kmk19
-rw-r--r--libre/virtualbox-libre-modules/PKGBUILD161
-rw-r--r--libre/virtualbox-libre-modules/free-distros.patch1383
-rw-r--r--libre/virtualbox-libre-modules/libre.patch5765
-rw-r--r--libre/virtualbox-libre-modules/linux34.patch12
-rw-r--r--libre/virtualbox-libre-modules/os_blag.pngbin0 -> 1411 bytes
-rw-r--r--libre/virtualbox-libre-modules/os_blag_64.pngbin0 -> 1549 bytes
-rw-r--r--libre/virtualbox-libre-modules/os_dragora.pngbin0 -> 2375 bytes
-rw-r--r--libre/virtualbox-libre-modules/os_dragora_64.pngbin0 -> 2430 bytes
-rw-r--r--libre/virtualbox-libre-modules/os_dynebolic.pngbin0 -> 1621 bytes
-rw-r--r--libre/virtualbox-libre-modules/os_gnewsense.pngbin0 -> 2315 bytes
-rw-r--r--libre/virtualbox-libre-modules/os_gnewsense_64.pngbin0 -> 2470 bytes
-rw-r--r--libre/virtualbox-libre-modules/os_gnu.pngbin0 -> 2728 bytes
-rw-r--r--libre/virtualbox-libre-modules/os_gnu_64.pngbin0 -> 2705 bytes
-rw-r--r--libre/virtualbox-libre-modules/os_gnuhurd.pngbin0 -> 2728 bytes
-rw-r--r--libre/virtualbox-libre-modules/os_gnulinux.pngbin0 -> 2728 bytes
-rw-r--r--libre/virtualbox-libre-modules/os_gnulinux_64.pngbin0 -> 2705 bytes
-rw-r--r--libre/virtualbox-libre-modules/os_musix.pngbin0 -> 2451 bytes
-rw-r--r--libre/virtualbox-libre-modules/os_musix_64.pngbin0 -> 2581 bytes
-rw-r--r--libre/virtualbox-libre-modules/os_os64base.pngbin0 -> 1300 bytes
-rw-r--r--libre/virtualbox-libre-modules/os_os64base.xcfbin0 -> 2844 bytes
-rw-r--r--libre/virtualbox-libre-modules/os_osbase.pngbin0 -> 1042 bytes
-rw-r--r--libre/virtualbox-libre-modules/os_osbase.xcfbin0 -> 2748 bytes
-rw-r--r--libre/virtualbox-libre-modules/os_parabola.pngbin0 -> 1931 bytes
-rw-r--r--libre/virtualbox-libre-modules/os_parabola_64.pngbin0 -> 2096 bytes
-rw-r--r--libre/virtualbox-libre-modules/os_trisquel.pngbin0 -> 2451 bytes
-rw-r--r--libre/virtualbox-libre-modules/os_trisquel_64.pngbin0 -> 2592 bytes
-rw-r--r--libre/virtualbox-libre-modules/os_ututo.pngbin0 -> 2615 bytes
-rw-r--r--libre/virtualbox-libre-modules/os_ututo_64.pngbin0 -> 2751 bytes
-rw-r--r--libre/virtualbox-libre-modules/os_venenux.pngbin0 -> 1653 bytes
-rw-r--r--libre/virtualbox-libre-modules/virtualbox-libre-modules.install19
-rw-r--r--libre/virtualbox-libre-modules/virtualbox-libre-parabola-modules.install17
-rw-r--r--libre/virtualbox-libre/.directory4
-rw-r--r--libre/virtualbox-libre/LocalConfig.kmk1
-rw-r--r--libre/virtualbox-libre/PKGBUILD217
-rw-r--r--libre/virtualbox-libre/free-distros.patch1383
-rw-r--r--libre/virtualbox-libre/ipv6_vnc.patch20
-rw-r--r--libre/virtualbox-libre/libre.patch5765
-rw-r--r--libre/virtualbox-libre/os_blag.pngbin0 -> 1411 bytes
-rw-r--r--libre/virtualbox-libre/os_blag_64.pngbin0 -> 1549 bytes
-rw-r--r--libre/virtualbox-libre/os_dragora.pngbin0 -> 2375 bytes
-rw-r--r--libre/virtualbox-libre/os_dragora_64.pngbin0 -> 2430 bytes
-rw-r--r--libre/virtualbox-libre/os_dynebolic.pngbin0 -> 1621 bytes
-rw-r--r--libre/virtualbox-libre/os_gnewsense.pngbin0 -> 2315 bytes
-rw-r--r--libre/virtualbox-libre/os_gnewsense_64.pngbin0 -> 2470 bytes
-rw-r--r--libre/virtualbox-libre/os_gnu.pngbin0 -> 2728 bytes
-rw-r--r--libre/virtualbox-libre/os_gnu_64.pngbin0 -> 2705 bytes
-rw-r--r--libre/virtualbox-libre/os_gnuhurd.pngbin0 -> 2728 bytes
-rw-r--r--libre/virtualbox-libre/os_gnulinux.pngbin0 -> 2728 bytes
-rw-r--r--libre/virtualbox-libre/os_gnulinux_64.pngbin0 -> 2705 bytes
-rw-r--r--libre/virtualbox-libre/os_musix.pngbin0 -> 2451 bytes
-rw-r--r--libre/virtualbox-libre/os_musix_64.pngbin0 -> 2581 bytes
-rw-r--r--libre/virtualbox-libre/os_os64base.pngbin0 -> 1300 bytes
-rw-r--r--libre/virtualbox-libre/os_os64base.xcfbin0 -> 2844 bytes
-rw-r--r--libre/virtualbox-libre/os_osbase.pngbin0 -> 1042 bytes
-rw-r--r--libre/virtualbox-libre/os_osbase.xcfbin0 -> 2748 bytes
-rw-r--r--libre/virtualbox-libre/os_parabola.pngbin0 -> 1931 bytes
-rw-r--r--libre/virtualbox-libre/os_parabola_64.pngbin0 -> 2096 bytes
-rw-r--r--libre/virtualbox-libre/os_trisquel.pngbin0 -> 2451 bytes
-rw-r--r--libre/virtualbox-libre/os_trisquel_64.pngbin0 -> 2592 bytes
-rw-r--r--libre/virtualbox-libre/os_ututo.pngbin0 -> 2615 bytes
-rw-r--r--libre/virtualbox-libre/os_ututo_64.pngbin0 -> 2751 bytes
-rw-r--r--libre/virtualbox-libre/os_venenux.pngbin0 -> 1653 bytes
-rw-r--r--libre/virtualbox-libre/vboxbuild30
-rw-r--r--libre/virtualbox-libre/vboxdrv-reference.patch91
-rw-r--r--libre/virtualbox-libre/vboxservice.conf2
-rw-r--r--libre/virtualbox-libre/vboxservice.rc39
-rw-r--r--libre/virtualbox-libre/vboxservice.service9
-rw-r--r--libre/virtualbox-libre/vboxweb.conf12
-rw-r--r--libre/virtualbox-libre/vboxweb.service11
-rw-r--r--libre/virtualbox-libre/virtualbox-libre-parabola-additions.install31
-rw-r--r--libre/virtualbox-libre/virtualbox-libre-parabola-source.install29
-rw-r--r--libre/virtualbox-libre/virtualbox-libre-source.install29
-rw-r--r--libre/virtualbox-libre/virtualbox-libre.install57
-rw-r--r--libre/virtualbox-modules-lts/PKGBUILD22
-rw-r--r--libre/virtualbox-modules-lts/virtualbox-modules-lts.install6
-rw-r--r--libre/virtualbox-modules-lts/virtualbox-parabola-modules-lts.install6
-rw-r--r--libre/virtualbox-modules/PKGBUILD24
-rw-r--r--libre/virtualbox-modules/virtualbox-modules.install12
-rw-r--r--libre/virtualbox-modules/virtualbox-parabola-modules.install12
-rw-r--r--libre/xulrunner-libre/Bug-756390-Make-the-Reset-Firefox-feature-more-gener.patch256
-rw-r--r--libre/xulrunner-libre/PKGBUILD57
-rw-r--r--libre/your-freedom/your-freedom.install2
277 files changed, 32400 insertions, 2181 deletions
diff --git a/libre/atool-libre/PKGBUILD b/libre/atool-libre/PKGBUILD
index 7ec4d7c1e..ea1dfec52 100644
--- a/libre/atool-libre/PKGBUILD
+++ b/libre/atool-libre/PKGBUILD
@@ -3,12 +3,12 @@
# Contributor: leif_thande <leif.thande@gmail.com>
# Contributor: tranquility <trankas@gmail.com>
# Contributor: Daniel J Griffiths <ghost1227@archlinux.us>
-# Contributor (Parabola): Márcio Silva <coadde@adinet.com.uy>
+# Contributor (Parabola): Márcio Silva <coadde@lavabit.com>
_pkgname=atool
pkgname=atool-libre
-pkgver=0.38.0
-pkgrel=3
+pkgver=0.39.0
+pkgrel=1
pkgdesc="A script for managing file archives of various types"
arch=('any')
url="http://www.nongnu.org/atool/"
@@ -29,7 +29,7 @@ optdepends=('bzip2: for using atool with bzip2 compressed archives'
'unzip: for using atool for unpacking archives')
source=(http://savannah.nongnu.org/download/$_pkgname/$_pkgname-$pkgver.tar.gz)
-sha256sums=('b967195facbe5e7c6535ac117aaa7f633b0eca174137c30c36a5200efb80047d')
+sha256sums=('aaf60095884abb872e25f8e919a8a63d0dabaeca46faeba87d12812d6efc703b')
build() {
diff --git a/libre/atool-libre/atool.changelog b/libre/atool-libre/atool.changelog
new file mode 100644
index 000000000..ce0b12c2b
--- /dev/null
+++ b/libre/atool-libre/atool.changelog
@@ -0,0 +1,18 @@
+2012-04-19 Jaroslav Lichtblau <dragonlord@aur.archlinux.org>
+ * atool 0.39.0-1
+
+2012-02-21 Jaroslav Lichtblau <dragonlord@aur.archlinux.org>
+ * atool 0.38.0-2
+ * signing package
+
+2011-08-20 Jaroslav Lichtblau <dragonlord@aur.archlinux.org>
+ * Updated to major version 0.38.0
+
+2009-08-16 Jaroslav Lichtblau <dragonlord@aur.archlinux.org>
+ * Updated to major version 0.37.0
+
+2008-10-05 Jaroslav Lichtblau <dragonlord@aur.archlinux.org>
+ * Updated to major version 0.36.0
+
+2008-10-05 Jaroslav Lichtblau <dragonlord@aur.archlinux.org>
+ * Moved to [community] repo
diff --git a/libre/audacious-plugins-libre/PKGBUILD b/libre/audacious-plugins-libre/PKGBUILD
index 51668c454..d5b1e5313 100644
--- a/libre/audacious-plugins-libre/PKGBUILD
+++ b/libre/audacious-plugins-libre/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 162794 2012-06-30 14:17:02Z bisson $
+# $Id: PKGBUILD 164182 2012-07-27 00:15:41Z bisson $
# Contributor: Alexander Fehr <pizzapunk gmail com>
# Contributor: William Rea <sillywilly@gmail.com>
# Maintainer: Gaetan Bisson <bisson@archlinux.org>
@@ -7,8 +7,8 @@
_pkgname=audacious-plugins
pkgname=audacious-plugins-libre
-pkgver=3.2.4
-pkgrel=2
+pkgver=3.3.1
+pkgrel=1
pkgdesc='Plugins for Audacious without unfree plugins'
url='http://audacious-media-player.org/'
arch=('i686' 'x86_64')
@@ -60,7 +60,7 @@ optdepends=('oss: Open Sound System v4 output'
'libcue: CUE playlist format')
source=("http://distfiles.audacious-media-player.org/${_pkgname}-${pkgver}.tar.bz2")
-sha1sums=('7538a0391504ce4a92967dc7c5bd4948751efa91')
+sha1sums=('7775ff82a7fe2a1de7eb8a76322718c845a1f225')
build() {
# Retrieve upstream & remove plugin 'psf' due to issues mentioned above.
sed -i s/enable_psf=yes/enable_psf=no/ ${_pkgname}-$pkgver/configure
diff --git a/libre/blender-libre/PKGBUILD b/libre/blender-libre/PKGBUILD
index 6fc5679e7..6e3228359 100644
--- a/libre/blender-libre/PKGBUILD
+++ b/libre/blender-libre/PKGBUILD
@@ -1,22 +1,11 @@
# $Id$
-# Contributor: John Sowiak <john@archlinux.org>
-# Contributor: tobias <tobias@archlinux.org>
-# Maintainer: Sven-Hendrik Haase <sh@lutzhaase.com>
-# Maintainer (Parabola): Márcio Silva <coadde@adinet.com.uy>
+# Maintainer (Parabola): Márcio Silva <coadde@lavabit.com>
-# Apparently, the blender guys refuse to release source tarballs for
-# intermediate releases that deal mainly with binaries but incorporate tiny
-# minor changes from svn. Since I'm sick and tired of the urges of users that
-# look for release numbers only, we make a messy PKGBUILD that can checkout svn
-# release if necessary.
-
-_svn=true
_pkgname=blender
pkgname=blender-libre
-true && pkgver=2.63a # Hack for svn
-true && pkgrel=2
-epoch=4
-pkgdesc="A fully integrated 3D graphics creation suite without cuda-toolkit recommendation"
+pkgver=2.63a
+pkgrel=5
+pkgdesc="A fully integrated 3D graphics creation suite (without nonfree cuda-toolkit support)"
arch=('i686' 'x86_64' 'mips64el')
license=('GPL')
url="http://www.blender.org"
@@ -24,45 +13,23 @@ depends=('libpng' 'libtiff' 'openexr' 'python' 'desktop-file-utils'
'shared-mime-info' 'hicolor-icon-theme' 'xdg-utils' 'glew'
'freetype2' 'openal' 'ffmpeg' 'fftw' 'boost-libs' 'opencollada'
'openimageio' 'libsndfile' 'jack')
-makedepends=('cmake' 'boost' 'subversion')
+makedepends=('cmake' 'boost')
replaces=("${_pkgname}")
conflicts=("${_pkgname}")
provides=("${_pkgname}=${pkgver}")
-options=(!strip)
-install=blender.install
-if [[ $_svn = false ]]; then
- source=(http://download.blender.org/source/$_pkgname-$pkgver.tar.gz)
- md5sums=('31a60b3ce5466d965cb7e2648995e092')
-else
- source=(ffmpeg-0.11.patch)
- md5sums=('168db32487e363e71fd4671e204afccf')
-fi
-
-_svntrunk="https://svn.blender.org/svnroot/bf-blender/trunk/blender"
-_svnmod="blender"
+install=${_pkgname}.install
+source=(http://download.${_pkgname}.org/source/${_pkgname}-${pkgver}.tar.gz
+ ffmpeg-0.11.patch
+ boost-1.50.patch)
+md5sums=('31a60b3ce5466d965cb7e2648995e092'
+ '9e5649403e51654615d30b10bc460217'
+ '0bab80da07d980c47b8ce3cb998edaef')
build() {
-if [[ $_svn = true ]]; then
- cd "$srcdir"
- msg "Connecting to SVN server...."
-
- if [[ -d "$_svnmod/.svn" ]]; then
- (cd "$_svnmod" && svn up )
- else
- svn co "$_svntrunk" --config-dir ./ "$_svnmod"
- fi
+ cd "${srcdir}/${_pkgname}-${pkgver}"
- msg "SVN checkout done or server timeout"
- msg "Starting build..."
-
- rm -rf "$srcdir/$_svnmod-build"
- cp -r "$srcdir/$_svnmod" "$srcdir/$_svnmod-build"
- cd "$srcdir/$_svnmod-build"
-else
- cd "$srcdir/$_pkgname-$pkgver"
-fi
-
- patch -Np0 < "$srcdir"/ffmpeg-0.11.patch
+ patch -Np1 < "${srcdir}"/ffmpeg-0.11.patch
+ patch -Np1 < "${srcdir}"/boost-1.50.patch
sed -i "/<libavcodec\/opt.h>/d" intern/ffmpeg/ffmpeg_compat.h
sed -i "/<libavcodec\/opt.h>/d" source/blender/blenkernel/intern/writeffmpeg.c
@@ -96,26 +63,11 @@ fi
make $MAKEFLAGS
-# cp -rf "$srcdir"/${_pkgname}-$pkgver/release/plugins/* \
-# "$srcdir"/${_pkgname}-$pkgver/source/blender/blenpluginapi/
-# cd "$srcdir"/${_pkgname}-$pkgver/source/blender/blenpluginapi
-# chmod 755 bmake
make
}
package() {
- if [[ $_svn = true ]]; then
- cd "$srcdir/$_svnmod-build/build"
- else
- cd "$srcdir/$_pkgname-$pkgver/build"
- fi
+ cd "${srcdir}/${_pkgname}-${pkgver}/build"
make DESTDIR="${pkgdir}" install
python -m compileall "${pkgdir}/usr/share/blender"
-
-# install plugins
-# install -d -m755 "$pkgdir"/usr/share/blender/${pkgver%[a-z]}/plugins/{sequence,texture}
-# cp "$srcdir"/${_pkgname}-$pkgver/source/blender/blenpluginapi/sequence/*.so \
-# "$pkgdir"/usr/share/blender/${pkgver%[a-z]}/plugins/sequence/
-# cp "$srcdir"/${_pkgname}-$pkgver/source/blender/blenpluginapi/texture/*.so \
-# "$pkgdir"/usr/share/blender/${pkgver%[a-z]}/plugins/texture/
}
diff --git a/libre/blender-libre/boost-1.50.patch b/libre/blender-libre/boost-1.50.patch
new file mode 100644
index 000000000..fa698a3a6
--- /dev/null
+++ b/libre/blender-libre/boost-1.50.patch
@@ -0,0 +1,42 @@
+diff -Naur a/intern/cycles/util/util_cache.cpp b/intern/cycles/util/util_cache.cpp
+--- a/intern/cycles/util/util_cache.cpp 2012-05-10 11:44:09.000000000 -0300
++++ b/intern/cycles/util/util_cache.cpp 2012-07-15 14:19:34.893238929 -0300
+@@ -26,8 +26,6 @@
+ #include "util_path.h"
+ #include "util_types.h"
+
+-#define BOOST_FILESYSTEM_VERSION 2
+-
+ #include <boost/filesystem.hpp>
+ #include <boost/algorithm/string.hpp>
+
+@@ -117,7 +115,7 @@
+ boost::filesystem::directory_iterator it(dir), it_end;
+
+ for(; it != it_end; it++) {
+- string filename = it->path().filename();
++ string filename = it->path().filename().string();
+
+ if(boost::starts_with(filename, name))
+ if(except.find(filename) == except.end())
+diff -Naur blender-2.63a/intern/cycles/util/util_path.cpp blender-2.63a-new/intern/cycles/util/util_path.cpp
+--- a/intern/cycles/util/util_path.cpp 2012-05-10 11:44:09.000000000 -0300
++++ b/intern/cycles/util/util_path.cpp 2012-07-15 14:19:14.126293394 -0300
+@@ -26,8 +26,6 @@
+
+ #include <stdio.h>
+
+-#define BOOST_FILESYSTEM_VERSION 2
+-
+ #include <boost/filesystem.hpp>
+ #include <boost/algorithm/string.hpp>
+
+@@ -60,7 +58,7 @@
+
+ string path_filename(const string& path)
+ {
+- return boost::filesystem::path(path).filename();
++ return boost::filesystem::path(path).filename().string();
+ }
+
+ string path_dirname(const string& path)
diff --git a/libre/blender-libre/ffmpeg-0.11.patch b/libre/blender-libre/ffmpeg-0.11.patch
index bc67052bf..45144140c 100644
--- a/libre/blender-libre/ffmpeg-0.11.patch
+++ b/libre/blender-libre/ffmpeg-0.11.patch
@@ -1,104 +1,101 @@
-Index: intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp
-===================================================================
---- intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp (revision 47422)
-+++ intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp (working copy)
+diff -Naur blender-2.63a.orig/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp blender-2.63a/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp
+--- blender-2.63a.orig/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp 2012-05-10 11:45:40.000000000 -0300
++++ blender-2.63a/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp 2012-07-10 18:12:55.727129720 -0300
@@ -143,23 +143,23 @@
-
- switch(m_codecCtx->sample_fmt)
- {
+
+ switch(m_codecCtx->sample_fmt)
+ {
- case SAMPLE_FMT_U8:
+ case AV_SAMPLE_FMT_U8:
- m_convert = AUD_convert_u8_float;
- m_specs.format = AUD_FORMAT_U8;
- break;
+ m_convert = AUD_convert_u8_float;
+ m_specs.format = AUD_FORMAT_U8;
+ break;
- case SAMPLE_FMT_S16:
+ case AV_SAMPLE_FMT_S16:
- m_convert = AUD_convert_s16_float;
- m_specs.format = AUD_FORMAT_S16;
- break;
+ m_convert = AUD_convert_s16_float;
+ m_specs.format = AUD_FORMAT_S16;
+ break;
- case SAMPLE_FMT_S32:
+ case AV_SAMPLE_FMT_S32:
- m_convert = AUD_convert_s32_float;
- m_specs.format = AUD_FORMAT_S32;
- break;
+ m_convert = AUD_convert_s32_float;
+ m_specs.format = AUD_FORMAT_S32;
+ break;
- case SAMPLE_FMT_FLT:
+ case AV_SAMPLE_FMT_FLT:
- m_convert = AUD_convert_copy<float>;
- m_specs.format = AUD_FORMAT_FLOAT32;
- break;
+ m_convert = AUD_convert_copy<float>;
+ m_specs.format = AUD_FORMAT_FLOAT32;
+ break;
- case SAMPLE_FMT_DBL:
+ case AV_SAMPLE_FMT_DBL:
- m_convert = AUD_convert_double_float;
- m_specs.format = AUD_FORMAT_FLOAT64;
- break;
+ m_convert = AUD_convert_double_float;
+ m_specs.format = AUD_FORMAT_FLOAT64;
+ break;
@@ -189,7 +189,7 @@
- }
- catch(AUD_Exception&)
- {
+ }
+ catch(AUD_Exception&)
+ {
- av_close_input_file(m_formatCtx);
+ avformat_close_input(&m_formatCtx);
- throw;
- }
+ throw;
+ }
}
@@ -227,7 +227,7 @@
- }
- catch(AUD_Exception&)
- {
+ }
+ catch(AUD_Exception&)
+ {
- av_close_input_stream(m_formatCtx);
+ avformat_close_input(&m_formatCtx);
- av_free(m_aviocontext);
- throw;
- }
+ av_free(m_aviocontext);
+ throw;
+ }
@@ -239,7 +239,7 @@
-
- if(m_aviocontext)
- {
+
+ if(m_aviocontext)
+ {
- av_close_input_stream(m_formatCtx);
+ avformat_close_input(&m_formatCtx);
- av_free(m_aviocontext);
- }
- else
-Index: intern/audaspace/ffmpeg/AUD_FFMPEGWriter.cpp
-===================================================================
---- intern/audaspace/ffmpeg/AUD_FFMPEGWriter.cpp (revision 47422)
-+++ intern/audaspace/ffmpeg/AUD_FFMPEGWriter.cpp (working copy)
+ av_free(m_aviocontext);
+ }
+ else
+diff -Naur blender-2.63a.orig/intern/audaspace/ffmpeg/AUD_FFMPEGWriter.cpp blender-2.63a/intern/audaspace/ffmpeg/AUD_FFMPEGWriter.cpp
+--- blender-2.63a.orig/intern/audaspace/ffmpeg/AUD_FFMPEGWriter.cpp 2012-05-10 11:45:40.000000000 -0300
++++ blender-2.63a/intern/audaspace/ffmpeg/AUD_FFMPEGWriter.cpp 2012-07-10 18:14:55.893790273 -0300
@@ -133,23 +133,23 @@
- {
- case AUD_FORMAT_U8:
- m_convert = AUD_convert_float_u8;
+ {
+ case AUD_FORMAT_U8:
+ m_convert = AUD_convert_float_u8;
- m_codecCtx->sample_fmt = SAMPLE_FMT_U8;
+ m_codecCtx->sample_fmt = AV_SAMPLE_FMT_U8;
- break;
- case AUD_FORMAT_S16:
- m_convert = AUD_convert_float_s16;
+ break;
+ case AUD_FORMAT_S16:
+ m_convert = AUD_convert_float_s16;
- m_codecCtx->sample_fmt = SAMPLE_FMT_S16;
+ m_codecCtx->sample_fmt = AV_SAMPLE_FMT_S16;
- break;
- case AUD_FORMAT_S32:
- m_convert = AUD_convert_float_s32;
+ break;
+ case AUD_FORMAT_S32:
+ m_convert = AUD_convert_float_s32;
- m_codecCtx->sample_fmt = SAMPLE_FMT_S32;
+ m_codecCtx->sample_fmt = AV_SAMPLE_FMT_S32;
- break;
- case AUD_FORMAT_FLOAT32:
- m_convert = AUD_convert_copy<float>;
+ break;
+ case AUD_FORMAT_FLOAT32:
+ m_convert = AUD_convert_copy<float>;
- m_codecCtx->sample_fmt = SAMPLE_FMT_FLT;
+ m_codecCtx->sample_fmt = AV_SAMPLE_FMT_FLT;
- break;
- case AUD_FORMAT_FLOAT64:
- m_convert = AUD_convert_float_double;
+ break;
+ case AUD_FORMAT_FLOAT64:
+ m_convert = AUD_convert_float_double;
- m_codecCtx->sample_fmt = SAMPLE_FMT_DBL;
+ m_codecCtx->sample_fmt = AV_SAMPLE_FMT_DBL;
- break;
- default:
- AUD_THROW(AUD_ERROR_FFMPEG, format_error);
-Index: intern/ffmpeg/ffmpeg_compat.h
-===================================================================
---- intern/ffmpeg/ffmpeg_compat.h (revision 47422)
-+++ intern/ffmpeg/ffmpeg_compat.h (working copy)
+ break;
+ default:
+ AUD_THROW(AUD_ERROR_FFMPEG, format_error);
+diff -Naur blender-2.63a.orig/intern/ffmpeg/ffmpeg_compat.h blender-2.63a/intern/ffmpeg/ffmpeg_compat.h
+--- blender-2.63a.orig/intern/ffmpeg/ffmpeg_compat.h 2012-05-10 11:46:17.000000000 -0300
++++ blender-2.63a/intern/ffmpeg/ffmpeg_compat.h 2012-07-10 18:17:04.823783714 -0300
@@ -76,6 +76,10 @@
#define FFMPEG_FFV1_ALPHA_SUPPORTED
#endif
-
+
+#if ((LIBAVFORMAT_VERSION_MAJOR < 53) || ((LIBAVFORMAT_VERSION_MAJOR == 53) && (LIBAVFORMAT_VERSION_MINOR < 24)) || ((LIBAVFORMAT_VERSION_MAJOR == 53) && (LIBAVFORMAT_VERSION_MINOR < 24) && (LIBAVFORMAT_VERSION_MICRO < 2)))
+#define avformat_close_input(x) av_close_input_file(*(x))
+#endif
@@ -106,31 +103,30 @@ Index: intern/ffmpeg/ffmpeg_compat.h
#ifndef FFMPEG_HAVE_AVIO
#define AVIO_FLAG_WRITE URL_WRONLY
#define avio_open url_fopen
-Index: source/blender/blenkernel/intern/writeffmpeg.c
-===================================================================
---- source/blender/blenkernel/intern/writeffmpeg.c (revision 47422)
-+++ source/blender/blenkernel/intern/writeffmpeg.c (working copy)
-@@ -42,6 +42,7 @@
+diff -Naur blender-2.63a.orig/source/blender/blenkernel/intern/writeffmpeg.c blender-2.63a/source/blender/blenkernel/intern/writeffmpeg.c
+--- blender-2.63a.orig/source/blender/blenkernel/intern/writeffmpeg.c 2012-05-10 11:50:20.000000000 -0300
++++ blender-2.63a/source/blender/blenkernel/intern/writeffmpeg.c 2012-07-10 18:27:00.213753426 -0300
+@@ -36,6 +36,7 @@
#include <libavformat/avformat.h>
#include <libavcodec/avcodec.h>
#include <libavutil/rational.h>
+#include <libavutil/samplefmt.h>
#include <libswscale/swscale.h>
#include <libavcodec/opt.h>
-
-@@ -615,7 +616,7 @@
-
- c->sample_rate = rd->ffcodecdata.audio_mixrate;
- c->bit_rate = ffmpeg_audio_bitrate * 1000;
+
+@@ -612,7 +613,7 @@
+
+ c->sample_rate = rd->ffcodecdata.audio_mixrate;
+ c->bit_rate = ffmpeg_audio_bitrate*1000;
- c->sample_fmt = SAMPLE_FMT_S16;
+ c->sample_fmt = AV_SAMPLE_FMT_S16;
- c->channels = rd->ffcodecdata.audio_channels;
- codec = avcodec_find_encoder(c->codec_id);
- if (!codec) {
-@@ -657,11 +658,21 @@
+ c->channels = rd->ffcodecdata.audio_channels;
+ codec = avcodec_find_encoder(c->codec_id);
+ if (!codec) {
+@@ -654,11 +655,21 @@
}
/* essential functions -- start, append, end */
-
+
+static void ffmpeg_dict_set_int(AVDictionary **dict, const char *key, int value)
+{
+ char buffer[32];
@@ -142,134 +138,132 @@ Index: source/blender/blenkernel/intern/writeffmpeg.c
+
static int start_ffmpeg_impl(struct RenderData *rd, int rectx, int recty, ReportList *reports)
{
- /* Handle to the output file */
- AVFormatContext *of;
- AVOutputFormat *fmt;
+ /* Handle to the output file */
+ AVFormatContext* of;
+ AVOutputFormat* fmt;
+ AVDictionary *opts = NULL;
- char name[256];
- const char **exts;
-
-@@ -707,13 +718,14 @@
- of->oformat = fmt;
- of->packet_size = rd->ffcodecdata.mux_packet_size;
- if (ffmpeg_audio_codec != CODEC_ID_NONE) {
+ char name[256];
+ const char ** exts;
+
+@@ -704,13 +715,14 @@
+ of->oformat = fmt;
+ of->packet_size= rd->ffcodecdata.mux_packet_size;
+ if (ffmpeg_audio_codec != CODEC_ID_NONE) {
- of->mux_rate = rd->ffcodecdata.mux_rate;
+ ffmpeg_dict_set_int(&opts, "muxrate", rd->ffcodecdata.mux_rate);
- }
- else {
+ }
+ else {
- of->mux_rate = 0;
+ av_dict_set(&opts, "muxrate", "0", 0);
- }
-
-- of->preload = (int)(0.5 * AV_TIME_BASE);
-+ ffmpeg_dict_set_int(&opts, "preload", (int)(0.5 * AV_TIME_BASE));
+ }
+
+- of->preload = (int)(0.5*AV_TIME_BASE);
++ ffmpeg_dict_set_int(&opts, "preload", (int)(0.5*AV_TIME_BASE));
+
- of->max_delay = (int)(0.7 * AV_TIME_BASE);
-
- fmt->audio_codec = ffmpeg_audio_codec;
-@@ -776,6 +788,7 @@
- fmt->audio_codec = CODEC_ID_PCM_S16LE;
- if (ffmpeg_audio_codec != CODEC_ID_NONE && rd->ffcodecdata.audio_mixrate != 48000 && rd->ffcodecdata.audio_channels != 2) {
- BKE_report(reports, RPT_ERROR, "FFMPEG only supports 48khz / stereo audio for DV!");
+ of->max_delay = (int)(0.7*AV_TIME_BASE);
+
+ fmt->audio_codec = ffmpeg_audio_codec;
+@@ -773,6 +785,7 @@
+ fmt->audio_codec = CODEC_ID_PCM_S16LE;
+ if (ffmpeg_audio_codec != CODEC_ID_NONE && rd->ffcodecdata.audio_mixrate != 48000 && rd->ffcodecdata.audio_channels != 2) {
+ BKE_report(reports, RPT_ERROR, "FFMPEG only supports 48khz / stereo audio for DV!");
+ av_dict_free(&opts);
- return 0;
- }
- }
-@@ -785,6 +798,7 @@
- printf("alloc video stream %p\n", video_stream);
- if (!video_stream) {
- BKE_report(reports, RPT_ERROR, "Error initializing video stream.");
+ return 0;
+ }
+ }
+@@ -782,6 +795,7 @@
+ printf("alloc video stream %p\n", video_stream);
+ if (!video_stream) {
+ BKE_report(reports, RPT_ERROR, "Error initializing video stream.");
+ av_dict_free(&opts);
- return 0;
- }
- }
-@@ -793,27 +807,26 @@
- audio_stream = alloc_audio_stream(rd, fmt->audio_codec, of);
- if (!audio_stream) {
- BKE_report(reports, RPT_ERROR, "Error initializing audio stream.");
+ return 0;
+ }
+ }
+@@ -790,27 +804,27 @@
+ audio_stream = alloc_audio_stream(rd, fmt->audio_codec, of);
+ if (!audio_stream) {
+ BKE_report(reports, RPT_ERROR, "Error initializing audio stream.");
+ av_dict_free(&opts);
- return 0;
- }
- }
+ return 0;
+ }
+ }
- if (av_set_parameters(of, NULL) < 0) {
- BKE_report(reports, RPT_ERROR, "Error setting output parameters.");
- return 0;
- }
- if (!(fmt->flags & AVFMT_NOFILE)) {
- if (avio_open(&of->pb, name, AVIO_FLAG_WRITE) < 0) {
- BKE_report(reports, RPT_ERROR, "Could not open file for writing.");
+ if (!(fmt->flags & AVFMT_NOFILE)) {
+ if (avio_open(&of->pb, name, AVIO_FLAG_WRITE) < 0) {
+ BKE_report(reports, RPT_ERROR, "Could not open file for writing.");
+ av_dict_free(&opts);
- return 0;
- }
- }
--
+ return 0;
+ }
+ }
+
- if (av_write_header(of) < 0) {
+ if (avformat_write_header(of, NULL) < 0) {
- BKE_report(reports, RPT_ERROR, "Could not initialize streams. Probably unsupported codec combination.");
-+ av_dict_free(&opts);
- return 0;
- }
-
- outfile = of;
- av_dump_format(of, 0, name, 1);
+ BKE_report(reports, RPT_ERROR, "Could not initialize streams. Probably unsupported codec combination.");
++ av_dict_free(&opts);
+ return 0;
+ }
+
+ outfile = of;
+ av_dump_format(of, 0, name, 1);
+ av_dict_free(&opts);
-
- return 1;
+
+ return 1;
}
-Index: source/blender/imbuf/intern/anim_movie.c
-===================================================================
---- source/blender/imbuf/intern/anim_movie.c (revision 47422)
-+++ source/blender/imbuf/intern/anim_movie.c (working copy)
-@@ -445,7 +445,7 @@
- int i, videoStream;
-
- AVCodec *pCodec;
+diff -Naur blender-2.63a.orig/source/blender/imbuf/intern/anim_movie.c blender-2.63a/source/blender/imbuf/intern/anim_movie.c
+--- blender-2.63a.orig/source/blender/imbuf/intern/anim_movie.c 2012-05-10 11:50:59.000000000 -0300
++++ blender-2.63a/source/blender/imbuf/intern/anim_movie.c 2012-07-10 18:30:19.413743294 -0300
+@@ -436,7 +436,7 @@
+ int i, videoStream;
+
+ AVCodec *pCodec;
- AVFormatContext *pFormatCtx;
+ AVFormatContext *pFormatCtx = NULL;
- AVCodecContext *pCodecCtx;
- int frs_num;
- double frs_den;
-@@ -464,7 +464,7 @@
-
- do_init_ffmpeg();
-
-- if (av_open_input_file(&pFormatCtx, anim->name, NULL, 0, NULL) != 0) {
-+ if (avformat_open_input(&pFormatCtx, anim->name, NULL, NULL) != 0) {
- return -1;
- }
-
-@@ -998,7 +998,8 @@
- ret = av_seek_frame(anim->pFormatCtx,
- -1,
- pos, AVSEEK_FLAG_BYTE);
+ AVCodecContext *pCodecCtx;
+ int frs_num;
+ double frs_den;
+@@ -455,7 +455,7 @@
+
+ do_init_ffmpeg();
+
+- if (av_open_input_file(&pFormatCtx, anim->name, NULL, 0, NULL)!=0) {
++ if (avformat_open_input(&pFormatCtx, anim->name, NULL, NULL)!=0) {
+ return -1;
+ }
+
+@@ -990,7 +990,8 @@
+ ret = av_seek_frame(anim->pFormatCtx,
+ -1,
+ pos, AVSEEK_FLAG_BYTE);
- av_update_cur_dts(anim->pFormatCtx, v_st, dts);
+ // XXX: need double verification
+ // av_update_cur_dts(anim->pFormatCtx, v_st, dts);
- }
- else {
- av_log(anim->pFormatCtx, AV_LOG_DEBUG,
-Index: source/blender/imbuf/intern/indexer.c
-===================================================================
---- source/blender/imbuf/intern/indexer.c (revision 47422)
-+++ source/blender/imbuf/intern/indexer.c (working copy)
-@@ -531,13 +531,6 @@
- rv->c->flags |= CODEC_FLAG_GLOBAL_HEADER;
- }
-
+ }
+ else {
+ av_log(anim->pFormatCtx, AV_LOG_DEBUG,
+diff -Naur blender-2.63a.orig/source/blender/imbuf/intern/indexer.c blender-2.63a/source/blender/imbuf/intern/indexer.c
+--- blender-2.63a.orig/source/blender/imbuf/intern/indexer.c 2012-05-10 11:50:59.000000000 -0300
++++ blender-2.63a/source/blender/imbuf/intern/indexer.c 2012-07-10 18:38:25.737051891 -0300
+@@ -533,13 +533,6 @@
+ rv->c->flags |= CODEC_FLAG_GLOBAL_HEADER;
+ }
+
- if (av_set_parameters(rv->of, NULL) < 0) {
- fprintf(stderr, "Couldn't set output parameters? "
-- "Proxy not built!\n");
+- "Proxy not built!\n");
- av_free(rv->of);
- return 0;
- }
-
- if (avio_open(&rv->of->pb, fname, AVIO_FLAG_WRITE) < 0) {
- fprintf(stderr, "Couldn't open outputfile! "
- "Proxy not built!\n");
-@@ -574,7 +567,12 @@
- NULL, NULL, NULL);
- }
-
+ if (avio_open(&rv->of->pb, fname, AVIO_FLAG_WRITE) < 0) {
+ fprintf(stderr, "Couldn't open outputfile! "
+ "Proxy not built!\n");
+@@ -576,7 +569,12 @@
+ NULL, NULL, NULL);
+ }
+
- av_write_header(rv->of);
+ if (avformat_write_header(rv->of, NULL) < 0) {
+ fprintf(stderr, "Couldn't set output parameters? "
@@ -277,95 +271,92 @@ Index: source/blender/imbuf/intern/indexer.c
+ av_free(rv->of);
+ return 0;
+ }
-
- return rv;
+
+ return rv;
}
-@@ -737,7 +735,7 @@
- memset(context->proxy_ctx, 0, sizeof(context->proxy_ctx));
- memset(context->indexer, 0, sizeof(context->indexer));
-
+@@ -739,7 +737,7 @@
+ memset(context->proxy_ctx, 0, sizeof(context->proxy_ctx));
+ memset(context->indexer, 0, sizeof(context->indexer));
+
- if (av_open_input_file(&context->iFormatCtx, anim->name, NULL, 0, NULL) != 0) {
+ if (avformat_open_input(&context->iFormatCtx, anim->name, NULL, NULL) != 0) {
- MEM_freeN(context);
- return NULL;
- }
-Index: source/blender/imbuf/intern/util.c
-===================================================================
---- source/blender/imbuf/intern/util.c (revision 47422)
-+++ source/blender/imbuf/intern/util.c (working copy)
-@@ -247,7 +247,7 @@
-
- static int isffmpeg(const char *filename)
+ MEM_freeN(context);
+ return NULL;
+ }
+diff -Naur blender-2.63a.orig/source/blender/imbuf/intern/util.c blender-2.63a/source/blender/imbuf/intern/util.c
+--- blender-2.63a.orig/source/blender/imbuf/intern/util.c 2012-05-10 11:50:59.000000000 -0300
++++ blender-2.63a/source/blender/imbuf/intern/util.c 2012-07-10 18:40:49.950377886 -0300
+@@ -243,7 +243,7 @@
+
+ static int isffmpeg (const char *filename)
{
- AVFormatContext *pFormatCtx;
+ AVFormatContext *pFormatCtx = NULL;
- unsigned int i;
- int videoStream;
- AVCodec *pCodec;
-@@ -268,7 +268,7 @@
- return 0;
- }
-
-- if (av_open_input_file(&pFormatCtx, filename, NULL, 0, NULL) != 0) {
-+ if (avformat_open_input(&pFormatCtx, filename, NULL, NULL) != 0) {
- if (UTIL_DEBUG) fprintf(stderr, "isffmpeg: av_open_input_file failed\n");
- return 0;
- }
-Index: source/gameengine/VideoTexture/VideoFFmpeg.cpp
-===================================================================
---- source/gameengine/VideoTexture/VideoFFmpeg.cpp (revision 47422)
-+++ source/gameengine/VideoTexture/VideoFFmpeg.cpp (working copy)
+ unsigned int i;
+ int videoStream;
+ AVCodec *pCodec;
+@@ -261,7 +261,7 @@
+ BLI_testextensie(filename, ".cin") ||
+ BLI_testextensie(filename, ".wav")) return 0;
+
+- if (av_open_input_file(&pFormatCtx, filename, NULL, 0, NULL)!=0) {
++ if (avformat_open_input(&pFormatCtx, filename, NULL, NULL)!=0) {
+ if (UTIL_DEBUG) fprintf(stderr, "isffmpeg: av_open_input_file failed\n");
+ return 0;
+ }
+diff -Naur blender-2.63a.orig/source/gameengine/VideoTexture/VideoFFmpeg.cpp blender-2.63a/source/gameengine/VideoTexture/VideoFFmpeg.cpp
+--- blender-2.63a.orig/source/gameengine/VideoTexture/VideoFFmpeg.cpp 2012-05-10 11:48:50.000000000 -0300
++++ blender-2.63a/source/gameengine/VideoTexture/VideoFFmpeg.cpp 2012-07-10 18:56:03.696998071 -0300
@@ -162,14 +162,14 @@
}
-
-
+
+
-int VideoFFmpeg::openStream(const char *filename, AVInputFormat *inputFormat, AVFormatParameters *formatParams)
+int VideoFFmpeg::openStream(const char *filename, AVInputFormat *inputFormat, AVDictionary **formatParams)
{
- AVFormatContext *formatCtx;
+ AVFormatContext *formatCtx = NULL;
- int i, videoStream;
- AVCodec *codec;
- AVCodecContext *codecCtx;
-
+ int i, videoStream;
+ AVCodec *codec;
+ AVCodecContext *codecCtx;
+
- if (av_open_input_file(&formatCtx, filename, inputFormat, 0, formatParams)!=0)
+ if (avformat_open_input(&formatCtx, filename, inputFormat, formatParams)!=0)
- return -1;
-
- if (av_find_stream_info(formatCtx)<0)
+ return -1;
+
+ if (av_find_stream_info(formatCtx)<0)
@@ -545,11 +545,7 @@
- // but it is really not desirable to seek on http file, so force streaming.
- // It would be good to find this information from the context but there are no simple indication
- !strncmp(filename, "http://", 7) ||
+ // but it is really not desirable to seek on http file, so force streaming.
+ // It would be good to find this information from the context but there are no simple indication
+ !strncmp(filename, "http://", 7) ||
-#ifdef FFMPEG_PB_IS_POINTER
- (m_formatCtx->pb && m_formatCtx->pb->is_streamed)
-#else
- m_formatCtx->pb.is_streamed
-#endif
+ (m_formatCtx->pb && !m_formatCtx->pb->seekable)
- )
- {
- // the file is in fact a streaming source, treat as cam to prevent seeking
-@@ -586,14 +582,12 @@
+ )
+ {
+ // the file is in fact a streaming source, treat as cam to prevent seeking
+@@ -586,13 +582,11 @@
{
- // open camera source
- AVInputFormat *inputFormat;
+ // open camera source
+ AVInputFormat *inputFormat;
- AVFormatParameters formatParams;
- AVRational frameRate;
+ AVDictionary *formatParams = NULL;
- char filename[28], rateStr[20];
- char *p;
-
- do_init_ffmpeg();
-
+ char *p, filename[28], rateStr[20];
+
+ do_init_ffmpeg();
+
- memset(&formatParams, 0, sizeof(formatParams));
#ifdef WIN32
- // video capture on windows only through Video For Windows driver
- inputFormat = av_find_input_format("vfwcap");
-@@ -623,7 +617,13 @@
- sprintf(filename, "/dev/dv1394/%d", camIdx);
- } else
- {
+ // video capture on windows only through Video For Windows driver
+ inputFormat = av_find_input_format("vfwcap");
+@@ -622,7 +616,13 @@
+ sprintf(filename, "/dev/dv1394/%d", camIdx);
+ } else
+ {
- inputFormat = av_find_input_format("video4linux");
+ const char *formats[] = {"video4linux2,v4l2", "video4linux2", "video4linux"};
+ int i, formatsCount = sizeof(formats) / sizeof(char*);
@@ -374,23 +365,23 @@ Index: source/gameengine/VideoTexture/VideoFFmpeg.cpp
+ if (inputFormat)
+ break;
+ }
- sprintf(filename, "/dev/video%d", camIdx);
- }
- if (!inputFormat)
-@@ -637,20 +637,22 @@
- if ((p = strchr(filename, ':')) != 0)
- *p = 0;
- }
+ sprintf(filename, "/dev/video%d", camIdx);
+ }
+ if (!inputFormat)
+@@ -636,20 +636,22 @@
+ if ((p = strchr(filename, ':')) != 0)
+ *p = 0;
+ }
- if (file && (p = strchr(file, ':')) != NULL)
- formatParams.standard = p+1;
+ if (file && (p = strchr(file, ':')) != NULL) {
+ av_dict_set(&formatParams, "standard", p+1, 0);
+ }
#endif
- //frame rate
- if (m_captRate <= 0.f)
- m_captRate = defFrameRate;
- sprintf(rateStr, "%f", m_captRate);
+ //frame rate
+ if (m_captRate <= 0.f)
+ m_captRate = defFrameRate;
+ sprintf(rateStr, "%f", m_captRate);
- av_parse_video_rate(&frameRate, rateStr);
- // populate format parameters
- // need to specify the time base = inverse of rate
@@ -406,26 +397,25 @@ Index: source/gameengine/VideoTexture/VideoFFmpeg.cpp
+ BLI_snprintf(video_size, sizeof(video_size), "%dx%d", m_captWidth, m_captHeight);
+ av_dict_set(&formatParams, "video_size", video_size, 0);
+ }
-
- if (openStream(filename, inputFormat, &formatParams) != 0)
- return;
-@@ -665,6 +667,8 @@
- // no need to thread if the system has a single core
- m_isThreaded = true;
- }
+
+ if (openStream(filename, inputFormat, &formatParams) != 0)
+ return;
+@@ -664,6 +666,8 @@
+ // no need to thread if the system has a single core
+ m_isThreaded = true;
+ }
+
+ av_dict_free(&formatParams);
}
-
+
// play video
-Index: source/gameengine/VideoTexture/VideoFFmpeg.h
-===================================================================
---- source/gameengine/VideoTexture/VideoFFmpeg.h (revision 47422)
-+++ source/gameengine/VideoTexture/VideoFFmpeg.h (working copy)
+diff -Naur blender-2.63a.orig/source/gameengine/VideoTexture/VideoFFmpeg.h blender-2.63a/source/gameengine/VideoTexture/VideoFFmpeg.h
+--- blender-2.63a.orig/source/gameengine/VideoTexture/VideoFFmpeg.h 2012-05-10 11:48:50.000000000 -0300
++++ blender-2.63a/source/gameengine/VideoTexture/VideoFFmpeg.h 2012-07-10 18:57:21.710327435 -0300
@@ -46,10 +46,6 @@
# define FFMPEG_CODEC_IS_POINTER 1
#endif
-
+
-#if LIBAVFORMAT_VERSION_INT >= (52 << 16)
-# define FFMPEG_PB_IS_POINTER 1
-#endif
@@ -434,11 +424,11 @@ Index: source/gameengine/VideoTexture/VideoFFmpeg.h
static inline AVCodecContext* get_codec_from_stream(AVStream* stream)
{
@@ -172,7 +168,7 @@
- double actFrameRate (void) { return m_frameRate * m_baseFrameRate; }
-
- /// common function to video file and capture
+ double actFrameRate (void) { return m_frameRate * m_baseFrameRate; }
+
+ /// common function to video file and capture
- int openStream(const char *filename, AVInputFormat *inputFormat, AVFormatParameters *formatParams);
+ int openStream(const char *filename, AVInputFormat *inputFormat, AVDictionary **formatParams);
-
- /// check if a frame is available and load it in pFrame, return true if a frame could be retrieved
- AVFrame* grabFrame(long frame);
+
+ /// check if a frame is available and load it in pFrame, return true if a frame could be retrieved
+ AVFrame* grabFrame(long frame);
diff --git a/libre/cdfs-libre/PKGBUILD b/libre/cdfs-libre/PKGBUILD
new file mode 100644
index 000000000..700c6b818
--- /dev/null
+++ b/libre/cdfs-libre/PKGBUILD
@@ -0,0 +1,40 @@
+# $Id$
+# Maintainer: Sergej Pupykin <pupykin.s+arch@gmail.com>
+# Contributor: J. Santiago Hirschfeld <jsantiagoh@yahoo.com.ar>
+# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
+
+_pkgname=cdfs
+pkgname=cdfs-libre
+pkgver=2.6.27
+pkgrel=27
+pkgdesc="File system module libre that 'exports' all tracks and boot images on a CD as normal files."
+arch=(i686 x86_64)
+url="http://www.elis.UGent.be/~ronsse/cdfs/"
+license=('GPL')
+makedepends=('linux-libre-headers')
+replaces=('cdfs')
+conflicts=('cdfs')
+provides=("cdfs=${pkgver}")
+install=cdfs.install
+source=("http://www.elis.UGent.be/~ronsse/cdfs/download/$_pkgname-$pkgver.tar.bz2"
+ "cdfs-3.0.patch"
+ "cdfs-3.2.patch"
+ "cdfs-3.4.patch")
+md5sums=('ac64c014a90e3c488394832ea29605b3'
+ 'aba7da94a9dcbb8a93ea423cb6958fef'
+ 'e934407b3460257a301822ffc4ab3933'
+ '9215e7bdac728bd2f889fb525e543454')
+
+build() {
+ _kernver=`pacman -Q linux-libre | cut -d . -f 2 | cut -f 1 -d -`
+ depends=("linux-libre>=3.${_kernver}" "linux-libre<3.`expr ${_kernver} + 1`")
+ _kernverfull=`cat /usr/lib/modules/extramodules-3.${_kernver}-LIBRE/version`
+
+ cd $srcdir/$_pkgname-$pkgver
+ patch -p1 <$srcdir/cdfs-3.0.patch
+ patch -p1 <$srcdir/cdfs-3.2.patch
+ patch -p1 <$srcdir/cdfs-3.4.patch
+ make KDIR=/usr/lib/modules/${_kernverfull}/build
+ install -Dm0644 cdfs.ko $pkgdir/usr/lib/modules/extramodules-3.${_kernver}-LIBRE/cdfs.ko
+ sed -i "s|extramodules-.*-LIBRE|extramodules-3.${_kernver}-LIBRE|" $startdir/cdfs.install
+}
diff --git a/libre/cdfs-libre/cdfs-3.0.patch b/libre/cdfs-libre/cdfs-3.0.patch
new file mode 100644
index 000000000..20194b848
--- /dev/null
+++ b/libre/cdfs-libre/cdfs-3.0.patch
@@ -0,0 +1,274 @@
+diff -wbBur cdfs-2.6.27/cddata.c cdfs-2.6.27.my/cddata.c
+--- cdfs-2.6.27/cddata.c 2009-12-21 17:04:03.000000000 +0300
++++ cdfs-2.6.27.my/cddata.c 2011-07-24 21:18:44.000000000 +0400
+@@ -83,7 +83,7 @@
+ #else
+ .mmap = generic_file_readonly_mmap,
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
+- .sendfile = generic_file_sendfile
++// .sendfile = generic_file_sendfile
+ #else
+ .splice_read = generic_file_splice_read
+ #endif
+diff -wbBur cdfs-2.6.27/root.c cdfs-2.6.27.my/root.c
+--- cdfs-2.6.27/root.c 2009-12-21 16:38:31.000000000 +0300
++++ cdfs-2.6.27.my/root.c 2011-07-25 13:16:59.000000000 +0400
+@@ -32,19 +30,14 @@
+ * Added code to transform /proc/cdfs into a sequential synthetic file. *
+ *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+-
+ #include <linux/seq_file.h>
+-
+-#ifndef OLD_KERNEL
+ #include <linux/statfs.h>
+-#endif
++#include <linux/sched.h>
+
+ extern struct seq_operations cdfs_operations;
+ extern struct _track_info *dummy_track_p;
+
+-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,24)
+ struct inode *cdfs_iget(struct super_block *sp, unsigned long ino);
+-#endif
+ /*============================================================================*
+ * cdfs_open() *
+ * Description: *
+@@ -115,15 +108,8 @@
+
+ /********************************************************************/
+
+-#ifdef OLD_KERNEL
+-static struct super_block * cdfs_mount(struct super_block *sb, void *data, int silent){
+- kdev_t dev = sb->s_dev;
+- int i, j, t;
+- struct cdrom_tochdr hdr;
+-#else
+ static int cdfs_fill_super(struct super_block *sb, void *data, int silent){
+ int i, t;
+-#endif
+ struct cdrom_tocentry entry;
+ int no_audio=0, no_data=0;
+ cd * this_cd;
+@@ -131,24 +117,13 @@
+
+ PRINT("cdfs_mount\n");
+
+-#ifdef OLD_KERNEL
+- MOD_INC_USE_COUNT;
+-
+- set_blocksize(dev, CD_FRAMESIZE); // voor bread met ide-cd
+-#else
+ sb_set_blocksize(sb, CD_FRAMESIZE); // voor bread met ide-cd
+-#endif
+
+ sb->s_blocksize = CD_FRAMESIZE;
+ sb->s_blocksize_bits = 11;
+
+ if (!(this_cd = cdfs_info(sb) = kmalloc(sizeof(cd), GFP_KERNEL))){
+-#ifdef OLD_KERNEL
+- MOD_DEC_USE_COUNT;
+- return NULL;
+-#else
+ return -ENOMEM;
+-#endif
+ }
+
+ this_cd->mode = MODE;
+@@ -160,13 +135,8 @@
+
+ // Initialize cache for maximum sector size
+ if (!(this_cd->cache = kmalloc(CD_FRAMESIZE_RAWER*CACHE_SIZE, GFP_KERNEL))) {
+-#ifdef OLD_KERNEL
+- MOD_DEC_USE_COUNT;
+- return NULL;
+-#else
+ kfree(cdfs_info(sb));
+ return -ENOMEM;
+-#endif
+ }
+
+ // Cache is still invalid
+@@ -183,23 +153,13 @@
+ if (this_cd->toc_scsi){
+ if (cdfs_toc_read_full(sb)){
+ printk("TOC read failed\n");
+-#ifdef OLD_KERNEL
+- MOD_DEC_USE_COUNT;
+- return NULL;
+-#else
+ goto invalid;
+-#endif
+ }
+ } else {
+ //if (cdfs_ioctl(sb, CDROMREADTOCHDR, (unsigned long)&hdr)){
+ if (cdfs_toc_read(sb)){
+ printk("cdfs_toc_read failed\n");
+-#ifdef OLD_KERNEL
+- MOD_DEC_USE_COUNT;
+- return NULL;
+-#else
+ goto invalid;
+-#endif
+ }
+ }
+
+@@ -365,11 +325,7 @@
+ sb->s_flags |= MS_RDONLY;
+ sb->s_op = &cdfs_ops;
+ /* always get inode status */
+-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,24)
+ retinode=cdfs_iget(sb, 0);
+-#else
+- retinode=iget(sb, 0);
+-#endif
+ if ( IS_ERR(retinode) )
+ return PTR_ERR(retinode);
+
+@@ -379,16 +335,12 @@
+
+ cdfs_proc_cd = this_cd;
+
+-#ifdef OLD_KERNEL
+- return sb;
+-#else
+ return 0;
+
+ invalid:
+ kfree(this_cd->cache);
+ kfree(cdfs_info(sb));
+ return -EINVAL;
+-#endif
+ }
+
+ /************************************************************************/
+@@ -410,27 +362,12 @@
+ // Remove /proc entry
+ cdfs_proc_cd = NULL;
+ kfree(cdfs_info(sb));
+-
+-#ifdef OLD_KERNEL
+- MOD_DEC_USE_COUNT;
+-#endif
+-
+ }
+
+ /************************************************************************/
+
+-#ifdef OLD_KERNEL
+-static int cdfs_statfs(struct super_block *sb, struct statfs *buf) {
+- cd * this_cd = cdfs_info(sb);
+-#else
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
+ static int cdfs_statfs(struct dentry *d, struct kstatfs *buf) {
+ cd * this_cd = cdfs_info(d->d_sb);
+-#else
+-static int cdfs_statfs(struct super_block *sb, struct kstatfs *buf) {
+- cd * this_cd = cdfs_info(sb);
+-#endif
+-#endif
+ PRINT("rmfs_statfs\n");
+
+ buf->f_type = CDFS_MAGIC;
+@@ -460,11 +397,7 @@
+
+ /************************************************************************/
+
+-#ifdef OLD_KERNEL
+-static struct dentry * cdfs_lookup(struct inode *dir, struct dentry *dentry){
+-#else
+ static struct dentry * cdfs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd){
+-#endif
+ struct inode * inode;
+ int i;
+ cd * this_cd = cdfs_info(dir->i_sb);
+@@ -480,15 +413,9 @@
+ /* Use goto and read inode with iget()/cdfs_iget() */
+ /* Thanks to David Howells for patch and Master class in his mail */
+ found:
+-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,24)
+ inode = cdfs_iget(dir->i_sb, i);
+ if (IS_ERR(inode))
+ return ERR_CAST(inode);
+-#else
+- inode = iget(dir->i_sb, i);
+- if (!inode)
+- return ERR_PTR(-ENOMEM);
+-#endif
+ d_add(dentry, inode);
+ return NULL;
+ }
+@@ -529,12 +456,8 @@
+ i->i_fop = &cdfs_dir_operations;
+ } else { /* file */
+ i->i_size = this_cd->track[i->i_ino].size;
+-#ifdef OLD_KERNEL
+- i->i_mtime = i->i_atime = i->i_ctime = this_cd->track[i->i_ino].time;
+-#else
+ i->i_mtime.tv_sec = i->i_atime.tv_sec = i->i_ctime.tv_sec = this_cd->track[i->i_ino].time;
+ i->i_mtime.tv_nsec = i->i_atime.tv_nsec = i->i_ctime.tv_nsec = 0;
+-#endif
+ i->i_mode = this_cd->mode;
+ if ((this_cd->track[i->i_ino].type==DATA) && this_cd->track[i->i_ino].iso_size) {
+ i->i_fop = &cdfs_cddata_file_operations;
+@@ -587,33 +510,21 @@
+ /******************************************************************/
+
+ static struct super_operations cdfs_ops = {
+-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
+- .read_inode = cdfs_read_inode,
+-#endif
+ .put_super = cdfs_umount,
+ .statfs = cdfs_statfs
+ };
+
+-#ifdef OLD_KERNEL
+-static DECLARE_FSTYPE_DEV(cdfs_fs_type, FSNAME, cdfs_mount);
+-#else
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
+-static int cdfs_get_sb(struct file_system_type *fs_type, int flags, const char *dev_name, void *data, struct vfsmount *mnt) {
+- return get_sb_bdev(fs_type, flags, dev_name, data, cdfs_fill_super, mnt);
+-#else
+-static struct super_block *cdfs_get_sb(struct file_system_type *fs_type, int flags, const char *dev_name, void *data) {
+- return get_sb_bdev(fs_type, flags, dev_name, data, cdfs_fill_super);
+-#endif
+-}
++//static int cdfs_get_sb(struct file_system_type *fs_type, int flags, const char *dev_name, void *data, struct vfsmount *mnt) {
++// return get_sb_bdev(fs_type, flags, dev_name, data, cdfs_fill_super, mnt);
++//}
+
+ static struct file_system_type cdfs_fs_type = {
+ .owner = THIS_MODULE,
+ .name = "cdfs",
+- .get_sb = cdfs_get_sb,
++// .get_sb = cdfs_get_sb,
+ .kill_sb = kill_block_super,
+ .fs_flags = FS_REQUIRES_DEV
+ };
+-#endif
+
+ /******************************************************/
+
+@@ -621,10 +532,6 @@
+ MODULE_DESCRIPTION("CDfs: a CD filesystem");
+ MODULE_LICENSE("GPL");
+
+-#ifdef OLD_KERNEL
+-EXPORT_NO_SYMBOLS;
+-#endif
+-
+ /******************************************************************/
+
+ static int __init cdfs_init(void) {
+@@ -676,11 +583,7 @@
+
+ if (!options) return;
+
+-#ifdef OLD_KERNEL
+- for (this_char = strtok(options,","); this_char; this_char = strtok(NULL,",")) {
+-#else
+ while ((this_char = strsep(&options,",")) != NULL) {
+-#endif
+
+ if (!strcmp(this_char,"single"))
+ this_cd->single=TRUE;
diff --git a/libre/cdfs-libre/cdfs-3.2.patch b/libre/cdfs-libre/cdfs-3.2.patch
new file mode 100644
index 000000000..d3300bdbc
--- /dev/null
+++ b/libre/cdfs-libre/cdfs-3.2.patch
@@ -0,0 +1,12 @@
+diff -wbBur cdfs-2.6.27/root.c cdfs-2.6.27.my/root.c
+--- cdfs-2.6.27/root.c 2009-12-21 16:38:31.000000000 +0300
++++ cdfs-2.6.27.my/root.c 2012-01-18 11:23:03.000000000 +0400
+@@ -517,7 +517,7 @@
+
+ i->i_uid = this_cd->uid;
+ i->i_gid = this_cd->gid;
+- i->i_nlink = 1;
++ i->__i_nlink = 1;
+ i->i_op = &cdfs_inode_operations;
+ i->i_fop = NULL;
+ i->i_data.a_ops = NULL;
diff --git a/libre/cdfs-libre/cdfs-3.4.patch b/libre/cdfs-libre/cdfs-3.4.patch
new file mode 100644
index 000000000..5c2cb9b24
--- /dev/null
+++ b/libre/cdfs-libre/cdfs-3.4.patch
@@ -0,0 +1,12 @@
+diff -wbBur cdfs-2.6.27/root.c cdfs-2.6.27.my/root.c
+--- cdfs-2.6.27/root.c 2009-12-21 16:38:31.000000000 +0300
++++ cdfs-2.6.27.my/root.c 2012-06-15 17:09:27.000000000 +0400
+@@ -375,7 +375,7 @@
+
+ PRINT("retinode = %ld\n", retinode->i_ino);
+
+- sb->s_root = d_alloc_root(retinode);
++ sb->s_root = d_make_root(retinode);
+
+ cdfs_proc_cd = this_cd;
+
diff --git a/libre/cdfs-libre/cdfs.install b/libre/cdfs-libre/cdfs.install
new file mode 100644
index 000000000..1c3cb4f8e
--- /dev/null
+++ b/libre/cdfs-libre/cdfs.install
@@ -0,0 +1,14 @@
+post_install() {
+ EXTRAMODULES='extramodules-3.5-LIBRE'
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
+}
+
+post_upgrade() {
+ EXTRAMODULES='extramodules-3.5-LIBRE'
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
+}
+
+post_remove() {
+ EXTRAMODULES='extramodules-3.5-LIBRE'
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
+}
diff --git a/libre/clementine-libre/PKGBUILD b/libre/clementine-libre/PKGBUILD
index c22a7a230..307000501 100644
--- a/libre/clementine-libre/PKGBUILD
+++ b/libre/clementine-libre/PKGBUILD
@@ -3,12 +3,12 @@
#Contributor: BlackEagle <ike.devolder@gmail.com>
#Contributor: Dany Martineau <dany.luc.martineau@gmail.com>
#Maintainer (Parabola): Kete <kete@ninthfloor.org>
-#Contributor (Parabola): André Silva <andre.paulista@adinet.com.uy>
+#Contributor (Parabola): André Silva <emulatorman@lavabit.com>
_pkgname=clementine
pkgname=clementine-libre
pkgver=1.0.1
-pkgrel=4
+pkgrel=7
pkgdesc="A music player and library organizer, without spotify support"
url="http://www.clementine-player.org/"
license=('GPL')
@@ -27,11 +27,13 @@ provides=("clementine=$pkgver")
source=(http://clementine-player.googlecode.com/files/${_pkgname}-${pkgver}.tar.gz
clementine-fix-albumcoverfetch-crash.patch
clementine-fresh-start.patch
+ imobiledevice.patch
remove-and-disable-spotify.patch
remove-nonfree-references-on-translations.patch)
sha1sums=('e05320da689e2fad744fd3e68518bc4103ecf0fd'
'fddd2e784181ce1dcc7809e7122cbade0af7b01f'
'd8abab4b8fb2d5284a2f43107505325e62d4af5f'
+ 'a04cec00e38651de78bfaa6b6d73532c3786de11'
'2fef46eaffa7b5cd61afbf19b1dc909d11972a34'
'745bc4fd639d7ef3230592c6275fb43b8956f3d5')
install=clementine.install
@@ -45,6 +47,9 @@ build() {
# http://code.google.com/p/clementine-player/issues/detail?id=2752
patch -Np1 -i ../clementine-fix-albumcoverfetch-crash.patch
+ # Use libimobiledevice new "udid" field instead of "uuid".
+ patch -Np1 -i ../imobiledevice.patch
+
# https://labs.parabola.nu/issues/99
patch -Np1 -i ../remove-and-disable-spotify.patch
patch -Np1 -i ../remove-nonfree-references-on-translations.patch
diff --git a/libre/clementine-libre/clementine-1.0.1-global-menu.patch b/libre/clementine-libre/clementine-1.0.1-global-menu.patch
new file mode 100644
index 000000000..91f93e058
--- /dev/null
+++ b/libre/clementine-libre/clementine-1.0.1-global-menu.patch
@@ -0,0 +1,17 @@
+diff -Naur clementine-1.0.1.ori/src/main.cpp clementine-1.0.1/src/main.cpp
+--- clementine-1.0.1.ori/src/main.cpp 2012-01-22 07:43:26.000000000 -0500
++++ clementine-1.0.1/src/main.cpp 2012-07-05 13:58:49.040596906 -0400
+@@ -280,13 +280,6 @@
+ UniversalEncodingHandler handler;
+ TagLib::ID3v1::Tag::setStringHandler(&handler);
+
+-#ifdef Q_OS_LINUX
+- // Force Clementine's menu to be shown in the Clementine window and not in
+- // the Unity global menubar thing. See:
+- // https://bugs.launchpad.net/unity/+bug/775278
+- setenv("QT_X11_NO_NATIVE_MENUBAR", "1", true);
+-#endif
+-
+ // Initialise logging
+ logging::Init();
+ logging::SetLevels(options.log_levels());
diff --git a/libre/clementine-libre/imobiledevice.patch b/libre/clementine-libre/imobiledevice.patch
new file mode 100644
index 000000000..9d387fd2f
--- /dev/null
+++ b/libre/clementine-libre/imobiledevice.patch
@@ -0,0 +1,50 @@
+--- clementine-1.0.1/src/CMakeLists.txt.orig 2012-04-12 09:26:47.932990539 +0100
++++ clementine-1.0.1/src/CMakeLists.txt 2012-04-12 09:28:40.553993173 +0100
+@@ -17,6 +17,10 @@
+ include_directories(../3rdparty/qtwin)
+ endif(WIN32)
+
++if(ENABLE_IMOBILEDEVICE AND IMOBILEDEVICE_VERSION VERSION_GREATER 1.1.1)
++ set(IMOBILEDEVICE_USES_UDIDS ON)
++endif()
++
+ include_directories(${CMAKE_BINARY_DIR})
+ include_directories(${GLIB_INCLUDE_DIRS})
+ include_directories(${LIBXML_INCLUDE_DIRS})
+@@ -1008,6 +1012,7 @@
+ ${USBMUXD_LIBRARIES}
+ gstafcsrc
+ )
++ link_directories(${IMOBILEDEVICE_LIBRARY_DIRS})
+ link_directories(${USBMUXD_LIBRARY_DIRS})
+ endif(HAVE_IMOBILEDEVICE)
+
+--- clementine-1.0.1/src/config.h.in.orig 2011-12-02 21:24:43.000000000 +0000
++++ clementine-1.0.1/src/config.h.in 2012-04-12 09:28:40.554993154 +0100
+@@ -38,6 +38,7 @@
+ #cmakedefine HAVE_SPOTIFY
+ #cmakedefine HAVE_STATIC_SQLITE
+ #cmakedefine HAVE_WIIMOTEDEV
++#cmakedefine IMOBILEDEVICE_USES_UDIDS
+ #cmakedefine LEOPARD
+ #cmakedefine SNOW_LEOPARD
+ #cmakedefine USE_INSTALL_PREFIX
+--- clementine-1.0.1/src/devices/ilister.cpp.orig 2012-04-12 09:28:38.407993781 +0100
++++ clementine-1.0.1/src/devices/ilister.cpp 2012-04-12 09:28:40.554993154 +0100
+@@ -1,3 +1,4 @@
++#include "config.h"
+ #include "ilister.h"
+ #include "imobiledeviceconnection.h"
+
+@@ -17,7 +18,11 @@
+ void iLister::EventCallback(const idevice_event_t* event, void* context) {
+ iLister* me = reinterpret_cast<iLister*>(context);
+
++#ifdef IMOBILEDEVICE_USES_UDIDS
++ const char* uuid = event->udid;
++#else
+ const char* uuid = event->uuid;
++#endif
+
+ switch (event->event) {
+ case IDEVICE_DEVICE_ADD:
diff --git a/libre/crosstool-ng/PKGBUILD b/libre/crosstool-ng/PKGBUILD
index 35b477457..2760a224f 100644
--- a/libre/crosstool-ng/PKGBUILD
+++ b/libre/crosstool-ng/PKGBUILD
@@ -1,8 +1,9 @@
# Contributor: jwwolf <jwwolf+arch@gmail.com>
# Maintainer (Parabola): fauno <fauno@kiwwwi.com.ar>
+# Contributor (Parabola): Márcio Silva <coadde@lavabit.com>
pkgname=crosstool-ng
-pkgver=1.15.2
+pkgver=1.15.3
pkgrel=1
pkgdesc="A versatile cross toolchain generator (eglibc addons patch)"
arch=('i686' 'x86_64' 'mips64el')
@@ -26,4 +27,4 @@ package() {
cd $srcdir/$pkgname-$pkgver
make DESTDIR=$pkgdir install
}
-md5sums=('0d03314debb73de37a72014632bf1ab3')
+md5sums=('a56d55f7173161b5200c144cdff6f564')
diff --git a/libre/cups-filters-libre/PKGBUILD b/libre/cups-filters-libre/PKGBUILD
index 662ed4d1a..03ef8945d 100644
--- a/libre/cups-filters-libre/PKGBUILD
+++ b/libre/cups-filters-libre/PKGBUILD
@@ -1,37 +1,43 @@
-# $Id$
+# $Id: PKGBUILD 166387 2012-09-07 13:33:10Z andyrtr $
# Maintainer: Andreas Radke <andyrtr@archlinux.org>
pkgname=cups-filters-libre
_pkgname=cups-filters
-pkgver=1.0.18
-pkgrel=3
+pkgver=1.0.24
+pkgrel=1
pkgdesc="OpenPrinting CUPS Filters"
-arch=('i686' 'x86_64')
+arch=('i686' 'x86_64' 'mips64el')
url="http://www.linuxfoundation.org/collaborate/workgroups/openprinting"
license=('GPL')
-depends=('lcms2' 'poppler>=0.20.1')
-makedepends=('ghostscript')
+depends=('lcms2' 'poppler>=0.20.3' 'qpdf')
+makedepends=('ghostscript' 'ttf-dejavu') # ttf-dejavu for make check
optdepends=('ghostscript: for non-PostScript printers to print with CUPS to convert PostScript to raster images'
'foomatic-db: drivers use Ghostscript to convert PostScript to a printable form directly'
'foomatic-db-engine: drivers use Ghostscript to convert PostScript to a printable form directly')
backup=(etc/fonts/conf.d/99pdftoopvp.conf)
+options=(!libtool)
source=(http://www.openprinting.org/download/cups-filters/$_pkgname-$pkgver.tar.gz)
-md5sums=(63972b426b7224915cdbb42b2a937374'')
-
+md5sums=('242ea48cd41f8546d71b00bf2b06c564')
replaces=("${_pkgname}")
conflicts=("${_pkgname}")
provides=("${_pkgname}=${pkgver}")
build() {
cd "$srcdir/$_pkgname-$pkgver"
- ./configure --prefix=/usr --sysconfdir=/etc
+ ./configure --prefix=/usr \
+ --sysconfdir=/etc \
+ --with-test-font-path=/usr/share/fonts/TTF/DejaVuSans.ttf
make
}
+check() {
+ cd "$srcdir/$_pkgname-$pkgver"
+ make -k check
+}
+
package() {
cd "$srcdir/$_pkgname-$pkgver"
- #make DESTDIR="$pkgdir/" install
- make install BUILDROOT="$pkgdir/"
+ make DESTDIR="$pkgdir/" install
# drop static lib
rm -f ${pkgdir}/usr/lib/*.a
}
diff --git a/libre/cups-filters-libre/buildfix_dlopen.diff b/libre/cups-filters-libre/buildfix_dlopen.diff
new file mode 100644
index 000000000..eea5f506c
--- /dev/null
+++ b/libre/cups-filters-libre/buildfix_dlopen.diff
@@ -0,0 +1,31 @@
+=== modified file 'Makefile.am'
+--- Makefile.am 2012-06-22 15:40:53 +0000
++++ Makefile.am 2012-07-19 09:36:30 +0000
+@@ -329,7 +329,8 @@
+ $(FREETYPE_LIBS) \
+ $(FONTCONFIG_LIBS) \
+ $(LIBPNG_LIBS) \
+- $(POPPLER_LIBS)
++ $(POPPLER_LIBS) \
++ $(DLOPEN_LIBS)
+
+ EXTRA_DIST += $(pkgfontconfig_DATA)
+
+=== modified file 'configure.ac'
+--- configure.ac 2012-07-19 14:02:32 +0000
++++ configure.ac 2012-07-19 14:39:25 +0000
+@@ -110,6 +110,13 @@
+ AC_DEFINE(PDFTOPDF, [], [Needed for pdftopdf filter compilation])
+ AC_DEFINE_DIR(BANNERTOPDF_DATADIR, "{CUPS_DATADIR}/data", [Directory where bannertopdf finds its data files (PDF templates)])
+
++AC_SEARCH_LIBS([dlopen],
++ [dl],
++ DLOPEN_LIBS="-ldl",
++ AC_MSG_ERROR([unable to find the dlopen() function])
++)
++AC_SUBST(DLOPEN_LIBS)
++
+ # ======================
+ # Check system functions
+ # ======================
+
diff --git a/libre/cups-filters-libre/buildfix_poppler.diff b/libre/cups-filters-libre/buildfix_poppler.diff
new file mode 100644
index 000000000..6f3cbc0b3
--- /dev/null
+++ b/libre/cups-filters-libre/buildfix_poppler.diff
@@ -0,0 +1,224 @@
+=== modified file 'NEWS'
+--- NEWS 2012-07-11 19:48:23 +0000
++++ NEWS 2012-07-19 14:02:32 +0000
+@@ -1,6 +1,11 @@
+-NEWS - OpenPrinting CUPS Filters v1.0.19 - 2012-07-11
++NEWS - OpenPrinting CUPS Filters v1.0.20 - 2012-07-19
+ -----------------------------------------------------
+
++CHANGES IN V1.0.20
++
++ - Made the Poppler-based filters pdftopdf and pdftoopvp build with
++ both Poppler 0.18.x and 0.20.x (Bug #1055).
++
+ CHANGES IN V1.0.19
+
+ - Fixes according to Coverity scan results (Bug #1054).
+
+=== modified file 'configure.ac'
+--- configure.ac 2012-07-11 19:48:23 +0000
++++ configure.ac 2012-07-19 14:02:32 +0000
+@@ -202,6 +202,7 @@
+ # ================
+ POPPLER_INCLUDEDIR=`pkg-config poppler --variable includedir`
+ AC_CHECK_HEADER([UGooString.h], [AC_DEFINE([HAVE_UGOOSTRING_H],,[Have UGooString.h])], [])
++AC_CHECK_HEADER([poppler/cpp/poppler-version.h], [AC_DEFINE([HAVE_CPP_POPPLER_VERSION_H],,[Define if you have Poppler's "cpp/poppler-version.h" header file.])], [])
+ # FIXME:
+ # Use proper c compile check not greps and then just link again poppler with all the features
+ # instead of this and all the libs.
+
+=== modified file 'filter/PDFError.h'
+--- filter/PDFError.h 2012-03-29 14:06:07 +0000
++++ filter/PDFError.h 2012-07-19 14:02:32 +0000
+@@ -31,6 +31,9 @@
+ #include <config.h>
+ #include <stdarg.h>
+ #include <Error.h>
++#ifdef HAVE_CPP_POPPLER_VERSION_H
++#include "cpp/poppler-version.h"
++#endif
+
+ #if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 19
+ #define pdfError(pos,...) error(errInternal,pos,__VA_ARGS__)
+
+=== modified file 'filter/pdftoijs.cxx'
+--- filter/pdftoijs.cxx 2012-06-04 16:46:44 +0000
++++ filter/pdftoijs.cxx 2012-07-19 14:02:32 +0000
+@@ -30,6 +30,9 @@
+ #include <config.h>
+ #include <stdio.h>
+ #include <stdlib.h>
++#ifdef HAVE_CPP_POPPLER_VERSION_H
++#include "cpp/poppler-version.h"
++#endif
+ #include <goo/GooString.h>
+ #include <goo/gmem.h>
+ #include <Object.h>
+
+=== modified file 'filter/pdftoopvp/OPVPError.h'
+--- filter/pdftoopvp/OPVPError.h 2012-03-29 14:06:07 +0000
++++ filter/pdftoopvp/OPVPError.h 2012-07-19 14:02:32 +0000
+@@ -31,6 +31,9 @@
+ #include <config.h>
+ #include <stdarg.h>
+ #include <Error.h>
++#ifdef HAVE_CPP_POPPLER_VERSION_H
++#include "cpp/poppler-version.h"
++#endif
+
+ #if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 19
+ #define opvpError(pos,...) error(errInternal,pos,__VA_ARGS__)
+
+=== modified file 'filter/pdftoopvp/OPVPOutputDev.cxx'
+--- filter/pdftoopvp/OPVPOutputDev.cxx 2012-03-29 09:42:35 +0000
++++ filter/pdftoopvp/OPVPOutputDev.cxx 2012-07-19 14:02:32 +0000
+@@ -8,6 +8,9 @@
+ //========================================================================
+
+ #include <config.h>
++#ifdef HAVE_CPP_POPPLER_VERSION_H
++#include "cpp/poppler-version.h"
++#endif
+
+ #ifdef USE_GCC_PRAGMAS
+ #pragma implementation
+
+=== modified file 'filter/pdftoopvp/oprs/OPVPSplash.cxx'
+--- filter/pdftoopvp/oprs/OPVPSplash.cxx 2012-03-29 09:42:35 +0000
++++ filter/pdftoopvp/oprs/OPVPSplash.cxx 2012-07-19 14:02:32 +0000
+@@ -5,6 +5,9 @@
+ //========================================================================
+
+ #include <config.h>
++#ifdef HAVE_CPP_POPPLER_VERSION_H
++#include "cpp/poppler-version.h"
++#endif
+
+ #ifdef USE_GCC_PRAGMAS
+ #pragma implementation
+
+=== modified file 'filter/pdftoopvp/oprs/OPVPSplashState.cxx'
+--- filter/pdftoopvp/oprs/OPVPSplashState.cxx 2012-03-29 09:42:35 +0000
++++ filter/pdftoopvp/oprs/OPVPSplashState.cxx 2012-07-19 14:02:32 +0000
+@@ -11,6 +11,9 @@
+ #endif
+
+ #include <string.h>
++#ifdef HAVE_CPP_POPPLER_VERSION_H
++#include "cpp/poppler-version.h"
++#endif
+ #include "goo/gmem.h"
+ #include "splash/SplashPattern.h"
+ #include "splash/SplashScreen.h"
+
+=== modified file 'filter/pdftoopvp/oprs/OPVPSplashState.h'
+--- filter/pdftoopvp/oprs/OPVPSplashState.h 2012-03-29 09:42:35 +0000
++++ filter/pdftoopvp/oprs/OPVPSplashState.h 2012-07-19 14:02:32 +0000
+@@ -11,6 +11,9 @@
+ #pragma interface
+ #endif
+
++#ifdef HAVE_CPP_POPPLER_VERSION_H
++#include "cpp/poppler-version.h"
++#endif
+ #include "splash/SplashTypes.h"
+ #include "splash/SplashState.h"
+ #include "splash/Splash.h"
+
+=== modified file 'filter/pdftoopvp/oprs/OPVPSplashXPath.cxx'
+--- filter/pdftoopvp/oprs/OPVPSplashXPath.cxx 2012-03-29 09:42:35 +0000
++++ filter/pdftoopvp/oprs/OPVPSplashXPath.cxx 2012-07-19 14:02:32 +0000
+@@ -1,5 +1,8 @@
+ #include <config.h>
+ #include <stdio.h>
++#ifdef HAVE_CPP_POPPLER_VERSION_H
++#include "cpp/poppler-version.h"
++#endif
+ #include "splash/Splash.h"
+ #include "splash/SplashMath.h"
+ #include "OPVPSplashClip.h"
+
+=== modified file 'filter/pdftoopvp/oprs/OPVPSplashXPath.h'
+--- filter/pdftoopvp/oprs/OPVPSplashXPath.h 2012-03-29 09:42:35 +0000
++++ filter/pdftoopvp/oprs/OPVPSplashXPath.h 2012-07-19 14:02:32 +0000
+@@ -2,6 +2,9 @@
+ #define OPVPSPLASHXPATH_H
+
+ #include <config.h>
++#ifdef HAVE_CPP_POPPLER_VERSION_H
++#include "cpp/poppler-version.h"
++#endif
+ #include "splash/SplashXPath.h"
+ #include "OPVPSplashPath.h"
+ #include "OPVPSplashState.h"
+
+=== modified file 'filter/pdftoopvp/pdftoopvp.cxx'
+--- filter/pdftoopvp/pdftoopvp.cxx 2012-06-04 16:46:44 +0000
++++ filter/pdftoopvp/pdftoopvp.cxx 2012-07-19 14:02:32 +0000
+@@ -13,6 +13,9 @@
+ #include <unistd.h>
+ #include <ctype.h>
+ #include <math.h>
++#ifdef HAVE_CPP_POPPLER_VERSION_H
++#include "cpp/poppler-version.h"
++#endif
+ #include "goo/GooString.h"
+ #define GSTRING_H // for old GooString.h
+ #include "goo/gmem.h"
+
+=== modified file 'filter/pdftopdf/P2PError.h'
+--- filter/pdftopdf/P2PError.h 2012-03-29 14:06:07 +0000
++++ filter/pdftopdf/P2PError.h 2012-07-19 14:02:32 +0000
+@@ -31,6 +31,9 @@
+ #include <config.h>
+ #include <stdarg.h>
+ #include <Error.h>
++#ifdef HAVE_CPP_POPPLER_VERSION_H
++#include "cpp/poppler-version.h"
++#endif
+
+ #if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 19
+ #define p2pError(pos,...) error(errInternal,pos,__VA_ARGS__)
+
+=== modified file 'filter/pdftopdf/P2PFont.cxx'
+--- filter/pdftopdf/P2PFont.cxx 2012-03-29 09:42:35 +0000
++++ filter/pdftopdf/P2PFont.cxx 2012-07-19 14:02:32 +0000
+@@ -32,6 +32,9 @@
+ #include <sys/types.h>
+ #include <unistd.h>
+ #include <fcntl.h>
++#ifdef HAVE_CPP_POPPLER_VERSION_H
++#include "cpp/poppler-version.h"
++#endif
+ #include "goo/gmem.h"
+ #include "P2PFont.h"
+ #include "GfxFont.h"
+
+=== modified file 'filter/pdftopdf/pdftopdf.cxx'
+--- filter/pdftopdf/pdftopdf.cxx 2012-06-04 16:46:44 +0000
++++ filter/pdftopdf/pdftopdf.cxx 2012-07-19 14:02:32 +0000
+@@ -29,6 +29,9 @@
+ #include <config.h>
+ #include <stdio.h>
+ #include <stdlib.h>
++#ifdef HAVE_CPP_POPPLER_VERSION_H
++#include "cpp/poppler-version.h"
++#endif
+ #include "goo/GooString.h"
+ #include "goo/gmem.h"
+ #include "Object.h"
+
+=== modified file 'filter/pdftoraster.cxx'
+--- filter/pdftoraster.cxx 2012-06-04 16:46:44 +0000
++++ filter/pdftoraster.cxx 2012-07-19 14:02:32 +0000
+@@ -31,6 +31,9 @@
+ #include <config.h>
+ #include <stdio.h>
+ #include <stdlib.h>
++#ifdef HAVE_CPP_POPPLER_VERSION_H
++#include "cpp/poppler-version.h"
++#endif
+ #include "goo/GooString.h"
+ #include "goo/gmem.h"
+ #include "Object.h"
+
diff --git a/libre/doublecmd-libre/PKGBUILD b/libre/doublecmd-libre/PKGBUILD
new file mode 100644
index 000000000..5eee8985c
--- /dev/null
+++ b/libre/doublecmd-libre/PKGBUILD
@@ -0,0 +1,62 @@
+# $Id$
+# Maintainer: BlackIkeEagle <ike DOT devolder AT gmail DOT com>
+# Contributor: (sirocco AT ngs.ru)
+
+_pkgbase=doublecmd
+pkgbase=doublecmd-libre
+pkgname=('doublecmd-gtk2-libre' 'doublecmd-qt-libre')
+pkgver=0.5.4
+_helpver=0.5.1
+pkgrel=2.1
+url="http://doublecmd.sourceforge.net/"
+arch=('i686' 'x86_64')
+license=('GPL')
+install="$_pkgbase.install"
+makedepends=('lazarus' 'qt4pas' 'gtk2')
+optdepends=('lua: scripting' 'p7zip: support for 7zip archives')
+source=("http://downloads.sourceforge.net/project/$_pkgbase/Double%20Commander%20Source/$_pkgbase-$pkgver-src.tar.gz"
+ "http://downloads.sourceforge.net/project/$_pkgbase/Double%20Commander%20Source/$_pkgbase-help-$_helpver-src.tar.gz"
+)
+sha256sums=('480b83279adeba007ad5c54f455733fae3d9c9ee61762e6b5a63e2e67b1cd7b7'
+ 'd9f518e05e089b71aaa31c7d4af8177e77594a02be2c316e85e061e63b4c03e5')
+
+build() {
+ cp -a $_pkgbase-$pkgver $_pkgbase-gtk
+ cp -a $_pkgbase-$pkgver $_pkgbase-qt
+
+ cd "$srcdir/$_pkgbase-gtk"
+ ./build.sh beta gtk2
+
+ cd "$srcdir/$_pkgbase-qt"
+ ./build.sh beta qt
+}
+
+package_doublecmd-gtk2-libre() {
+ pkgdesc="twin-panel (commander-style) file manager (GTK)"
+ depends=('gtk2')
+ conflicts=('doublecmd-gtk2')
+ replaces=('doublecmd-gtk2')
+ provides=("doublecmd-gtk2=${pkgver}" 'doublecmd')
+ cd "$srcdir/$_pkgbase-gtk"
+ sed -e 's/LIB_SUFFIX=.*/LIB_SUFFIX=/g' -i ./install/linux/install.sh
+ ./install/linux/install.sh --install-prefix="$pkgdir"
+
+ # install doc
+ cd "$srcdir/$_pkgbase-help-$_helpver"
+ cp -a * "$pkgdir/usr/share/$_pkgbase/doc/"
+}
+
+package_doublecmd-qt-libre() {
+ pkgdesc="twin-panel (commander-style) file manager (QT)"
+ depends=('qt4pas')
+ conflicts=('doublecmd-qt')
+ replaces=('doublecmd-qt')
+ provides=("doublecmd-qt=${pkgver}" 'doublecmd')
+ cd "$srcdir/$_pkgbase-qt"
+ sed -e 's/LIB_SUFFIX=.*/LIB_SUFFIX=/g' -i ./install/linux/install.sh
+ ./install/linux/install.sh --install-prefix="$pkgdir"
+
+ # install doc
+ cd "$srcdir/$_pkgbase-help-$_helpver"
+ cp -a * "$pkgdir/usr/share/$_pkgbase/doc/"
+}
diff --git a/libre/doublecmd-libre/doublecmd.install b/libre/doublecmd-libre/doublecmd.install
new file mode 100644
index 000000000..40d56528f
--- /dev/null
+++ b/libre/doublecmd-libre/doublecmd.install
@@ -0,0 +1,34 @@
+update_icons() {
+
+ # Setup Menus
+ if which update-desktop-database
+ then
+ update-desktop-database -q /usr/share/applications
+ fi
+
+ # Setup MIME types
+ if which update-mime-database
+ then
+ update-mime-database /usr/share/mime >/dev/null
+ fi
+
+ # Setup Icons
+ touch -c /usr/share/icons/hicolor
+ if which gtk-update-icon-cache
+ then
+ gtk-update-icon-cache -tq /usr/share/icons/hicolor
+ fi
+
+}
+
+post_install() {
+ update_icons
+}
+
+post_upgrade() {
+ update_icons
+}
+
+post_remove() {
+ update_icons
+}
diff --git a/libre/dpkg/PKGBUILD b/libre/dpkg/PKGBUILD
index 23817afc0..a55d219e0 100644
--- a/libre/dpkg/PKGBUILD
+++ b/libre/dpkg/PKGBUILD
@@ -10,7 +10,7 @@ debfile() { echo -n "$_debrepo"; echo -n "$@"|sed -r 's@(.).*@\1/&@'; }
# TODO: split into (dpkg dpkg-devtools dselect dpkg-perl)
pkgname=dpkg
-pkgver=1.16.2
+pkgver=1.16.4.3
pkgrel=1
pkgdesc="The Debian Package Manager and utilities. Don't use it instead of 'pacman'."
arch=('i686' 'x86_64' 'mips64el')
@@ -47,3 +47,9 @@ package() {
md5sums=('629ba7ee2024e6a5c0ff807aa2db02f8'
'bc36609f6191c5b509fae58c21966c95'
'24ab12e79989a2e7f31653fb1dd3cdf9')
+md5sums=('39c74a948c6fe4c02ed9f15556fe179d'
+ 'bc36609f6191c5b509fae58c21966c95'
+ '24ab12e79989a2e7f31653fb1dd3cdf9')
+md5sums=('39c74a948c6fe4c02ed9f15556fe179d'
+ 'bc36609f6191c5b509fae58c21966c95'
+ '24ab12e79989a2e7f31653fb1dd3cdf9')
diff --git a/libre/dvdrip-libre/PKGBUILD b/libre/dvdrip-libre/PKGBUILD
index 9d9ec3ca0..2f706868a 100644
--- a/libre/dvdrip-libre/PKGBUILD
+++ b/libre/dvdrip-libre/PKGBUILD
@@ -1,12 +1,12 @@
# $Id$
# Maintainer: Giovanni Scafora <giovanni@archlinux.org>
# Contributor: Fredrik Hammar <Horney_C86@Hotmail.com>
-# Maintainer (Parabola): Márcio Silva <coadde@adinet.com.uy>
+# Maintainer (Parabola): Márcio Silva <coadde@lavabit.com>
_pkgname=dvdrip
pkgname=dvdrip-libre
pkgver=0.98.11
-pkgrel=10
+pkgrel=10.1
pkgdesc="A Gtk frontend for transcode writen in Perl, without opcional hal and unfree rar dependencies"
arch=('i686' 'x86_64' 'mips64el')
license=('custom')
diff --git a/libre/epdfview-libre/PKGBUILD b/libre/epdfview-libre/PKGBUILD
index fa89351f7..28c77eed8 100644
--- a/libre/epdfview-libre/PKGBUILD
+++ b/libre/epdfview-libre/PKGBUILD
@@ -3,11 +3,12 @@
# Maintainer: schuay <jakob.gruber@gmail.com>
# Contributor: Tom K <tomk@runbox.com>
# Contributor: Thayer Williams <thayer@archlinux.org>
+# Maintainer (Parabola): Márcio Silva <coadde@adinet.com.uy>
pkgname=epdfview-libre
_pkgname=epdfview
pkgver=0.1.8
-pkgrel=3.1
+pkgrel=4
pkgdesc="A free lightweight PDF document viewer."
url="http://www.emma-soft.com/projects/epdfview/"
arch=('i686' 'x86_64' 'mips64el')
@@ -20,9 +21,11 @@ replaces=('epdfview')
install='epdfview.install'
source=("http://www.emma-soft.com/projects/${_pkgname}/chrome/site/releases/${_pkgname}-${pkgver}.tar.bz2"
"${_pkgname}.desktop.patch"
+ "glib2_headers.patch"
"0001-When-using-Poppler-0.17.0-I-needed-to-swap-the-blue-.patch")
md5sums=('e50285b01612169b2594fea375f53ae4'
'fbf22bbabdbb7544db615ac5775d57e2'
+ '41b30f53f20472cbc2fcd4eae161125e'
'7f9ea101a41f5b4e999fd024f423d41f')
build() {
@@ -30,6 +33,7 @@ build() {
patch -Np0 -i "${srcdir}/${_pkgname}.desktop.patch"
patch -Np1 -i "${srcdir}/0001-When-using-Poppler-0.17.0-I-needed-to-swap-the-blue-.patch"
+ patch -Np1 -i "${srcdir}/glib2_headers.patch" # FS#30116
# Use xdg-open as default browser.
sed -r '/DEFAULT_EXTERNAL_BROWSER_COMMAND_LINE/s/firefox[^ ]*/xdg-open/' -i src/Config.cxx
diff --git a/libre/epdfview-libre/glib2_headers.patch b/libre/epdfview-libre/glib2_headers.patch
new file mode 100644
index 000000000..b5bc5c211
--- /dev/null
+++ b/libre/epdfview-libre/glib2_headers.patch
@@ -0,0 +1,12 @@
+diff --git a/src/gtk/StockIcons.h b/src/gtk/StockIcons.h
+index c142a7a..58fcf2e 100644
+--- a/src/gtk/StockIcons.h
++++ b/src/gtk/StockIcons.h
+@@ -18,7 +18,7 @@
+ #if !defined (__STOCK_ICONS_H__)
+ #define __STOCK_ICONS_H__
+
+-#include <glib/gmacros.h>
++#include <glib.h>
+
+ G_BEGIN_DECLS
diff --git a/libre/filesystem/PKGBUILD b/libre/filesystem/PKGBUILD
index 215001c4e..49e837e02 100644
--- a/libre/filesystem/PKGBUILD
+++ b/libre/filesystem/PKGBUILD
@@ -1,24 +1,31 @@
-# $Id: PKGBUILD 162111 2012-06-20 09:33:31Z tomegun $
+# $Id: PKGBUILD 165634 2012-08-27 20:15:48Z tomegun $
# Maintainer: Tom Gundersen <teg@jklm.no>
# Maintainer (Parabola): Nicolás Reynolds <fauno@kiwwwi.com.ar>
# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
pkgname=filesystem
-pkgver=2012.6
-pkgrel=4
+pkgver=2012.8
+pkgrel=1.2
pkgdesc='Base filesystem for Parabola'
arch=('any')
license=('GPL')
url='https://parabolagnulinux.org'
groups=('base')
install='filesystem.install'
+makedepends=('asciidoc')
depends=('iana-etc' 'bash' 'coreutils')
backup=('etc/fstab' 'etc/crypttab' 'etc/group' 'etc/hosts' 'etc/ld.so.conf' 'etc/passwd'
'etc/shadow' 'etc/gshadow' 'etc/resolv.conf' 'etc/motd' 'etc/nsswitch.conf'
'etc/shells' 'etc/host.conf' 'etc/securetty' 'etc/profile' 'etc/issue')
source=('group' 'issue' 'nsswitch.conf' 'securetty' 'host.conf' 'ld.so.conf'
'passwd' 'shadow' 'fstab' 'crypttab' 'hosts' 'motd' 'os-release' 'resolv.conf'
- 'shells' 'gshadow' 'profile' 'modprobe.d.usb-load-ehci-first')
+ 'shells' 'gshadow' 'profile' 'modprobe.d.usb-load-ehci-first' 'parabola.7.txt'
+ 'locale.sh')
+
+build() {
+ cd ${srcdir}
+ a2x -d manpage -f manpage parabola.7.txt
+}
package() {
cd ${pkgdir}
@@ -47,6 +54,7 @@ package() {
done
touch etc/arch-release
install -D -m644 ${srcdir}/modprobe.d.usb-load-ehci-first usr/lib/modprobe.d/usb-load-ehci-first.conf
+ install -m755 ${srcdir}/locale.sh etc/profile.d/locale.sh
# setup /var
for d in cache/man local opt log/old lib/misc empty; do
@@ -69,6 +77,10 @@ package() {
install -d -m755 usr/share/man/man${d}
done
+ #
+ # install parabola(7) manpage
+ #
+ install -D -m644 ${srcdir}/parabola.7 usr/share/man/man7/parabola.7
#
# setup /usr/local hierarchy
@@ -87,7 +99,7 @@ md5sums=('45940618da782cc391c59f88ab3333c3'
'8a9042a2cedf6b6b47eb8973f14289cb'
'b8355d9d2782f424f4cedcf682651be0'
'ca716f853860199c1286e7939b2f2666'
- 'e5d8323a4dbee7a6d0d2a19cbf4b819f'
+ '1745349eb24ed21b4cfaa6f423bddb76'
'7bc65f234dfb6abf24e7c3b03e86f4ff'
'd41d8cd98f00b204e9800998ecf8427e'
'0e145e18fea8fd190b30d45764f5707c'
@@ -95,4 +107,6 @@ md5sums=('45940618da782cc391c59f88ab3333c3'
'22518e922891f9359f971f4f5b4e793c'
'f95416882cef800edef08382a1176b7d'
'f3b6ae7db8adffaaa4bffc6099dcbd50'
- 'a8a962370cd0128465d514e6a1f74130')
+ 'a8a962370cd0128465d514e6a1f74130'
+ '3674fcb22044d2946934e7826aa0c632'
+ '3807d07215d9116331fe1cf8feeaa0f8')
diff --git a/libre/filesystem/crypttab b/libre/filesystem/crypttab
index dd6994b5a..195945a74 100644
--- a/libre/filesystem/crypttab
+++ b/libre/filesystem/crypttab
@@ -1,33 +1,17 @@
-# crypttab: Mappings for encrypted partitions
+# crypttab: mappings for encrypted partitions
#
# Each mapped device will be created in /dev/mapper, so your /etc/fstab
-# should use the /dev/mapper/{NAME} paths for encrypted devices.
+# should use the /dev/mapper/<name> paths for encrypted devices.
#
-# Each PASSWORD field can be an absolute pathname to a key file (starting
-# with a slash, recommended) or a literal string that will be used as
-# a passphrase. To use special characters in the passphrase, surround it
-# by quotes, the usual bash quoting rules apply.
-# There are two special keywords that cannot be used as passphrases:
-# - ASK ask for a passphrase on boot
-# - SWAP use a random key and create a swapspace afterwards
-# WARNING: use the SWAP keyword carefully, as it overwrites the data
-# on the specified partition
-#
-# To create a key file:
-# hashalot -n 32 ripemd160 >/etc/crytfs.key
-# or
-# dd if=/dev/urandom of=/etc/cryptfs.key bs=256 count=1
-#
-# To pass additional options to cryptsetup for non-LUKS partitions, use the
-# fourth column.
+# The Arch specific syntax has been deprecated, see crypttab(5) for the
+# new supported syntax.
#
# NOTE: Do not list your root (/) partition here, it must be set up
# beforehand by the initramfs (/etc/mkinitcpio.conf).
-
-# NAME SOURCE DEVICE PASSWORD OPTIONS
-#home /dev/hda4 mypassword
-#data1 /dev/hda3 "my \"password\""
-#data2 /dev/hda5 /etc/cryptfs.key
-#swap /dev/hdx4 SWAP -c aes-cbc-essiv:sha256 -s 256
-#vol /dev/hdb7 ASK
+# <name> <device> <password> <options>
+# home /dev/hda4 /etc/mypassword1
+# data1 /dev/hda3 /etc/mypassword2
+# data2 /dev/hda5 /etc/cryptfs.key
+# swap /dev/hdx4 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256
+# vol /dev/hdb7 none
diff --git a/libre/filesystem/locale.sh b/libre/filesystem/locale.sh
new file mode 100644
index 000000000..5fd4174d5
--- /dev/null
+++ b/libre/filesystem/locale.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+unset LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES \
+ LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT LC_IDENTIFICATION
+
+if [ -n "$XDG_CONFIG_HOME" ] && [ -r "$XDG_CONFIG_HOME/locale.conf" ]; then
+ . "$XDG_CONFIG_HOME/locale.conf"
+elif [ -n $HOME ] && [ -r $HOME/.config/locale.conf ]; then
+ . "$HOME/.config/locale.conf"
+elif [ -r /etc/locale.conf ]; then
+ . /etc/locale.conf
+elif [ -r /etc/rc.conf ]; then
+ LANG=$(. /etc/rc.conf 2>/dev/null; echo "$LOCALE")
+fi
+
+export LANG="${LANG:-C}"
+[ -n "$LC_CTYPE" ] && export LC_CTYPE
+[ -n "$LC_NUMERIC" ] && export LC_NUMERIC
+[ -n "$LC_TIME" ] && export LC_TIME
+[ -n "$LC_COLLATE" ] && export LC_COLLATE
+[ -n "$LC_MONETARY" ] && export LC_MONETARY
+[ -n "$LC_MESSAGES" ] && export LC_MESSAGES
+[ -n "$LC_PAPER" ] && export LC_PAPER
+[ -n "$LC_NAME" ] && export LC_NAME
+[ -n "$LC_ADDRESS" ] && export LC_ADDRESS
+[ -n "$LC_TELEPHONE" ] && export LC_TELEPHONE
+[ -n "$LC_MEASUREMENT" ] && export LC_MEASUREMENT
+[ -n "$LC_IDENTIFICATION" ] && export LC_IDENTIFICATION
diff --git a/libre/filesystem/parabola.7.txt b/libre/filesystem/parabola.7.txt
new file mode 100644
index 000000000..f7da03147
--- /dev/null
+++ b/libre/filesystem/parabola.7.txt
@@ -0,0 +1,81 @@
+/////
+vim:set ts=4 sw=4 syntax=asciidoc noet:
+/////
+parabola(7)
+============
+
+NAME
+----
+parabola - basic configuration
+
+SYNOPSIS
+--------
+Overview of the basic configuration of Parabola GNU/Linux-libre.
+
+DESCRIPTION
+-----------
+Parabola exposes the user to the system without hiding any details. This manpage gives a
+brief overview of the configuration files that should be set up on a fresh install.
+
+INITSCRIPTS[[I]]
+----------------
+The initscripts are configured in rc.conf. Here you configure what daemons to start on boot, what storage
+technologies should be enabled and, optionally, a basic network setup.
+
+HOSTNAME[[H]]
+-------------
+The hostname of the machine should be set in /etc/hostname. Additionally, either /etc/hosts should be
+configured accordingly, or nss-myhostname should be used. This is needed so the hostname can always
+be resolved to the current machine, which is required by some programs.
+
+LOCALIZATION[[L]]
+-----------------
+Various locales may be enabled in /etc/locale.gen, and generated by locale-gen. The system-wide locale to be used
+can be configured in /etc/locale.conf. These settings can be overridden on a par-user basis by keeping a
+user-spcefic locale.conf in $HOME/.config/locale.conf. The user-specific file will take precedence if it exists.
+
+VIRTUAL CONSOLE[[V]]
+--------------------
+The virtual console is configured in /etc/vconsole.conf. It allows you to set a font and a keyboard layout, among
+other things. Note that these settings only apply to the console, and not if you use X.
+
+TIME[[T]]
+---------
+The local timezone is configured by *symlinking* /etc/localtime to the correct zoneinfo file under
+/usr/share/zoneinfo/. E.g.,
+
+ /etc/localtime -> /usr/share/zoneinfo/Europe/Paris
+
+The real-time clock, which keeps track of time when the computer is off, can be configured to either
+be in UTC or in localtime in /etc/adjtime. The default is UTC.
+
+FILESYSTEMS[[F]]
+----------------
+Filesystems are configured in /etc/fstab, and encryption mappings are configured in /etc/crypttab.
+
+INITRAMFS[[R]]
+--------------
+The initramfs is generated by mkinitcpio, and can be configured in /etc/mkinitcpio.conf.
+
+PACKAGE MANAGER[[P]]
+--------------------
+The package manager, pacman, is configured in /etc/pacman.conf.
+
+BOOTLOADER[[B]]
+---------------
+GRUB's configuration is generated from /etc/default/grub by grub-mkconfig. Syslinux is configured in /boot/syslinux/syslinux.cfg
+
+MODULES[[M]]
+------------
+Most modules should be loaded on-demand. Modules to be unconditionally loaded at boot can be specified in /etc/modules-load.d/,
+and modules to be blacklisted from auto-loading can be configured in /etc/modprobe.d/.
+
+SEE ALSO
+--------
+
+rc.conf(5), hostname(5), hosts(5), nsswitch.conf(5), locale.conf(5), vconsole.conf(5), timezone(3), hwclock(8), fstab(5), crypttab(5),
+mkinitcpio(8), pacman(8), pacman.conf(5), grub-mkconfig(8), syslinux(1), modules-load.d(5), modprobe.d(5)
+
+AUTHORS
+-------
+Written by Tom Gundersen. Rebranded for Parabola by Nicolás Reynolds and André Silva.
diff --git a/libre/foomatic-filters-libre/PKGBUILD b/libre/foomatic-filters-libre/PKGBUILD
index 87b155c0c..73a7af6c4 100644
--- a/libre/foomatic-filters-libre/PKGBUILD
+++ b/libre/foomatic-filters-libre/PKGBUILD
@@ -5,8 +5,8 @@
pkgbase="foomatic"
pkgname=('foomatic-filters-libre')
arch=('i686' 'x86_64' 'mips64el') # needs to be changed in the subpackages when makepkg will support it
-_snapdate=20120626
-_filtersver=4.0.16
+_snapdate=20120712
+_filtersver=4.0.17
pkgver=${_filtersver}_${_snapdate}
pkgrel=1
epoch=1
@@ -14,7 +14,7 @@ makedepends=('cups' 'perl' 'libxml2' 'enscript' 'perl' 'net-snmp' 'bash')
source=(http://www.openprinting.org/download/foomatic/$pkgbase-filters-${_filtersver}.tar.gz)
url="http://www.linuxprinting.org/foomatic.html"
options=('!emptydirs')
-md5sums=('ec907d9ea17e03bccb91db66e9470586')
+md5sums=('b05f5dcbfe359f198eef3df5b283d896')
package_foomatic-filters-libre() {
diff --git a/libre/ghostscript-libre/PKGBUILD b/libre/ghostscript-libre/PKGBUILD
index b89a3095b..656f49fb5 100644
--- a/libre/ghostscript-libre/PKGBUILD
+++ b/libre/ghostscript-libre/PKGBUILD
@@ -1,11 +1,11 @@
-# $Id: PKGBUILD 149732 2012-02-09 20:34:33Z andyrtr $
+# $Id: PKGBUILD 165015 2012-08-08 19:40:10Z andyrtr $
# Maintainer: AndyRTR <andyrtr@archlinux.org>
-# Maintainer (Parabola): xihh
-# Maintainer (Parabola): André Silva <andre.paulista@adinet.com.uy>
+# Maintainer (Parabola): Joshua Haase <hahj87@gmail.com>
+# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
_pkgname=ghostscript
pkgname=ghostscript-libre
-pkgver=9.05
+pkgver=9.06
pkgrel=1
pkgdesc="An interpreter for the PostScript language without non-free files"
arch=('i686' 'x86_64' 'mips64el')
@@ -15,18 +15,19 @@ makedepends=('gtk2' 'gnutls')
optdepends=('texlive-core: needed for dvipdf'
'gtk2: needed for gsx')
conflicts=('ghostscript')
-replaces=('ghostscript-lrpng' 'ghostscript')
-provides=('ghostscript-lprng' "ghostscript=$pkgver")
+replaces=('ghostscript')
+provides=("ghostscript=$pkgver")
url="http://www.ghostscript.com/"
source=(http://downloads.ghostscript.com/public/ghostscript-${pkgver}.tar.bz2)
options=('!libtool' '!makeflags')
-md5sums=('8bcef1f33ddf8a4d12b2cf8da385c191')
+md5sums=('46f9ebe40dc52755287b30704270db11')
build() {
cd ${srcdir}/ghostscript-${pkgver}
# delete non-free packages
grep -l "are not altered" Resource/CMap/* | xargs rm -fv
+ grep -l "not be copied" Resource/CMap/* | xargs rm -fv
# force it to use system-libs
rm -rf jpeg libpng zlib jasper expat tiff lcms freetype
diff --git a/libre/grub-legacy/040_all_grub-0.96-nxstack.patch b/libre/grub-legacy/040_all_grub-0.96-nxstack.patch
new file mode 100644
index 000000000..121941c75
--- /dev/null
+++ b/libre/grub-legacy/040_all_grub-0.96-nxstack.patch
@@ -0,0 +1,623 @@
+Fix NX segfaulting on amd64.
+
+Patch by Peter Jones.
+
+http://lists.gnu.org/archive/html/bug-grub/2005-03/msg00011.html
+
+--- grub-0.97/grub/asmstub.c
++++ grub-0.97/grub/asmstub.c
+@@ -42,6 +42,7 @@
+ #include <sys/time.h>
+ #include <termios.h>
+ #include <signal.h>
++#include <sys/mman.h>
+
+ #ifdef __linux__
+ # include <sys/ioctl.h> /* ioctl */
+@@ -79,7 +80,7 @@
+ struct apm_info apm_bios_info;
+
+ /* Emulation requirements. */
+-char *grub_scratch_mem = 0;
++void *grub_scratch_mem = 0;
+
+ struct geometry *disks = 0;
+
+@@ -103,14 +104,62 @@
+ static unsigned int serial_speed;
+ #endif /* SIMULATE_SLOWNESS_OF_SERIAL */
+
++/* This allocates page-aligned storage of the specified size, which must be
++ * a multiple of the page size as determined by calling sysconf(_SC_PAGESIZE)
++ */
++#ifdef __linux__
++static void *
++grub_mmap_alloc(size_t len)
++{
++ int mmap_flags = MAP_ANONYMOUS|MAP_PRIVATE|MAP_EXECUTABLE;
++
++#ifdef MAP_32BIT
++ mmap_flags |= MAP_32BIT;
++#endif
++ /* Mark the simulated stack executable, as GCC uses stack trampolines
++ * to implement nested functions. */
++ return mmap(NULL, len, PROT_READ|PROT_WRITE|PROT_EXEC, mmap_flags, -1, 0);
++}
++#else /* !defined(__linux__) */
++static void *
++grub_mmap_alloc(size_t len)
++{
++ int fd = 0, offset = 0, ret = 0;
++ void *pa = MAP_FAILED;
++ char template[] = "/tmp/grub_mmap_alloc_XXXXXX";
++ errno_t e;
++
++ fd = mkstemp(template);
++ if (fd < 0)
++ return pa;
++
++ unlink(template);
++
++ ret = ftruncate(fd, len);
++ if (ret < 0)
++ return pa;
++
++ /* Mark the simulated stack executable, as GCC uses stack trampolines
++ * to implement nested functions. */
++ pa = mmap(NULL, len, PROT_READ|PROT_WRITE|PROT_EXEC,
++ MAP_PRIVATE|MAP_EXECUTABLE, fd, offset);
++
++ e = errno;
++ close(fd);
++ errno = e;
++ return pa;
++}
++#endif /* defined(__linux__) */
++
+ /* The main entry point into this mess. */
+ int
+ grub_stage2 (void)
+ {
+ /* These need to be static, because they survive our stack transitions. */
+ static int status = 0;
+- static char *realstack;
+- char *scratch, *simstack;
++ static void *realstack;
++ void *simstack_alloc_base, *simstack;
++ size_t simstack_size, page_size;
+ int i;
+
+ /* We need a nested function so that we get a clean stack frame,
+@@ -140,9 +189,35 @@
+ }
+
+ assert (grub_scratch_mem == 0);
+- scratch = malloc (0x100000 + EXTENDED_MEMSIZE + 15);
+- assert (scratch);
+- grub_scratch_mem = (char *) ((((int) scratch) >> 4) << 4);
++
++ /* Allocate enough pages for 0x100000 + EXTENDED_SIZE + 15, and
++ * make sure the memory is aligned to a multiple of the system's
++ * page size */
++ page_size = sysconf (_SC_PAGESIZE);
++ simstack_size = ( 0x100000 + EXTENDED_MEMSIZE + 15);
++ if (simstack_size % page_size)
++ {
++ /* If we're not on a page_size boundary, round up to the next one */
++ simstack_size &= ~(page_size-1);
++ simstack_size += page_size;
++ }
++
++ /* Add one for a PROT_NONE boundary page at each end. */
++ simstack_size += 2 * page_size;
++
++ simstack_alloc_base = grub_mmap_alloc(simstack_size);
++ assert (simstack_alloc_base != MAP_FAILED);
++
++ /* mark pages above and below our simstack area as innaccessable.
++ * If the implementation we're using doesn't support that, then the
++ * new protection modes are undefined. It's safe to just ignore
++ * them, though. It'd be nice if we knew that we'd get a SEGV for
++ * touching the area, but that's all. it'd be nice to have. */
++ mprotect (simstack_alloc_base, page_size, PROT_NONE);
++ mprotect ((void *)((unsigned long)simstack_alloc_base +
++ simstack_size - page_size), page_size, PROT_NONE);
++
++ grub_scratch_mem = (void *)((unsigned long)simstack_alloc_base + page_size);
+
+ /* FIXME: simulate the memory holes using mprot, if available. */
+
+@@ -215,7 +290,7 @@
+ device_map = 0;
+ free (disks);
+ disks = 0;
+- free (scratch);
++ munmap(simstack_alloc_base, simstack_size);
+ grub_scratch_mem = 0;
+
+ if (serial_device)
+--- grub-0.97/stage2/builtins.c
++++ grub-0.97/stage2/builtins.c
+@@ -131,63 +131,98 @@
+ }
+
+
++/* blocklist_read_helper nee disk_read_blocklist_func was a nested
++ * function, to which pointers were taken and exposed globally. Even
++ * in the GNU-C nested functions extension, they have local linkage,
++ * and aren't guaranteed to be accessable *at all* outside of their
++ * containing scope.
++ *
++ * Above and beyond all of that, the variables within blocklist_func_context
++ * are originally local variables, with local (not even static) linkage,
++ * from within blocklist_func. These were each referenced by
++ * disk_read_blocklist_func, which is only called from other functions
++ * through a globally scoped pointer.
++ *
++ * The documentation in GCC actually uses the words "all hell will break
++ * loose" to describe this scenario.
++ *
++ * Also, "start_sector" was also used uninitialized, but gcc doesn't warn
++ * about it (possibly because of the scoping madness?)
++ */
++
++static struct {
++ int start_sector;
++ int num_sectors;
++ int num_entries;
++ int last_length;
++} blocklist_func_context = {
++ .start_sector = 0,
++ .num_sectors = 0,
++ .num_entries = 0,
++ .last_length = 0
++};
++
++/* Collect contiguous blocks into one entry as many as possible,
++ and print the blocklist notation on the screen. */
++static void
++blocklist_read_helper (int sector, int offset, int length)
++{
++ int *start_sector = &blocklist_func_context.start_sector;
++ int *num_sectors = &blocklist_func_context.num_sectors;
++ int *num_entries = &blocklist_func_context.num_entries;
++ int *last_length = &blocklist_func_context.last_length;
++
++ if (*num_sectors > 0)
++ {
++ if (*start_sector + *num_sectors == sector
++ && offset == 0 && *last_length == SECTOR_SIZE)
++ {
++ *num_sectors++;
++ *last_length = length;
++ return;
++ }
++ else
++ {
++ if (*last_length == SECTOR_SIZE)
++ grub_printf ("%s%d+%d", *num_entries ? "," : "",
++ *start_sector - part_start, *num_sectors);
++ else if (*num_sectors > 1)
++ grub_printf ("%s%d+%d,%d[0-%d]", *num_entries ? "," : "",
++ *start_sector - part_start, *num_sectors-1,
++ *start_sector + *num_sectors-1 - part_start,
++ *last_length);
++ else
++ grub_printf ("%s%d[0-%d]", *num_entries ? "," : "",
++ *start_sector - part_start, *last_length);
++ *num_entries++;
++ *num_sectors = 0;
++ }
++ }
++
++ if (offset > 0)
++ {
++ grub_printf("%s%d[%d-%d]", *num_entries ? "," : "",
++ sector-part_start, offset, offset+length);
++ *num_entries++;
++ }
++ else
++ {
++ *start_sector = sector;
++ *num_sectors = 1;
++ *last_length = length;
++ }
++}
++
+ /* blocklist */
+ static int
+ blocklist_func (char *arg, int flags)
+ {
+ char *dummy = (char *) RAW_ADDR (0x100000);
+- int start_sector;
+- int num_sectors = 0;
+- int num_entries = 0;
+- int last_length = 0;
+-
+- auto void disk_read_blocklist_func (int sector, int offset, int length);
+-
+- /* Collect contiguous blocks into one entry as many as possible,
+- and print the blocklist notation on the screen. */
+- auto void disk_read_blocklist_func (int sector, int offset, int length)
+- {
+- if (num_sectors > 0)
+- {
+- if (start_sector + num_sectors == sector
+- && offset == 0 && last_length == SECTOR_SIZE)
+- {
+- num_sectors++;
+- last_length = length;
+- return;
+- }
+- else
+- {
+- if (last_length == SECTOR_SIZE)
+- grub_printf ("%s%d+%d", num_entries ? "," : "",
+- start_sector - part_start, num_sectors);
+- else if (num_sectors > 1)
+- grub_printf ("%s%d+%d,%d[0-%d]", num_entries ? "," : "",
+- start_sector - part_start, num_sectors-1,
+- start_sector + num_sectors-1 - part_start,
+- last_length);
+- else
+- grub_printf ("%s%d[0-%d]", num_entries ? "," : "",
+- start_sector - part_start, last_length);
+- num_entries++;
+- num_sectors = 0;
+- }
+- }
+-
+- if (offset > 0)
+- {
+- grub_printf("%s%d[%d-%d]", num_entries ? "," : "",
+- sector-part_start, offset, offset+length);
+- num_entries++;
+- }
+- else
+- {
+- start_sector = sector;
+- num_sectors = 1;
+- last_length = length;
+- }
+- }
+
++ int *start_sector = &blocklist_func_context.start_sector;
++ int *num_sectors = &blocklist_func_context.num_sectors;
++ int *num_entries = &blocklist_func_context.num_entries;
++
+ /* Open the file. */
+ if (! grub_open (arg))
+ return 1;
+@@ -204,15 +241,15 @@
+ grub_printf (")");
+
+ /* Read in the whole file to DUMMY. */
+- disk_read_hook = disk_read_blocklist_func;
++ disk_read_hook = blocklist_read_helper;
+ if (! grub_read (dummy, -1))
+ goto fail;
+
+ /* The last entry may not be printed yet. Don't check if it is a
+ * full sector, since it doesn't matter if we read too much. */
+- if (num_sectors > 0)
+- grub_printf ("%s%d+%d", num_entries ? "," : "",
+- start_sector - part_start, num_sectors);
++ if (*num_sectors > 0)
++ grub_printf ("%s%d+%d", *num_entries ? "," : "",
++ *start_sector - part_start, *num_sectors);
+
+ grub_printf ("\n");
+
+@@ -1868,6 +1905,77 @@
+
+
+ /* install */
++static struct {
++ int saved_sector;
++ int installaddr;
++ int installlist;
++ char *stage2_first_buffer;
++} install_func_context = {
++ .saved_sector = 0,
++ .installaddr = 0,
++ .installlist = 0,
++ .stage2_first_buffer = NULL,
++};
++
++/* Save the first sector of Stage2 in STAGE2_SECT. */
++/* Formerly disk_read_savesect_func with local scope inside install_func */
++static void
++install_savesect_helper(int sector, int offset, int length)
++{
++ if (debug)
++ printf ("[%d]", sector);
++
++ /* ReiserFS has files which sometimes contain data not aligned
++ on sector boundaries. Returning an error is better than
++ silently failing. */
++ if (offset != 0 || length != SECTOR_SIZE)
++ errnum = ERR_UNALIGNED;
++
++ install_func_context.saved_sector = sector;
++}
++
++/* Write SECTOR to INSTALLLIST, and update INSTALLADDR and INSTALLSECT. */
++/* Formerly disk_read_blocklist_func with local scope inside install_func */
++static void
++install_blocklist_helper (int sector, int offset, int length)
++{
++ int *installaddr = &install_func_context.installaddr;
++ int *installlist = &install_func_context.installlist;
++ char **stage2_first_buffer = &install_func_context.stage2_first_buffer;
++ /* Was the last sector full? */
++ static int last_length = SECTOR_SIZE;
++
++ if (debug)
++ printf("[%d]", sector);
++
++ if (offset != 0 || last_length != SECTOR_SIZE)
++ {
++ /* We found a non-sector-aligned data block. */
++ errnum = ERR_UNALIGNED;
++ return;
++ }
++
++ last_length = length;
++
++ if (*((unsigned long *) (*installlist - 4))
++ + *((unsigned short *) *installlist) != sector
++ || *installlist == (int) *stage2_first_buffer + SECTOR_SIZE + 4)
++ {
++ *installlist -= 8;
++
++ if (*((unsigned long *) (*installlist - 8)))
++ errnum = ERR_WONT_FIT;
++ else
++ {
++ *((unsigned short *) (*installlist + 2)) = (*installaddr >> 4);
++ *((unsigned long *) (*installlist - 4)) = sector;
++ }
++ }
++
++ *((unsigned short *) *installlist) += 1;
++ *installaddr += 512;
++}
++
+ static int
+ install_func (char *arg, int flags)
+ {
+@@ -1875,8 +1983,12 @@
+ char *stage1_buffer = (char *) RAW_ADDR (0x100000);
+ char *stage2_buffer = stage1_buffer + SECTOR_SIZE;
+ char *old_sect = stage2_buffer + SECTOR_SIZE;
+- char *stage2_first_buffer = old_sect + SECTOR_SIZE;
+- char *stage2_second_buffer = stage2_first_buffer + SECTOR_SIZE;
++ /* stage2_first_buffer used to be defined as:
++ * char *stage2_first_buffer = old_sect + SECTOR_SIZE; */
++ char **stage2_first_buffer = &install_func_context.stage2_first_buffer;
++ /* and stage2_second_buffer was:
++ * char *stage2_second_buffer = stage2_first_buffer + SECTOR_SIZE; */
++ char *stage2_second_buffer = old_sect + SECTOR_SIZE + SECTOR_SIZE;
+ /* XXX: Probably SECTOR_SIZE is reasonable. */
+ char *config_filename = stage2_second_buffer + SECTOR_SIZE;
+ char *dummy = config_filename + SECTOR_SIZE;
+@@ -1885,10 +1997,11 @@
+ int src_drive, src_partition, src_part_start;
+ int i;
+ struct geometry dest_geom, src_geom;
+- int saved_sector;
++ int *saved_sector = &install_func_context.saved_sector;
+ int stage2_first_sector, stage2_second_sector;
+ char *ptr;
+- int installaddr, installlist;
++ int *installaddr = &install_func_context.installaddr;
++ int *installlist = &install_func_context.installlist;
+ /* Point to the location of the name of a configuration file in Stage 2. */
+ char *config_file_location;
+ /* If FILE is a Stage 1.5? */
+@@ -1897,67 +2010,13 @@
+ int is_open = 0;
+ /* If LBA is forced? */
+ int is_force_lba = 0;
+- /* Was the last sector full? */
+- int last_length = SECTOR_SIZE;
+-
++
++ *stage2_first_buffer = old_sect + SECTOR_SIZE;
+ #ifdef GRUB_UTIL
+ /* If the Stage 2 is in a partition mounted by an OS, this will store
+ the filename under the OS. */
+ char *stage2_os_file = 0;
+ #endif /* GRUB_UTIL */
+-
+- auto void disk_read_savesect_func (int sector, int offset, int length);
+- auto void disk_read_blocklist_func (int sector, int offset, int length);
+-
+- /* Save the first sector of Stage2 in STAGE2_SECT. */
+- auto void disk_read_savesect_func (int sector, int offset, int length)
+- {
+- if (debug)
+- printf ("[%d]", sector);
+-
+- /* ReiserFS has files which sometimes contain data not aligned
+- on sector boundaries. Returning an error is better than
+- silently failing. */
+- if (offset != 0 || length != SECTOR_SIZE)
+- errnum = ERR_UNALIGNED;
+-
+- saved_sector = sector;
+- }
+-
+- /* Write SECTOR to INSTALLLIST, and update INSTALLADDR and
+- INSTALLSECT. */
+- auto void disk_read_blocklist_func (int sector, int offset, int length)
+- {
+- if (debug)
+- printf("[%d]", sector);
+-
+- if (offset != 0 || last_length != SECTOR_SIZE)
+- {
+- /* We found a non-sector-aligned data block. */
+- errnum = ERR_UNALIGNED;
+- return;
+- }
+-
+- last_length = length;
+-
+- if (*((unsigned long *) (installlist - 4))
+- + *((unsigned short *) installlist) != sector
+- || installlist == (int) stage2_first_buffer + SECTOR_SIZE + 4)
+- {
+- installlist -= 8;
+-
+- if (*((unsigned long *) (installlist - 8)))
+- errnum = ERR_WONT_FIT;
+- else
+- {
+- *((unsigned short *) (installlist + 2)) = (installaddr >> 4);
+- *((unsigned long *) (installlist - 4)) = sector;
+- }
+- }
+-
+- *((unsigned short *) installlist) += 1;
+- installaddr += 512;
+- }
+
+ /* First, check the GNU-style long option. */
+ while (1)
+@@ -1987,10 +2049,10 @@
+ addr = skip_to (0, file);
+
+ /* Get the installation address. */
+- if (! safe_parse_maxint (&addr, &installaddr))
++ if (! safe_parse_maxint (&addr, installaddr))
+ {
+ /* ADDR is not specified. */
+- installaddr = 0;
++ *installaddr = 0;
+ ptr = addr;
+ errnum = 0;
+ }
+@@ -2084,17 +2146,17 @@
+ = (dest_drive & BIOS_FLAG_FIXED_DISK);
+
+ /* Read the first sector of Stage 2. */
+- disk_read_hook = disk_read_savesect_func;
+- if (grub_read (stage2_first_buffer, SECTOR_SIZE) != SECTOR_SIZE)
++ disk_read_hook = install_savesect_helper;
++ if (grub_read (*stage2_first_buffer, SECTOR_SIZE) != SECTOR_SIZE)
+ goto fail;
+
+- stage2_first_sector = saved_sector;
++ stage2_first_sector = *saved_sector;
+
+ /* Read the second sector of Stage 2. */
+ if (grub_read (stage2_second_buffer, SECTOR_SIZE) != SECTOR_SIZE)
+ goto fail;
+
+- stage2_second_sector = saved_sector;
++ stage2_second_sector = *saved_sector;
+
+ /* Check for the version of Stage 2. */
+ if (*((short *) (stage2_second_buffer + STAGE2_VER_MAJ_OFFS))
+@@ -2110,27 +2172,27 @@
+
+ /* If INSTALLADDR is not specified explicitly in the command-line,
+ determine it by the Stage 2 id. */
+- if (! installaddr)
++ if (! *installaddr)
+ {
+ if (! is_stage1_5)
+ /* Stage 2. */
+- installaddr = 0x8000;
++ *installaddr = 0x8000;
+ else
+ /* Stage 1.5. */
+- installaddr = 0x2000;
++ *installaddr = 0x2000;
+ }
+
+ *((unsigned long *) (stage1_buffer + STAGE1_STAGE2_SECTOR))
+ = stage2_first_sector;
+ *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_ADDRESS))
+- = installaddr;
++ = *installaddr;
+ *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_SEGMENT))
+- = installaddr >> 4;
++ = *installaddr >> 4;
+
+- i = (int) stage2_first_buffer + SECTOR_SIZE - 4;
++ i = (int) *stage2_first_buffer + SECTOR_SIZE - 4;
+ while (*((unsigned long *) i))
+ {
+- if (i < (int) stage2_first_buffer
++ if (i < (int) *stage2_first_buffer
+ || (*((int *) (i - 4)) & 0x80000000)
+ || *((unsigned short *) i) >= 0xA00
+ || *((short *) (i + 2)) == 0)
+@@ -2144,13 +2206,13 @@
+ i -= 8;
+ }
+
+- installlist = (int) stage2_first_buffer + SECTOR_SIZE + 4;
+- installaddr += SECTOR_SIZE;
++ *installlist = (int) *stage2_first_buffer + SECTOR_SIZE + 4;
++ *installaddr += SECTOR_SIZE;
+
+ /* Read the whole of Stage2 except for the first sector. */
+ grub_seek (SECTOR_SIZE);
+
+- disk_read_hook = disk_read_blocklist_func;
++ disk_read_hook = install_blocklist_helper;
+ if (! grub_read (dummy, -1))
+ goto fail;
+
+@@ -2233,7 +2295,7 @@
+ /* Skip the first sector. */
+ grub_seek (SECTOR_SIZE);
+
+- disk_read_hook = disk_read_savesect_func;
++ disk_read_hook = install_savesect_helper;
+ if (grub_read (stage2_buffer, SECTOR_SIZE) != SECTOR_SIZE)
+ goto fail;
+
+@@ -2303,7 +2365,7 @@
+ else
+ #endif /* GRUB_UTIL */
+ {
+- if (! devwrite (saved_sector - part_start, 1, stage2_buffer))
++ if (! devwrite (*saved_sector - part_start, 1, stage2_buffer))
+ goto fail;
+ }
+ }
+@@ -2325,7 +2387,7 @@
+ goto fail;
+ }
+
+- if (fwrite (stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE)
++ if (fwrite (*stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE)
+ {
+ fclose (fp);
+ errnum = ERR_WRITE;
+@@ -2352,7 +2414,7 @@
+ goto fail;
+
+ if (! devwrite (stage2_first_sector - src_part_start, 1,
+- stage2_first_buffer))
++ *stage2_first_buffer))
+ goto fail;
+
+ if (! devwrite (stage2_second_sector - src_part_start, 1,
+--- grub-0.97/stage2/shared.h
++++ grub-0.97/stage2/shared.h
+@@ -36,8 +36,8 @@
+
+ /* Maybe redirect memory requests through grub_scratch_mem. */
+ #ifdef GRUB_UTIL
+-extern char *grub_scratch_mem;
+-# define RAW_ADDR(x) ((x) + (int) grub_scratch_mem)
++extern void *grub_scratch_mem;
++# define RAW_ADDR(x) ((x) + (unsigned long) grub_scratch_mem)
+ # define RAW_SEG(x) (RAW_ADDR ((x) << 4) >> 4)
+ #else
+ # define RAW_ADDR(x) (x)
diff --git a/libre/grub-legacy/05-grub-0.97-initrdaddr.diff b/libre/grub-legacy/05-grub-0.97-initrdaddr.diff
new file mode 100644
index 000000000..ccf5f3e54
--- /dev/null
+++ b/libre/grub-legacy/05-grub-0.97-initrdaddr.diff
@@ -0,0 +1,16 @@
+--- grub-0.96/stage2/boot.c
++++ grub-0.96/stage2/boot.c
+@@ -824,8 +824,11 @@
+ moveto = (mbi.mem_upper + 0x400) << 10;
+
+ moveto = (moveto - len) & 0xfffff000;
+- max_addr = (lh->header == LINUX_MAGIC_SIGNATURE && lh->version >= 0x0203
+- ? lh->initrd_addr_max : LINUX_INITRD_MAX_ADDRESS);
++ max_addr = LINUX_INITRD_MAX_ADDRESS;
++ if (lh->header == LINUX_MAGIC_SIGNATURE &&
++ lh->version >= 0x0203 &&
++ lh->initrd_addr_max < max_addr)
++ max_addr = lh->initrd_addr_max;
+ if (moveto + len >= max_addr)
+ moveto = (max_addr - len) & 0xfffff000;
+
diff --git a/libre/grub-legacy/PKGBUILD b/libre/grub-legacy/PKGBUILD
new file mode 100644
index 000000000..d63a33ec9
--- /dev/null
+++ b/libre/grub-legacy/PKGBUILD
@@ -0,0 +1,107 @@
+# $Id: PKGBUILD 141999 2011-11-03 21:16:38Z ronald $
+# Maintainer: Ronald van Haren <ronald.archlinux.org>
+# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
+# Maintainer (Parabola): Jorge López <jorginho@adinet.com.uy>
+
+pkgname=grub
+pkgver=0.97
+pkgrel=21.4
+pkgdesc="A GNU multiboot boot loader (Parabola rebranded)"
+arch=('i686' 'x86_64')
+license=('GPL')
+url="http://www.gnu.org/software/grub/"
+groups=('base')
+depends=('ncurses' 'diffutils' 'sed')
+optdepends=('xfsprogs: freezing of xfs /boot in install-grub script')
+source=(ftp://alpha.gnu.org/gnu/grub/grub-$pkgver.tar.gz
+ menu.lst
+ install-grub
+ 040_all_grub-0.96-nxstack.patch
+ 05-grub-0.97-initrdaddr.diff
+ i2o.patch
+ special-devices.patch
+ more-raid.patch
+ intelmac.patch
+ grub-inode-size.patch
+ ext4.patch
+ grub-0.97-ldflags-objcopy-remove-build-id.patch)
+backup=('boot/grub/menu.lst')
+install=grub.install
+sha1sums=('2580626c4579bd99336d3af4482c346c95dac4fb'
+ 'e13bf0f91510fd6bb9451e6eb1b2a6e4a03e8b5f'
+ '3e23bfee50285c8c7b9ef9ec07964310278b1e09'
+ '157b81dbad3576536b08642242accfa1aeb093a9'
+ 'adbb4685c98797ffb4dc83561ec75698991dddbd'
+ 'f2e0dff29a7c8a45e90aa07298a1b2a9a9d29afc'
+ 'c5e2c94ed0e759590b9eb38c9d979f075d19d7c0'
+ '45fe668a3779664fb292591f426976b6c784d6c8'
+ '066d7ab1ae442f88e94c9e4f1867ac6682965d06'
+ '0436aa6fa0b6f768289172f983a3f4b69384629e'
+ 'a36f34e51efed540f1ddafd78e9c9f6d83e4c8d4'
+ '61c4b58d2eaa3c1561d8e9d8fc41341ce8882869')
+
+#set destination architecture here
+#DESTARCH="i686"
+DESTARCH="x86_64"
+
+
+build() {
+ cd $srcdir/$pkgname-$pkgver
+ fgrep -rlZ pkglib_DATA --include Makefile.am . | xargs -0 sed -i 's/pkglib_DATA/pkgdata_DATA/g'
+
+ # optimizations break the build -- disable them
+ # adding special devices to grub, patches are from fedora
+ patch -Np1 -i ../special-devices.patch
+ patch -Np1 -i ../i2o.patch
+ patch -Np1 -i ../more-raid.patch
+ patch -Np1 -i ../intelmac.patch
+ # Add support for bigger inode size to e2fs_stage1_5
+ patch -Np1 -i ../grub-inode-size.patch
+ # Add ext4 support
+ # http://www.mail-archive.com/bug-grub@gnu.org/msg11458.html
+ patch -Np1 -i ../ext4.patch
+ # binutils fix
+ patch -Np1 -i ../grub-0.97-ldflags-objcopy-remove-build-id.patch
+
+ sed -e'/^AC_PROG_CC/ a\AM_PROG_CC_C_O\ ' -i "${srcdir}/${pkgname}-${pkgver}/configure.ac"
+ sed -e'/^AC_PROG_CC/ a\AM_PROG_AS\ ' -i "${srcdir}/${pkgname}-${pkgver}/configure.ac"
+
+ ## recreate ./configure script with the required changes in LDFLAGS and objcopy
+ aclocal
+ autoconf
+ autoreconf
+ automake
+
+ #arch64 fixes for static build
+ if [ "$CARCH" = "x86_64" ]; then ## correcting problems for new wersion of autotools
+
+ echo "this package has to be built on i686, won't compile on x86_64"
+ sleep 5
+ else
+ if [ "$DESTARCH" = "x86_64" ]; then
+ # patch from gentoo for fixing a segfault
+ patch -Np1 -i ../040_all_grub-0.96-nxstack.patch
+ # patch from frugalware to make it boot when more than 2GB ram installed
+ patch -Np1 -i ../05-grub-0.97-initrdaddr.diff
+ CFLAGS="-static -fno-strict-aliasing" ./configure --prefix=/usr --bindir=/bin --sbindir=/sbin \
+ --mandir=/usr/share/man --infodir=/usr/share/info
+ else
+ CFLAGS="-fno-strict-aliasing" ./configure --prefix=/usr --bindir=/bin --sbindir=/sbin \
+ --mandir=/usr/share/man --infodir=/usr/share/info
+ fi
+ fi
+}
+
+package() {
+ cd $srcdir/$pkgname-$pkgver
+
+ CFLAGS= make
+ make DESTDIR=$pkgdir install
+ install -D -m644 ../menu.lst $pkgdir/boot/grub/menu.lst
+ install -D -m755 ../install-grub $pkgdir/sbin/install-grub
+
+ if [ "$DESTARCH" = "x86_64" ]; then
+ # fool makepkg into building a x86_64 package
+ export CARCH="x86_64"
+ fi
+}
diff --git a/libre/grub-legacy/ext4.patch b/libre/grub-legacy/ext4.patch
new file mode 100644
index 000000000..8a2f9bdb0
--- /dev/null
+++ b/libre/grub-legacy/ext4.patch
@@ -0,0 +1,263 @@
+diff -ruNp grub-0.97/stage2/fsys_ext2fs.c grub-0.97-patch/stage2/fsys_ext2fs.c
+--- grub-0.97/stage2/fsys_ext2fs.c 2004-08-08 20:19:18.000000000 +0200
++++ grub-0.97-patch/stage2/fsys_ext2fs.c 2007-12-29 16:25:19.000000000
++0100
+@@ -51,6 +51,9 @@ typedef unsigned int __u32;
+ #define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK + 1)
+ #define EXT2_N_BLOCKS (EXT2_TIND_BLOCK + 1)
+
++/* Inode flags */
++#define EXT4_EXTENTS_FL 0x00080000 /* Inode uses extents */
++
+ /* include/linux/ext2_fs.h */
+ struct ext2_super_block
+ {
+@@ -191,6 +194,42 @@ struct ext2_dir_entry
+ #define EXT2_DIR_REC_LEN(name_len) (((name_len) + 8 + EXT2_DIR_ROUND) & \
+ ~EXT2_DIR_ROUND)
+
++/* linux/ext4_fs_extents.h */
++/*
++ * This is the extent on-disk structure.
++ * It's used at the bottom of the tree.
++ */
++struct ext4_extent {
++ __u32 ee_block; /* first logical block extent covers */
++ __u16 ee_len; /* number of blocks covered by extent */
++ __u16 ee_start_hi; /* high 16 bits of physical block */
++ __u32 ee_start; /* low 32 bits of physical block */
++};
++
++/*
++ * This is index on-disk structure.
++ * It's used at all the levels except the bottom.
++ */
++struct ext4_extent_idx {
++ __u32 ei_block; /* index covers logical blocks from 'block' */
++ __u32 ei_leaf; /* pointer to the physical block of the next *
++ * level. leaf or next index could be there */
++ __u16 ei_leaf_hi; /* high 16 bits of physical block */
++ __u16 ei_unused;
++};
++
++/*
++ * Each block (leaves and indexes), even inode-stored has header.
++ */
++struct ext4_extent_header {
++ __u16 eh_magic; /* probably will support different formats */
++ __u16 eh_entries; /* number of valid entries */
++ __u16 eh_max; /* capacity of store in entries */
++ __u16 eh_depth; /* has tree real underlying blocks? */
++ __u32 eh_generation; /* generation of the tree */
++};
++
++#define EXT4_EXT_MAGIC 0xf30a
+
+ /* ext2/super.c */
+ #define log2(n) ffz(~(n))
+@@ -279,6 +318,26 @@ ext2_rdfsb (int fsblock, int buffer)
+ EXT2_BLOCK_SIZE (SUPERBLOCK), (char *) buffer);
+ }
+
++/* Walk through extents index tree to find the good leaf */
++static struct ext4_extent_header *
++ext4_recurse_extent_index(struct ext4_extent_header *extent_block, int logical_block)
++{
++ int i;
++ struct ext4_extent_idx *index = (struct ext4_extent_idx *) (extent_block + 1);
++ if (extent_block->eh_magic != EXT4_EXT_MAGIC)
++ return NULL;
++ if (extent_block->eh_depth == 0)
++ return extent_block;
++ for (i = 0; i < extent_block->eh_entries; i++)
++ {
++ if (logical_block < index[i].ei_block)
++ break;
++ }
++ if (i == 0 || !ext2_rdfsb(index[i-1].ei_leaf, DATABLOCK1))
++ return NULL;
++ return (ext4_recurse_extent_index((struct ext4_extent_header *) DATABLOCK1, logical_block));
++}
++
+ /* from
+ ext2/inode.c:ext2_bmap()
+ */
+--- grub-0.97/stage2/fsys_ext2fs.c~ 2008-12-28 20:19:00.000000000 +0100
++++ grub-0.97/stage2/fsys_ext2fs.c 2008-12-28 20:19:00.000000000 +0100
+@@ -366,83 +366,106 @@
+ }
+ printf ("logical block %d\n", logical_block);
+ #endif /* E2DEBUG */
+-
+- /* if it is directly pointed to by the inode, return that physical addr */
+- if (logical_block < EXT2_NDIR_BLOCKS)
+- {
+-#ifdef E2DEBUG
+- printf ("returning %d\n", (unsigned char *) (INODE->i_block[logical_block]));
+- printf ("returning %d\n", INODE->i_block[logical_block]);
+-#endif /* E2DEBUG */
+- return INODE->i_block[logical_block];
+- }
+- /* else */
+- logical_block -= EXT2_NDIR_BLOCKS;
+- /* try the indirect block */
+- if (logical_block < EXT2_ADDR_PER_BLOCK (SUPERBLOCK))
++ /* standard ext2 inode */
++ if (!(INODE->i_flags & EXT4_EXTENTS_FL))
+ {
+- if (mapblock1 != 1
+- && !ext2_rdfsb (INODE->i_block[EXT2_IND_BLOCK], DATABLOCK1))
+- {
+- errnum = ERR_FSYS_CORRUPT;
+- return -1;
+- }
+- mapblock1 = 1;
+- return ((__u32 *) DATABLOCK1)[logical_block];
+- }
+- /* else */
+- logical_block -= EXT2_ADDR_PER_BLOCK (SUPERBLOCK);
+- /* now try the double indirect block */
+- if (logical_block < (1 << (EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK) * 2)))
+- {
+- int bnum;
+- if (mapblock1 != 2
+- && !ext2_rdfsb (INODE->i_block[EXT2_DIND_BLOCK], DATABLOCK1))
+- {
+- errnum = ERR_FSYS_CORRUPT;
+- return -1;
+- }
+- mapblock1 = 2;
+- if ((bnum = (((__u32 *) DATABLOCK1)
+- [logical_block >> EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK)]))
+- != mapblock2
+- && !ext2_rdfsb (bnum, DATABLOCK2))
+- {
+- errnum = ERR_FSYS_CORRUPT;
+- return -1;
+- }
+- mapblock2 = bnum;
++ /* if it is directly pointed to by the inode, return that physical addr */
++ if (logical_block < EXT2_NDIR_BLOCKS)
++ {
++#ifdef E2DEBUG
++ printf ("returning %d\n", (unsigned char *) (INODE->i_block[logical_block]));
++ printf ("returning %d\n", INODE->i_block[logical_block]);
++#endif /* E2DEBUG */
++ return INODE->i_block[logical_block];
++ }
++ /* else */
++ logical_block -= EXT2_NDIR_BLOCKS;
++ /* try the indirect block */
++ if (logical_block < EXT2_ADDR_PER_BLOCK (SUPERBLOCK))
++ {
++ if (mapblock1 != 1
++ && !ext2_rdfsb (INODE->i_block[EXT2_IND_BLOCK], DATABLOCK1))
++ {
++ errnum = ERR_FSYS_CORRUPT;
++ return -1;
++ }
++ mapblock1 = 1;
++ return ((__u32 *) DATABLOCK1)[logical_block];
++ }
++ /* else */
++ logical_block -= EXT2_ADDR_PER_BLOCK (SUPERBLOCK);
++ /* now try the double indirect block */
++ if (logical_block < (1 << (EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK) * 2)))
++ {
++ int bnum;
++ if (mapblock1 != 2
++ && !ext2_rdfsb (INODE->i_block[EXT2_DIND_BLOCK], DATABLOCK1))
++ {
++ errnum = ERR_FSYS_CORRUPT;
++ return -1;
++ }
++ mapblock1 = 2;
++ if ((bnum = (((__u32 *) DATABLOCK1)
++ [logical_block >> EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK)]))
++ != mapblock2
++ && !ext2_rdfsb (bnum, DATABLOCK2))
++ {
++ errnum = ERR_FSYS_CORRUPT;
++ return -1;
++ }
++ mapblock2 = bnum;
++ return ((__u32 *) DATABLOCK2)
++ [logical_block & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)];
++ }
++ /* else */
++ mapblock2 = -1;
++ logical_block -= (1 << (EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK) * 2));
++ if (mapblock1 != 3
++ && !ext2_rdfsb (INODE->i_block[EXT2_TIND_BLOCK], DATABLOCK1))
++ {
++ errnum = ERR_FSYS_CORRUPT;
++ return -1;
++ }
++ mapblock1 = 3;
++ if (!ext2_rdfsb (((__u32 *) DATABLOCK1)
++ [logical_block >> (EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK)
++ * 2)],
++ DATABLOCK2))
++ {
++ errnum = ERR_FSYS_CORRUPT;
++ return -1;
++ }
++ if (!ext2_rdfsb (((__u32 *) DATABLOCK2)
++ [(logical_block >> EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK))
++ & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)],
++ DATABLOCK2))
++ {
++ errnum = ERR_FSYS_CORRUPT;
++ return -1;
++ }
+ return ((__u32 *) DATABLOCK2)
+- [logical_block & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)];
+- }
+- /* else */
+- mapblock2 = -1;
+- logical_block -= (1 << (EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK) * 2));
+- if (mapblock1 != 3
+- && !ext2_rdfsb (INODE->i_block[EXT2_TIND_BLOCK], DATABLOCK1))
+- {
+- errnum = ERR_FSYS_CORRUPT;
+- return -1;
++ [logical_block & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)];
+ }
+- mapblock1 = 3;
+- if (!ext2_rdfsb (((__u32 *) DATABLOCK1)
+- [logical_block >> (EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK)
+- * 2)],
+- DATABLOCK2))
+- {
+- errnum = ERR_FSYS_CORRUPT;
+- return -1;
+- }
+- if (!ext2_rdfsb (((__u32 *) DATABLOCK2)
+- [(logical_block >> EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK))
+- & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)],
+- DATABLOCK2))
++ /* inode is in extents format */
++ else
+ {
++ int i;
++ struct ext4_extent_header *extent_hdr = ext4_recurse_extent_index((struct ext4_extent_header *) INODE->i_block, logical_block);
++ struct ext4_extent *extent = (struct ext4_extent *) (extent_hdr + 1);
++ if ( extent_hdr == NULL || extent_hdr->eh_magic != EXT4_EXT_MAGIC)
++ {
++ errnum = ERR_FSYS_CORRUPT;
++ return -1;
++ }
++ for (i = 0; i<extent_hdr->eh_entries; i++)
++ {
++ if (extent[i].ee_block <= logical_block && logical_block < extent[i].ee_block + extent[i].ee_len && !(extent[i].ee_len>>15))
++ return (logical_block - extent[i].ee_block + extent[i].ee_start);
++ }
++ /* We should not arrive here */
+ errnum = ERR_FSYS_CORRUPT;
+ return -1;
+ }
+- return ((__u32 *) DATABLOCK2)
+- [logical_block & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)];
+ }
+
+ /* preconditions: all preconds of ext2fs_block_map */
diff --git a/libre/grub-legacy/grub-0.97-gpt.patch b/libre/grub-legacy/grub-0.97-gpt.patch
new file mode 100644
index 000000000..7b1a55cd8
--- /dev/null
+++ b/libre/grub-legacy/grub-0.97-gpt.patch
@@ -0,0 +1,315 @@
+diff -ruBbd --unidirectional-new-file grub-0.96/stage2/builtins.c grub-0.96-patched/stage2/builtins.c
+--- grub-0.96/stage2/builtins.c 2004-06-20 09:33:04.000000000 -0400
++++ grub-0.96-patched/stage2/builtins.c 2007-01-04 13:56:06.000000000 -0500
+@@ -1229,14 +1229,15 @@
+ for (drive = 0x80; drive < 0x88; drive++)
+ {
+ unsigned long part = 0xFFFFFF;
+- unsigned long start, len, offset, ext_offset;
+- int type, entry;
++ unsigned long start, len, offset, ext_offset, gpt_offset;
++ int type, entry, gpt_count, gpt_size;
+ char buf[SECTOR_SIZE];
+
+ current_drive = drive;
+ while (next_partition (drive, 0xFFFFFF, &part, &type,
+ &start, &len, &offset, &entry,
+- &ext_offset, buf))
++ &ext_offset, &gpt_offset,
++ &gpt_count, &gpt_size, buf))
+ {
+ if (type != PC_SLICE_TYPE_NONE
+ && ! IS_PC_SLICE_TYPE_BSD (type)
+@@ -2806,8 +2807,8 @@
+ {
+ int new_type;
+ unsigned long part = 0xFFFFFF;
+- unsigned long start, len, offset, ext_offset;
+- int entry, type;
++ unsigned long start, len, offset, ext_offset, gpt_offset;
++ int entry, type, gpt_count, gpt_size;
+ char mbr[512];
+
+ /* Get the drive and the partition. */
+@@ -2844,7 +2845,14 @@
+ /* Look for the partition. */
+ while (next_partition (current_drive, 0xFFFFFF, &part, &type,
+ &start, &len, &offset, &entry,
+- &ext_offset, mbr))
++ &ext_offset, &gpt_offset, &gpt_count, &gpt_size, mbr))
++ /* The partition may not be a GPT partition. */
++ if (gpt_offset != 0)
++ {
++ errnum = ERR_BAD_ARGUMENT;
++ return 1;
++ }
++
+ {
+ if (part == current_partition)
+ {
+diff -ruBbd --unidirectional-new-file grub-0.96/stage2/disk_io.c grub-0.96-patched/stage2/disk_io.c
+--- grub-0.96/stage2/disk_io.c 2004-05-23 12:35:24.000000000 -0400
++++ grub-0.96-patched/stage2/disk_io.c 2007-01-04 14:01:08.000000000 -0500
+@@ -21,6 +21,7 @@
+
+ #include <shared.h>
+ #include <filesys.h>
++#include <gpt.h>
+
+ #ifdef SUPPORT_NETBOOT
+ # define GRUB 1
+@@ -502,8 +503,8 @@
+ set_partition_hidden_flag (int hidden)
+ {
+ unsigned long part = 0xFFFFFF;
+- unsigned long start, len, offset, ext_offset;
+- int entry, type;
++ unsigned long start, len, offset, ext_offset, gpt_offset;
++ int entry, type, gpt_count, gpt_size;
+ char mbr[512];
+
+ /* The drive must be a hard disk. */
+@@ -524,7 +525,14 @@
+ /* Look for the partition. */
+ while (next_partition (current_drive, 0xFFFFFF, &part, &type,
+ &start, &len, &offset, &entry,
+- &ext_offset, mbr))
++ &ext_offset, &gpt_offset, &gpt_count, &gpt_size, mbr))
++ /* The partition may not be a GPT partition. */
++ if (gpt_offset != 0)
++ {
++ errnum = ERR_BAD_ARGUMENT;
++ return 1;
++ }
++
+ {
+ if (part == current_partition)
+ {
+@@ -577,11 +585,14 @@
+ unsigned long *partition, int *type,
+ unsigned long *start, unsigned long *len,
+ unsigned long *offset, int *entry,
+- unsigned long *ext_offset, char *buf)
++ unsigned long *ext_offset,
++ unsigned long *gpt_offset, int *gpt_count,
++ int *gpt_size, char *buf)
+ {
+ /* Forward declarations. */
+ auto int next_bsd_partition (void);
+ auto int next_pc_slice (void);
++ auto int next_gpt_slice(void);
+
+ /* Get next BSD partition in current PC slice. */
+ int next_bsd_partition (void)
+@@ -666,6 +677,40 @@
+ return 0;
+ }
+
++ /* If this is a GPT partition table, read it as such. */
++ if (*entry == -1 && *offset == 0 && PC_SLICE_TYPE (buf, 0) == PC_SLICE_TYPE_GPT)
++ {
++ struct grub_gpt_header *hdr = (struct grub_gpt_header *) buf;
++
++ /* Read in the GPT Partition table header. */
++ if (! rawread (drive, 1, 0, SECTOR_SIZE, buf))
++ return 0;
++
++ if (hdr->magic == GPT_HEADER_MAGIC && hdr->version == 0x10000)
++ {
++ /* Let gpt_offset point to the first entry in the GPT
++ partition table. This can also be used by callers of
++ next_partition to determine if a entry comes from a
++ GPT partition table or not. */
++ *gpt_offset = hdr->partitions;
++ *gpt_count = hdr->maxpart;
++ *gpt_size = hdr->partentry_size;
++
++ return next_gpt_slice();
++ }
++ else
++ {
++ /* This is not a valid header for a GPT partition table.
++ Re-read the MBR or the boot sector of the extended
++ partition. */
++ if (! rawread (drive, *offset, 0, SECTOR_SIZE, buf))
++ return 0;
++ }
++ }
++
++ /* Not a GPT partition. */
++ *gpt_offset = 0;
++
+ /* Increase the entry number. */
+ (*entry)++;
+
+@@ -710,6 +755,43 @@
+ return 1;
+ }
+
++ /* Get the next GPT slice. */
++ int next_gpt_slice (void)
++ {
++ struct grub_gpt_partentry *gptentry = (struct grub_gpt_partentry *) buf;
++ /* Make GPT partitions show up as PC slices. */
++ int pc_slice_no = (*partition & 0xFF0000) >> 16;
++
++ /* If this is the first time... */
++ if (pc_slice_no == 0xFF)
++ {
++ pc_slice_no = -1;
++ *entry = -1;
++ }
++
++ do {
++ (*entry)++;
++
++ if (*entry >= *gpt_count)
++ {
++ errnum = ERR_NO_PART;
++ return 0;
++ }
++ /* Read in the GPT Partition table entry. */
++ if (! rawread (drive, (*gpt_offset) + GPT_ENTRY_SECTOR (*gpt_size, *entry), GPT_ENTRY_INDEX (*gpt_size, *entry), *gpt_size, buf))
++ return 0;
++ } while (! (gptentry->type1 && gptentry->type2));
++
++ pc_slice_no++;
++ *start = gptentry->start;
++ *len = gptentry->end - gptentry->start + 1;
++ *type = PC_SLICE_TYPE_EXT2FS;
++ *entry = pc_slice_no;
++ *partition = (*entry << 16) | 0xFFFF;
++
++ return 1;
++ }
++
+ /* Start the body of this function. */
+
+ #ifndef STAGE1_5
+@@ -717,6 +799,9 @@
+ return 0;
+ #endif
+
++ if (*partition != 0xFFFFFF && *gpt_offset != 0)
++ return next_gpt_slice ();
++
+ /* If previous partition is a BSD partition or a PC slice which
+ contains BSD partitions... */
+ if ((*partition != 0xFFFFFF && IS_PC_SLICE_TYPE_BSD (*type & 0xff))
+@@ -755,6 +840,9 @@
+ unsigned long dest_partition = current_partition;
+ unsigned long part_offset;
+ unsigned long ext_offset;
++ unsigned long gpt_offset;
++ int gpt_count;
++ int gpt_size;
+ int entry;
+ char buf[SECTOR_SIZE];
+ int bsd_part, pc_slice;
+@@ -766,7 +854,8 @@
+ int ret = next_partition (current_drive, dest_partition,
+ &current_partition, &current_slice,
+ &part_start, &part_length,
+- &part_offset, &entry, &ext_offset, buf);
++ &part_offset, &entry, &ext_offset,
++ &gpt_offset, &gpt_count, &gpt_size, buf);
+ bsd_part = (current_partition >> 8) & 0xFF;
+ pc_slice = current_partition >> 16;
+ return ret;
+diff -ruBbd --unidirectional-new-file grub-0.96/stage2/gpt.h grub-0.96-patched/stage2/gpt.h
+--- grub-0.96/stage2/gpt.h 1969-12-31 19:00:00.000000000 -0500
++++ grub-0.96-patched/stage2/gpt.h 2007-01-04 13:52:14.000000000 -0500
+@@ -0,0 +1,68 @@
++/*
++ * GRUB -- GRand Unified Bootloader
++ * Copyright (C) 2002,2005,2006 Free Software Foundation, Inc.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++#ifndef _GPT_H
++#define _GPT_H
++
++typedef signed char grub_int8_t;
++typedef signed short grub_int16_t;
++typedef signed int grub_int32_t;
++typedef signed long long int grub_int64_t;
++typedef unsigned char grub_uint8_t;
++typedef unsigned short grub_uint16_t;
++typedef unsigned int grub_uint32_t;
++typedef unsigned long long int grub_uint64_t;
++
++struct grub_gpt_header
++{
++ grub_uint64_t magic;
++ grub_uint32_t version;
++ grub_uint32_t headersize;
++ grub_uint32_t crc32;
++ grub_uint32_t unused1;
++ grub_uint64_t primary;
++ grub_uint64_t backup;
++ grub_uint64_t start;
++ grub_uint64_t end;
++ grub_uint8_t guid[16];
++ grub_uint64_t partitions;
++ grub_uint32_t maxpart;
++ grub_uint32_t partentry_size;
++ grub_uint32_t partentry_crc32;
++} __attribute__ ((packed));
++
++struct grub_gpt_partentry
++{
++ grub_uint64_t type1;
++ grub_uint64_t type2;
++ grub_uint8_t guid[16];
++ grub_uint64_t start;
++ grub_uint64_t end;
++ grub_uint8_t attrib;
++ char name[72];
++} __attribute__ ((packed));
++
++#define GPT_HEADER_MAGIC 0x5452415020494645UL
++
++#define GPT_ENTRY_SECTOR(size,entry) \
++ ((((entry) * (size) + 1) & ~(SECTOR_SIZE - 1)) >> SECTOR_BITS)
++#define GPT_ENTRY_INDEX(size,entry) \
++ ((((entry) * (size) + 1) & (SECTOR_SIZE - 1)) - 1)
++
++#endif /* _GPT_H */
+diff -ruBbd --unidirectional-new-file grub-0.96/stage2/pc_slice.h grub-0.96-patched/stage2/pc_slice.h
+--- grub-0.96/stage2/pc_slice.h 2003-07-09 07:45:53.000000000 -0400
++++ grub-0.96-patched/stage2/pc_slice.h 2007-01-04 13:52:14.000000000 -0500
+@@ -115,6 +115,7 @@
+ #define PC_SLICE_TYPE_LINUX_EXTENDED 0x85
+ #define PC_SLICE_TYPE_VSTAFS 0x9e
+ #define PC_SLICE_TYPE_DELL_UTIL 0xde
++#define PC_SLICE_TYPE_GPT 0xee
+ #define PC_SLICE_TYPE_LINUX_RAID 0xfd
+
+
+diff -ruBbd --unidirectional-new-file grub-0.96/stage2/shared.h grub-0.96-patched/stage2/shared.h
+--- grub-0.96/stage2/shared.h 2004-06-19 12:40:09.000000000 -0400
++++ grub-0.96-patched/stage2/shared.h 2007-01-04 13:52:15.000000000 -0500
+@@ -934,7 +934,9 @@
+ unsigned long *partition, int *type,
+ unsigned long *start, unsigned long *len,
+ unsigned long *offset, int *entry,
+- unsigned long *ext_offset, char *buf);
++ unsigned long *ext_offset,
++ unsigned long *gpt_offset, int *gpt_count,
++ int *gpt_size, char *buf);
+
+ /* Sets device to the one represented by the SAVED_* parameters. */
+ int make_saved_active (void);
diff --git a/libre/grub-legacy/grub-0.97-ldflags-objcopy-remove-build-id.patch b/libre/grub-legacy/grub-0.97-ldflags-objcopy-remove-build-id.patch
new file mode 100644
index 000000000..2b7cc32d0
--- /dev/null
+++ b/libre/grub-legacy/grub-0.97-ldflags-objcopy-remove-build-id.patch
@@ -0,0 +1,196 @@
+diff --git a/Makefile.in b/Makefile.in
+index 6652366..ba058eb 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -112,6 +112,7 @@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ LDFLAGS = @LDFLAGS@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
++LOADER_LDFLAGS = @LOADER_LDFLAGS@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+diff --git a/acinclude.m4 b/acinclude.m4
+index 368839c..32b3fa6 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -57,7 +57,7 @@ else
+ fi
+ grub_cv_prog_objcopy_absolute=yes
+ for link_addr in 2000 8000 7C00; do
+- if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,$link_addr conftest.o -o conftest.exec]); then :
++ if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,$link_addr -Wl,--build-id=none conftest.o -o conftest.exec]); then :
+ else
+ AC_MSG_ERROR([${CC-cc} cannot link at address $link_addr])
+ fi
+diff --git a/configure.ac b/configure.ac
+index bb9e1d9..9ac5c9f 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -115,6 +115,9 @@ if test "x$ac_cv_prog_gcc" = xyes; then
+ fi
+ fi
+
++LOADER_LDFLAGS="-Wl,--build-id=none"
++AC_SUBST(LOADER_LDFLAGS)
++
+ AC_SUBST(STAGE1_CFLAGS)
+ AC_SUBST(STAGE2_CFLAGS)
+ AC_SUBST(GRUB_CFLAGS)
+diff --git a/docs/Makefile.in b/docs/Makefile.in
+index 3e2de4b..7b2c94d 100644
+--- a/docs/Makefile.in
++++ b/docs/Makefile.in
+@@ -131,6 +131,7 @@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ LDFLAGS = @LDFLAGS@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
++LOADER_LDFLAGS = @LOADER_LDFLAGS@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+diff --git a/grub/Makefile.in b/grub/Makefile.in
+index 136c38f..7c23ebe 100644
+--- a/grub/Makefile.in
++++ b/grub/Makefile.in
+@@ -108,6 +108,7 @@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ LDFLAGS = @LDFLAGS@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
++LOADER_LDFLAGS = @LOADER_LDFLAGS@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+diff --git a/lib/Makefile.in b/lib/Makefile.in
+index 3dae206..449e126 100644
+--- a/lib/Makefile.in
++++ b/lib/Makefile.in
+@@ -107,6 +107,7 @@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ LDFLAGS = @LDFLAGS@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
++LOADER_LDFLAGS = @LOADER_LDFLAGS@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+diff --git a/netboot/Makefile.in b/netboot/Makefile.in
+index 75ac299..0275768 100644
+--- a/netboot/Makefile.in
++++ b/netboot/Makefile.in
+@@ -108,6 +108,7 @@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ LDFLAGS = @LDFLAGS@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
++LOADER_LDFLAGS = @LOADER_LDFLAGS@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+diff --git a/stage1/Makefile.am b/stage1/Makefile.am
+index 0afc285..3d83356 100644
+--- a/stage1/Makefile.am
++++ b/stage1/Makefile.am
+@@ -5,7 +5,7 @@ CLEANFILES = $(nodist_pkglib_DATA)
+
+ # We can't use builtins or standard includes.
+ AM_CCASFLAGS = $(STAGE1_CFLAGS) -fno-builtin -nostdinc
+-LDFLAGS = -nostdlib -Wl,-N,-Ttext,7C00
++LDFLAGS = $(LOADER_LDFLAGS) -nostdlib -Wl,-N,-Ttext,7C00
+
+ noinst_PROGRAMS = stage1.exec
+ stage1_exec_SOURCES = stage1.S stage1.h
+diff --git a/stage1/Makefile.in b/stage1/Makefile.in
+index 7134bdf..ee4477f 100644
+--- a/stage1/Makefile.in
++++ b/stage1/Makefile.in
+@@ -110,9 +110,10 @@ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+-LDFLAGS = -nostdlib -Wl,-N,-Ttext,7C00
++LDFLAGS = $(LOADER_LDFLAGS) -nostdlib -Wl,-N,-Ttext,7C00
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
++LOADER_LDFLAGS = @LOADER_LDFLAGS@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+diff --git a/stage2/Makefile.am b/stage2/Makefile.am
+index f8e6d42..ff6f347 100644
+--- a/stage2/Makefile.am
++++ b/stage2/Makefile.am
+@@ -55,11 +55,11 @@ noinst_PROGRAMS = pre_stage2.exec start.exec start_eltorito.exec \
+ endif
+ MOSTLYCLEANFILES = $(noinst_PROGRAMS)
+
+-PRE_STAGE2_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8200
+-START_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8000
+-NBLOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,0
+-PXELOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00
+-START_ELTORITO_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00
++PRE_STAGE2_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8200 $(LOADER_LDFLAGS)
++START_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8000 $(LOADER_LDFLAGS)
++NBLOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,0 $(LOADER_LDFLAGS)
++PXELOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 $(LOADER_LDFLAGS)
++START_ELTORITO_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 $(LOADER_LDFLAGS)
+
+ if NETBOOT_SUPPORT
+ NETBOOT_FLAGS = -I$(top_srcdir)/netboot -DSUPPORT_NETBOOT=1
+@@ -82,7 +82,7 @@ endif
+ STAGE2_COMPILE = $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
+ $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS)
+
+-STAGE1_5_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000
++STAGE1_5_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000 $(LOADER_LDFLAGS)
+ STAGE1_5_COMPILE = $(STAGE2_COMPILE) -DNO_DECOMPRESSION=1 -DSTAGE1_5=1
+
+ # For stage2 target.
+diff --git a/stage2/Makefile.in b/stage2/Makefile.in
+index d0062bd..88b2038 100644
+--- a/stage2/Makefile.in
++++ b/stage2/Makefile.in
+@@ -355,6 +355,7 @@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ LDFLAGS = @LDFLAGS@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
++LOADER_LDFLAGS = @LOADER_LDFLAGS@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+@@ -468,11 +469,11 @@ libgrub_a_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/lib \
+ @DISKLESS_SUPPORT_FALSE@noinst_DATA = pre_stage2 start start_eltorito
+ @DISKLESS_SUPPORT_TRUE@noinst_DATA = pre_stage2 start start_eltorito nbloader pxeloader diskless
+ MOSTLYCLEANFILES = $(noinst_PROGRAMS)
+-PRE_STAGE2_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8200
+-START_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8000
+-NBLOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,0
+-PXELOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00
+-START_ELTORITO_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00
++PRE_STAGE2_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8200 $(LOADER_LDFLAGS)
++START_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8000 $(LOADER_LDFLAGS)
++NBLOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,0 $(LOADER_LDFLAGS)
++PXELOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 $(LOADER_LDFLAGS)
++START_ELTORITO_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 $(LOADER_LDFLAGS)
+ @NETBOOT_SUPPORT_FALSE@NETBOOT_FLAGS =
+ @NETBOOT_SUPPORT_TRUE@NETBOOT_FLAGS = -I$(top_srcdir)/netboot -DSUPPORT_NETBOOT=1
+ @SERIAL_SUPPORT_FALSE@SERIAL_FLAGS =
+@@ -482,7 +483,7 @@ START_ELTORITO_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00
+ STAGE2_COMPILE = $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
+ $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS)
+
+-STAGE1_5_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000
++STAGE1_5_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000 $(LOADER_LDFLAGS)
+ STAGE1_5_COMPILE = $(STAGE2_COMPILE) -DNO_DECOMPRESSION=1 -DSTAGE1_5=1
+
+ # For stage2 target.
+diff --git a/util/Makefile.in b/util/Makefile.in
+index e700cf7..cd3bf51 100644
+--- a/util/Makefile.in
++++ b/util/Makefile.in
+@@ -113,6 +113,7 @@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ LDFLAGS = @LDFLAGS@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
++LOADER_LDFLAGS = @LOADER_LDFLAGS@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
diff --git a/libre/grub-legacy/grub-inode-size.patch b/libre/grub-legacy/grub-inode-size.patch
new file mode 100644
index 000000000..f5ceb110b
--- /dev/null
+++ b/libre/grub-legacy/grub-inode-size.patch
@@ -0,0 +1,100 @@
+diff -Naur grub-0.97-800/stage2/fsys_ext2fs.c grub-0.97-810/stage2/fsys_ext2fs.c
+--- grub-0.97-800/stage2/fsys_ext2fs.c 2008-07-21 00:40:21.668879475 -0600
++++ grub-0.97-810/stage2/fsys_ext2fs.c 2008-07-21 01:01:11.063953773 -0600
+@@ -79,7 +79,52 @@
+ __u32 s_rev_level; /* Revision level */
+ __u16 s_def_resuid; /* Default uid for reserved blocks */
+ __u16 s_def_resgid; /* Default gid for reserved blocks */
+- __u32 s_reserved[235]; /* Padding to the end of the block */
++ /*
++ * These fields are for EXT2_DYNAMIC_REV superblocks only.
++ *
++ * Note: the difference between the compatible feature set and
++ * the incompatible feature set is that if there is a bit set
++ * in the incompatible feature set that the kernel doesn't
++ * know about, it should refuse to mount the filesystem.
++ *
++ * e2fsck's requirements are more strict; if it doesn't know
++ * about a feature in either the compatible or incompatible
++ * feature set, it must abort and not try to meddle with
++ * things it doesn't understand...
++ */
++ __u32 s_first_ino; /* First non-reserved inode */
++ __u16 s_inode_size; /* size of inode structure */
++ __u16 s_block_group_nr; /* block group # of this superblock */
++ __u32 s_feature_compat; /* compatible feature set */
++ __u32 s_feature_incompat; /* incompatible feature set */
++ __u32 s_feature_ro_compat; /* readonly-compatible feature set */
++ __u8 s_uuid[16]; /* 128-bit uuid for volume */
++ char s_volume_name[16]; /* volume name */
++ char s_last_mounted[64]; /* directory where last mounted */
++ __u32 s_algorithm_usage_bitmap; /* For compression */
++ /*
++ * Performance hints. Directory preallocation should only
++ * happen if the EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is on.
++ */
++ __u8 s_prealloc_blocks; /* Nr of blocks to try to preallocate*/
++ __u8 s_prealloc_dir_blocks; /* Nr to preallocate for dirs */
++ __u16 s_reserved_gdt_blocks;/* Per group table for online growth */
++ /*
++ * Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set.
++ */
++ __u8 s_journal_uuid[16]; /* uuid of journal superblock */
++ __u32 s_journal_inum; /* inode number of journal file */
++ __u32 s_journal_dev; /* device number of journal file */
++ __u32 s_last_orphan; /* start of list of inodes to delete */
++ __u32 s_hash_seed[4]; /* HTREE hash seed */
++ __u8 s_def_hash_version; /* Default hash version to use */
++ __u8 s_jnl_backup_type; /* Default type of journal backup */
++ __u16 s_reserved_word_pad;
++ __u32 s_default_mount_opts;
++ __u32 s_first_meta_bg; /* First metablock group */
++ __u32 s_mkfs_time; /* When the filesystem was created */
++ __u32 s_jnl_blocks[17]; /* Backup of the journal inode */
++ __u32 s_reserved[172]; /* Padding to the end of the block */
+ };
+
+ struct ext2_group_desc
+@@ -218,6 +263,14 @@
+ #define EXT2_ADDR_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof (__u32))
+ #define EXT2_ADDR_PER_BLOCK_BITS(s) (log2(EXT2_ADDR_PER_BLOCK(s)))
+
++#define EXT2_GOOD_OLD_REV 0 /* The good old (original) format */
++#define EXT2_DYNAMIC_REV 1 /* V2 format w/ dynamic inode sizes */
++#define EXT2_GOOD_OLD_INODE_SIZE 128
++#define EXT2_INODE_SIZE(s) (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
++ EXT2_GOOD_OLD_INODE_SIZE : \
++ (s)->s_inode_size)
++#define EXT2_INODES_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s)/EXT2_INODE_SIZE(s))
++
+ /* linux/ext2_fs.h */
+ #define EXT2_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10)
+ /* kind of from ext2/super.c */
+@@ -553,7 +606,7 @@
+ gdp = GROUP_DESC;
+ ino_blk = gdp[desc].bg_inode_table +
+ (((current_ino - 1) % (SUPERBLOCK->s_inodes_per_group))
+- >> log2 (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode)));
++ >> log2 (EXT2_INODES_PER_BLOCK (SUPERBLOCK)));
+ #ifdef E2DEBUG
+ printf ("inode table fsblock=%d\n", ino_blk);
+ #endif /* E2DEBUG */
+@@ -565,13 +618,12 @@
+ /* reset indirect blocks! */
+ mapblock2 = mapblock1 = -1;
+
+- raw_inode = INODE +
+- ((current_ino - 1)
+- & (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode) - 1));
++ raw_inode = (struct ext2_inode *)((char *)INODE +
++ ((current_ino - 1) & (EXT2_INODES_PER_BLOCK (SUPERBLOCK) - 1)) *
++ EXT2_INODE_SIZE (SUPERBLOCK));
+ #ifdef E2DEBUG
+ printf ("ipb=%d, sizeof(inode)=%d\n",
+- (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode)),
+- sizeof (struct ext2_inode));
++ EXT2_INODES_PER_BLOCK (SUPERBLOCK), EXT2_INODE_SIZE (SUPERBLOCK));
+ printf ("inode=%x, raw_inode=%x\n", INODE, raw_inode);
+ printf ("offset into inode table block=%d\n", (int) raw_inode - (int) INODE);
+ for (i = (unsigned char *) INODE; i <= (unsigned char *) raw_inode;
+
diff --git a/libre/grub-legacy/grub.install b/libre/grub-legacy/grub.install
new file mode 100644
index 000000000..c1f077d59
--- /dev/null
+++ b/libre/grub-legacy/grub.install
@@ -0,0 +1,20 @@
+infodir=/usr/share/info
+filelist=(grub.info multiboot.info)
+
+post_install() {
+ [ -x usr/bin/install-info ] || return 0
+ for file in ${filelist[@]}; do
+ install-info $infodir/$file.gz $infodir/dir 2> /dev/null
+ done
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+pre_remove() {
+ [ -x usr/bin/install-info ] || return 0
+ for file in ${filelist[@]}; do
+ install-info --delete $infodir/$file.gz $infodir/dir 2> /dev/null
+ done
+}
diff --git a/libre/grub-legacy/i2o.patch b/libre/grub-legacy/i2o.patch
new file mode 100644
index 000000000..2af846c90
--- /dev/null
+++ b/libre/grub-legacy/i2o.patch
@@ -0,0 +1,45 @@
+Only in grub-0.94/docs: grub.info
+Only in grub-0.94/docs: multiboot.info
+diff -ur grub-0.94/lib/device.c grub-0.94.new/lib/device.c
+--- grub-0.94/lib/device.c 2004-05-07 04:50:36.375238696 +0200
++++ grub-0.94.new/lib/device.c 2004-05-07 04:48:57.611253104 +0200
+@@ -419,6 +419,12 @@
+ {
+ sprintf (name, "/dev/rd/c%dd%d", controller, drive);
+ }
++
++static void
++get_i2o_disk_name (char *name, int unit)
++{
++ sprintf (name, "/dev/i2o/hd%c", unit + 'a');
++}
+ #endif
+
+ /* Check if DEVICE can be read. If an error occurs, return zero,
+@@ -789,6 +795,26 @@
+ }
+ }
+ }
++
++ /* I2O disks. */
++ for (i = 0; i < 8; i++)
++ {
++ char name[16];
++
++ get_i2o_disk_name (name, i);
++ if (check_device (name))
++ {
++ (*map)[num_hd + 0x80] = strdup (name);
++ assert ((*map)[num_hd + 0x80]);
++
++ /* If the device map file is opened, write the map. */
++ if (fp)
++ fprintf (fp, "(hd%d)\t%s\n", num_hd, name);
++
++ num_hd++;
++ }
++ }
++
+ #endif /* __linux__ */
+
+ /* OK, close the device map file if opened. */
diff --git a/libre/grub-legacy/install-grub b/libre/grub-legacy/install-grub
new file mode 100644
index 000000000..affc9c38a
--- /dev/null
+++ b/libre/grub-legacy/install-grub
@@ -0,0 +1,204 @@
+#!/bin/bash
+
+#
+# This is a little helper script that tries to convert linux-style device
+# names to grub-style. It's not very smart, so it
+# probably won't work for more complicated setups.
+#
+# If it doesn't work for you, try installing grub manually:
+#
+# # mkdir -p /boot/grub
+# # cp /usr/lib/grub/i386-pc/* /boot/grub/
+#
+# Then start up the 'grub' shell and run something like the following:
+#
+# grub> root (hd0,0)
+# grub> setup (hd0)
+#
+# The "root" line should point to the partition your kernel is located on,
+# /boot if you have a separate boot partition, otherwise your root (/).
+#
+# The "setup" line tells grub which disc/partition to install the
+# bootloader to. In the example above, it will install to the MBR of the
+# primary master hard drive.
+#
+
+usage() {
+ echo "usage: install-grub <install_device> [boot_device]"
+ echo
+ echo "where <install_device> is the device where Grub will be installed"
+ echo "and [boot_device] is the partition that contains the /boot"
+ echo "directory (auto-detected if omitted)"
+ echo
+ echo "examples: install-grub /dev/hda"
+ echo " install-grub /dev/hda /dev/hda1"
+ echo
+ exit 0
+}
+
+## new install-grub, code was taken from setup script
+ROOTDEV=${1}
+PART_ROOT=${2}
+
+if [ "${ROOTDEV}" = "" ]; then
+ usage
+fi
+if [ "${PART_ROOT}" = "" ]; then
+ PART_ROOT=$(mount | grep "on /boot type" | cut -d' ' -f 1)
+fi
+if [ "$PART_ROOT" = "" ]; then
+ PART_ROOT=$(mount | grep "on / type" | cut -d' ' -f 1)
+fi
+if [ "${PART_ROOT}" = "" ]; then
+ echo "error: could not determine BOOT_DEVICE, please specify manually" >&2
+ exit 1
+fi
+
+
+get_grub_map() {
+ [ -e /tmp/dev.map ] && rm /tmp/dev.map
+ /sbin/grub --no-floppy --device-map /tmp/dev.map >/tmp/grub.log 2>&1 <<EOF
+quit
+EOF
+}
+
+mapdev() {
+ partition_flag=0
+ device_found=0
+ devs=$(cat /tmp/dev.map | grep -v fd | sed 's/ *\t/ /' | sed ':a;$!N;$!ba;s/\n/ /g')
+ linuxdevice=$(echo $1 | cut -b1-8)
+ if [ "$(echo ${1} | egrep '[0-9]$')" ]; then
+ # /dev/hdXY
+ pnum=$(echo ${1} | cut -b9-)
+ pnum=$((${pnum}-1))
+ partition_flag=1
+ fi
+ for dev in ${devs}; do
+ if [ "(" = $(echo ${dev} | cut -b1) ]; then
+ grubdevice="${dev}"
+ else
+ if [ "${dev}" = "${linuxdevice}" ]; then
+ device_found=1
+ break
+ fi
+ fi
+ done
+ if [ "${device_found}" = "1" ]; then
+ if [ "${partition_flag}" = "0" ]; then
+ echo "${grubdevice}"
+ else
+ grubdevice_stringlen=${#grubdevice}
+ let grubdevice_stringlen--
+ grubdevice=$(echo $grubdevice | cut -b1-$grubdevice_stringlen)
+ echo "${grubdevice},${pnum})"
+ fi
+ else
+ echo " DEVICE NOT FOUND"
+ fi
+}
+
+dogrub() {
+ get_grub_map
+ if [ ! -f /boot/grub/menu.lst ]; then
+ echo "Error: Couldn't find /boot/grub/menu.lst. Is GRUB installed?"
+ exit 1
+ fi
+ # try to auto-configure GRUB...
+ if [ "${PART_ROOT}" != "" -a "$S_GRUB" != "1" ]; then
+ grubdev=$(mapdev ${PART_ROOT})
+ # look for a separately-mounted /boot partition
+ bootdev=$(mount | grep /boot | cut -d' ' -f 1)
+ if [ "${grubdev}" != "" -o "${bootdev}" != "" ]; then
+ cp /boot/grub/menu.lst /tmp/.menu.lst
+ # remove the default entries by truncating the file at our little tag (#-*)
+ head -n $(cat /tmp/.menu.lst | grep -n '#-\*' | cut -d: -f 1) /tmp/.menu.lst >/boot/grub/menu.lst
+ rm -f /tmp/.menu.lst
+
+ for kernel in /boot/vmlinuz-linux* /boot/vmlinuz26-*; do
+ if [ ${kernel} == "/boot/vmlinuz-linux*" ] || [ ${kernel} == "/boot/vmlinuz26-*" ] ; then
+ echo > /dev/null
+ else
+ VMLINUZ=$( echo ${kernel} | cut -c 7- )
+
+ if [ "$( echo ${VMLINUZ} | cut -c -13 )" = "vmlinuz-linux" ]; then # new naming scheme for linux > 3.0
+ extension=$( echo ${VMLINUZ} | cut -c 14- )
+ INITRAMFS_BASENAME=initramfs-linux${extension}
+ else # old naming scheme for lts kernel
+ extension=$( echo ${VMLINUZ} | cut -c 10- )
+ INITRAMFS_BASENAME=kernel26${extension}
+ fi
+
+ echo "" >>/boot/grub/menu.lst
+ echo "# (0) Parabola GNU/Linux-libre" >>/boot/grub/menu.lst
+ echo "title Parabola GNU/Linux-libre - ${VMLINUZ}" >>/boot/grub/menu.lst
+ subdir=
+ if [ "${bootdev}" != "" ]; then
+ grubdev=$(mapdev ${bootdev})
+ else
+ subdir="/boot"
+ fi
+ echo "root ${grubdev}" >>/boot/grub/menu.lst
+ echo "kernel ${subdir}/${VMLINUZ} root=${PART_ROOT} ro" >>/boot/grub/menu.lst
+ echo "initrd ${subdir}/${INITRAMFS_BASENAME}.img" >>/boot/grub/menu.lst
+ echo "" >>/boot/grub/menu.lst
+
+ # adding fallback/full image
+ echo "# (1) Parabola GNU/Linux-libre" >>/boot/grub/menu.lst
+ echo "title Parabola GNU/Linux-libre Fallback - ${VMLINUZ}" >>/boot/grub/menu.lst
+ echo "root ${grubdev}" >>/boot/grub/menu.lst
+ echo "kernel ${subdir}/${VMLINUZ} root=${PART_ROOT} ro" >>/boot/grub/menu.lst
+ echo "initrd ${subdir}/${INITRAMFS_BASENAME}-fallback.img" >>/boot/grub/menu.lst
+ echo "" >>/boot/grub/menu.lst
+ fi
+ done
+ fi
+ fi
+
+ echo "Installing the GRUB bootloader..."
+ cp -a /usr/lib/grub/i386-pc/* /boot/grub/
+ sync
+
+ # freeze xfs filesystems to enable grub installation on xfs filesystems
+ if [ -x /usr/sbin/xfs_freeze ]; then
+ [ "$(stat -fLc %T /boot)" == "xfs" ] && /usr/sbin/xfs_freeze -f /boot > /dev/null 2>&1
+ [ "$(stat -fLc %T /)" == "xfs" ] && /usr/sbin/xfs_freeze -f / > /dev/null 2>&1
+ fi
+
+ # look for a separately-mounted /boot partition
+ bootpart=$(mount | grep /boot | cut -d' ' -f 1)
+ if [ "${bootpart}" = "" ]; then
+ bootpart=${PART_ROOT}
+ fi
+ bootpart=$(mapdev ${bootpart})
+ bootdev=$(mapdev ${ROOTDEV})
+ if [ "${bootpart}" = "" ]; then
+ echo "Error: Missing/Invalid root device: ${bootpart}"
+ exit 1
+ fi
+
+ echo ${bootpart}
+ echo ${bootdev}
+ /sbin/grub --no-floppy --batch >/tmp/grub.log 2>&1 <<EOF
+root ${bootpart}
+setup ${bootdev}
+quit
+EOF
+ cat /tmp/grub.log
+
+ # unfreeze xfs filesystems
+ if [ -x /usr/sbin/xfs_freeze ]; then
+ [ "$(stat -fLc %T /boot)" == "xfs" ] && /usr/sbin/xfs_freeze -u /boot > /dev/null 2>&1
+ [ "$(stat -fLc %T /)" == "xfs" ] && /usr/sbin/xfs_freeze -u / > /dev/null 2>&1
+ fi
+ if grep "Error [0-9]*: " /tmp/grub.log >/dev/null; then
+ echo "Error installing GRUB. (see /tmp/grub.log for output)"
+ exit 1
+ fi
+ echo "GRUB was successfully installed."
+
+ rm -f /tmp/grub.log
+
+ exit 0
+}
+
+dogrub
diff --git a/libre/grub-legacy/intelmac.patch b/libre/grub-legacy/intelmac.patch
new file mode 100644
index 000000000..a3fabc733
--- /dev/null
+++ b/libre/grub-legacy/intelmac.patch
@@ -0,0 +1,67 @@
+--- grub-0.97.orig/stage2/asm.S 2004-06-19 18:55:22.000000000 +0200
++++ grub-0.97/stage2/asm.S 2006-04-21 11:10:52.000000000 +0200
+@@ -1651,7 +1651,29 @@
+ jnz 3f
+ ret
+
+-3: /* use keyboard controller */
++3: /*
++ * try to switch gateA20 using PORT92, the "Fast A20 and Init"
++ * register
++ */
++ mov $0x92, %dx
++ inb %dx, %al
++ /* skip the port92 code if it's unimplemented (read returns 0xff) */
++ cmpb $0xff, %al
++ jz 6f
++
++ /* set or clear bit1, the ALT_A20_GATE bit */
++ movb 4(%esp), %ah
++ testb %ah, %ah
++ jz 4f
++ orb $2, %al
++ jmp 5f
++4: and $0xfd, %al
++
++ /* clear the INIT_NOW bit don't accidently reset the machine */
++5: and $0xfe, %al
++ outb %al, %dx
++
++6: /* use keyboard controller */
+ pushl %eax
+
+ call gloop1
+@@ -1661,9 +1683,12 @@
+
+ gloopint1:
+ inb $K_STATUS
++ cmpb $0xff, %al
++ jz gloopint1_done
+ andb $K_IBUF_FUL, %al
+ jnz gloopint1
+
++gloopint1_done:
+ movb $KB_OUTPUT_MASK, %al
+ cmpb $0, 0x8(%esp)
+ jz gdoit
+@@ -1684,6 +1709,8 @@
+
+ gloop1:
+ inb $K_STATUS
++ cmpb $0xff, %al
++ jz gloop2ret
+ andb $K_IBUF_FUL, %al
+ jnz gloop1
+
+@@ -1991,6 +2018,11 @@
+ ENTRY(console_getkey)
+ push %ebp
+
++wait_for_key:
++ call EXT_C(console_checkkey)
++ incl %eax
++ jz wait_for_key
++
+ call EXT_C(prot_to_real)
+ .code16
+
diff --git a/libre/grub-legacy/menu.lst b/libre/grub-legacy/menu.lst
new file mode 100644
index 000000000..f405baa91
--- /dev/null
+++ b/libre/grub-legacy/menu.lst
@@ -0,0 +1,43 @@
+# Config file for GRUB - The GNU GRand Unified Bootloader
+# /boot/grub/menu.lst
+
+# DEVICE NAME CONVERSIONS
+#
+# Linux Grub
+# -------------------------
+# /dev/fd0 (fd0)
+# /dev/sda (hd0)
+# /dev/sdb2 (hd1,1)
+# /dev/sda3 (hd0,2)
+#
+
+# FRAMEBUFFER RESOLUTION SETTINGS
+# +-------------------------------------------------+
+# | 640x480 800x600 1024x768 1280x1024
+# ----+--------------------------------------------
+# 256 | 0x301=769 0x303=771 0x305=773 0x307=775
+# 32K | 0x310=784 0x313=787 0x316=790 0x319=793
+# 64K | 0x311=785 0x314=788 0x317=791 0x31A=794
+# 16M | 0x312=786 0x315=789 0x318=792 0x31B=795
+# +-------------------------------------------------+
+# for more details and different resolutions see
+# https://wiki.archlinux.org/index.php/GRUB#Framebuffer_resolution
+
+# general configuration:
+timeout 5
+default 0
+color magenta/black white/magenta
+
+# boot sections follow
+# each is implicitly numbered from 0 in the order of appearance below
+#
+# TIP: If you want a 1024x768 framebuffer, add "vga=773" to your kernel line.
+#
+#-*
+
+# (0) Parabola GNU/Linux-libre
+title Parabola GNU/Linux-libre [/boot/vmlinuz-linux-libre]
+root (hd0,0)
+kernel /vmlinuz-linux-libre root=/dev/sda3 ro
+initrd /initramfs-linux-libre.img
+
diff --git a/libre/grub-legacy/more-raid.patch b/libre/grub-legacy/more-raid.patch
new file mode 100644
index 000000000..39db23474
--- /dev/null
+++ b/libre/grub-legacy/more-raid.patch
@@ -0,0 +1,100 @@
+--- grub-0.95/lib/device.c.moreraid 2004-11-30 17:09:36.736099360 -0500
++++ grub-0.95/lib/device.c 2004-11-30 17:12:17.319686944 -0500
+@@ -544,6 +544,17 @@
+ }
+
+ static void
++get_cciss_disk_name (char * name, int controller, int drive)
++{
++ sprintf (name, "/dev/cciss/c%dd%d", controller, drive);
++}
++
++static void
++get_cpqarray_disk_name (char * name, int controller, int drive)
++{
++ sprintf (name, "/dev/ida/c%dd%d", controller, drive);
++}
++static void
+ get_ataraid_disk_name (char *name, int unit)
+ {
+ sprintf (name, "/dev/ataraid/d%c", unit + '0');
+@@ -920,7 +931,7 @@
+
+ for (controller = 0; controller < 8; controller++)
+ {
+- for (drive = 0; drive < 15; drive++)
++ for (drive = 0; drive < 32; drive++)
+ {
+ char name[24];
+
+@@ -940,6 +951,70 @@
+ }
+ }
+ #endif /* __linux__ */
++
++#ifdef __linux__
++ /* This is for cciss - we have
++ /dev/cciss/c<controller>d<logical drive>p<partition>.
++
++ cciss driver currently supports up to 8 controllers, 16 logical
++ drives, and 7 partitions. */
++ {
++ int controller, drive;
++
++ for (controller = 0; controller < 8; controller++)
++ {
++ for (drive = 0; drive < 16; drive++)
++ {
++ char name[24];
++
++ get_cciss_disk_name (name, controller, drive);
++ if (check_device (name))
++ {
++ (*map)[num_hd + 0x80] = strdup (name);
++ assert ((*map)[num_hd + 0x80]);
++
++ /* If the device map file is opened, write the map. */
++ if (fp)
++ fprintf (fp, "(hd%d)\t%s\n", num_hd, name);
++
++ num_hd++;
++ }
++ }
++ }
++ }
++#endif /* __linux__ */
++
++#ifdef __linux__
++ /* This is for cpqarray - we have
++ /dev/ida/c<controller>d<logical drive>p<partition>.
++
++ cpqarray driver currently supports up to 8 controllers, 16 logical
++ drives, and 15 partitions. */
++ {
++ int controller, drive;
++
++ for (controller = 0; controller < 8; controller++)
++ {
++ for (drive = 0; drive < 15; drive++)
++ {
++ char name[24];
++
++ get_cpqarray_disk_name (name, controller, drive);
++ if (check_device (name))
++ {
++ (*map)[num_hd + 0x80] = strdup (name);
++ assert ((*map)[num_hd + 0x80]);
++
++ /* If the device map file is opened, write the map. */
++ if (fp)
++ fprintf (fp, "(hd%d)\t%s\n", num_hd, name);
++
++ num_hd++;
++ }
++ }
++ }
++ }
++#endif /* __linux__ */
+
+ /* OK, close the device map file if opened. */
+ if (fp)
diff --git a/libre/grub-legacy/rePKGBUILD b/libre/grub-legacy/rePKGBUILD
new file mode 100644
index 000000000..a73289fb5
--- /dev/null
+++ b/libre/grub-legacy/rePKGBUILD
@@ -0,0 +1,37 @@
+# Maintainer: Nicolas Reynolds <fauno@kiwwwi.com.ar>
+# Contributor: André Silva <emulatorman@lavabit.com>
+source PKGBUILD
+CARCH=i686
+unset build package md5sums source
+_repo=core
+source=(PKGBUILD
+ #http://mirrors.kernel.org/archlinux/${_repo}/os/${CARCH}/${pkgname%}-$pkgver-$pkgrel-$CARCH$PKGEXT
+ http://mirrors.kernel.org/archlinux/${_repo}/os/${CARCH}/${pkgname%}-$pkgver-21-$CARCH$PKGEXT
+ # files for pkg modifications
+ menu.lst
+ install-grub
+ )
+options=(!strip)
+
+build() {
+ cd "${srcdir}/"
+ #rm PKGBUILD .{INSTALL,PKGINFO} ${pkgname%}-$pkgver-$pkgrel-$CARCH$PKGEXT
+ rm PKGBUILD .{INSTALL,PKGINFO} ${pkgname%}-$pkgver-21-$CARCH$PKGEXT
+ # put actions for package modifications below this line
+
+ rm -v boot/grub/menu.lst sbin/install-grub
+}
+
+package() {
+ cd ${srcdir}
+ cp -a ./* ${pkgdir}
+
+ install -D -m644 menu.lst $pkgdir/boot/grub/menu.lst
+ install -D -m755 install-grub $pkgdir/sbin/install-grub
+
+ rm -v menu.lst install-grub ${pkgdir}/menu.lst ${pkgdir}/install-grub
+
+}
+
+
+# vim:set ts=2 sw=2 et:
diff --git a/libre/grub-legacy/special-devices.patch b/libre/grub-legacy/special-devices.patch
new file mode 100644
index 000000000..894f3e887
--- /dev/null
+++ b/libre/grub-legacy/special-devices.patch
@@ -0,0 +1,18 @@
+--- grub-0.93/lib/device.c.raid 2002-05-20 05:53:46.000000000 -0400
++++ grub-0.93/lib/device.c 2002-12-28 23:24:10.000000000 -0500
+@@ -689,7 +689,14 @@
+ if (strcmp (dev + strlen(dev) - 5, "/disc") == 0)
+ strcpy (dev + strlen(dev) - 5, "/part");
+ }
+- sprintf (dev + strlen(dev), "%d", ((partition >> 16) & 0xFF) + 1);
++
++ sprintf (dev + strlen(dev), "%s%d",
++ /* Compaq smart and others */
++ (strncmp(dev, "/dev/ida/", 9) == 0 ||
++ strncmp(dev, "/dev/ataraid/", 13) == 0 ||
++ strncmp(dev, "/dev/cciss/", 11) == 0 ||
++ strncmp(dev, "/dev/rd/", 8) == 0) ? "p" : "",
++ ((partition >> 16) & 0xFF) + 1);
+
+ /* Open the partition. */
+ fd = open (dev, O_RDWR);
diff --git a/libre/grub/05_archtheme b/libre/grub/05_archtheme
new file mode 100644
index 000000000..4d1b6fb20
--- /dev/null
+++ b/libre/grub/05_archtheme
@@ -0,0 +1,6 @@
+#!/bin/bash -e
+
+cat << EOF
+set menu_color_normal=light-blue/black
+set menu_color_highlight=light-cyan/blue
+EOF
diff --git a/libre/grub/20_memtest86+ b/libre/grub/20_memtest86+
new file mode 100644
index 000000000..1d3096f6b
--- /dev/null
+++ b/libre/grub/20_memtest86+
@@ -0,0 +1,29 @@
+#! /bin/sh -e
+########################################################
+# This script generates a memtest86+ entry on grub.cfg #
+# if memtest is installed on the system. #
+########################################################
+
+prefix="/usr"
+exec_prefix="${prefix}"
+
+datarootdir="/usr/share"
+datadir="${datarootdir}"
+
+. "${datadir}/grub/grub-mkconfig_lib"
+
+MEMTEST86_IMAGE="/boot/memtest86+/memtest.bin"
+CLASS="--class memtest86 --class gnu --class tool"
+
+if [ -e $MEMTEST86_IMAGE ] && is_path_readable_by_grub $MEMTEST86_IMAGE; then
+ # image exists, create menu entry
+ echo "Found memtest86+ image: $MEMTEST86_IMAGE" >&2
+ cat << EOF
+menuentry "Memory test (memtest86+)" $CLASS {
+EOF
+ prepare_grub_to_access_device `${grub_probe} --target=device $MEMTEST86_IMAGE` | sed -e "s/^/ /"
+ cat << EOF
+ linux16 (\$root)`make_system_path_relative_to_its_root $MEMTEST86_IMAGE`
+}
+EOF
+fi
diff --git a/libre/grub/PKGBUILD b/libre/grub/PKGBUILD
index ace2f8986..8a1c01434 100644
--- a/libre/grub/PKGBUILD
+++ b/libre/grub/PKGBUILD
@@ -1,107 +1,250 @@
-# $Id: PKGBUILD 141999 2011-11-03 21:16:38Z ronald $
# Maintainer: Ronald van Haren <ronald.archlinux.org>
+# Contributor: Keshav P R <(the.ridikulus.rat) (aatt) (gemmaeiil) (ddoott) (ccoomm)>
# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
-# Maintainer (Parabola): Jorge López <jorginho@adinet.com.uy>
-
-pkgname=grub
-pkgver=0.97
-pkgrel=21.4
-pkgdesc="A GNU multiboot boot loader (Parabola rebranded)"
-arch=('i686' 'x86_64' 'mips64el')
-license=('GPL')
-url="http://www.gnu.org/software/grub/"
-groups=('base')
-depends=('ncurses' 'diffutils' 'sed')
-optdepends=('xfsprogs: freezing of xfs /boot in install-grub script')
-source=(ftp://alpha.gnu.org/gnu/grub/grub-$pkgver.tar.gz
- menu.lst
- install-grub
- 040_all_grub-0.96-nxstack.patch
- 05-grub-0.97-initrdaddr.diff
- i2o.patch
- special-devices.patch
- more-raid.patch
- intelmac.patch
- grub-inode-size.patch
- ext4.patch
- grub-0.97-ldflags-objcopy-remove-build-id.patch)
-backup=('boot/grub/menu.lst')
-install=grub.install
-sha1sums=('2580626c4579bd99336d3af4482c346c95dac4fb'
- 'e13bf0f91510fd6bb9451e6eb1b2a6e4a03e8b5f'
- '3e23bfee50285c8c7b9ef9ec07964310278b1e09'
- '157b81dbad3576536b08642242accfa1aeb093a9'
- 'adbb4685c98797ffb4dc83561ec75698991dddbd'
- 'f2e0dff29a7c8a45e90aa07298a1b2a9a9d29afc'
- 'c5e2c94ed0e759590b9eb38c9d979f075d19d7c0'
- '45fe668a3779664fb292591f426976b6c784d6c8'
- '066d7ab1ae442f88e94c9e4f1867ac6682965d06'
- '0436aa6fa0b6f768289172f983a3f4b69384629e'
- 'a36f34e51efed540f1ddafd78e9c9f6d83e4c8d4'
- '61c4b58d2eaa3c1561d8e9d8fc41341ce8882869')
-
-#set destination architecture here
-#DESTARCH="i686"
-DESTARCH="x86_64"
+_grub_lua_ver=24
+_grub_ntldr_ver=21
+_grub_915_ver=9
+
+pkgname=('grub-common' 'grub-bios' 'grub-efi-i386')
+pkgbase=grub
+pkgver=2.00
+pkgrel=1
+url="https://www.gnu.org/software/grub/"
+arch=('i686' 'x86_64')
+license=('GPL3')
+makedepends=('xz' 'bdf-unifont' 'ttf-dejavu' 'python' 'autogen'
+ 'texinfo' 'help2man' 'gettext' 'device-mapper' 'fuse')
+
+source=("http://ftp.gnu.org/gnu/grub/grub-${pkgver}.tar.xz"
+ "ftp://ftp.archlinux.org/other/grub2/grub2_extras_lua_r${_grub_lua_ver}.tar.xz"
+ "ftp://ftp.archlinux.org/other/grub2/grub2_extras_ntldr-img_r${_grub_ntldr_ver}.tar.xz"
+ "ftp://ftp.archlinux.org/other/grub2/grub2_extras_915resolution_r${_grub_915_ver}.tar.xz"
+ 'parabola_grub_mkconfig_fixes.patch'
+ 'grub.default'
+ 'grub.cfg'
+ '20_memtest86+'
+ 'grub_bzr_export.sh')
+
+noextract=("grub2_extras_lua_r${_grub_lua_ver}.tar.xz"
+ "grub2_extras_ntldr-img_r${_grub_ntldr_ver}.tar.xz"
+ "grub2_extras_915resolution_r${_grub_915_ver}.tar.xz")
+
+sha1sums=('274d91e96b56a5b9dd0a07accff69dbb6dfb596b'
+ '89290031b974780c6df76893836d2477d4add895'
+ 'eb4b35b4c36b64f9405cbcbc538cb205171c1c0a'
+ 'd5ae2efec25616028a9d89e98b6e454f1c4c415f'
+ '31aa740fc225b3f3ed4917843038f9e8658a71be'
+ '79a0e597f19e15bd4c256384e0ef998bc6d06cc8'
+ 'fb69af1ff6c0b7fdf7ce7d42d0f048edc1a50a45'
+ 'ce35d7ae75cd1b5b677e894e528f96add40e77b9'
+ '0cfd4e51cdb14a92f06cfd3c607f2aa21f3e55fc')
+
+_build_grub-common_and_bios() {
+
+ ## copy the source for building the common/bios package
+ cp -r "${srcdir}/grub-${pkgver}" "${srcdir}/grub_bios-${pkgver}"
+ cd "${srcdir}/grub_bios-${pkgver}"
+
+ ## Apply Parabola specific fixes to enable grub-mkconfig detect Libre kernels and initramfs
+ patch -Np1 -i "${srcdir}/parabola_grub_mkconfig_fixes.patch"
+ echo
+
+ ## fix unifont.bdf location so that grub-mkfont can create *.pf2 files
+ sed 's|/usr/share/fonts/unifont|/usr/share/fonts/unifont /usr/share/fonts/misc|g' -i "${srcdir}/grub_bios-${pkgver}/configure.ac"
+
+ ## fix DejaVuSans.ttf location so that grub-mkfont can create *.pf2 files for starfield theme
+ sed 's|/usr/share/fonts/dejavu|/usr/share/fonts/dejavu /usr/share/fonts/TTF|g' -i "${srcdir}/grub_bios-${pkgver}/configure.ac"
+
+ ## add the grub-extra sources
+ export GRUB_CONTRIB="${srcdir}/grub_bios-${pkgver}/grub-extras/"
+ install -d "${srcdir}/grub_bios-${pkgver}/grub-extras"
+
+ bsdtar xf "${srcdir}/grub2_extras_lua_r${_grub_lua_ver}.tar.xz" \
+ -C "${srcdir}/grub_bios-${pkgver}/grub-extras"
+
+ bsdtar xf "${srcdir}/grub2_extras_ntldr-img_r${_grub_ntldr_ver}.tar.xz" \
+ -C "${srcdir}/grub_bios-${pkgver}/grub-extras"
+
+ bsdtar xf "${srcdir}/grub2_extras_915resolution_r${_grub_915_ver}.tar.xz" \
+ -C "${srcdir}/grub_bios-${pkgver}/grub-extras"
+
+ ## Requires python2
+ # sed 's|python |python2 |g' -i "${srcdir}/grub_bios-${pkgver}/autogen.sh"
+
+ ## start the actual build process
+ cd "${srcdir}/grub_bios-${pkgver}"
+ ./autogen.sh
+ echo
+
+ CFLAGS="" ./configure \
+ --with-platform="pc" \
+ --target="i386" \
+ --host="${CARCH}-unknown-linux-gnu" \
+ "${_EFIEMU}" \
+ --enable-mm-debug \
+ --enable-nls \
+ --enable-device-mapper \
+ --enable-cache-stats \
+ --enable-grub-mkfont \
+ --enable-grub-mount \
+ --prefix="/usr" \
+ --bindir="/usr/bin" \
+ --sbindir="/usr/sbin" \
+ --mandir="/usr/share/man" \
+ --infodir="/usr/share/info" \
+ --datarootdir="/usr/share" \
+ --sysconfdir="/etc" \
+ --program-prefix="" \
+ --with-bootdir="/boot" \
+ --with-grubdir="grub" \
+ --disable-werror
+ echo
+
+ CFLAGS="" make
+ echo
+
+}
+
+_build_grub-efi-i386() {
+
+ ## copy the source for building the efi package
+ cp -r "${srcdir}/grub-${pkgver}" "${srcdir}/grub_efi-${pkgver}"
+ cd "${srcdir}/grub_efi-${pkgver}"
+
+ export GRUB_CONTRIB="${srcdir}/grub_efi-${pkgver}/grub-extras/"
+ install -d "${srcdir}/grub_efi-${pkgver}/grub-extras"
+
+ bsdtar xf "${srcdir}/grub2_extras_lua_r${_grub_lua_ver}.tar.xz" \
+ -C "${srcdir}/grub_efi-${pkgver}/grub-extras"
+
+ cd "${srcdir}/grub_efi-${pkgver}"
+ ./autogen.sh
+ echo
+
+ CFLAGS="" ./configure \
+ --with-platform="efi" \
+ --target="i386" \
+ --host="${CARCH}-unknown-linux-gnu" \
+ --disable-efiemu \
+ --enable-mm-debug \
+ --enable-nls \
+ --enable-device-mapper \
+ --enable-cache-stats \
+ --enable-grub-mkfont \
+ --enable-grub-mount \
+ --prefix="/usr" \
+ --bindir="/usr/bin" \
+ --sbindir="/usr/sbin" \
+ --mandir="/usr/share/man" \
+ --infodir="/usr/share/info" \
+ --datarootdir="/usr/share" \
+ --sysconfdir="/etc" \
+ --program-prefix="" \
+ --with-bootdir="/boot" \
+ --with-grubdir="grub" \
+ --disable-werror
+ echo
+
+ CFLAGS="" make
+ echo
+
+}
build() {
- cd $srcdir/$pkgname-$pkgver
- fgrep -rlZ pkglib_DATA --include Makefile.am . | xargs -0 sed -i 's/pkglib_DATA/pkgdata_DATA/g'
-
- # optimizations break the build -- disable them
- # adding special devices to grub, patches are from fedora
- patch -Np1 -i ../special-devices.patch
- patch -Np1 -i ../i2o.patch
- patch -Np1 -i ../more-raid.patch
- patch -Np1 -i ../intelmac.patch
- # Add support for bigger inode size to e2fs_stage1_5
- patch -Np1 -i ../grub-inode-size.patch
- # Add ext4 support
- # http://www.mail-archive.com/bug-grub@gnu.org/msg11458.html
- patch -Np1 -i ../ext4.patch
- # binutils fix
- patch -Np1 -i ../grub-0.97-ldflags-objcopy-remove-build-id.patch
-
- sed -e'/^AC_PROG_CC/ a\AM_PROG_CC_C_O\ ' -i "${srcdir}/${pkgname}-${pkgver}/configure.ac"
- sed -e'/^AC_PROG_CC/ a\AM_PROG_AS\ ' -i "${srcdir}/${pkgname}-${pkgver}/configure.ac"
-
- ## recreate ./configure script with the required changes in LDFLAGS and objcopy
- aclocal
- autoconf
- autoreconf
- automake
-
- #arch64 fixes for static build
- if [ "$CARCH" = "x86_64" ]; then ## correcting problems for new wersion of autotools
-
- echo "this package has to be built on i686, won't compile on x86_64"
- sleep 5
- else
- if [ "$DESTARCH" = "x86_64" ]; then
- # patch from gentoo for fixing a segfault
- patch -Np1 -i ../040_all_grub-0.96-nxstack.patch
- # patch from frugalware to make it boot when more than 2GB ram installed
- patch -Np1 -i ../05-grub-0.97-initrdaddr.diff
- CFLAGS="-static -fno-strict-aliasing" ./configure --prefix=/usr --bindir=/bin --sbindir=/sbin \
- --mandir=/usr/share/man --infodir=/usr/share/info
- else
- CFLAGS="-fno-strict-aliasing" ./configure --prefix=/usr --bindir=/bin --sbindir=/sbin \
- --mandir=/usr/share/man --infodir=/usr/share/info
- fi
- fi
+
+ ## set architecture dependent variables
+ if [[ "${CARCH}" == 'x86_64' ]]; then
+ _EFIEMU="--enable-efiemu"
+ else
+ _EFIEMU="--disable-efiemu"
+ fi
+
+ _HOST="${CARCH}"
+
+ cd "${srcdir}/grub-${pkgver}"
+ # _get_locale_files
+
+ _build_grub-common_and_bios
+ echo
+
+ _build_grub-efi-i386
+ echo
+
+}
+
+package_grub-common() {
+
+ pkgdesc="GNU GRand Unified Bootloader - Utilities and Common Files (Parabola rebranded)"
+ depends=('sh' 'xz' 'freetype2' 'gettext' 'device-mapper' 'fuse')
+ conflicts=('grub-legacy' 'grub')
+ replaces=('grub2-common')
+ provides=('grub2-common')
+ backup=('boot/grub/grub.cfg' 'etc/default/grub' 'etc/grub.d/40_custom')
+ optdepends=('libisoburn: provides xorriso for generating grub rescue iso using grub-mkrescue'
+ 'os-prober: to detect other OSes when generating grub.cfg in BIOS systems'
+ 'mtools: for grub-mkrescue FAT FS support')
+ install="grub.install"
+ options=('strip' 'purge' 'docs' 'zipman' '!emptydirs')
+
+ cd "${srcdir}/grub_bios-${pkgver}"
+ make DESTDIR="${pkgdir}/" bashcompletiondir="/usr/share/bash-completion/completions" install
+ echo
+
+ ## install extra /etc/grub.d/ files
+ install -D -m0755 "${srcdir}/20_memtest86+" "${pkgdir}/etc/grub.d/20_memtest86+"
+
+ ## install /etc/default/grub (used by grub-mkconfig)
+ install -D -m0644 "${srcdir}/grub.default" "${pkgdir}/etc/default/grub"
+
+ ## install grub.cfg (needed so it doesn't get removed on upgrading because it was previously here)
+ install -D -m0644 "${srcdir}/grub.cfg" "${pkgdir}/boot/grub/grub.cfg"
+
+ # remove platform specific files
+ rm -rf "${pkgdir}/usr/lib/grub/i386-pc/"
+
}
-package() {
- cd $srcdir/$pkgname-$pkgver
+package_grub-bios() {
+
+ pkgdesc="GNU GRand Unified Bootloader - i386 PC BIOS Modules"
+ depends=("grub-common=${pkgver}")
+ options=('!strip' '!emptydirs')
+ replaces=('grub2-bios')
+ provides=('grub2-bios')
+
+ cd "${srcdir}/grub_bios-${pkgver}"
+ make DESTDIR="${pkgdir}/" install
+ echo
+
+ ## remove non platform-specific files
+ rm -rf "${pkgdir}"/{boot,etc,usr/{share,bin,sbin}}
+
+ ## remove gdb debugging related files
+ rm -f "${pkgdir}/usr/lib/grub/i386-pc"/*.module || true
+ rm -f "${pkgdir}/usr/lib/grub/i386-pc"/*.image || true
+ rm -f "${pkgdir}/usr/lib/grub/i386-pc"/{kernel.exec,gdb_grub,gmodule.pl} || true
+
+}
+
+package_grub-efi-i386() {
+
+ pkgdesc="GNU GRand Unified Bootloader - i386 UEFI Modules"
+ depends=("grub-common=${pkgver}" 'dosfstools' 'efibootmgr')
+ options=('!strip' '!emptydirs')
+ replaces=('grub2-efi-i386')
+ provides=('grub2-efi-i386')
+
+ cd "${srcdir}/grub_efi-${pkgver}"
+ make DESTDIR="${pkgdir}/" install
+ echo
+
+ ## remove non platform-specific files
+ rm -rf "${pkgdir}"/{boot,etc,usr/{share,bin,sbin}}
- CFLAGS= make
- make DESTDIR=$pkgdir install
- install -D -m644 ../menu.lst $pkgdir/boot/grub/menu.lst
- install -D -m755 ../install-grub $pkgdir/sbin/install-grub
+ ## remove gdb debugging related files
+ rm -f "${pkgdir}/usr/lib/grub/i386-efi"/*.module || true
+ rm -f "${pkgdir}/usr/lib/grub/i386-efi"/*.image || true
+ rm -f "${pkgdir}/usr/lib/grub/i386-efi"/{kernel.exec,gdb_grub,gmodule.pl} || true
- if [ "$DESTARCH" = "x86_64" ]; then
- # fool makepkg into building a x86_64 package
- export CARCH="x86_64"
- fi
}
diff --git a/libre/grub/fix_stack_pointer_handling_16_relocator.patch b/libre/grub/fix_stack_pointer_handling_16_relocator.patch
new file mode 100644
index 000000000..edc0ef502
--- /dev/null
+++ b/libre/grub/fix_stack_pointer_handling_16_relocator.patch
@@ -0,0 +1,13 @@
+diff --git a/grub-core/lib/i386/relocator16.S b/grub-core/lib/i386/relocator16.S
+index c3768f4..982415d 100644
+--- a/grub-core/lib/i386/relocator16.S
++++ b/grub-core/lib/i386/relocator16.S
+@@ -130,7 +130,7 @@ VARIABLE(grub_relocator16_ss)
+ .byte 0xb8
+ VARIABLE(grub_relocator16_sp)
+ .word 0
+- movw %ax, %ss
++ movzwl %ax, %esp
+
+ /* movw imm32, %edx. */
+ .byte 0x66, 0xba
diff --git a/libre/grub/grub-install.fix b/libre/grub/grub-install.fix
new file mode 100644
index 000000000..29e74bd44
--- /dev/null
+++ b/libre/grub/grub-install.fix
@@ -0,0 +1,11 @@
+=== modified file 'grub-core/kern/emu/hostdisk.c'
+--- grub-core/kern/emu/hostdisk.c 2012-04-18 21:48:52 +0000
++++ grub-core/kern/emu/hostdisk.c 2012-04-19 18:35:06 +0000
+@@ -1081,7 +1081,7 @@
+ {
+ int fd;
+ grub_disk_addr_t max = ~0ULL;
+- fd = open_device (disk, sector, O_RDONLY, &max);
++ fd = open_device (disk, sector, O_WRONLY, &max);
+ if (fd < 0)
+ return grub_errno;
diff --git a/libre/grub/grub-mkconfig-Use_outside_GRUB_PREFIX_if_defined.patch b/libre/grub/grub-mkconfig-Use_outside_GRUB_PREFIX_if_defined.patch
new file mode 100644
index 000000000..e1de26859
--- /dev/null
+++ b/libre/grub/grub-mkconfig-Use_outside_GRUB_PREFIX_if_defined.patch
@@ -0,0 +1,15 @@
+diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in
+index 859c2e8..c4391dc 100644
+--- a/util/grub-mkconfig.in
++++ b/util/grub-mkconfig.in
+@@ -40,7 +40,9 @@ self=`basename $0`
+ grub_probe="${sbindir}/`echo grub-probe | sed "${transform}"`"
+ grub_script_check="${bindir}/`echo grub-script-check | sed "${transform}"`"
+
+-GRUB_PREFIX=`echo '/@bootdirname@/@grubdirname@' | sed "s,//*,/,g"`
++if test -z "${GRUB_PREFIX}"; then
++ GRUB_PREFIX=`echo '/@bootdirname@/@grubdirname@' | sed "s,//*,/,g"`
++fi
+
+ . "${datadir}/@PACKAGE@/grub-mkconfig_lib"
+
diff --git a/libre/grub/grub.cfg b/libre/grub/grub.cfg
new file mode 100644
index 000000000..7f583e102
--- /dev/null
+++ b/libre/grub/grub.cfg
@@ -0,0 +1,139 @@
+#
+# DO NOT EDIT THIS FILE
+#
+# It is automatically generated by grub-mkconfig using templates
+# from /etc/grub.d and settings from /etc/default/grub
+#
+
+### BEGIN /etc/grub.d/00_header ###
+insmod part_gpt
+insmod part_msdos
+if [ -s $prefix/grubenv ]; then
+ load_env
+fi
+set default="0"
+
+if [ x"${feature_menuentry_id}" = xy ]; then
+ menuentry_id_option="--id"
+else
+ menuentry_id_option=""
+fi
+
+export menuentry_id_option
+
+if [ "${prev_saved_entry}" ]; then
+ set saved_entry="${prev_saved_entry}"
+ save_env saved_entry
+ set prev_saved_entry=
+ save_env prev_saved_entry
+ set boot_once=true
+fi
+
+function savedefault {
+ if [ -z "${boot_once}" ]; then
+ saved_entry="${chosen}"
+ save_env saved_entry
+ fi
+}
+
+function load_video {
+ if [ x$feature_all_video_module = xy ]; then
+ insmod all_video
+ else
+ insmod efi_gop
+ insmod efi_uga
+ insmod ieee1275_fb
+ insmod vbe
+ insmod vga
+ insmod video_bochs
+ insmod video_cirrus
+ fi
+}
+
+if [ x$feature_default_font_path = xy ] ; then
+ font=unicode
+else
+insmod part_msdos
+insmod ext2
+set root='hd0,msdos5'
+if [ x$feature_platform_search_hint = xy ]; then
+ search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos5 --hint-efi=hd0,msdos5 --hint-baremetal=ahci0,msdos5 ad4103fa-d940-47ca-8506-301d8071d467
+else
+ search --no-floppy --fs-uuid --set=root ad4103fa-d940-47ca-8506-301d8071d467
+fi
+ font="/usr/share/grub/unicode.pf2"
+fi
+
+if loadfont $font ; then
+ set gfxmode=auto
+ load_video
+ insmod gfxterm
+ set locale_dir=$prefix/locale
+ set lang=en_US
+ insmod gettext
+fi
+terminal_input console
+terminal_output gfxterm
+set timeout=5
+### END /etc/grub.d/00_header ###
+
+### BEGIN /etc/grub.d/10_linux ###
+menuentry 'Parabola GNU/Linux-libre, with Linux-libre core repo kernel' --class parabola --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-core repo kernel-true-ad4103fa-d940-47ca-8506-301d8071d467' {
+ load_video
+ set gfxpayload=keep
+ insmod gzio
+ insmod part_msdos
+ insmod ext2
+ set root='hd0,msdos5'
+ if [ x$feature_platform_search_hint = xy ]; then
+ search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos5 --hint-efi=hd0,msdos5 --hint-baremetal=ahci0,msdos5 ad4103fa-d940-47ca-8506-301d8071d467
+ else
+ search --no-floppy --fs-uuid --set=root ad4103fa-d940-47ca-8506-301d8071d467
+ fi
+ echo 'Loading Linux libre core repo kernel ...'
+ linux /boot/vmlinuz-linux-libre root=UUID=ad4103fa-d940-47ca-8506-301d8071d467 ro quiet
+ echo 'Loading initial ramdisk ...'
+ initrd /boot/initramfs-linux-libre.img
+}
+menuentry 'Parabola GNU/Linux-libre, with Linux libre repo kernel (Fallback initramfs)' --class parabola --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-core repo kernel-fallback-ad4103fa-d940-47ca-8506-301d8071d467' {
+ load_video
+ set gfxpayload=keep
+ insmod gzio
+ insmod part_msdos
+ insmod ext2
+ set root='hd0,msdos5'
+ if [ x$feature_platform_search_hint = xy ]; then
+ search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos5 --hint-efi=hd0,msdos5 --hint-baremetal=ahci0,msdos5 ad4103fa-d940-47ca-8506-301d8071d467
+ else
+ search --no-floppy --fs-uuid --set=root ad4103fa-d940-47ca-8506-301d8071d467
+ fi
+ echo 'Loading Linux libre core repo kernel ...'
+ linux /boot/vmlinuz-linux-libre root=UUID=ad4103fa-d940-47ca-8506-301d8071d467 ro quiet
+ echo 'Loading initial ramdisk ...'
+ initrd /boot/initramfs-linux-libre-fallback.img
+}
+
+### END /etc/grub.d/10_linux ###
+
+### BEGIN /etc/grub.d/20_linux_xen ###
+### END /etc/grub.d/20_linux_xen ###
+
+### BEGIN /etc/grub.d/20_memtest86+ ###
+### END /etc/grub.d/20_memtest86+ ###
+
+### BEGIN /etc/grub.d/30_os-prober ###
+### END /etc/grub.d/30_os-prober ###
+
+### BEGIN /etc/grub.d/40_custom ###
+# This file provides an easy way to add custom menu entries. Simply type the
+# menu entries you want to add after this comment. Be careful not to change
+# the 'exec tail' line above.
+### END /etc/grub.d/40_custom ###
+
+### BEGIN /etc/grub.d/41_custom ###
+if [ -f ${config_directory}/custom.cfg ]; then
+ source ${config_directory}/custom.cfg
+elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then
+ source $prefix/custom.cfg;
+fi
+### END /etc/grub.d/41_custom ###
diff --git a/libre/grub/grub.default b/libre/grub/grub.default
new file mode 100644
index 000000000..2ceb40543
--- /dev/null
+++ b/libre/grub/grub.default
@@ -0,0 +1,47 @@
+GRUB_DEFAULT=0
+GRUB_TIMEOUT=5
+GRUB_DISTRIBUTOR="Parabola GNU/Linux-libre"
+GRUB_CMDLINE_LINUX_DEFAULT="quiet"
+GRUB_CMDLINE_LINUX=""
+
+# Preload both GPT and MBR modules so that they are not missed
+GRUB_PRELOAD_MODULES="part_gpt part_msdos"
+
+# Uncomment to enable Hidden Menu, and optionally hide the timeout count
+#GRUB_HIDDEN_TIMEOUT=5
+#GRUB_HIDDEN_TIMEOUT_QUIET=true
+
+# Uncomment to use basic console
+GRUB_TERMINAL_INPUT=console
+
+# Uncomment to disable graphical terminal
+#GRUB_TERMINAL_OUTPUT=console
+
+# The resolution used on graphical terminal
+# note that you can use only modes which your graphic card supports via VBE
+# you can see them in real GRUB with the command `vbeinfo'
+GRUB_GFXMODE=auto
+
+# Uncomment to allow the kernel use the same resolution used by grub
+GRUB_GFXPAYLOAD_LINUX=keep
+
+# Uncomment if you want GRUB to pass to the Linux kernel the old parameter
+# format "root=/dev/xxx" instead of "root=/dev/disk/by-uuid/xxx"
+#GRUB_DISABLE_LINUX_UUID=true
+
+# Uncomment to disable generation of recovery mode menu entries
+GRUB_DISABLE_RECOVERY=true
+
+# Uncomment and set to the desired menu colors. Used by normal and wallpaper
+# modes only. Entries specified as foreground/background.
+GRUB_COLOR_NORMAL="magenta/black"
+GRUB_COLOR_HIGHLIGHT="white/magenta"
+
+# Uncomment one of them for the gfx desired, a image background or a gfxtheme
+#GRUB_BACKGROUND="/path/to/wallpaper"
+#GRUB_THEME="/path/to/gfxtheme"
+
+# Uncomment to get a beep at GRUB start
+#GRUB_INIT_TUNE="480 440 1"
+
+#GRUB_SAVEDEFAULT="true"
diff --git a/libre/grub/grub.install b/libre/grub/grub.install
index c1f077d59..9188b357a 100644
--- a/libre/grub/grub.install
+++ b/libre/grub/grub.install
@@ -1,20 +1,33 @@
-infodir=/usr/share/info
-filelist=(grub.info multiboot.info)
+infodir="usr/share/info"
+filelist=('grub.info' 'grub-dev.info')
post_install() {
- [ -x usr/bin/install-info ] || return 0
+ if [ -f /boot/grub/grub.cfg.pacsave ]; then
+ echo "Copying /boot/grub/grub.cfg.pacsave to /boot/grub/grub.cfg"
+ install -D -m0644 /boot/grub/grub.cfg.pacsave /boot/grub/grub.cfg
+ fi
+
+ cat << 'EOM'
+Generating grub.cfg.example config file...
+This may fail on some machines running a custom kernel.
+EOM
+
+ grub-mkconfig -o /boot/grub/grub.cfg.example 2> /dev/null
+ echo "done."
+
for file in ${filelist[@]}; do
- install-info $infodir/$file.gz $infodir/dir 2> /dev/null
+ install-info ${infodir}/${file}.gz ${infodir}/dir 2> /dev/null
done
}
post_upgrade() {
- post_install $1
+ for file in ${filelist[@]}; do
+ install-info ${infodir}/${file}.gz ${infodir}/dir 2> /dev/null
+ done
}
pre_remove() {
- [ -x usr/bin/install-info ] || return 0
for file in ${filelist[@]}; do
- install-info --delete $infodir/$file.gz $infodir/dir 2> /dev/null
+ install-info --delete ${infodir}/${file} ${infodir}/dir 2> /dev/null
done
}
diff --git a/libre/grub/grub2.install b/libre/grub/grub2.install
new file mode 100644
index 000000000..000533553
--- /dev/null
+++ b/libre/grub/grub2.install
@@ -0,0 +1,33 @@
+infodir=usr/share/info
+filelist=(grub.info grub-dev.info)
+
+post_install() {
+ if [ -f /boot/grub/grub.cfg.pacsave ]; then
+ echo "Copying /boot/grub/grub.cfg.pacsave to /boot/grub/grub.cfg"
+ install -Dm644 /boot/grub/grub.cfg.pacsave /boot/grub/grub.cfg
+ fi
+
+ cat << 'EOM'
+Generating grub.cfg.example config file...
+This may fail on some machines running a custom kernel.
+EOM
+
+ grub-mkconfig -o /boot/grub/grub.cfg.example 2> /dev/null
+ echo "done."
+
+ for file in ${filelist[@]}; do
+ install-info $infodir/$file.gz $infodir/dir 2> /dev/null
+ done
+}
+
+post_upgrade() {
+ for file in ${filelist[@]}; do
+ install-info $infodir/$file.gz $infodir/dir 2> /dev/null
+ done
+}
+
+pre_remove() {
+ for file in ${filelist[@]}; do
+ install-info --delete $infodir/$file $infodir/dir 2> /dev/null
+ done
+}
diff --git a/libre/grub/grub2_automake_1.11.2_pkglib_to_pkgdata.patch b/libre/grub/grub2_automake_1.11.2_pkglib_to_pkgdata.patch
new file mode 100644
index 000000000..0e396b210
--- /dev/null
+++ b/libre/grub/grub2_automake_1.11.2_pkglib_to_pkgdata.patch
@@ -0,0 +1,134 @@
+diff --git a/ChangeLog_Keshav b/ChangeLog_Keshav
+new file mode 100644
+index 0000000..0eafd65
+--- /dev/null
++++ b/ChangeLog_Keshav
+@@ -0,0 +1,12 @@
++2012-01-04 Keshav P R <the.ridikulus.rat@gmail.com>
++
++ Fixes for automake 1.11.2
++
++ * conf/Makefile.common: Change pkglib_SCRIPTS to pkgdata_SCRIPTS.
++ * conf/Makefile.common: Change pkglib_DATA to pkgdata_DATA.
++ * Makefile.am: Likewise.
++ * gentpl.py: Likewise.
++ * util/grub-mkstandalone.in: Likewise.
++ * util/grub-mknetdir.in: Likewise.
++ * util/grub-mkrescue.in: Likewise.
++ * util/grub-mkstandalone.in: Likewise.
+diff --git a/Makefile.am b/Makefile.am
+index c5f486e..395b0dd 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -101,8 +101,8 @@ CLEANFILES += widthspec.h
+ # Install config.h into platformdir
+ platform_HEADERS = config.h
+
+-pkglib_DATA += grub-mkconfig_lib
+-pkglib_DATA += update-grub_lib
++pkgdata_DATA += grub-mkconfig_lib
++pkgdata_DATA += update-grub_lib
+
+
+ if COND_i386_coreboot
+diff --git a/conf/Makefile.common b/conf/Makefile.common
+index 751188b..bbd59cc 100644
+--- a/conf/Makefile.common
++++ b/conf/Makefile.common
+@@ -137,7 +137,7 @@ KERNEL_HEADER_FILES =
+
+ man_MANS =
+ noinst_DATA =
+-pkglib_DATA =
++pkgdata_DATA =
+ bin_SCRIPTS =
+ sbin_SCRIPTS =
+ bin_PROGRAMS =
+@@ -147,7 +147,7 @@ check_SCRIPTS =
+ grubconf_DATA =
+ check_PROGRAMS =
+ noinst_SCRIPTS =
+-pkglib_SCRIPTS =
++pkgdata_SCRIPTS =
+ noinst_PROGRAMS =
+ grubconf_SCRIPTS =
+ noinst_LIBRARIES =
+diff --git a/gentpl.py b/gentpl.py
+index 3008b80..a935f4d 100644
+--- a/gentpl.py
++++ b/gentpl.py
+@@ -512,7 +512,7 @@ def script(platform):
+ r += "[+ ENDIF +]"
+
+ r += rule("[+ name +]", platform_sources(platform) + " $(top_builddir)/config.status", """
+-$(top_builddir)/config.status --file=-:$< | sed -e 's,@pkglib_DATA@,$(pkglib_DATA),g' > $@
++$(top_builddir)/config.status --file=-:$< | sed -e 's,@pkgdata_DATA@,$(pkgdata_DATA),g' > $@
+ chmod a+x [+ name +]
+ """)
+
+diff --git a/util/grub-mknetdir.in b/util/grub-mknetdir.in
+index e5a2172..7f6a36d 100644
+--- a/util/grub-mknetdir.in
++++ b/util/grub-mknetdir.in
+@@ -30,7 +30,7 @@ PACKAGE_VERSION=@PACKAGE_VERSION@
+ host_os=@host_os@
+ localedir=@datadir@/locale
+ datarootdir=@datarootdir@
+-pkglib_DATA="moddep.lst command.lst fs.lst partmap.lst parttool.lst handler.lst video.lst crypto.lst terminal.lst"
++pkgdata_DATA="moddep.lst command.lst fs.lst partmap.lst parttool.lst handler.lst video.lst crypto.lst terminal.lst"
+
+ self=`basename $0`
+
+@@ -183,7 +183,7 @@ process_input_dir ()
+ cp -f "$file" "$grubdir/"
+ fi
+ done
+- for file in ${pkglib_DATA}; do
++ for file in ${pkgdata_DATA}; do
+ if test -f "${input_dir}/${file}"; then
+ cp -f "${input_dir}/${file}" "$grubdir/"
+ fi
+diff --git a/util/grub-mkrescue.in b/util/grub-mkrescue.in
+index eff7708..f6b96d4 100644
+--- a/util/grub-mkrescue.in
++++ b/util/grub-mkrescue.in
+@@ -27,7 +27,7 @@ libdir=@libdir@
+ PACKAGE_NAME=@PACKAGE_NAME@
+ PACKAGE_TARNAME=@PACKAGE_TARNAME@
+ PACKAGE_VERSION=@PACKAGE_VERSION@
+-pkglib_DATA="moddep.lst command.lst fs.lst partmap.lst parttool.lst handler.lst video.lst crypto.lst terminal.lst"
++pkgdata_DATA="moddep.lst command.lst fs.lst partmap.lst parttool.lst handler.lst video.lst crypto.lst terminal.lst"
+
+ self=`basename $0`
+
+@@ -163,7 +163,7 @@ process_input_dir ()
+ cp -f "$file" ${iso9660_dir}/boot/grub/${platform}/
+ fi
+ done
+- for file in ${pkglib_DATA}; do
++ for file in ${pkgdata_DATA}; do
+ if test -f "${input_dir}/${file}"; then
+ cp -f "${input_dir}/${file}" ${iso9660_dir}/boot/grub/${platform}/
+ fi
+diff --git a/util/grub-mkstandalone.in b/util/grub-mkstandalone.in
+index b0dbf9b..92b7306 100644
+--- a/util/grub-mkstandalone.in
++++ b/util/grub-mkstandalone.in
+@@ -27,7 +27,7 @@ libdir=@libdir@
+ PACKAGE_NAME=@PACKAGE_NAME@
+ PACKAGE_TARNAME=@PACKAGE_TARNAME@
+ PACKAGE_VERSION=@PACKAGE_VERSION@
+-pkglib_DATA="moddep.lst command.lst fs.lst partmap.lst parttool.lst handler.lst video.lst crypto.lst terminal.lst"
++pkgdata_DATA="moddep.lst command.lst fs.lst partmap.lst parttool.lst handler.lst video.lst crypto.lst terminal.lst"
+
+ self=`basename $0`
+
+@@ -163,7 +163,7 @@ for file in "${source_directory}/"*.mod "${source_directory}/"efiemu32.o "${sour
+ fi
+ done
+
+-for file in ${pkglib_DATA}; do
++for file in ${pkgdata_DATA}; do
+ if test -f "${source_directory}/${file}"; then
+ cp -f "${source_directory}/${file}" "${memdisk_dir}"/boot/grub/
+ fi
diff --git a/libre/grub/grub2_bzr_export.sh b/libre/grub/grub2_bzr_export.sh
new file mode 100644
index 000000000..f40588f82
--- /dev/null
+++ b/libre/grub/grub2_bzr_export.sh
@@ -0,0 +1,113 @@
+#!/bin/bash
+
+## For actual repos
+
+# bzr branch bzr://bzr.savannah.gnu.org/grub-extras/lua lua
+# bzr branch bzr://bzr.savannah.gnu.org/grub-extras/gpxe gpxe
+# bzr branch bzr://bzr.savannah.gnu.org/grub-extras/ntldr-img ntldr-img
+# bzr branch bzr://bzr.savannah.gnu.org/grub-extras/915resolution 915resolution
+
+## For launchpad mirror
+
+# bzr branch lp:~the-ridikulus-rat/grub/grub2-extras-lua lua
+# bzr branch lp:~the-ridikulus-rat/grub/grub2-extras-gpxe gpxe
+# bzr branch lp:~the-ridikulus-rat/grub/grub2-extras-ntldr-img ntldr-img
+# bzr branch lp:~the-ridikulus-rat/grub/grub2-extras-915resolution 915resolution
+
+## grub-extras zfs is integrated into grub2 bzr main repo and is no longer needed separately.
+
+_WD="${PWD}/"
+_OUTPUT_DIR="${_WD}/"
+
+_ACTUAL_PKGVER="1.99"
+
+_GRUB2_BZR_REPO_DIR="${_WD}/grub2_BZR/"
+_GRUB2_BZR_EXP_REPO_DIR="${_WD}/grub2_experimental_BZR/"
+_GRUB2_EXTRAS_REPOS_DIR="${_WD}/grub2_extras_BZR/"
+
+_MAIN_SNAPSHOT() {
+
+ cd "${_GRUB2_BZR_REPO_DIR}/"
+ echo
+
+ _REVNUM="$(bzr revno ${_GRUB2_BZR_REPO_DIR})"
+ bzr export --root="grub-${_ACTUAL_PKGVER}" --format="tar" "${_OUTPUT_DIR}/grub2_r${_REVNUM}.tar"
+ echo
+
+ cd "${_OUTPUT_DIR}/"
+
+ xz -9 "${_OUTPUT_DIR}/grub2_r${_REVNUM}.tar"
+ echo
+
+}
+
+_EXP_SNAPSHOT() {
+
+ cd "${_GRUB2_BZR_EXP_REPO_DIR}/"
+ echo
+
+ _REVNUM="$(bzr revno ${_GRUB2_BZR_EXP_REPO_DIR})"
+ bzr export --root="grub-${_ACTUAL_PKGVER}" --format="tar" "${_OUTPUT_DIR}/grub2_exp_r${_REVNUM}.tar"
+ echo
+
+ cd "${_OUTPUT_DIR}/"
+
+ xz -9 "${_OUTPUT_DIR}/grub2_exp_r${_REVNUM}.tar"
+ echo
+
+}
+
+_EXTRAS_SNAPSHOT() {
+
+ cd "${_GRUB2_EXTRAS_REPOS_DIR}/${_GRUB2_EXTRAS_NAME}/"
+ echo
+
+ _REVNUM="$(bzr revno ${_GRUB2_EXTRAS_REPOS_DIR}/${_GRUB2_EXTRAS_NAME})"
+ bzr export --root="${_GRUB2_EXTRAS_NAME}" --format=tar "${_OUTPUT_DIR}/grub2_extras_${_GRUB2_EXTRAS_NAME}_r${_REVNUM}.tar"
+ echo
+
+ cd "${_OUTPUT_DIR}/"
+ echo
+
+ xz -9 "${_OUTPUT_DIR}/grub2_extras_${_GRUB2_EXTRAS_NAME}_r${_REVNUM}.tar"
+ echo
+
+}
+
+echo
+
+set -x -e
+
+echo
+
+_MAIN_SNAPSHOT
+
+echo
+
+# _EXP_SNAPSHOT
+
+echo
+
+_GRUB2_EXTRAS_NAME="lua"
+_EXTRAS_SNAPSHOT
+
+_GRUB2_EXTRAS_NAME="gpxe"
+_EXTRAS_SNAPSHOT
+
+_GRUB2_EXTRAS_NAME="ntldr-img"
+_EXTRAS_SNAPSHOT
+
+_GRUB2_EXTRAS_NAME="915resolution"
+_EXTRAS_SNAPSHOT
+
+echo
+
+set +x +e
+
+echo
+
+unset _WD
+unset _OUTPUT_DIR
+unset _GRUB2_BZR_REPO_DIR
+unset _GRUB2_EXTRAS_REPOS_DIR
+unset _GRUB2_EXTRAS_NAME
diff --git a/libre/grub/grub_bzr_export.sh b/libre/grub/grub_bzr_export.sh
new file mode 100644
index 000000000..ff8f99ecc
--- /dev/null
+++ b/libre/grub/grub_bzr_export.sh
@@ -0,0 +1,113 @@
+#!/usr/bin/env bash
+
+## For actual repos
+
+# bzr branch bzr://bzr.savannah.gnu.org/grub-extras/lua lua
+# bzr branch bzr://bzr.savannah.gnu.org/grub-extras/gpxe gpxe
+# bzr branch bzr://bzr.savannah.gnu.org/grub-extras/ntldr-img ntldr-img
+# bzr branch bzr://bzr.savannah.gnu.org/grub-extras/915resolution 915resolution
+
+## For launchpad mirror
+
+# bzr branch lp:~the-ridikulus-rat/grub/grub-extras-lua lua
+# bzr branch lp:~the-ridikulus-rat/grub/grub-extras-gpxe gpxe
+# bzr branch lp:~the-ridikulus-rat/grub/grub-extras-ntldr-img ntldr-img
+# bzr branch lp:~the-ridikulus-rat/grub/grub-extras-915resolution 915resolution
+
+## grub-extras zfs is integrated into grub bzr main repo and is no longer needed separately.
+
+_WD="${PWD}/"
+_OUTPUT_DIR="${_WD}/"
+
+_ACTUAL_PKGVER="2.00"
+
+_GRUB_BZR_REPO_DIR="${_WD}/grub_mainline_BZR/"
+_GRUB_BZR_EXP_REPO_DIR="${_WD}/grub_experimental_BZR/"
+_GRUB_EXTRAS_REPOS_DIR="${_WD}/grub_extras_BZR/"
+
+_MAIN_SNAPSHOT() {
+
+ cd "${_GRUB_BZR_REPO_DIR}/"
+ echo
+
+ _REVNUM="$(bzr revno ${_GRUB_BZR_REPO_DIR})"
+ bzr export --root="grub-${_ACTUAL_PKGVER}" --format="tar" "${_OUTPUT_DIR}/grub_r${_REVNUM}.tar"
+ echo
+
+ cd "${_OUTPUT_DIR}/"
+
+ xz -9 "${_OUTPUT_DIR}/grub_r${_REVNUM}.tar"
+ echo
+
+}
+
+_EXP_SNAPSHOT() {
+
+ cd "${_GRUB_BZR_EXP_REPO_DIR}/"
+ echo
+
+ _REVNUM="$(bzr revno ${_GRUB_BZR_EXP_REPO_DIR})"
+ bzr export --root="grub-${_ACTUAL_PKGVER}" --format="tar" "${_OUTPUT_DIR}/grub_exp_r${_REVNUM}.tar"
+ echo
+
+ cd "${_OUTPUT_DIR}/"
+
+ xz -9 "${_OUTPUT_DIR}/grub_exp_r${_REVNUM}.tar"
+ echo
+
+}
+
+_EXTRAS_SNAPSHOT() {
+
+ cd "${_GRUB_EXTRAS_REPOS_DIR}/${_GRUB_EXTRAS_NAME}/"
+ echo
+
+ _REVNUM="$(bzr revno ${_GRUB_EXTRAS_REPOS_DIR}/${_GRUB_EXTRAS_NAME})"
+ bzr export --root="${_GRUB_EXTRAS_NAME}" --format="tar" "${_OUTPUT_DIR}/grub_extras_${_GRUB_EXTRAS_NAME}_r${_REVNUM}.tar"
+ echo
+
+ cd "${_OUTPUT_DIR}/"
+ echo
+
+ xz -9 "${_OUTPUT_DIR}/grub_extras_${_GRUB_EXTRAS_NAME}_r${_REVNUM}.tar"
+ echo
+
+}
+
+echo
+
+set -x -e
+
+echo
+
+_MAIN_SNAPSHOT
+
+echo
+
+# _EXP_SNAPSHOT
+
+echo
+
+_GRUB_EXTRAS_NAME="lua"
+_EXTRAS_SNAPSHOT
+
+# _GRUB_EXTRAS_NAME="gpxe"
+# _EXTRAS_SNAPSHOT
+
+_GRUB_EXTRAS_NAME="ntldr-img"
+_EXTRAS_SNAPSHOT
+
+_GRUB_EXTRAS_NAME="915resolution"
+_EXTRAS_SNAPSHOT
+
+echo
+
+set +x +e
+
+echo
+
+unset _WD
+unset _OUTPUT_DIR
+unset _GRUB_BZR_REPO_DIR
+unset _GRUB_EXTRAS_REPOS_DIR
+unset _GRUB_EXTRAS_NAME
diff --git a/libre/grub/grub_extras_lua_args_fix.patch b/libre/grub/grub_extras_lua_args_fix.patch
new file mode 100644
index 000000000..5cb317ce3
--- /dev/null
+++ b/libre/grub/grub_extras_lua_args_fix.patch
@@ -0,0 +1,13 @@
+diff --git a/grub-extras/lua/grub_lib.c b/grub-extras/lua/grub_lib.c
+index 9014320..055d620 100644
+--- a/grub-extras/lua/grub_lib.c
++++ b/grub-extras/lua/grub_lib.c
+@@ -466,7 +466,7 @@ grub_lua_add_menu (lua_State *state)
+ if (! p)
+ return push_result (state);
+
+- grub_normal_add_menu_entry (n, args, NULL, NULL, NULL, NULL, p, 0);
++ grub_normal_add_menu_entry (n, args, NULL, NULL, NULL, NULL, NULL, p, 0);
+ }
+ else
+ {
diff --git a/libre/grub/parabola-mkconfig.patch b/libre/grub/parabola-mkconfig.patch
new file mode 100644
index 000000000..7c18a4cc2
--- /dev/null
+++ b/libre/grub/parabola-mkconfig.patch
@@ -0,0 +1,32 @@
+diff -ru grub-1.99.orig/util/grub.d/10_linux.in grub-1.99/util/grub.d/10_linux.in
+--- grub-1.99.orig/util/grub.d/10_linux.in 2011-08-11 15:54:52.051246328 +0200
++++ grub-1.99/util/grub.d/10_linux.in 2011-08-11 15:55:41.297910793 +0200
+@@ -134,7 +134,7 @@
+
+ case x`uname -m` in
+ xi?86 | xx86_64)
+- list=`for i in /boot/vmlinuz-* /vmlinuz-* /boot/kernel-* /boot/vmlinuz26-* ; do
++ list=`for i in /boot/vmlinuz-* /vmlinuz-* /boot/kernel-* /boot/vmlinuz26-* /boot/vmlinuz26 ; do
+ if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
+ done` ;;
+ *)
+@@ -163,7 +163,8 @@
+ "initrd-${alt_version}" "initramfs-${alt_version}.img" \
+ "initramfs-genkernel-${version}" \
+ "initramfs-genkernel-${alt_version}" \
+- "${basename/vmlinuz/kernel}.img"; do
++ "${basename/vmlinuz/kernel}.img" \
++ "${basename/vmlinuz/initramfs}.img"; do
+ if test -e "${dirname}/${i}" ; then
+ initrd="$i"
+ break
+@@ -194,7 +195,8 @@
+ linux_entry "${OS}" "${version}" false \
+ "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
+ for i in "initramfs-${version}-fallback.img" \
+- "${basename/vmlinuz/kernel}-fallback.img"; do
++ "${basename/vmlinuz/kernel}-fallback.img" \
++ "${basename/vmlinuz/initramfs}-fallback.img"; do
+ if test -e "${dirname}/${i}"; then
+ initrd="$i"
+ linux_entry "${OS}" "${version}" true \
diff --git a/libre/grub/parabola_grub_mkconfig_fixes.patch b/libre/grub/parabola_grub_mkconfig_fixes.patch
new file mode 100644
index 000000000..19022aec6
--- /dev/null
+++ b/libre/grub/parabola_grub_mkconfig_fixes.patch
@@ -0,0 +1,152 @@
+diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in
+index 516be86..5f37db2 100644
+--- a/util/grub-mkconfig.in
++++ b/util/grub-mkconfig.in
+@@ -213,6 +213,8 @@ export GRUB_DEFAULT \
+ GRUB_THEME \
+ GRUB_GFXPAYLOAD_LINUX \
+ GRUB_DISABLE_OS_PROBER \
++ GRUB_COLOR_NORMAL \
++ GRUB_COLOR_HIGHLIGHT \
+ GRUB_INIT_TUNE \
+ GRUB_SAVEDEFAULT \
+ GRUB_ENABLE_CRYPTODISK \
+diff --git a/util/grub.d/00_header.in b/util/grub.d/00_header.in
+index 765bfdc..b148558 100644
+--- a/util/grub.d/00_header.in
++++ b/util/grub.d/00_header.in
+@@ -115,6 +115,14 @@ cat <<EOF
+
+ EOF
+
++if [ x$GRUB_COLOR_NORMAL != x ] && [ x$GRUB_COLOR_HIGHLIGHT != x ] ; then
++ cat << EOF
++set menu_color_normal=$GRUB_COLOR_NORMAL
++set menu_color_highlight=$GRUB_COLOR_HIGHLIGHT
++
++EOF
++fi
++
+ serial=0;
+ gfxterm=0;
+ for x in ${GRUB_TERMINAL_INPUT} ${GRUB_TERMINAL_OUTPUT}; do
+diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in
+index 14402e8..64c9bb5 100644
+--- a/util/grub.d/10_linux.in
++++ b/util/grub.d/10_linux.in
+@@ -31,7 +31,7 @@
+ if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
+ OS=GNU/Linux
+ else
+- OS="${GRUB_DISTRIBUTOR} GNU/Linux"
++ OS="${GRUB_DISTRIBUTOR}"
+ CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1) ${CLASS}"
+ fi
+
+@@ -87,6 +87,8 @@ linux_entry ()
+ case $type in
+ recovery)
+ title="$(gettext_printf "%s, with Linux %s (recovery mode)" "${os}" "${version}")" ;;
++ fallback)
++ title="$(gettext_printf "%s, with Linux %s (Fallback initramfs)" "${os}" "${version}")" ;;
+ *)
+ title="$(gettext_printf "%s, with Linux %s" "${os}" "${version}")" ;;
+ esac
+@@ -100,7 +102,7 @@ linux_entry ()
+ else
+ echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
+ fi
+- if [ x$type != xrecovery ] ; then
++ if [ x$type != xrecovery ] && [ x$type != xfallback ] ; then
+ save_default_entry | sed -e "s/^/\t/"
+ fi
+
+@@ -132,7 +134,8 @@ linux_entry ()
+ fi
+ printf '%s\n' "${prepare_boot_cache}" | sed "s/^/$submenu_indentation/"
+ fi
+- message="$(gettext_printf "Loading Linux %s ..." ${version})"
++
++ message="$(gettext_printf "Loading Linux %s ..." "${version}")"
+ sed "s/^/$submenu_indentation/" << EOF
+ echo '$message'
+ linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args}
+@@ -190,7 +193,22 @@ while [ "x$list" != "x" ] ; do
+ alt_version=`echo $version | sed -e "s,\.old$,,g"`
+ linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"
+
++ if test -e "/etc/arch-release" ; then
++ if echo "${basename}" | grep -q 'vmlinuz-linux' ; then
++ version="`echo "${basename}" | sed -e 's,vmlinuz-linux,,g'`"
++
++ if [ "x${version}" = "x" ] ; then
++ version="core repo kernel"
++ else
++ version="`echo "${version}" | sed -e 's,-,,g'`"
++ version="${version} kernel"
++ fi
++ fi
++ fi
++
+ initrd=
++ initrd_arch="`echo "${basename}" | sed -e 's,vmlinuz,initramfs,g'`"
++
+ for i in "initrd.img-${version}" "initrd-${version}.img" "initrd-${version}.gz" \
+ "initrd-${version}" "initramfs-${version}.img" \
+ "initrd.img-${alt_version}" "initrd-${alt_version}.img" \
+@@ -198,7 +216,8 @@ while [ "x$list" != "x" ] ; do
+ "initramfs-genkernel-${version}" \
+ "initramfs-genkernel-${alt_version}" \
+ "initramfs-genkernel-${GENKERNEL_ARCH}-${version}" \
+- "initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}"; do
++ "initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}" \
++ "${initrd_arch}.img" ; do
+ if test -e "${dirname}/${i}" ; then
+ initrd="$i"
+ break
+@@ -226,6 +245,22 @@ while [ "x$list" != "x" ] ; do
+ linux_root_device_thisversion=${GRUB_DEVICE}
+ fi
+
++ if test -e "/etc/arch-release" ; then
++ is_first_entry="false"
++
++ linux_entry "${OS}" "${version}" true \
++ "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
++
++ for i in "${initrd_arch}-fallback.img" "initramfs-${version}-fallback.img" ; do
++ if test -e "${dirname}/${i}" ; then
++ initrd="${i}"
++ linux_entry "${OS}" "${version}" fallback \
++ "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
++ break
++ fi
++ done
++ fi
++
+ if [ "x$is_first_entry" = xtrue ]; then
+ linux_entry "${OS}" "${version}" simple \
+ "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
+@@ -239,8 +274,11 @@ while [ "x$list" != "x" ] ; do
+ echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {"
+ fi
+
++ if ! test -e "/etc/arch-release" ; then
+ linux_entry "${OS}" "${version}" advanced \
+ "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
++ fi
++
+ if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then
+ linux_entry "${OS}" "${version}" recovery \
+ "single ${GRUB_CMDLINE_LINUX}"
+@@ -252,8 +290,10 @@ done
+
+ # If at least one kernel was found, then we need to
+ # add a closing '}' for the submenu command.
++if ! test -e "/etc/arch-release" ; then
+ if [ x"$is_first_entry" != xtrue ]; then
+ echo '}'
+ fi
++fi
+
+ echo "$title_correction_code"
diff --git a/libre/h-client/PKGBUILD b/libre/h-client/PKGBUILD
index e77a2437e..821517397 100644
--- a/libre/h-client/PKGBUILD
+++ b/libre/h-client/PKGBUILD
@@ -1,10 +1,10 @@
# Maintainer: Michał Masłowski <mtjm@mtjm.eu>
pkgname=h-client
-_pkgver=0.0a0.dev-r107
+_pkgver=0.0a0.dev-r118
pkgver=${_pkgver/-/.}
pkgrel=1
-pkgdesc="A client for an h-source server (such as http://www.h-node.com)"
+pkgdesc="A client for an h-source server (such as http://www.h-node.org/)"
arch=('any')
url="https://savannah.nongnu.org/projects/h-client/"
license=('GPL3')
@@ -12,8 +12,9 @@ depends=('python2' 'python2-distribute' 'python-pycurl' 'pygtk')
options=(!emptydirs)
# Official source is in SVN, this is made by "python2 setup.py sdist"
# on a machine having Subversion 1.6.x (e.g. on Trisquel 4.0).
-source=("https://mtjm.eu/releases/hclient-${_pkgver}.tar.gz")
-sha512sums=('d820871fcf3f92e6e31aa02273ae413bf066524eaf245f1d4cf7dc8b0ba5799eb07bf86dd28861c8878c73147bbcae563668cb3a6fa9c3382c751e6717d85f0c')
+source=("https://mtjm.eu/releases/hclient-${_pkgver}.tar.gz"{,.sig})
+sha512sums=('af962c67b363435cfa74f7c420760b0254ba3e7c1e6611d5ff276e6595e30dadf1b5d588cd2469647efdbb0099f70a027b9f65d8aeefc70ea712c9ef5d7cbace'
+ '7d4746297c4a0bd328b1e57f596e827b4a12d2f703d074f7e87ea0c9e3f747c2cfd48da971e81fdaf27939d463b359fac4638820f08486ef28502e769168692d')
build() {
cd "$srcdir/hclient-${_pkgver}"
diff --git a/libre/hardinfo/PKGBUILD b/libre/hardinfo/PKGBUILD
index c712a39af..a66dc20df 100644
--- a/libre/hardinfo/PKGBUILD
+++ b/libre/hardinfo/PKGBUILD
@@ -1,9 +1,10 @@
# $Id$
# Maintainer: Eric Bélanger <eric@archlinux.org>
+# Contributor (Parabola): Márcio Silva <coadde@lavabit.com>
pkgname=hardinfo
pkgver=0.5.1
-pkgrel=4
+pkgrel=5
pkgdesc="A system information and benchmark tool."
arch=('i686' 'x86_64' 'mips64el')
url="http://hardinfo.berlios.de/wiki/index.php/Main_Page"
@@ -12,9 +13,6 @@ depends=('gtk2' 'libsoup')
options=('!emptydirs')
source=(http://download.berlios.de/hardinfo/${pkgname}-${pkgver}.tar.bz2 \
fixsensors.patch hardinfo.distro)
-md5sums=('6fb38992e140f2fab16518ae1f38e188'
- '05c212db07b9f152cdea052ff7bb28fa'
- '2c609f4b3c7f202d043bdef082c2bef0')
sha1sums=('983f0445aa60e02156bc5a5eaedeffb30b8e4d64'
'd2151dce76dca238102937d0e15541f172bca530'
'9425e09191cd3a365a3afce57ca1973a6439fa57')
@@ -25,8 +23,6 @@ build() {
sed -i 's|/usr/lib64|/usr/lib|' configure
./configure --prefix=/usr
sed -i 's|lib64|lib|' binreloc.c
- sed -i 's|/sbin/lsmod|/bin/lsmod|g' arch/linux/{parisc,ppc,m68k,x86,common,mips,sparc,x86_64}/modules.h
- sed -i 's|/sbin/lsmod|/bin/lsmod|g' arch/this/modules.h
sed -i 's|{ DB_PREFIX "debian_version", "deb" },|{ DB_PREFIX "hardinfo.distro", "parabola" },{ DB_PREFIX "debian_version", "deb" },|' computer.h
make
}
diff --git a/libre/iceape-i18n/PKGBUILD b/libre/iceape-i18n/PKGBUILD
index 5f4db3101..d146e02dd 100644
--- a/libre/iceape-i18n/PKGBUILD
+++ b/libre/iceape-i18n/PKGBUILD
@@ -1,5 +1,6 @@
# Maintainer: Luke Shumaker <lukeshu@sbcglobal.net>
-# Maintainer: André Silva <andre.paulista@adinet.com.uy>
+# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
+# Maintainer (Parabola): Márcio Silva <coadde@lavabit.com>
# Contributor: fauno <fauno@kiwwwi.com.ar>
# Contributor: Figue <ffigue@gmail.com>
# Based on icecat-i18n package, which is in turn based on firefox-i18n
@@ -10,18 +11,18 @@
# - Run 'make'. It will take care of everything else for you.
_debname=iceape
-_debver=2.7.5
+_debver=2.7.6
_debrel=1
_debrepo=http://ftp.debian.org/debian/pool/main/
debfile() { echo $@|sed -r 's@(.).*@\1/&/&@'; }
-_langpacks=(be ca cs de en-GB es-ES fi fr gl hu it ja lt nb-NO nl pl pt-PT ru sk sv-SE tr zh-CN)
+_langpacks=(be ca cs de en-GB es-AR es-ES fi fr gl hu it ja lt nb-NO nl pl pt-PT ru sk sv-SE tr zh-CN)
pkgbase=iceape-i18n
pkgname=($(for lang in ${_langpacks[@]}
do echo $pkgbase-$lang | tr A-Z a-z
done))
-_pkgver=2.7.5
+_pkgver=2.7.6
pkgver=${_debver}.${_debrel}
pkgrel=1
@@ -57,25 +58,26 @@ package_iceape-i18n-$(echo $lang | tr A-Z a-z)() {
"
done
-md5sums=('03a75ce1325fc748d0943cd39659e8ca'
- '9fc2070dc6db8d94f322cb5e27523ea4'
- '6cb55fe51fca1de674ca32b10edc7c8b'
- '138121b288c269aa418ca0c33eb65326'
- '8fd47eed7c79fe29c74a81d9b4a4864a'
- 'f253842c0a377e86c6c62f7db27db32d'
- 'b93caebe5ceb08d2cde78fe40fff3c0c'
- 'a36d0776b736609b1e72b8530cc9e755'
- '9acd2d8e4fd39700aa99a21681403a72'
- '60703c83180e8bb3abdcfbf26bf1289d'
- 'dc708663d015830fb11e800f48d7492c'
- '313e6a88a602e09b5f08d6ff8ccdc89a'
- '31debae1dca6035695805d0de55c71f3'
- '1f927d23eb1db49db3ffe2d3ee5e3da5'
- '4b5e52235ce8a52d1144d5f6e45a069c'
- '81d1a28544f9a6e92eafc48e57a45a35'
- 'bb32f5938b885d2de225e4d8e2471d28'
- '69d447db48244cc1546d0ce3447e8ab8'
- '16d36a140dfbd9a001b28f4fcbc81df8'
- '211bb03760a2eacf685f27f03e71da4d'
- '83225015ad8f023ff0d9f9643c295e4c'
- '67d3ec1632a4ed2aaf8e7a5df0284b1e')
+md5sums=('ee7f337bb32aee98a9f2be1936843106'
+ '10102b3e8f81dbd91dacddb892ba68b9'
+ 'fef4de4746cc36bcf911fb0f7a7b2338'
+ 'd31e21bb4917155e159941400b86b9a8'
+ '76e7c36cc0fd7e200c8b0d220d05f084'
+ '804fbc692db4523e31fbe337c37cd958'
+ '7bd3d6b9d4bdfcd5c53002ed695c3be9'
+ 'b875123775d4aa52b747e9ef897cee4c'
+ 'a5ecf997b5afa853fd46840f1e9cc01e'
+ '352872240f6e1812fb27599f2d43ed5e'
+ '7f680543cca22102660e39d775ea4f1f'
+ '19c47a8901163e23fc937b2076812147'
+ '7c1b1105b5a70008c12b3a5195c5a789'
+ '3306f9408c61f622a185fd9e218199ef'
+ '88f466e2bd3ec4236f76d92b22cc5e12'
+ '8c655118c3cfc0063581f11f11f23817'
+ '0d481cfdd69a591881e358f6a4d45e3e'
+ '457aea13f02af3aa2bc690ab438e1f37'
+ '9b72f83a7e1142ab8839fd2350437dfc'
+ '7e640437184ff9874d50bba9ddd8b800'
+ '2f00074f37b3785df5781a750e4a8293'
+ '9b4295c47829adcc3832d2b9524c6a95'
+ '1dea8892db29f13a37acdb02ba635f80')
diff --git a/libre/iceape-libre/PKGBUILD b/libre/iceape-libre/PKGBUILD
index 25498025b..e1079d74e 100644
--- a/libre/iceape-libre/PKGBUILD
+++ b/libre/iceape-libre/PKGBUILD
@@ -1,9 +1,9 @@
-# Maintainer : Márcio Silva <coadde@adinet.com.uy>
-# Maintainer : André Silva <andre.paulista@adinet.com.uy>
+# Maintainer : Márcio Silva <coadde@lavabit.com>
+# Maintainer : André Silva <emulatorman@lavabit.com>
# We're getting this from Debian Sid
_debname=iceape
-_debver=2.7.5
+_debver=2.7.7
_debrel=1
_debrepo=http://ftp.debian.org/debian/pool/main/
debfile() { echo $@|sed -r 's@(.).*@\1/&/&@'; }
@@ -11,7 +11,7 @@ debfile() { echo $@|sed -r 's@(.).*@\1/&/&@'; }
_pkgname=${_debname}
pkgname=${_debname}-libre
pkgver=${_debver}.${_debrel}
-pkgrel=2
+pkgrel=1
pkgdesc="A libre version of Debian Iceape, the Internet Suite based on Mozilla Seamonkey."
arch=('i586' 'i686' 'x86_64' 'mips64el')
license=('GPL2' 'MPL' 'LGPL')
@@ -29,13 +29,13 @@ source=("${_debrepo}/`debfile ${_debname}`_${_debver}.orig.tar.bz2"
${_pkgname}-2.0-lang.patch
clrf.patch
libre.patch)
-md5sums=('7a6e671485a75cd9495f346e0f8e4dcb'
- '174e572e9d7b1b62a8e437f70fe771ba'
+md5sums=('c1b1a38a1ee2d9ea7c4320ab6a45e380'
+ '0cb9bb2194cf4f9e4eb3e3d4281fef6e'
'60ba9e8f2fafd20e41268af534a55ea7'
'7266333e31731af8bb50c2eca8d0bd26'
'25b6fe16ac24cd5c852213e5c1adb272'
'c395d443a8c4c16880c7322bcf174743'
- '92d3feecf8d80ae6a3f06aa8c5f06eb4')
+ '98f054a054558d5e3f6603486faef11f')
build() {
export QUILT_PATCHES=debian/patches
diff --git a/libre/iceape-libre/libre.patch b/libre/iceape-libre/libre.patch
index be471eea3..96fefccbb 100644
--- a/libre/iceape-libre/libre.patch
+++ b/libre/iceape-libre/libre.patch
@@ -270,9 +270,9 @@
- <DT><A HREF="http://www.mozilla.org/">@mozilla_org@</A>
- <DT><A HREF="http://www.mozillazine.org/">@mozillazine@</A>
- <DT><A HREF="http://www.mozdev.org/">@mozdev@</A>
-+ <DT><A HREF="https://parabolagnulinux.org/">Parabola GNU/Linux-libre</a>
-+ <DT><A HREF="http://www.fsf.org/">Free Software Foundation</A>
-+ <DT><A HREF="http://libreplanet.org/">LibrePlanet</A>
++ <DT><A HREF="https://parabolagnulinux.org/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AihUrGP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AIcXLSJvFCcn////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AbRIkcP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGwTI0JWEBtB////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wCAAAACVQ8crP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFYQHJI9ChRL////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlKzZHPQoUzgAAAAH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AknV8I0sdJv8kBgxU////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AMTExA1uTlX1JAYLyf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wC5ubkLhG1x6CQGDP0PAAARzJmZBf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AxsbGCZB+g/QkBgz/DQMDUdu2tgfMn5koxo2NOsxmmQX///8A////AP///wD///8A////AP///wD///8A////AJ2JjX+NeX3/JAYM/wwCA5T///8A////AL+AgAi/foFfuG51l7JgaXCvY3E2/4CAAv///wD///8A////AJlveHOzqqv6UCUt/yQGDP8MAgTW////AP///wD///8A////AKqAgAawXmhnqk9b36VNW/KjT13mqGh16Kl+hvCbdHz/YyYx/z0KFP8kBgz/DAIE7f///wD///8A////AP///wD///8A////AJlmZgWkQU5inDFD0ZUhNv+FFyz/bRMk/1UPHP89ChT/JAYM/wwCA9v///8A////AP///wD///8A////AP///wD///8A////AP///wCTIDMohRYtfW0TJMBVDxzQPQoU3SUGDcoMBARA//8AAP//AAD//wAA//8AAP/3AAD/9wAA//sAAP/7AAD/+QAA//kAAP/5AAD/+AAA9/AAAPwAAAD/AAAA/+EAAA%3D%3D">Parabola GNU/Linux-libre</a>
++ <DT><A HREF="http://www.fsf.org/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAADG0lEQVQoFQEQA+/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQECAAAAAAAAAAAAAAAAAAAA2qOp7tTXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAP///wAAAAAAAOCyt7pUXQcSEgcQDwAAAP///wAAAAAAAAD//x9NSDqNhQEBAQQAAAAAAAAAAAAAAAAQJiQGDQ0aPToZPjoAAQEAAAAAAAAAAAABAQEpZV4AAAAAAAAAAAAA////////////////pSIv05KZ////////////////////////////////AAAAAQAAAP///6krNwAAAAAAAPHc3ggSEQcSEQAAAAAAAAAAABY3NEGelQAAAAAAAAEBAQEAAAD///+YARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGDg1g690CBgYAAAABAQEEAAAAAAAAS7etAAAAAAAAwGVtHklFIlJOAAAAAAAAAAAAAAAA+/X2BwYGAAAAAAAABAAAAAAAAB1IQwAAAAAAAAYNDBAmJB1IQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAgL//v4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAQEB//7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAECAv/+/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD////////////////cqK3qzM////////////////////////////////8AAAABAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGuLjDf9F8oBAAAAAElFTkSuQmCC">Free Software Foundation</A>
++ <DT><A HREF="http://libreplanet.org/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAC/v78AAAAAAPLy9ABsbakA/f3+APn5+QC6ur0A6urqAEpLbQACBLQApKW3AAULuQDMzMwAGBiDAL29vQCgocsAgnzJALu82QA+PpsAAQOvAOjo6ADZ2dkAysrKALS0zwD5+foAAgKRAAYGdQD19fUADhOjAAQJyACrnqIAxMTLAOnp7gDm5uYAzczNACgobwDg2dEAQkaeAA0RkAAUFnEA0MvQAIBzgAANDYsAk5OyAOTk5ADy8vYA1dXVAD8/cADGxsYA+fn7AAMHvgBzZnQApqauAAEGuQDExMQAAAGmAAoLmgADCMQAxMTdAAwPlwD+/v4ABg7MAF5ehADg4OAA0dHRAAAAoQAYEXAAwsLCALCxwQBnadkAAQGWAPz8/ACgoLgAbm6RANvb5wDr6+sA0dHSALe3uQADB8AAzc3NAGFhbAABAZcAOTtlALi4xwAAAJoA/Pz9AAQHnwADBJcACQl4AFVa3AChl6EAAgW2ABscdAABAq4A2NjYAAAAmwDAwMoAAQKmAAcMswDR0eQAAQSxANvX2wB4aXcAAQGpAAAAkwDW1tYAAgSpACIZZAAAAaEA+vr8AKuirAACBbcA8vLyALOztgADBZYAAACcAAACpwAEA6QAAQKnAPT09QD///8AvL3UADIpigDw8PAABwWOAK6dogBub4kAiozDANLS0gAFC8gAAgW4AP39/QAAAJ0A0NDQAMHBwQDp6ewACg2RAAIFqAAKCokA+/v7AAkOnwAAAaMA7OzsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeHh4eHh4eHh4eHh4eHh4AXh4eHhlbikzZlooeHh4eAF4eHh4hX1JVFweInh4eHgBeHh4XmlAGXNGSB8VeHh4AXg8LhaGcV9zKg0wQF54eAF4K0NNOGthjXNCUwAMS3gBPC82iW+CCRN2Iz4wTwx4AW0GgCc5OU41VnSKTBoOiwEFTz8hHIF5RANdQVRfNIMBeBUhe0o9jB0Pcjdzc1E8AXgsB3AbUlkQRVtnhHNoeAF4i45wJCAlYjJbdYRfY3gBeDwmEn4XMToKZDd6WDx4AXh4VTsIfwt3FGpsfAR4eAF4eHgEEYhQAodXYDx4eHgBeHh4eHg8GC1HPHh4eHh4AQABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA%3D">LibrePlanet</A>
</DL><p>
- <DT><H3>@seamonkey_and_mozilla@</H3>
+ <DT><H3>GNUzilla</H3>
@@ -300,8 +300,8 @@
- <DT><A HREF="http://www.mozillazine.org/">@mozillazine@</A>
- <DT><A HREF="http://forums.mozillazine.org/viewforum.php?f=40">@seamonkey_support@</A>
- </DL><p>
-+ <DT><A HREF="http://www.gnu.org/software/gnuzilla/">GNUzilla and IceCat</a>
-+ <DT><a href="http://www.gnu.org/software/gnuzilla/addons.html">Free addons</a>
++ <DT><A HREF="http://www.gnu.org/software/gnuzilla/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAGFBMVEVFRUV+fn6mpqa/v7/Ozs7Y2Njg4OD8/Pwuhn+TAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEQAACxEBf2RfkQAAAAd0SU1FB9MBDhQ6Gd8s57cAAAEVSURBVBgZBcGxVtpgGADQL9gHSBzqSognzMixmcWWzB6pmRHhnyvku6/fewMAIPD3TwHmQxHs6vr+A16bphNum/vV0x429201hcPjAGBTDZGnR/Kw1U181+u4HXvOdSxjUcztz8jjg1xGVBG9XPYxt4PviKiaWLg168iXtbrq+mPT1utjNcR1U73deRnL43M2sRgj3+oYs8uL3rLphPd2QWmHbMu/VS/cnk6UdtSW657g9yBlcZ0UAkUWzPvyRaAYmfd+HT4IZtvC59ibEJxXiqJjQpBpNEufBYE0McoOAunGhRMEFIPc7h4goJigQEBxk8u7AgEpL3IEAUZfcgAByGFXQACm5+4MAuB19QMEgI8CAgDgP4rivVgoKP6ZAAAAAElFTkSuQmCC">GNUzilla and IceCat</a>
++ <DT><a href="http://www.gnu.org/software/gnuzilla/addons.html" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAGFBMVEVFRUV+fn6mpqa/v7/Ozs7Y2Njg4OD8/Pwuhn+TAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEQAACxEBf2RfkQAAAAd0SU1FB9MBDhQ6Gd8s57cAAAEVSURBVBgZBcGxVtpgGADQL9gHSBzqSognzMixmcWWzB6pmRHhnyvku6/fewMAIPD3TwHmQxHs6vr+A16bphNum/vV0x429201hcPjAGBTDZGnR/Kw1U181+u4HXvOdSxjUcztz8jjg1xGVBG9XPYxt4PviKiaWLg168iXtbrq+mPT1utjNcR1U73deRnL43M2sRgj3+oYs8uL3rLphPd2QWmHbMu/VS/cnk6UdtSW657g9yBlcZ0UAkUWzPvyRaAYmfd+HT4IZtvC59ibEJxXiqJjQpBpNEufBYE0McoOAunGhRMEFIPc7h4goJigQEBxk8u7AgEpL3IEAUZfcgAByGFXQACm5+4MAuB19QMEgI8CAgDgP4rivVgoKP6ZAAAAAElFTkSuQmCC">Free addons</a>
</DL><p>
#include bookmarks.extra
<HR>
diff --git a/libre/icecat-i18n/PKGBUILD b/libre/icecat-i18n/PKGBUILD
index e6f2e82b8..aebc6cef0 100644
--- a/libre/icecat-i18n/PKGBUILD
+++ b/libre/icecat-i18n/PKGBUILD
@@ -1,7 +1,8 @@
# Maintainer: Luke Shumaker <lukeshu@sbcglobal.net>
# Contributor: fauno <fauno@kiwwwi.com.ar>
# Contributor: Figue <ffigue@gmail.com>
-# Contributor: emulatorman <andre.paulista@adinet.com.uy>
+# Maintainer : Márcio Silva <coadde@lavabit.com>
+# Maintainer : André Silva <emulatorman@lavabit.com>
# Based on firefox-i18n package
@@ -10,125 +11,230 @@
# - (optionally) edit PKGBUILD.in
# - Run 'make'. It will take care of everything else for you.
-_langpacks=(af ak ar as ast be bg bn-BD bn-IN br bs ca cs csb cy da de el en-GB en-US en-ZA eo es-AR es-CL es-ES es-MX et eu fa fi fr fy-NL ga-IE gd gl gu-IN he hi-IN hr hu hy-AM id is it ja kk kn ko ku lg lij lt lv mai mk ml mr nb-NO nl nn-NO nso or pa-IN pl pt-BR pt-PT rm ro ru si sk sl son sq sr sv-SE ta-LK ta te th tr uk vi zh-CN zh-TW zu)
+_langpacks=(
+ af
+ ak
+ ar
+ as
+ ast
+ be
+ bg
+ bn-BD
+ bn-IN
+ br
+ bs
+ ca
+ cs
+ csb
+ cy
+ da
+ de
+ el
+ en-GB
+ en-US
+ en-ZA
+ eo
+ es-AR
+ es-CL
+ es-ES
+ es-MX
+ et
+ eu
+ fa
+ ff
+ fi
+ fr
+ fy-NL
+ ga-IE
+ gd
+ gl
+ gu-IN
+ he
+ hi-IN
+ hr
+ hu
+ hy-AM
+ id
+ is
+ it
+ ja
+ kk
+ km
+ kn
+ ko
+ ku
+ lg
+ lij
+ lt
+ lv
+ mai
+ mk
+ ml
+ mr
+ nb-NO
+ nl
+ nn-NO
+ nso
+ or
+ pa-IN
+ pl
+ pt-BR
+ pt-PT
+ rm
+ ro
+ ru
+ si
+ sk
+ sl
+ son
+ sq
+ sr
+ sv-SE
+ ta-LK
+ ta
+ te
+ th
+ tr
+ uk
+ vi
+ zh-CN
+ zh-TW
+ zu
+)
-pkgbase='icecat-i18n'
-pkgname=($(for lang in ${_langpacks[@]}
- do echo icecat-i18n-$lang | tr A-Z a-z
- done))
-_pkgver=12.0
-pkgver=12.0
-pkgrel=2
-pkgdesc="Language packs for GNUzilla IceCat."
-arch=('any')
-license=('MPL')
-url="http://www.gnu.org/software/gnuzilla/"
-depends=("icecat=${pkgver}")
-source=($(for lang in ${_langpacks[@]}
- do echo http://ftp.gnu.org/gnu/gnuzilla/lang/$pkgver/$lang.xpi
- done))
-noextract=($(for lang in ${_langpacks[@]}
- do echo $lang.xpi
- done))
+pkgbase=icecat-i18n
+pkgname=(
+ $(for lang in ${_langpacks[@]}
+ do echo icecat-i18n-$lang | tr A-Z a-z
+ done)
+)
+_pkgver=14.0
+pkgver=14.0
+pkgrel=1
+pkgdesc='Language packs for GNUzilla IceCat.'
+arch=(
+ any
+)
+license=(
+ MPL
+)
+url=http://www.gnu.org/software/gnuzilla/
+depends=(
+ ${pkgbase%-i18n}=$pkgver
+)
+source=(
+ $(for lang in ${_langpacks[@]}
+ do echo http://ftp.gnu.org/gnu/gnuzilla/lang/$pkgver/$lang.xpi
+ done)
+)
+noextract=(
+ $(for lang in ${_langpacks[@]}
+ do echo $lang.xpi
+ done)
+)
build() {
- cd "${srcdir}"
+ cd $srcdir
}
-_path="/usr/lib/icecat/extensions/"
+_path=/usr/lib/${pkgbase%-i18n}/extensions/
for lang in ${_langpacks[@]}
do
eval "
package_icecat-i18n-$(echo $lang | tr A-Z a-z) () {
- install -Dm644 '$srcdir/$lang.xpi' \"\${pkgdir}\"'${_path}langpack-$lang@firefox.mozilla.org.xpi'
+ install -Dm644 $srcdir/$lang.xpi \"\${pkgdir}\"'${_path}langpack-${lang}@firefox.mozilla.org.xpi'
}
"
done
-md5sums=('334d06cd9e32b2c3df5129dba4f0f474'
- '99954e582ddb9bbd8965e6468e7d9799'
- 'a2b777edb9a595b4c427716458ffdeb6'
- '2d1796a37f2e927b5939de257dddab4e'
- '17589c7d8994d4f62fd95fddc2c0c796'
- '27f9d4029dbab73d9f5c6a7c169c1811'
- '5d13f0aeb780e4d3693bf62be21e6e11'
- 'c47f6aaa0b33261e7277f6d807e88396'
- '0d87bb53f0b71634c189eeb3f3d64bc5'
- '2ada422bef681cee2bd7e667a9090d6a'
- 'fc8bc018c6d41c2fcb883734e37b518a'
- '5e9b488cd52a42e235169de3a4b4cea2'
- '0b781ce69f571797d3dc1fd5b70d882c'
- '5ae943ee2293fd427a0072f1c95dd2e9'
- '15d2a2076008efefdb7d031f4d0b1663'
- '71a45cefe3b5f45de4ff784ca1a4fe1e'
- '98e6f6de8c0184f339cc1b88e31e285b'
- '43f9c2a3e9580b6a2adcc36dba4c0755'
- 'a12665f7c8e6121e82c6c0be91da3f2a'
- '7268181e8190cb62685c365fb99d9102'
- '6f60912c53bd21acd99ee11abd5862d9'
- '25f2c8a6665f6aef75204b1bcd0c0ff1'
- '6e3516383f6eaad4bc1abe5fdd212d26'
- 'c76f8a91086735c8252eab0d90e163e6'
- '85cf430e36e70713b715fca4e1ac3410'
- '60f3573882bbd1dc0ed0f16518660bf9'
- '6c51beefb2da7add8c8c635efc2fc565'
- 'e2d4d8182716b329249619d227d449f1'
- '28facbc470554488b0a722cb0c3d53d3'
- '3b167b50c188ef190fbad18077aacc0d'
- 'f8edd8921fb8fa24099d1725fc478a2b'
- '5b90202d9288d073e5f401b498355c13'
- 'ec8478b6e0420484de8d7332bafafac2'
- '9d932bc91062a58b0509b5395403c708'
- 'bba6d905218c4a2b3d6e289e3ef35186'
- 'b32d1ad6e5c8ed52cde0ea351290fd17'
- 'd0d1d307c87ec8c8102527944f05887e'
- '2605d5226c23205f3c7cd5466059b802'
- '2b800c1c729d3b65ae38050bd4c06af1'
- '8744ce05e573acefa9f802e53da2aea4'
- 'edd3e216b37ee32fd517c2b49e85439a'
- 'd9786706c058b1e4acac62f07deac285'
- '6377004ddaa6731734696509be6dda53'
- 'c73bd01ab8c5a25e234e51082978f7f5'
- 'b44a3df07e663803234c72f359d06422'
- '81c646a84b4f56d4721bec4013c123bf'
- '9b678f5dbb7243b9e5751d04b988b640'
- 'c237afb9ed6819a6219383590a8ee448'
- 'b27c9236866dd55ee01a6e3929752767'
- '8d527119a84f22840a919bc35ed612c0'
- '1b51158c8c218544654245c418943c3a'
- '1314bbc8cde2babcf6e807f7f958152c'
- '59eb9146f16189932d9d5eea536cd8af'
- 'a427b45282c6f8f4f1646050e9a93f71'
- '618771f03f807603b2efed2760f6004c'
- '56ca63d8c797d47fd3b6c094390990d7'
- '24bde56465d7ab923fed3e23eca59d42'
- 'ff9858a371df54c25f77ea4a5d1091f9'
- '6135b885b12ccc64d5c93f385d5c62ad'
- 'f98347a6ae9db6faef247373fd5092df'
- 'e58f094448b085636c9e9435ef22fb53'
- 'ed073cd4a1f3bbdcec1ee56334d8b9d3'
- '988a1c279f94941bd4ab3b90cfad0bbe'
- 'd8bc3ee80be944051f975a2534651ce1'
- 'bd94ef18efe11eeee93a0ff1dc602301'
- '20a8381c88b1735c558316936469c1a9'
- '064d6f05f7b4c1ce8c5e0f083eccef15'
- 'c22c4fb9da7cdee2cb29119e7c4f3696'
- '50071d48b92f373713f6f8ee483b6f7d'
- '518fbbf3838332da2e561565d29281bf'
- '2a5a42ad2110e7e24c967233fdc0dc2c'
- 'd21424a551ff625034b6e015f0eddcc4'
- '829a1e6fe575e761f97564f68a1859ec'
- 'd1047468370b7cbb766ed688107ca879'
- '27f3609a99c3be8e59cfc700e251a5d7'
- 'c7eb3ef0bedc610065713da9a55e2bf9'
- '9125fcb792da1e58f00c43ec5b7bce97'
- '5b9dd2a8ac84aace97a6095042ea537b'
- '13be748a3331f2a9fac691dec7173aa8'
- '0b694233f5385e0e5898d4b64a683bbc'
- 'ad037272aabcc3b58fd2141447113905'
- '347f53738950c9927b19ec3462840696'
- '4fc25f81dd0b744aaaea5705dd36d943'
- '5c96e79fc7463907b1c635586c910a71'
- '50b1dcbd0eaf9d62b3f9050598298933'
- 'c40de39f9502a8789f8301581cad25b4')
+sha512sums=(
+ 765390ba04d88b4b56cebab007f9f593e33c54fe3cd8dbbafdb48171db68e23cd4e1c3d8360f2ef641a537e27f1d6db1aa8a0bdade854d3151359ecab6676af9
+ 2b21f849299e7185163ce99e91aa612f64094cdf792bb855eb8836be940c0ef1cdfd33da080a793def714874810b269373f0c80830f42919f967417356efb86f
+ 86a79b1a785c967d56bb492a1c5867c42ac00832813a72027cc0a51dd940c1020dc7c911109efd9eb4ef1a9d996eea6382cd0a03a6a53e3347f909a28a3a943d
+ 727e3f44812c9c56620b7871fcffb28ebabef460fc52f483402fae787d90f3f197703e0bbde689a744e1135602b5ee765023402e0d365812e8521f8cf9dd2791
+ 06989be3fd8d73f7887dae3bac7b0bdc80c7a11b7e6c8630da0ee4652f0ffbd60e01c049242ab3b61555f84485ce9b2f098c80cf6dba41538442cdc5cbdded9b
+ bc9e19e9e216df4acb8d9bccae2e0e426ab402998934ad9393cf86a2a81c6d20c7ba622d1f312dd70a62c8659b611421904ba0aa5aa7e3eb7ece5ed578cbdd81
+ f12d343a5b5f9f35d3d112f041baa29919bfda8bf4c22353ac899ee65eda438c6a9ed243e7a03fb659aff0f9c448bfa5146807b8d3eafa9dd7b8384d7a0d8124
+ 11cedfcd91a550fa1f65d1eca4ebac97ecd7c823e7a41e74f908ae1dc0b36b7cbb0c91c2640de5a0ba61c6820c0101c195bb31482376880025b494b280c7274d
+ 51f0b5e575f99b718b5ca96416148cced3a2c3fcd512e7135d3062fbc6e3c0ede86cb5bbda4a0bed43f6bd73d5c493a97c5bfbf373a92edb48b4a299b27a4f4d
+ de166d28ba81758d002712c408eada0ca5955e9b6275bc5f491177496f79f8de9dd5d5cd10cda5bc7671c56d7b5d15e136910d671da58ab1363b4dae769b58c9
+ 79c0d107c1c61cd6281e0c545f10389a9968b7f49f27a4ff531c729c608cfff9107430f6d7b323a9f00cd2259ef5787db817b7aaa226272e7347413e0a50be83
+ a1f5399254c5ce261468dbf539072371a51796de02331e173f8c44704f95d7784280115f7ba1deb46874caeccdeb925d9fe540dc8b5ada5970df6274a06f3429
+ 11a278717f5da5a6d284242863bda3142ba4263946104fdbd86545f741127a368138bd4f7d0bd7bf377795d5d36fc61544b585dc044d5a6ddf93ce077f1e747f
+ 34a995016f4d7bff5c972bb4ef252a0ddac4f0b36943c7e4f8fbb899827aec307a081a7a30f1cb1fdf8c84af82f8f32675c57c45c39f7e47f21aacb75438be48
+ fc5d410a903912f05886c4573a3b199efae22f8c9810a7bfc6acf8b5851b1791d97bd562a9c77204b7cf9091e0731ffe332c640d8693165f69cb934e8d523e04
+ ab03d3e5391f806b6733078501d8a767cf2267d126cba284d473de21a7c976e55bd7ba63e3489336232ee9f5a7672b8c436e19adcfc68fe2a69db4e08b6f4b19
+ fa55b4a26a346c21f0b98c137c4fabbd7aaaa61de45da89ca26c78044d23be8333f2d0c849ec5a34ff7517a556a979ee98b1ce87f02174fcb695632bbbb5edeb
+ 1ac410bd9b30d917b77ebac3ba08e25adaa4a20a6a77d13229a0efedca7a3b650777a6ca71675fde69f06137b09150dd2dee89760b93801dcf14b2801e6e5ad8
+ 0b37ef6936f78c0384c36be7ad174cb90b5ca55b77128de6cdb6663de191144392728fccabc2baca25cb2d0f1ba69b80598bbf531e18b473a9515b553c1f594c
+ e2d4d6f1fc470d17dfc35b193c20f23b07dfbe54cad1b4f47d2f534493ea297dbdaf15e6c9b1556049c2db314dde66701a0624ef8af8f85f9cebbbf30f50ab3f
+ c3874b81b84de34fd9cfbb8b009dd033e57ffc726f7b607d895a917e4eb7ef9770ec0e24e0c41cdcd82f29c8140438101c1d1263ee64fbe0117c6b1510c0ed54
+ e06f5da5fd157045be13459635b881cd09c92cc5f56af7d745afbdb52889ff18e23a75475331cc13471d9e7aefe157f43ae83074856d81e4f4ad0a9b275d58a5
+ f04c77b037b04bf69929cdd712126b6c08a786d7a66181b3e536ca97c750506963b699dd8c4374fc01a86e694100f3fd9ed15d88ada0ef52364f492c5f61bb16
+ f538442bf340e7856522288498de54a28dd0b25f36ad7897d1e444e46e98d17c0e5432c6f40e02c49cacacbe5b6b87a4db0dfec3f79e52df91ef278e15afdd73
+ 9154c78adb5ec3d4c5dcb69bd61fb2b9a98a908f3fb6344ca5ba2ac96145ab8e770ad786b2c704f522c9f6cf61fdaf256e309e85bf105bbd83df892840804fca
+ 5c80bddaf0e51984034aac3d211327f89209673cceee5fc30dc4d9958cf44f564ce7aae995795987885c560a427a0098958fdcbf4534f5c84ec9778a3cd555c5
+ 1d8a8a3fe5b2ade77dbd7b6f7fee74cd82452ec4eeee42bcb590b6f919fbccd9d345dc1ac2c171d265882e3583b6826778df73713e23df4c4ca66cfed594971b
+ 6d060b98e0a1d27b87d2e3b4c038756897af223759a53e3ce31beca9244d27f71610e5bc87ffbc5c53aced569165067ebf07720e33ee2ac27105a981dbc201d4
+ 646eaaedec5aca57f26c0e1a8cc415e1607efc72a1f37205c40a22ee38e334ec138851375b0091c5d5ea5d8c5d7a2e2e90422e6aec0ddf6079a46f09696911b0
+ a7619e2cd951f2b6c87f54386159fbffe5ef3895b05ac5422c76403b8cfd31b05ce98e3dd1532b79e81629adab828149c7154ba861d0bd4760a24ba74a8f4293
+ 06dc48e0368927111fc7b4d3ea86c1a8a3a4b077fe0bddd434cf388c9048d2ea0cbd6184becfb2d02005c2e3ed6351e019a086a705c558a8e1e2df0a2816516f
+ 5b2120ffe02f469c1b52f0c4d9255619781aeac36e40c8df700707c955118ec298b78474ac2a17cf9d2823f049e9e15596fc58c4cffb5ac07315f9a73f7e2ad3
+ c3141419942b85f93b2d6f5643544987f57e2805f1586c40ba91b814876cdf635f2500d350ad2a335cf440405716ed8e212221a7a9140cd8a4c3edee67fd3658
+ 5fab16a0210bb6d6bcd18701ec0ff669bf5a971dd9f6953186864e09758ca37283af88c7dfec120cef87b9372bad61ac76d8248dad2bea68ca86b3a6410bc446
+ d793679d2b51ecf41c0265e9bd9549d8bdae7d1db2afee631088bbf0aee314f16037840fcef8a1241519b952cdebec7f3eecedf3583ccdb92514d855d8577eb8
+ bf658f472d23871cb3b54f9100bf3e935985625b4607330dff318315b9b56eae913c020ec69b0465f6a5cb3ac508e39bc0597e65cc940c20db7a63e3728dd632
+ be75a19e56a39b597a88133071ca8f8d8ad2931d9accf47db3370d72c5d0dc9fd1c206f70ba64643a1657198ee930eb8884f36e2f9a2e7dbafb9bcd624c1c993
+ b2ba8025736c7c8b40661826908c046e9ba8d61c1f273594d043c56f62dec39ed8e27c428a9444b946c2f638bdf60af5b9c5bd90b578d37dcdd884a9b0766d83
+ cb140b72c26eb8e0d150cfac0da9a74932f2764911764d2ba326a6c059547e8e6ad1a5b5f6630b55f8dff1290182672c0c6016cf863b22a0e17524a79c1b835e
+ 5b6426c3c68ead2e9dd4975d18d671bdead44e455ee2802935fa34d153a9a651af765f25731ff0cd462823c85e60b3ad13b9e4a340c80e5b6435d9cb74545a89
+ 03501a4808ba5cb0c9a94b61843a33604fde88d00bac2cc0e141975cef5ccc2ad4de219bcc077b92191fa45ba228dff3920c206add564a4331ccfbe02a8f69db
+ 5277580baa12169d15396ee08d019f5a1fa4cca86ba52e0e2dd05b0f497599cd5c560638ed502b842328c3e767a0f2bffcb6cfdbeada4d7613ff9f9040bd416f
+ 6656d0508d65c6e860fe66f5d1180c6040f03ac0579a85dded1f3e2b3d26341be4da8c423029927443ac99dfd52a954aa21f1a06a729ecaa4dca1522ccdd9333
+ 4dcc6b8f1305d3b9ee3b6f90a92d169d8c9a3d6aec52b92c320a9cad88fc7c26567a343e201d943c56e721c587d2bbd74bbcfdb29fc0a2691f85e9262fad5dbd
+ 046b6d47386940892f07a10f564b9bbd0fdf7094a0e1f468f42d4b33514d8122b54a78fd6de09ad442a497eba266ad459733a86eda417c87db91d988c9d1ce2d
+ 0334bb286b560fa28ce9763868110970043155a24f6fec9b01611639add7b2f98781692d4ef84244d67c91afe477a9b1984aaedcba570ad0169c77d904cf865f
+ 6dda8b0cd0b5862520812ad2e2d4a5ee7d4be030565dcec55cefb0ff3eb960fb1f18aa52ee437d96890ccc35483d93b4fa684ea042cbb530d038d99770e45760
+ 5ba5df20669dd3b337dae8de5f909def9747f4c22c041108ca30398ff59004c4a37dbfe88c243d55af23ef85fbe4509d4a4ddda772626f5170573f89a6f7990b
+ 9dd8b244130b291d16390fabf3470235892ae2506f7020fb5e1a3dcf142a5f771e3ebc91a6b14036721dd216751764a2d5cd74a6f60db92cdbe62e97f69d6af5
+ a64ef951b6f0e23d8407414b9c1a5f5c8eabf89d7680fcbedb5acb70a9ca7e4c3253437e2af23c4287ecb5638587bceed4a87edc990056b26199e8cd9b955275
+ 57459b8e13110e89acaa042a3c7bcfdde40c8f5e7fe00277f38960e23a9e750b1a85fba35fff29c8eca0d0d6c2e38a357cc2692a80af70feef8816225a88805b
+ 33cd4be72524c0d0877760a882c79e47fff8036e455103a2587d2eb694715f081a5c95355a8a536df08da4a62c8872001db2a9a1431fe9803d2267a3e02334e9
+ 5e653ab0eb49e89408b51f34a549f0f1ac20868d121f9688f04a53788748b69f7f4628355fb23de6c1f69aefbb244d646debf345bed8f98a9f16f1fbd785f116
+ 04bcfcf4683ff0f0596e703ea280d843d42f5e883a7c252518c1cc1953b7a7391b38adcab720a020164fa6adfbdfc8f40255109641880c83815b4b5bdb218378
+ 6d550a3a1b4e1c375e6754e0e81e049bb10c04ec87614266123076dbc71b518bac4dc03233c7f8fb022302e1d5f7ed0064efdf6a21a98d17b8b0600b04b540fb
+ a8a14d0095ed6cb5b6e06f9737cbd7923c4fbce394671e510e275198312144706fa3e3063f4f57a3cd4ec9b08714f8e6b9d01943613b0147502be77647cc9440
+ 3fa8938e38ea904b31a086b7cf8221b5ec4aa3c125fab79a9c88e68cc799595117d2199b6fc80e8b7cc1a809e1a10c230a929f420e4ef25bbd04775a0dfd52e1
+ 1cb6fca6e8214603b1d60f5c0a187514b002704d33811ce229129a223fd63d55b4aafb1ccd1ed21d003f32b983bff8f785c74b488673edb8a5027f336dfde5d4
+ 6566215d680dabf8184ba6edd33ddeeec09d2e2544250e7cf5026c4ea420de6273568056ac403739649d1f2636764459525b847f9d6e21ff860d211bdd3a0eed
+ 2c085539c1ab882b0370b2112d517b8f1be1f5869560fa5c0242ccc159c01b9f1c770593e72cafa6eecc3e3e623fe33a9901b2e0d576d98c85219122cdb34317
+ 1f7e9eb6351e8de6b709c0a31b1cfcbfa108288da5b5b99ea88235e568b84ee0a3eabd8814c5f4b9935caca467f4a8e4531317ba8abf2d6d3121def8682fa961
+ fde912f0a7cfac59fad72a56ddfe6c7ff10fc51a53ac5b89229f08f18c4ff689eb15d2980d32433b640f62941e7b38c4bf147b7728c22849fb04da46a13ec707
+ e8b4de904e52503028ba50ec96fc4cf151ccae03bf42240c680204fa1794233374db6a4cc3a2e13965c28af2984be9f55288b0a9f522ec0d1ae738829da04b52
+ 5bf071de14dce19ef5faa4b0b35a0618eb65093283c22d4da16b45839b6b3cfd4314fb8173f419dd3596b9684fd7c6ca1258098e0b9c4167b1546987c0e93b1e
+ ba0af0ad267b49e2890e77568882eae7d34846208472bfa3299934ae6d40a9864e39340a8228dd6215988a3238dd59dc84856e0d7cb4375601b0018683e867e7
+ 3aac042bc0107e8f5d25009266f61272edbb70cad3dd0e984344738995a2119df247a4664bbd1c2bf9f7f889d0f8cb7039b6e852208f2f0c6040ef8953072cc4
+ 8c1621ad105104b6dff50fa769c2504d66ef0d1c716f954ab1eb83742efad48be22ec718d4520a262bc733b42c72ef1a0085d1a1868124c5c18a1b4141b89041
+ 1da09d13349b54f21ccaa46c0d96c320ee940af10591755a55e8953187a6159b1e1ebe087e3061888dbdc43ee767ed59259312d10e04f1374c45a715d09935ff
+ f0430e711a97bc9b0603620ac4a9adf7f63916c5ccdea3db588679df6a36fc4ccf7a17c9f581f7fab679002c50e4f0b8708ae5a2ee9bce4cb1d39bcc2dc05aef
+ bef2db0771b5f7053366d0a2f4fc9cce96649af1aec497bb5f38b9fd3affa0fc662a194d2f69f8cc49121037350690b6506da6f6659c41bef734089c8c7da784
+ b7585ac1320f12915f01359a573eeff3524fbe24a583476f12a18ce16389c00802f4e48ebc2d4ecdb002dbcca97a44ad5721b0445bcfe0dee220f7d90abef4a5
+ 59e278a846484b7c57c978b66658031d23dfc297f63bd756f82701b700906f74322de60988cd481a84c48a7d5e828e411e2ca7e4e58f7f695016b6ffbd680af1
+ 21dc4bcdece71d8d310e179c010dc6c4b089ab55315ba7c67aee7da5a93b3ffc22f27e0c10087137c594adf1114abdbeda2424d5ee8c4944e6ad2a780d93acfb
+ bf16ae0501316c61656147bdff8140e9f75bfbc9ee625e791b11531d019a6431d9c9ee4110f2d566ae4f11c8d6d4d035c3ebed1a0f6ee0d98f2ede52bcc91e16
+ 32161e5a951c353456564b6b0a203e148986322eccf7169630bda6fe8e3913485d431940595a27ff3e9ed71d3a9f2b2a2fd2835363e5db69a2982273e321186c
+ 01f6d21908175d58123faa91ec0545a173226052632ef636a3b6ded2b77bd6554532eb94e2a87ae2a64ef62cceacf3fc800360232b11a51cc91dfde4397190d8
+ 8f8275d5a4582b524a6dd31ee81afffe1ca8371a87f50cfb663ab397a5906f6ad485b7ed7c49781af9bce82ef5e34f2d3de883ed45a5972ccb187cdbdae9c7c7
+ 7183274b7d97652ae635a971dd539d46d16a397eac1f3e51c93c53fb8abfd6eb01cdfd41f7c951847291b033a17e6566ea2b9a629dc5796f012bf1993ca14b40
+ b35822f1b09062a9c5b6fa41e036657f68def07a15ee9d5f078d372fdc17bb36fa42f08c1a3ed73bb7eb63d290041f441a580c19ee1f2fe789575aa6361b0293
+ c9d05ac24a63799805ebe257c11675c1400a014e0d8c408a02e9b3842ec7bf40922a76120297b6796bba3adff0d2449abe1068085176f0deec0463756e3b5c3d
+ 28ff49291b5cfc51acd878fee3e2de6693bc060ac8f4b1233d44cd5797bf2815c0a563f07decd38647d384f183fb9f945e1040d77bfde4503320a5af2b91482f
+ 8a137bc5d30e662a28fb809615ebf480503e278a5882aa81b71260d8c548b73e0401e458a6dc4cf0e9e9a61bbadb72a5d8c4e636d7ce616672bf7f10bd4dc810
+ cfa399cf459b2487f260a7287b1ddfcbc8ecde9bda160f6f8036bbff7389a383be5acadbfad092b72cbf7d77d8b053fbe98b3df0ae6f01029b92e78bbbf681ba
+ 5553b2e0193fe0aa65cc88171b5358949906ee01292bc2b2aaf1bc7c330b703d998901999aa5dd923861886b589411b221ae00fc3323cc3bb23068dd21220601
+ 502426fc851b9ce8782a7c73b6024492b8e7a46764eaaf2a3b4fef7546312dde9ae9d6a83619f93c3fa96e85767d0cae668f3f9d4cf16427d9b8e7f55163df41
+ 5b48c402f4ac36366d157a30db3c36e0bbbf6f8601a498ef0d7cfac4899ed5a168826caae7427f949cef7c54fada0c4886b5f7b7c9efb933fc246781845d5db4
+ e8b0a1580757da961551580dcb83fe5dca1a99e446fc9b0bf302e7eded06f4ad795650743b387c0ce05840f238940e0013019b4b36d9eaff1272057fe2949c0a
+ b2d8be6934966c477c07f6c7fbe341148b7cdb75aeb51ac0fbe15b72c933a2886454057237ae968a3ce7d3d8b7132b8d9f488dac8e68f6ed451c608c17738f27
+)
diff --git a/libre/icecat/PKGBUILD b/libre/icecat/PKGBUILD
index 8b0e01047..c90dc65f6 100644
--- a/libre/icecat/PKGBUILD
+++ b/libre/icecat/PKGBUILD
@@ -3,8 +3,8 @@
# Contributor: Figue <ffigue at gmail>
# Contributor (Parabola): fauno <fauno@kiwwwi.com.ar>
# Contributor (Parabola): vando <facundo@esdebian.org>
-# Contributor (Parabola): emulatorman <andre.paulista@adinet.com.uy>
-# Contributor (Parabola): Márcio Silva <coadde@adinet.com.uy>
+# Contributor (Parabola): André Silva <emulatorman@lavabit.com>
+# Maintainer (Parabola): Márcio Silva <coadde@lavabit.com>
# Contributor (Arch): Jakub Schmidtke <sjakub@gmail.com>
# Thank you very much to the older contributors:
# Contributor: evr <evanroman at gmail>
@@ -14,104 +14,95 @@
# the value for 'browser.dictionaries.download.url' in 'libre.patch'
_pgo=false
-
-_pkgname=icecat
-pkgver=12.0
-pkgrel=1
-
-if [ -z "$pkgname" ]; then pkgname=$_pkgname; fi
-if $_pgo; then
- pkgname+='-pgo'
-fi
-
-pkgdesc="The GNUzilla web browser, based on Mozilla Firefox. SafeBrowsing and other Google services disabled!"
-arch=('i686' 'x86_64' 'mips64el')
-license=('GPL2' 'MPL' 'LGPL')
+pkgname=icecat
+pkgver=14.0
+pkgrel=2
+pkgdesc='The GNUzilla web browser, based on Mozilla Firefox. SafeBrowsing and other Google services disabled!'
+arch=(i686 x86_64 mips64el)
+license=(GPL2 MPL LGPL)
depends=(
- 'alsa-lib'
- 'dbus-glib'
- 'desktop-file-utils'
- 'gtk2'
- 'hicolor-icon-theme'
- 'hunspell'
- 'libevent'
- 'libnotify'
- 'libvpx'
- 'libxt'
- 'mime-types'
- 'mozilla-common'
- 'mozilla-searchplugins'
- 'nss>=3.13.1'
- 'sqlite3'
- 'startup-notification'
+ alsa-lib
+ dbus-glib
+ desktop-file-utils
+ gtk2
+ hicolor-icon-theme
+ hunspell
+ libevent
+ libnotify
+ libvpx
+ libxt
+ mime-types
+ mozilla-common
+ mozilla-searchplugins
+ 'nss>=3.13.3'
+ sqlite3
+ startup-notification
)
makedepends=(
- 'autoconf2.13'
- 'diffutils'
- 'imagemagick'
- 'libidl2'
- 'librsvg'
- 'libxslt'
- 'mesa'
- 'pkg-config'
- 'python2'
- 'unzip'
- 'wireless_tools'
- 'zip'
+ autoconf2.13
+ diffutils
+ imagemagick
+ libidl2
+ librsvg
+ libxslt
+ mesa
+ pkg-config
+ python2
+ unzip
+ wireless_tools
+ zip
+)
+optdepends=(
+ 'wireless_tools: Location detection via available WiFi networks'
)
if $_pgo; then
- makedepends+=('xorg-server-xvfb')
+ makedepends+=(xorg-server-xvfb)
options=(!ccache)
fi
-
-url="http://www.gnu.org/software/gnuzilla/"
-install=icecat.install
-source=(ftp://ftp.gnu.org/gnu/gnuzilla/${pkgver}/${pkgname}-${pkgver}.tar.xz
- mozconfig
- mozconfig.pgo
- xulrunner-copy-stub.patch
- libre.patch
- icecat.desktop
- icecat-safe.desktop
- icecat-install-dir.patch
- vendor.js
- gcc47.patch
- cairo.patch)
-
-md5sums=('04a5504c5c473354bcd20f7116360fee'
- '3117865902d1a20ab61d75707be9888e'
- 'ac29b01c189f20abae2f3eef1618ffc0'
- '683c4540ab84c220937feb7d1a1450ee'
- 'd403b0ae09306fef3870132e7fd33ed2'
- 'e81ad01dbc16ba28bf92ba4b7c309ca7'
- 'd93fe402b87cd000a869e1fd6badc6c9'
- '268e65c8fcae6152e156c09760a18dfd'
- '0d053487907de4376d67d8f499c5502b'
- '79e471e0bd03b1d4e84fd3a6776bd619'
- '721c59ffc14f14cb0d3a90b7e84df70e')
-
-if [ "$_pkgname" != "$pkgname" ]; then
- provides+=("$_pkgname")
- conflicts+=("$_pkgname")
-fi
+options=(!emptydirs)
+url=http://www.gnu.org/software/gnuzilla/
+install=$pkgname.install
+source=(
+ ftp://ftp.gnu.org/gnu/gnuzilla/${pkgver::4}/$pkgname-$pkgver.tar.gz
+ mozconfig
+ mozconfig.pgo
+ xulrunner-copy-stub.patch
+ libre.patch
+ $pkgname.desktop
+ $pkgname-safe.desktop
+ $pkgname-install-dir.patch
+ vendor.js
+ cairo.patch
+)
+md5sums=(
+ 6bb02202cd568e8a4f43239b8f52a4a7
+ 3117865902d1a20ab61d75707be9888e
+ ac29b01c189f20abae2f3eef1618ffc0
+ 3009b176cc5f9b1e416b1bf7c45b064b
+ 72e6bb9ebebe555b4ab961add3df3b27
+ e81ad01dbc16ba28bf92ba4b7c309ca7
+ d93fe402b87cd000a869e1fd6badc6c9
+ b320085e7effa2890a79f4f45760614b
+ 0d053487907de4376d67d8f499c5502b
+ c8552d030494443218d88792f4dbbd0f
+)
build() {
- export LDFLAGS="$LDFLAGS -Wl,-rpath,/usr/lib/$_pkgname"
- export PYTHON="/usr/bin/python2"
- mv "$_pkgname-$pkgver" "$srcdir/mozilla-build"
- cd "$srcdir/mozilla-build"
-
- patch -Np1 -i "$srcdir/icecat-install-dir.patch" # install to /usr/lib/$pkgname
- patch -Np1 -i "$srcdir/xulrunner-copy-stub.patch" # small fix
- patch -Np1 -i "$srcdir/libre.patch" # Remove Google+Mozilla stuff
- patch -Np1 -i "$srcdir/gcc47.patch"
- patch -Np1 -i "$srcdir/cairo.patch"
-
- cp "$srcdir/mozconfig" .mozconfig # Load our build config, disable SafeSearch
+ mv $pkgname-$pkgver $srcdir/gnuzilla-build
+ cd $srcdir/gnuzilla-build
+ cp $srcdir/mozconfig .mozconfig # Load our build config, disable SafeSearch
if $_pgo; then
- cat "$srcdir/mozconfig.pgo" >> .mozconfig
+ cat $srcdir/mozconfig.pgo >> .mozconfig
fi
+ patch -Np1 -i $srcdir/$pkgname-install-dir.patch # install to /usr/lib/$pkgname
+ patch -Np1 -i $srcdir/xulrunner-copy-stub.patch # small fix
+ patch -Np1 -i $srcdir/libre.patch # Remove Google+Mozilla stuff
+ patch -Np1 -i $srcdir/cairo.patch # fix cairo
+
+ # Fix for use nspr, sqlite and nss external
+ sed -i 's/\(MOZ_PKG_FATAL_WARNINGS =\).*/\1 0/' \
+ browser/installer/Makefile.in
[ "$CARCH" = "mips64el" ] && echo "ac_add_options --disable-ipc" >> .mozconfig
@@ -120,7 +111,7 @@ build() {
browser/base/Makefile.in
# This is a bug, we should fix it.
- if [ "$CARCH" = "mips64el" ]; then
+ if [ $CARCH = mips64el ]; then
# Fix MIPS N32 support.
sed -i 's/defined(_ABIO32)/(defined(_ABIO32) || defined(_ABIN32))/' \
js/src/assembler/wtf/Platform.h
@@ -134,44 +125,43 @@ build() {
fi
chmod +x build/unix/run-icecat.sh # fix bug for bad file permition
+ export LDFLAGS="$LDFLAGS -Wl,-rpath,/usr/lib/$pkgname"
+ export PYTHON=/usr/bin/python2
if $_pgo; then
LD_PRELOAD="" /usr/bin/Xvfb -nolisten tcp -extension GLX -screen 0 1280x1024x24 :99 &
- LD_PRELOAD="" DISPLAY=:99 make -j1 -f client.mk profiledbuild MOZ_MAKE_FLAGS="$MAKEFLAGS"
+ LD_PRELOAD="" DISPLAY=:99 make -j1 -f client.mk profiledbuild MOZ_MAKE_FLAGS=$MAKEFLAGS
kill $! || true
else
- LD_PRELOAD="" make -j1 -f client.mk build MOZ_MAKE_FLAGS="$MAKEFLAGS"
+ LD_PRELOAD="" make -j1 -f client.mk build MOZ_MAKE_FLAGS=$MAKEFLAGS
fi
}
package() {
- cd "$srcdir/mozilla-build"
- make -j1 -f client.mk DESTDIR="$pkgdir" install
+ cd $srcdir/gnuzilla-build
+ make -j1 -f client.mk DESTDIR=$pkgdir install
- install -m644 "$srcdir"/vendor.js "$pkgdir/usr/lib/$_pkgname/defaults/pref"
+ install -Dm644 $srcdir/vendor.js $pkgdir/usr/lib/$pkgname/defaults/pref
- brandingdir="browser/branding/unofficial"
- icondir="$pkgdir/usr/share/icons/hicolor"
+ brandingdir=browser/branding/unofficial
+ icondir=$pkgdir/usr/share/icons/hicolor
for i in 16x16 32x32 48x48; do
- install -Dm644 "$brandingdir/default${i/x*/}.png" "$icondir/$i/apps/$_pkgname.png"
+ install -Dm644 $brandingdir/default${i/x*/}.png $icondir/$i/apps/$pkgname.png
done
- install -d "$pkgdir/usr/share/applications"
- install -m644 "$srcdir/icecat.desktop" "$pkgdir/usr/share/applications"
- install -m644 "$srcdir/icecat-safe.desktop" "$pkgdir/usr/share/applications"
+ for d in $pkgname $pkgname-safe; do
+ install -Dm644 $srcdir/$d.desktop $pkgdir/usr/share/applications/$d.desktop
+ done
- rm -rf "$pkgdir/usr/lib/$_pkgname/"{dictionaries,hyphenation,searchplugins,plugins}
- ln -sf /usr/share/hunspell "$pkgdir/usr/lib/$_pkgname/dictionaries"
- ln -sf /usr/share/hyphen "$pkgdir/usr/lib/$_pkgname/hyphenation"
- ln -sf /usr/lib/mozilla/plugins "$pkgdir/usr/lib/$_pkgname/plugins"
- ln -sf /usr/lib/mozilla/searchplugins "$pkgdir/usr/lib/$_pkgname/searchplugins"
+ rm -rf $pkgdir/usr/lib/$pkgname/{dictionaries,hyphenation,searchplugins,plugins}
+ ln -sf /usr/share/hunspell $pkgdir/usr/lib/$pkgname/dictionaries
+ ln -sf /usr/share/hyphen $pkgdir/usr/lib/$pkgname/hyphenation
+ ln -sf /usr/lib/mozilla/plugins $pkgdir/usr/lib/$pkgname/plugins
+ ln -sf /usr/lib/mozilla/searchplugins $pkgdir/usr/lib/$pkgname/searchplugins
# We don't want the development stuff
- rm -rf "$pkgdir"/usr/{include,lib/$_pkgname-devel,share/idl}
-
- # Fix a bug with https-everywhere (duplicate rules)
- #rm -f "$pkgdir/usr/lib/$pkgname/extensions/https-everywhere@eff.org/chrome/content/rules/GoogleMaps.xml~HEAD"
+ rm -rf $pkgdir/usr/{include,lib/$pkgname-devel,share/idl}
# Workaround for now: https://bugzilla.mozilla.org/show_bug.cgi?id=658850
- ln -sf $_pkgname "$pkgdir/usr/lib/$_pkgname/$_pkgname-bin"
+ ln -sf $pkgname $pkgdir/usr/lib/$pkgname/$pkgname-bin
}
diff --git a/libre/icecat/cairo.patch b/libre/icecat/cairo.patch
index 981eff883..a1fabee90 100644
--- a/libre/icecat/cairo.patch
+++ b/libre/icecat/cairo.patch
@@ -1,16 +1,6 @@
-From: Uli Schlachter <psychon@znc.in>
-Date: Thu, 17 May 2012 10:51:11 +0200
-Subject: Bug 722975 - Make system cairo work again
-
----
- gfx/thebes/gfxPlatform.cpp | 16 ++++------------
- 1 file changed, 4 insertions(+), 12 deletions(-)
-
-diff --git a/gfx/thebes/gfxPlatform.cpp b/gfx/thebes/gfxPlatform.cpp
-index fb06fba..a0edefc 100644
--- a/gfx/thebes/gfxPlatform.cpp
+++ b/gfx/thebes/gfxPlatform.cpp
-@@ -436,11 +436,9 @@ void SourceBufferDestroy(void *srcBuffer)
+@@ -459,11 +459,9 @@ void SourceBufferDestroy(void *srcBuffer)
static_cast<SourceSurface*>(srcBuffer)->Release();
}
@@ -24,7 +14,7 @@ index fb06fba..a0edefc 100644
origSurf->SetData(&kSourceSurface, NULL, NULL);
}
-@@ -512,14 +510,8 @@ gfxPlatform::GetSourceSurfaceForSurface(DrawTarget *aTarget, gfxASurface *aSurfa
+@@ -535,14 +533,8 @@ gfxPlatform::GetSourceSurfaceForSurface(DrawTarget *aTarget, gfxASurface *aSurfa
imgSurface->Stride(),
format);
diff --git a/libre/icecat/icecat-install-dir.patch b/libre/icecat/icecat-install-dir.patch
index 6609650da..eb698f307 100644
--- a/libre/icecat/icecat-install-dir.patch
+++ b/libre/icecat/icecat-install-dir.patch
@@ -1,9 +1,8 @@
-diff -Nur icecat-12.0.orig/config/autoconf.mk.in icecat-12.0/config/autoconf.mk.in
---- icecat-12.0.orig/config/autoconf.mk.in 2011-12-31 17:07:52.000000000 -0500
-+++ icecat-12.0/config/autoconf.mk.in 2011-12-31 17:11:18.000000000 -0500
+--- a/config/autoconf.mk.in
++++ b/config/autoconf.mk.in
@@ -74,8 +74,8 @@
mandir = @mandir@
- idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_BASE_VERSION)
+ idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
-installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
-sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION)
@@ -12,9 +11,9 @@ diff -Nur icecat-12.0.orig/config/autoconf.mk.in icecat-12.0/config/autoconf.mk.
DIST = $(DEPTH)/dist
LIBXUL_SDK = @LIBXUL_SDK@
-diff -Nur icecat-12.0.orig/js/src/config/autoconf.mk.in icecat-12.0/js/src/config/autoconf.mk.in
---- icecat-12.0.orig/js/src/config/autoconf.mk.in 2011-12-20 18:28:21.000000000 -0500
-+++ icecat-12.0/js/src/config/autoconf.mk.in 2011-12-31 17:11:43.000000000 -0500
+diff -Nur a/js/src/config/autoconf.mk.in b/js/src/config/autoconf.mk.in
+--- a/js/src/config/autoconf.mk.in
++++ b/js/src/config/autoconf.mk.in
@@ -60,8 +60,8 @@
datadir = @datadir@
mandir = @mandir@
diff --git a/libre/icecat/libre.patch b/libre/icecat/libre.patch
index ff7f6f4ed..18dfcc177 100644
--- a/libre/icecat/libre.patch
+++ b/libre/icecat/libre.patch
@@ -1,39 +1,144 @@
-diff -urN iceweasel-13.0.orig/browser/app/profile/firefox.js iceweasel-13.0/browser/app/profile/firefox.js
---- mozilla-build.orig/browser/app/profile/firefox.js 2012-06-01 09:03:47.000000000 -0300
-+++ mozilla-build/browser/app/profile/firefox.js 2012-06-05 19:53:08.847012282 -0300
-@@ -64,10 +64,11 @@
- // Preferences for AMO integration
+diff -Nur a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
+--- a/browser/app/profile/firefox.js
++++ b/browser/app/profile/firefox.js
+@@ -70,6 +70,7 @@
pref("extensions.getAddons.cache.enabled", true);
pref("extensions.getAddons.maxResults", 15);
- pref("extensions.getAddons.get.url", "http://www.gnu.org/software/gnuzilla/addons.html");
-+pref("extensions.getAddons.getWithPerformance.url", "http://www.gnu.org/s/gnuzilla/addons.html");
- pref("extensions.getAddons.search.browseURL", "http://www.gnu.org/software/gnuzilla/addons.html");
- pref("extensions.getAddons.search.url", "http://www.gnu.org/software/gnuzilla/addons.html");
- pref("extensions.webservice.discoverURL", "http://www.gnu.org/software/gnuzilla/addons.html");
-
- // Blocklist preferences
- pref("extensions.blocklist.enabled", true);
-@@ -81,7 +82,7 @@
+ pref("extensions.getAddons.get.url","http://www.gnu.org/software/gnuzilla/addons.html");
++pref("extensions.getAddons.getWithPerformance.url","http://www.gnu.org/s/gnuzilla/addons.html");
+ pref("extensions.getAddons.search.browseURL","http://www.gnu.org/software/gnuzilla/addons.html");
+ pref("extensions.getAddons.search.url","http://www.gnu.org/software/gnuzilla/addons.html");
+ pref("extensions.webservice.discoverURL","http://www.gnu.org/software/gnuzilla/addons.html");
+@@ -87,7 +88,7 @@
pref("extensions.update.autoUpdateDefault", true);
// Dictionary download preference
-pref("browser.dictionaries.download.url", "https://addons.mozilla.org/%LOCALE%/firefox/dictionaries/");
-+pref("browser.dictionaries.download.url", "about:blank");
++pref("browser.dictionaries.download.url","http://www.gnu.org/software/gnuzilla/addons.html");
// The minimum delay in seconds for the timer to fire.
// default=2 minutes
-@@ -242,7 +243,7 @@
- // 0 = blank, 1 = home (browser.startup.homepage), 2 = last visited page, 3 = resume previous browser session
- // The behavior of option 3 is detailed at: http://wiki.mozilla.org/Session_Restore
- pref("browser.startup.page", 1);
--pref("browser.startup.homepage", "chrome://branding/locale/browserconfig.properties");
-+pref("browser.startup.homepage", "about:home");
-
- // This url, if changed, MUST continue to point to an https url. Pulling arbitrary content to inject into
- // this page over http opens us up to a man-in-the-middle attack that we'd rather not face. If you are a downstream
-diff -urN iceweasel-13.0.orig/browser/locales/en-US/chrome/browser-region/region.properties iceweasel-13.0/browser/locales/en-US/chrome/browser-region/region.properties
---- mozilla-build.orig/browser/locales/en-US/chrome/browser-region/region.properties 2012-06-01 09:03:48.000000000 -0300
-+++ mozilla-build/browser/locales/en-US/chrome/browser-region/region.properties 2012-06-15 02:17:00.978636665 -0300
+diff -Nur a/browser/base/content/aboutHome.js b/browser/base/content/abouthome/aboutHome.js
+--- a/browser/base/content/abouthome/aboutHome.js
++++ b/browser/base/content/abouthome/aboutHome.js
+@@ -38,104 +38,6 @@
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+-// If a definition requires additional params, check that the final search url
+-// is handled correctly by the engine.
+-const SEARCH_ENGINES = {
+- "Google": {
+- image: "data:image/png;base64," +
+- "iVBORw0KGgoAAAANSUhEUgAAAEYAAAAcCAYAAADcO8kVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ" +
+- "bWFnZVJlYWR5ccllPAAADHdJREFUeNrsWQl0VNUZvve9NzNJJpnsIkuEJMoqAVJAodCKoFUsAUFQ" +
+- "qhig0npaRUE8Viv1FFtQWxSwLXVhEawbhOWobOICFCGiEIIQRGIgCSFjMslsb9567+1/Z+7gmIYK" +
+- "Vivt6Ztzz5y5b+7yf//3f/9/38PoW7gYY+i7uDDG39heJfT/q91LGTiTIcWJkCxzxDmCCBGCkBEO" +
+- "FDCm5CPs+CGWYvcliRxEzDwgu9I/IzZClonQgT/jC9Eu3GFTz6sdKc57kIzHWKaFjIA2wz++Zhkn" +
+- "yblMIDkAFIcDDFcQ+vtjGJuaOlKPkB2G4V4U9kcu8zfWlPtPVX/g9zZ7QwE03jDTqzWVndBUc57a" +
+- "Up91gToce0cf3R05El5u6gYyNQ0BKK/x/nNmjKwwxBmx8/eSNHiWsVLXlBJ/7UdTazcN3gn3bYEw" +
+- "FmG3pvOobRuScoc+ibEyF6GsUugrgEYuMGD4nqltmJjqFBkt+gcJ/ed0SZIA5crZ+gumrpQ0H319" +
+- "ogBFh6aJFoGmQguf2n7tu62HnvgJ1cPBcN3m6dAnX4CM4QAQigmxdQthm9EEJ58bY3bOl/CQ2YE5" +
+- "pu24LdBwZE7De+M+4gBAs/IntETphOHD4FOzNoNPbjuzBkn+48/9qKXywWPcM99Edvh2siPfHeyc" +
+- "nH8mU/pM2pJLsfshI0KCNRv7viiYYXW7sRnmxTFQhCp3G9/CTqzLsht3jtkrmGJdgGF0xmYpQx5G" +
+- "KBEInWdWSs4pnm6bLD3i95WJsDG7jmtiXFYwlmF2WXATmCPROE05IGa3G33sxPrsL014tGRMVo5D" +
+- "uVdirD/8zJBluQgC9qSF2JKcV9cuPwudsbq1YLqCydjYGOkSngYtKq36vJUs6jqhuqXtgCvursty" +
+- "uHOnSZIMWROnc/dR2J5pYAZO3tF0rOwvAXI/jvKZ/vN6zVNuHQGWjYNx/SWGiohtH9R1Y17HDRvf" +
+- "4XtUCEoaQwyGbEOr5QZ3HeeLbRwrosnRNB5lHNwpuBn+HK2KWFsLcd34scWpGJd5g6Ener61faoQ" +
+- "bOXk6OsWpycnP98yYdzMrLINxYks+3h1fvZlHfE6M6LXu0oa4mPko8s7TL70kuSnOmVIMxvW5n2v" +
+- "00111fF1htzXWiwpnrJAw8FbD60qXtHn9o9LUrJ6r2CUBoOnDpQeKxu0ncPhntgRwKLRcErUVd9t" +
+- "k1falinlvLLmLr7WHfndsh/t0WOdg9Dt1cOHTyrctWutRGzH5ZbNjcQ0FpEce+lMQwCnpMRqnSQ3" +
+- "Qu50hFIzMXJnSsjt+aI+fG/kiOwUStcFQuG9AMor0GUI0da6btoyKxIKnWKaXlR/zajFCYWlXNBB" +
+- "WslMKz+tpOEezkIxJtJzuvfl5ia1DCiQnuki6+MiXzRlR47s9Lwdaa1bCKAc4uscXnX5mwFvzdO6" +
+- "JnlQSv8lgiOUERZ1QYLG4PqJE+ZItl2y4MDB3wjma8/XnGiuavSuUMNhKNOshdyZkmViD7EAGBrX" +
+- "K9gzA1CYqPZEfEoAEK91eN3jTELIlRT7jnuhm9M5mxrmJZVNvjUio0VEC3Exr2ryLTbVCJI0/ZfL" +
+- "e/TI5ZusfbXbKAcjP2706msTQRHiH3pxa2ghgIlkU+9b91zqRA6OK6MIQh+nG8HP6wT4PPzD3n3z" +
+- "lxoRiohl5eVd/1G/qC2Ug8LBOcMYh5PYd6mqemTRJ8d88axb3r//NTkYT2tQ1e27W3yzo+aamh0k" +
+- "NoWIcfeJ1Ss8A2EU0xgqflEkYQBGBuYAe3hByAHiNVBcqyRdLzEjYLhpEGFk/CaHXFtZX79RD4WR" +
+- "Bl4plOWR3MhkbI0DMOHfFhNjaEK6Neas1D9Rg3qVHQFwLHIV9DkN01miaxD6LNUjQpKPMQLHl522" +
+- "jWAVtQxELTM7agBN+AdcGwYNvJREtDwjrOL5hQWpVf36TTtcVFRhGMaAlxsbpw+prCwt/fRTHoZE" +
+- "MVS1Sna5r5CUpKExisc0RVFix4BoKEFHlDES78dIcYjdf0FRhapqH5tQxAyTtiOwZHVTk3dWdnaV" +
+- "zFgv27a5RzfKlt6PAiOZFQWmrUTy2Y3WFntPdgruhXVWxIFRA2ZIBq9QqeP18PvlBPAtRq0gHGNQ" +
+- "uHbN4ej+qJDDmMZIaaZZYASC/MzTe1RScmmdqlZce/z4CLFfW7RoppWsSP1Wy7R5NeTpfMNnU+s2" +
+- "pGIZ2KC4oEGoOOCb/7aNpkKbWKsswhhoUrQZBmPdp/hXcWDUQCjIGZFByLB2Su9ogaUaRhAa8hsG" +
+- "DxXFCmlB8CBKleyhZynXiWkwv6VRpEVYkBtnBGq28bMPZcmjC0rKCxPLFqy4GDWbVwSOPemLGhvP" +
+- "SMJNlc2+es0fQGYo5HnH59sCoMQLWVU0LV4ISqHjf/obtbQQxCbMnPngRcM25MbCB5giDo+Hl6Xg" +
+- "qtVd6yqWeu7e91RyR++Rd28OthAUaLZRa+0Rrg+SNxQqD0dDyRx9lmqY6brOVDi7HFHV9/mWvV5z" +
+- "r63aSCF0yDOlcla7NZrFmA3AeH2E1052/ebi1ZZ6ej3oh8eZ2fe1vtPqOTi495SaHygOOc1/dOFj" +
+- "QnsYhdMw44lFaMysU6dOBCBvRcCB35fl+0X4am3COCaakdoVjVaoZgW1dESJnSd5hiz/7NU02Qbd" +
+- "4dpDYdLL7wizOLW5OGoRTAM+G0VCBrg0yDOMXRGJPB8GNpim2efF7Ozi9hgA4Hfxm0b53NbW/Zyy" +
+- "i7bQlyJBFjIjDF1ViKe29xhEJizP0Flw6S76klhfrX+j8C7dt/8BPRxpsGnGyqKfGRQ7O20OVr80" +
+- "NVT9bIMIBwhrygMsLr7RcKvT9bUq1zXLumVtdvaAs56V+GK+3UMXEK15HzU1jvANHa47/YIGJ2cT" +
+- "DmAWSIZtUdT9tiDpNjEQpZ1pJpumqiKih0AfSHTB2X7/2w2GsT4CNM8k5NlnPJ7Eyg+vT0+faVqW" +
+- "Z2tEu1cYaC3fQxsPnaS/swAYN2K/qnhQHpgAKC6/Xx6Qgtmkilo2Z9WHrFHQnO/Bf/rtoctPlOVM" +
+- "az35/pKIyhCAh6SUQre4H/M+L7lAqJl+RvKsVeHw0pBlntJME2VQunVzRsaERCfuyMzMfyszMzN+" +
+- "ak52XTQ2333prxdJzuyRXGSw7KjFEnlUwYF1zrROLbxO4umwcVOWkjV0z51YyXqaEQsR9djYQMX4" +
+- "TTwVQst8NiVlPqS+Upj0EAyZB9+tcB4ZByJ71V5C7ntcj550Q4KBTl7pvjFVmtbnYvSQ7ACcEZoD" +
+- "fTUwbgDE490fN6B5o5fRjdAXiDNBGKLwNVMLZnTJLPrDh1hypAFHAkTzXnNqc+GHfG75oYxVYN0k" +
+- "YEwQXPEAcuF9ZIH/01ku1/ChivJHkNCeMk8sCNXChCdhQr7+6uvC4RU4d8RJ1PRuV64JKdDSU3su" +
+- "HuHMuKJUcuWMhMU4QHwflWBHgFEb4tXuSs3gEaLV7bdDlXvU6rm7hKH8SobmmawohUNkeSDUghdD" +
+- "0vfXMrbnYdOoSij6Eg108TFje6EOMwbjwZ0zUHeXA5GGANoz6jm2VwCotikBcN7YpvHEtvrDnoqh" +
+- "t58kuzpDJcoPhQDO6YGn3+pTK/007QYUoClgOUHpWAUuldPV4VYYn8rXfMDpHN4NS4McOBpsJ7fZ" +
+- "9utrbNvLWYdzrq5H3PO+Hfmy8GCKaI7U7o/3wq6ObklOIkhykcD+sbuFMeKAcKYos8RvSczhEgLM" +
+- "EioJknDoTEznWLDNJb5RO2POPBfqf2frdFN3LAz6Im+agU9e+Xzn8HLod+dcueXnDk/vX2DZlQaK" +
+- "/ebpLV0miPmcCXs1xZySWC9JMA/Fz3/CeXZbgcTCIEVMqiSAkFguxQ0mX06IX9KueIuPpV/xPCS+" +
+- "ttQGnDMs6Tej8SaseF4LN9c9cnxNj6VxI8Q+3em9Hx+c3PmW1UDztMZtXVLEfdymbGAJ60kJGZQm" +
+- "tH99bE8YGN/wd/mgxdG7NFDb8/ZohryYA5HguHhI5uYO27vyoqtrmAiXr31JX/V48CuY8R8FJhxE" +
+- "eeEAQWk9HnYlFmMJoRKG03QLtUJ7/93FvpXXJ7wM/6Za4l71UEu5pWkoucv0Be0tm95vmUdy5t5k" +
+- "tpbPbe8B2vmsi7+rl2Nf4yVaUlLHSQXu7r8tw1JyT+ivhQBaAhZUxBSC5EPpPtMKVDzi3z/+HZHJ" +
+- "7K/7IvC/CRhZ6Ep6evGGyXJS3kAsp3SGcgLKc7uSktBhrW7ZFq32r/HHCVbb0P9fBSYOTpIoJ5SE" +
+- "7GUnpHbrbG8EzsfWfwgwAEfC/ToQIhkhAAAAAElFTkSuQmCC"
+- , params: "source=hp&channel=np"
+- }
+-
+-, "Яндекс":
+- {
+- image: "data:image/png;base64," +
+- "iVBORw0KGgoAAAANSUhEUgAAAEYAAAAcCAYAAADcO8kVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ" +
+- "bWFnZVJlYWR5ccllPAAABWFJREFUeNrsWWtsVEUUnltLH7tbaeuDbfCBojUoBTGmooLE+Igx+gON" +
+- "RvEJhEQNUdEYA0Ji4xNf2Bg1iBJJrGBC+CEBNYoxxmh94CMKRE2MitBqoZRi6bbdZT3TfhM/TmZ2" +
+- "u5jGsOEkX8/0ztzp3HPP4zu3UTabNUfEI9YwgzAxjUbBGkG7IAv0CwYE53rWC+KChFloRh329igN" +
+- "zD8keJR+P2DvEbgnrjp4eWT65GerSZuU6FWii9Fj5pGHvC6ow/WpdP1C7SV3Bm18eNpDG2a0oA0P" +
+- "v0qFSn3IMPOKxChsmBJ1/TpBEuNn1NxRB8XOoJSYRabfrCiG0FGiDXMZ9HeC73PfGpkOST0vmYGi" +
+- "LEraMCdB/5jP46xhnhaj7C3Sal2qjFSDcU8eb4m2m4xpHvKWYwSTBd2Cr1HBrIwVnCXYIdiiNrDh" +
+- "Wi8YQLVzZ+mDt/ar9acK5gqOE6wTvKvmE4JzsN83ghSu1+AMMcGngr/pnnHYM4nzrRX8EapKm5Fc" +
+- "3/bwlAn/Jt/EtJdNmdvidjxcpyrjT+D6Fx7LPoA5jf3ktU5metY9rtZcRHNn0vV3cO0rtf6GwN9v" +
+- "DCXfX6AbVLL1hJJOxIM6UtwnJG7ORuIaMl5W7W297g2MmwR3YLxQcDmty3jOdongCrrXyRTBaoyf" +
+- "x5qdgjZ4qzfHbCQ3mzXcChcYH8hhIGf0zwQ3Ch6k8/Ae9yEM3hc8LFguWIm5uwIvwYXhPdA2RNbT" +
+- "/BLoFsECwXsw1gUIZa9h7NvZivGLgkk010eHjv5jbitXD1HiWVMhuB7jDXR9E/R0Qa3nPvvmTxZc" +
+- "7fGWyQhNK6/R9b8Ev4aSr0HyunWQ3Q/li8/hdh8JTiOD+DpPa7jegHtriUN35zDMRMEJGH9J17dB" +
+- "18KzO9V9NvndjbH1sB9objp0u+CT4VYlJ5txKLvpDMFsIJ/EwYOs9bsEp+RYeyz0nx7y6ORsGu8K" +
+- "EM2kx1ts7rkXL+YxNd8I/TOcoCDDOB5jY/Fj/P4cEmVTjr0SlKNCOcjJ8fQgodAcQ/d/i/BLK8Oo" +
+- "ZtYcLVgGD1wq2K7mx0LvKITHaFlCbny/oI4M43uQDJJkL3KH5RWnB/auh96ax9AGnKQdoZNAyO4T" +
+- "VHv4VobC+XzPntWUMgpivtwzufbgWbVpSHYh4V0DnrA6YETrCWdgvGUYIboX9KEahqlFcq0GT2HZ" +
+- "jwrXBW4zJ/C8FYdqmEWUb94aZniUUbXJVbmm0N6/5zjbPnohcfKePiDlSfBJeO0r9Bx8pi7oEw/F" +
+- "MPMp8S0roARHar+QYS6FXp9nv230dicVcA7LaZoxHo/ncfIbEdi6Qgxje4vFRL5aRqA/uxn6Vc9c" +
+- "muK/lXqeuQXsPwZMdi0RPedxH1AFva0QwyygavDkCBjlFuy/HJWhksLQgOVyxWqh3mYx7RND2Pi8" +
+- "0n1+baawmU9e2o6x/XR7raIQVb4mskGQQaO4ydNENlATeTE1kXOQc/agXDpZqhq42dQL2US9G1Wl" +
+- "G5XEzaWJbyTBddzcTuSmAYTMOKybQWsmeppIbk5nqcbxJ1RHO37B10TeRL3KU543kUKF0J8leqgq" +
+- "8ae8PdAd6ltPL954LXQV/m4HEbgaYqjT6KNZHWhAKd5+mzpDN4WflUdw5koweitv4lldX2QpxQSc" +
+- "/UOfx9jvvTHBKP+/RmKRoHwIiYg8pgQJsszTKFYSV2qC0VcShyqnqlEKRpolqsAyFfnpKmLOnOgr" +
+- "VAVirhYnYzsZLbgSe57nwtL375N8H+Oy3H2qKpAKEL5eVc65E04rD2NW66uWrUDobKnAnPs7PR5+" +
+- "tLFQHjMS0knhEZLdim/8bxId+RetX/4RYACXlwEEPBQycwAAAABJRU5ErkJggg=="
+- }
+-};
+-
+ // The process of adding a new default snippet involves:
+ // * add a new entity to aboutHome.dtd
+ // * add a <span/> for it in aboutHome.xhtml
+@@ -143,7 +45,7 @@
+ // The <a/> part of the snippet will be linked to the corresponding url.
+ const DEFAULT_SNIPPETS_URLS = [
+- "http://www.mozilla.com/firefox/features/?WT.mc_ID=default1"
+-, "https://addons.mozilla.org/firefox/?src=snippet&WT.mc_ID=default2"
++ "https://www.gnu.org/software/gnuzilla/?WT.mc_ID=default1"
++, "http://www.gnu.org/software/gnuzilla/addons.html?src=snippet&WT.mc_ID=default2"
+ ];
+
+ const SNIPPETS_UPDATE_INTERVAL_MS = 86400000; // 1 Day.
+diff -Nur a/browser/locales/en-US/chrome/browser-region/region.properties b/browser/locales/en-US/chrome/browser-region/region.properties
+--- a/browser/locales/en-US/chrome/browser-region/region.properties
++++ b/browser/locales/en-US/chrome/browser-region/region.properties
@@ -1,28 +1,28 @@
# Default search engine
-browser.search.defaultenginename=Google
@@ -70,14 +175,66 @@ diff -urN iceweasel-13.0.orig/browser/locales/en-US/chrome/browser-region/region
# TRANSLATION NOTE: {moz:domain} and {searchTerms} are placeholders for the site
# to be searched and the user's search query. Place them in the appropriate location
# for your locale's URL but do not translate them.
--browser.search.siteSearchURL=http://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&q=site%3A{moz:domain}+{searchTerms}
+-browser.search.siteSearchURL=https://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&q=site%3A{moz:domain}+{searchTerms}
+browser.search.siteSearchURL=https://duckduckgo.com/lite/?q=site%3A{moz:domain}+{searchTerms}
# increment this number when anything gets changed in the list below. This will
# cause Firefox to re-read these prefs and inject any new handlers into the
-diff -urN iceweasel-13.0.orig/build/pgo/blueprint/elements.html iceweasel-13.0/build/pgo/blueprint/elements.html
---- mozilla-build.orig/build/pgo/blueprint/elements.html 2012-06-01 09:03:49.000000000 -0300
-+++ mozilla-build/build/pgo/blueprint/elements.html 2012-06-05 20:37:22.059133787 -0300
+@@ -30,3 +30,21 @@
+ # means that it's not possible to update the name of existing handler, so
+ # don't make any spelling errors here.
+ gecko.handlerService.defaultHandlersVersion=3
++
++# The default set of protocol handlers for webcal:
++gecko.handlerService.schemes.webcal.0.name=
++gecko.handlerService.schemes.webcal.0.uriTemplate=about:blank
++
++# The default set of protocol handlers for mailto:
++gecko.handlerService.schemes.mailto.0.name=
++gecko.handlerService.schemes.mailto.0.uriTemplate=about:blank
++gecko.handlerService.schemes.mailto.1.name=
++gecko.handlerService.schemes.mailto.1.uriTemplate=about:blank
++
++# The default set of protocol handlers for irc:
++gecko.handlerService.schemes.irc.0.name=Freenode
++gecko.handlerService.schemes.irc.0.uriTemplate=https://webchat.freenode.net/
++
++# The default set of protocol handlers for ircs:
++gecko.handlerService.schemes.ircs.0.name=Freenode
++gecko.handlerService.schemes.ircs.0.uriTemplate=https://webchat.freenode.net/
+diff -Nur a/browser/locales/generic/profile/bookmarks.html.in b/browser/locales/generic/profile/bookmarks.html.in
+--- a/browser/locales/generic/profile/bookmarks.html.in
++++ b/browser/locales/generic/profile/bookmarks.html.in
+@@ -11,13 +11,20 @@
+ <DT><H3 PERSONAL_TOOLBAR_FOLDER="true" ID="rdf:#$FvPhC3">@bookmarks_toolbarfolder@</H3>
+ <DD>@bookmarks_toolbarfolder_description@
+ <DL><p>
+- <DT><A HREF="http://www.mozilla.com/@AB_CD@/firefox/central/" ID="rdf:#$GvPhC3">@getting_started@</A>
++ <DT><A HREF="https://parabolagnulinux.org/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AihUrGP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AIcXLSJvFCcn////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AbRIkcP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGwTI0JWEBtB////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wCAAAACVQ8crP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFYQHJI9ChRL////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlKzZHPQoUzgAAAAH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AknV8I0sdJv8kBgxU////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AMTExA1uTlX1JAYLyf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wC5ubkLhG1x6CQGDP0PAAARzJmZBf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AxsbGCZB+g/QkBgz/DQMDUdu2tgfMn5koxo2NOsxmmQX///8A////AP///wD///8A////AP///wD///8A////AJ2JjX+NeX3/JAYM/wwCA5T///8A////AL+AgAi/foFfuG51l7JgaXCvY3E2/4CAAv///wD///8A////AJlveHOzqqv6UCUt/yQGDP8MAgTW////AP///wD///8A////AKqAgAawXmhnqk9b36VNW/KjT13mqGh16Kl+hvCbdHz/YyYx/z0KFP8kBgz/DAIE7f///wD///8A////AP///wD///8A////AJlmZgWkQU5inDFD0ZUhNv+FFyz/bRMk/1UPHP89ChT/JAYM/wwCA9v///8A////AP///wD///8A////AP///wD///8A////AP///wCTIDMohRYtfW0TJMBVDxzQPQoU3SUGDcoMBARA//8AAP//AAD//wAA//8AAP/3AAD/9wAA//sAAP/7AAD/+QAA//kAAP/5AAD/+AAA9/AAAPwAAAD/AAAA/+EAAA%3D%3D" ID="rdf:#$GvPhC3">Parabola GNU/Linux-libre</A>
+ </DL><p>
+- <DT><H3 ID="rdf:#$ZvPhC3">@firefox_heading@</H3>
++ <DT><H3 ID="rdf:#$YvPhC3">Parabola GNU/Linux-libre</H3>
+ <DL><p>
+- <DT><A HREF="http://www.mozilla.com/@AB_CD@/firefox/help/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$22iCK1">@firefox_help@</A>
+- <DT><A HREF="http://www.mozilla.com/@AB_CD@/firefox/customize/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$32iCK1">@firefox_customize@</A>
+- <DT><A HREF="http://www.mozilla.com/@AB_CD@/firefox/community/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$42iCK1">@firefox_community@</A>
+- <DT><A HREF="http://www.mozilla.com/@AB_CD@/about/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$52iCK1">@firefox_about@</A>
++ <DT><A HREF="https://parabolagnulinux.org/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AihUrGP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AIcXLSJvFCcn////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AbRIkcP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGwTI0JWEBtB////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wCAAAACVQ8crP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFYQHJI9ChRL////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlKzZHPQoUzgAAAAH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AknV8I0sdJv8kBgxU////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AMTExA1uTlX1JAYLyf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wC5ubkLhG1x6CQGDP0PAAARzJmZBf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AxsbGCZB+g/QkBgz/DQMDUdu2tgfMn5koxo2NOsxmmQX///8A////AP///wD///8A////AP///wD///8A////AJ2JjX+NeX3/JAYM/wwCA5T///8A////AL+AgAi/foFfuG51l7JgaXCvY3E2/4CAAv///wD///8A////AJlveHOzqqv6UCUt/yQGDP8MAgTW////AP///wD///8A////AKqAgAawXmhnqk9b36VNW/KjT13mqGh16Kl+hvCbdHz/YyYx/z0KFP8kBgz/DAIE7f///wD///8A////AP///wD///8A////AJlmZgWkQU5inDFD0ZUhNv+FFyz/bRMk/1UPHP89ChT/JAYM/wwCA9v///8A////AP///wD///8A////AP///wD///8A////AP///wCTIDMohRYtfW0TJMBVDxzQPQoU3SUGDcoMBARA//8AAP//AAD//wAA//8AAP/3AAD/9wAA//sAAP/7AAD/+QAA//kAAP/5AAD/+AAA9/AAAPwAAAD/AAAA/+EAAA%3D%3D">Parabola GNU/Linux-libre</A>
++ <DT><A HREF="https://parabolagnulinux.org/packages/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AihUrGP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AIcXLSJvFCcn////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AbRIkcP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGwTI0JWEBtB////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wCAAAACVQ8crP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFYQHJI9ChRL////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlKzZHPQoUzgAAAAH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AknV8I0sdJv8kBgxU////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AMTExA1uTlX1JAYLyf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wC5ubkLhG1x6CQGDP0PAAARzJmZBf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AxsbGCZB+g/QkBgz/DQMDUdu2tgfMn5koxo2NOsxmmQX///8A////AP///wD///8A////AP///wD///8A////AJ2JjX+NeX3/JAYM/wwCA5T///8A////AL+AgAi/foFfuG51l7JgaXCvY3E2/4CAAv///wD///8A////AJlveHOzqqv6UCUt/yQGDP8MAgTW////AP///wD///8A////AKqAgAawXmhnqk9b36VNW/KjT13mqGh16Kl+hvCbdHz/YyYx/z0KFP8kBgz/DAIE7f///wD///8A////AP///wD///8A////AJlmZgWkQU5inDFD0ZUhNv+FFyz/bRMk/1UPHP89ChT/JAYM/wwCA9v///8A////AP///wD///8A////AP///wD///8A////AP///wCTIDMohRYtfW0TJMBVDxzQPQoU3SUGDcoMBARA//8AAP//AAD//wAA//8AAP/3AAD/9wAA//sAAP/7AAD/+QAA//kAAP/5AAD/+AAA9/AAAPwAAAD/AAAA/+EAAA%3D%3D">Parabola GNU/Linux-libre Packages</A>
++ <DT><A HREF="https://wiki.parabolagnulinux.org/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AihUrGP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AIcXLSJvFCcn////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AbRIkcP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGwTI0JWEBtB////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wCAAAACVQ8crP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFYQHJI9ChRL////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlKzZHPQoUzgAAAAH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AknV8I0sdJv8kBgxU////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AMTExA1uTlX1JAYLyf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wC5ubkLhG1x6CQGDP0PAAARzJmZBf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AxsbGCZB+g/QkBgz/DQMDUdu2tgfMn5koxo2NOsxmmQX///8A////AP///wD///8A////AP///wD///8A////AJ2JjX+NeX3/JAYM/wwCA5T///8A////AL+AgAi/foFfuG51l7JgaXCvY3E2/4CAAv///wD///8A////AJlveHOzqqv6UCUt/yQGDP8MAgTW////AP///wD///8A////AKqAgAawXmhnqk9b36VNW/KjT13mqGh16Kl+hvCbdHz/YyYx/z0KFP8kBgz/DAIE7f///wD///8A////AP///wD///8A////AJlmZgWkQU5inDFD0ZUhNv+FFyz/bRMk/1UPHP89ChT/JAYM/wwCA9v///8A////AP///wD///8A////AP///wD///8A////AP///wCTIDMohRYtfW0TJMBVDxzQPQoU3SUGDcoMBARA//8AAP//AAD//wAA//8AAP/3AAD/9wAA//sAAP/7AAD/+QAA//kAAP/5AAD/+AAA9/AAAPwAAAD/AAAA/+EAAA%3D%3D">Parabola GNU/Linux-libre Wiki</A>
++ <DT><A HREF="https://labs.parabola.nu/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AihUrGP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AIcXLSJvFCcn////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AbRIkcP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGwTI0JWEBtB////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wCAAAACVQ8crP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFYQHJI9ChRL////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlKzZHPQoUzgAAAAH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AknV8I0sdJv8kBgxU////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AMTExA1uTlX1JAYLyf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wC5ubkLhG1x6CQGDP0PAAARzJmZBf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AxsbGCZB+g/QkBgz/DQMDUdu2tgfMn5koxo2NOsxmmQX///8A////AP///wD///8A////AP///wD///8A////AJ2JjX+NeX3/JAYM/wwCA5T///8A////AL+AgAi/foFfuG51l7JgaXCvY3E2/4CAAv///wD///8A////AJlveHOzqqv6UCUt/yQGDP8MAgTW////AP///wD///8A////AKqAgAawXmhnqk9b36VNW/KjT13mqGh16Kl+hvCbdHz/YyYx/z0KFP8kBgz/DAIE7f///wD///8A////AP///wD///8A////AJlmZgWkQU5inDFD0ZUhNv+FFyz/bRMk/1UPHP89ChT/JAYM/wwCA9v///8A////AP///wD///8A////AP///wD///8A////AP///wCTIDMohRYtfW0TJMBVDxzQPQoU3SUGDcoMBARA//8AAP//AAD//wAA//8AAP/3AAD/9wAA//sAAP/7AAD/+QAA//kAAP/5AAD/+AAA9/AAAPwAAAD/AAAA/+EAAA%3D%3D">Parabola GNU/Linux-libre Labs</A>
++ </DL><p>
++ <DT><H3 ID="rdf:#$ZvPhC3">Free Software Foundation</H3>
++ <DL><p>
++ <DT><A HREF="http://www.fsf.org/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAADG0lEQVQoFQEQA+/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQECAAAAAAAAAAAAAAAAAAAA2qOp7tTXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAP///wAAAAAAAOCyt7pUXQcSEgcQDwAAAP///wAAAAAAAAD//x9NSDqNhQEBAQQAAAAAAAAAAAAAAAAQJiQGDQ0aPToZPjoAAQEAAAAAAAAAAAABAQEpZV4AAAAAAAAAAAAA////////////////pSIv05KZ////////////////////////////////AAAAAQAAAP///6krNwAAAAAAAPHc3ggSEQcSEQAAAAAAAAAAABY3NEGelQAAAAAAAAEBAQEAAAD///+YARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGDg1g690CBgYAAAABAQEEAAAAAAAAS7etAAAAAAAAwGVtHklFIlJOAAAAAAAAAAAAAAAA+/X2BwYGAAAAAAAABAAAAAAAAB1IQwAAAAAAAAYNDBAmJB1IQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAgL//v4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAQEB//7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAECAv/+/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD////////////////cqK3qzM////////////////////////////////8AAAABAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGuLjDf9F8oBAAAAAElFTkSuQmCC">Free Software Foundation</A>
++ <DT><A HREF="http://libreplanet.org/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAC/v78AAAAAAPLy9ABsbakA/f3+APn5+QC6ur0A6urqAEpLbQACBLQApKW3AAULuQDMzMwAGBiDAL29vQCgocsAgnzJALu82QA+PpsAAQOvAOjo6ADZ2dkAysrKALS0zwD5+foAAgKRAAYGdQD19fUADhOjAAQJyACrnqIAxMTLAOnp7gDm5uYAzczNACgobwDg2dEAQkaeAA0RkAAUFnEA0MvQAIBzgAANDYsAk5OyAOTk5ADy8vYA1dXVAD8/cADGxsYA+fn7AAMHvgBzZnQApqauAAEGuQDExMQAAAGmAAoLmgADCMQAxMTdAAwPlwD+/v4ABg7MAF5ehADg4OAA0dHRAAAAoQAYEXAAwsLCALCxwQBnadkAAQGWAPz8/ACgoLgAbm6RANvb5wDr6+sA0dHSALe3uQADB8AAzc3NAGFhbAABAZcAOTtlALi4xwAAAJoA/Pz9AAQHnwADBJcACQl4AFVa3AChl6EAAgW2ABscdAABAq4A2NjYAAAAmwDAwMoAAQKmAAcMswDR0eQAAQSxANvX2wB4aXcAAQGpAAAAkwDW1tYAAgSpACIZZAAAAaEA+vr8AKuirAACBbcA8vLyALOztgADBZYAAACcAAACpwAEA6QAAQKnAPT09QD///8AvL3UADIpigDw8PAABwWOAK6dogBub4kAiozDANLS0gAFC8gAAgW4AP39/QAAAJ0A0NDQAMHBwQDp6ewACg2RAAIFqAAKCokA+/v7AAkOnwAAAaMA7OzsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeHh4eHh4eHh4eHh4eHh4AXh4eHhlbikzZlooeHh4eAF4eHh4hX1JVFweInh4eHgBeHh4XmlAGXNGSB8VeHh4AXg8LhaGcV9zKg0wQF54eAF4K0NNOGthjXNCUwAMS3gBPC82iW+CCRN2Iz4wTwx4AW0GgCc5OU41VnSKTBoOiwEFTz8hHIF5RANdQVRfNIMBeBUhe0o9jB0Pcjdzc1E8AXgsB3AbUlkQRVtnhHNoeAF4i45wJCAlYjJbdYRfY3gBeDwmEn4XMToKZDd6WDx4AXh4VTsIfwt3FGpsfAR4eAF4eHgEEYhQAodXYDx4eHgBeHh4eHg8GC1HPHh4eHh4AQABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA%3D">LibrePlanet</A>
++ <DT><A HREF="http://www.gnu.org/software/gnuzilla/addons.html" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAGFBMVEVFRUV+fn6mpqa/v7/Ozs7Y2Njg4OD8/Pwuhn+TAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEQAACxEBf2RfkQAAAAd0SU1FB9MBDhQ6Gd8s57cAAAEVSURBVBgZBcGxVtpgGADQL9gHSBzqSognzMixmcWWzB6pmRHhnyvku6/fewMAIPD3TwHmQxHs6vr+A16bphNum/vV0x429201hcPjAGBTDZGnR/Kw1U181+u4HXvOdSxjUcztz8jjg1xGVBG9XPYxt4PviKiaWLg168iXtbrq+mPT1utjNcR1U73deRnL43M2sRgj3+oYs8uL3rLphPd2QWmHbMu/VS/cnk6UdtSW657g9yBlcZ0UAkUWzPvyRaAYmfd+HT4IZtvC59ibEJxXiqJjQpBpNEufBYE0McoOAunGhRMEFIPc7h4goJigQEBxk8u7AgEpL3IEAUZfcgAByGFXQACm5+4MAuB19QMEgI8CAgDgP4rivVgoKP6ZAAAAAElFTkSuQmCC">Free addons</A>
++ <DT><A HREF="http://www.h-node.org/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAC7zrYAWYhNANjj1QA9fEcAEEwBAHTQkwAeVRkAPXMvALvOtwASVQEAHFcUAH/bpgB60p8AKnQmAGO1fgAjaRwALmA1AA5EAQDM2sgAN3ApAG7EjgC5zbQAVJxrAChwIgC0ya8ALmczAHXJmQBNf0EAgd6oADhwKgC8z7cA7vPtANTg0QANPwAARIhSADtyLQBzzpQAus21AEeKVQDC070AieyzALzPuAB93qEALGYvAO/z7gBEiVAAasWFAFuJTwBKil4AXotSAEuKXgAORQEAD0gBABlDFwBWpmoALGYwAGCNVQAbYBAAHGAQABBOAQCI6rIAjPG3AB1bDgAaXg4A////AGaRWwB/2qYAUYJEAEx+PwAZXAwAm7eUAD51MADN28oAJmwhACRiFAAzeTYAasaFAB9eDwBkt34Aus62AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPT09PT09PT09PT09PT09PT09PT0OIjALPRQmMkI9PT09PT09OkcHNQU+Q0oQPT09PT09PToVGDQtI0ABKz09PT09PT06JRg0Nh1ALxk9PT09PT09OiUYIS4TQC83PT09PT09PTpPSDsGG0BEAz09PT09PT06T0BGMRIsTRY9PT09PT09OgACJx8gQwooPT09PT09PToICAkJCUkkPT09PT09PT05HggETio9PT09PT09PT09Px4IERw9PT09PT09PT09PUUpCDMMPT09PT09PT09PT0NOEEEGj09PT09PT09PT09TBcPSzw9PT09PT09PT09PT09PT09PT09PT09PQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D">h-node</A>
+ </DL><p>
+ </DL><p>
+diff -Nur a/build/pgo/blueprint/elements.html b/build/pgo/blueprint/elements.html
+--- a/build/pgo/blueprint/elements.html
++++ b/build/pgo/blueprint/elements.html
@@ -143,7 +143,7 @@
</p>
<p>
@@ -87,9 +244,9 @@ diff -urN iceweasel-13.0.orig/build/pgo/blueprint/elements.html iceweasel-13.0/b
</p>
<p>
<abbr title="extended abbr text should show when mouse over">&lt;abbr&gt; abbr - extended text when mouseover.</abbr><br>
-diff -urN iceweasel-13.0.orig/dom/ipc/test.xul iceweasel-13.0/dom/ipc/test.xul
---- mozilla-build.orig/dom/ipc/test.xul 2012-06-01 09:03:55.000000000 -0300
-+++ mozilla-build/dom/ipc/test.xul 2012-06-05 20:40:59.453890004 -0300
+diff -Nur a/dom/ipc/test.xul b/dom/ipc/test.xul
+--- a/dom/ipc/test.xul
++++ b/dom/ipc/test.xul
@@ -294,6 +294,6 @@
oncommand="document.getElementById('page').QueryInterface(Components.interfaces.nsIFrameLoaderOwner).frameLoader.delayRemoteDialogs = this.checked;"/>
</toolbar>
@@ -98,9 +255,9 @@ diff -urN iceweasel-13.0.orig/dom/ipc/test.xul iceweasel-13.0/dom/ipc/test.xul
+ <browser type="content" src="https://duckduckgo.com/lite" flex="1" id="page" remote="true"/>
<label id="messageLog" value="" crop="center"/>
</window>
-diff -urN iceweasel-13.0.orig/layout/ipc/test-ipcbrowser.xul iceweasel-13.0/layout/ipc/test-ipcbrowser.xul
---- mozilla-build.orig/layout/ipc/test-ipcbrowser.xul 2012-06-01 09:04:06.000000000 -0300
-+++ mozilla-build/layout/ipc/test-ipcbrowser.xul 2012-06-05 20:44:00.714006926 -0300
+diff -Nur a/layout/ipc/test-ipcbrowser.xul b/layout/ipc/test-ipcbrowser.xul
+--- a/layout/ipc/test-ipcbrowser.xul
++++ b/layout/ipc/test-ipcbrowser.xul
@@ -69,6 +69,6 @@
label="setViewportScale"/>
</toolbar>
@@ -109,42 +266,33 @@ diff -urN iceweasel-13.0.orig/layout/ipc/test-ipcbrowser.xul iceweasel-13.0/layo
+ <browser type="content" src="https://duckduckgo.com/lite" flex="1" id="content"
remote="true"/>
</window>
-diff -urN iceweasel-13.0.orig/mobile/xul/app/mobile.js iceweasel-13.0/mobile/xul/app/mobile.js
---- mozilla-build.orig/mobile/xul/app/mobile.js 2012-06-01 09:04:14.000000000 -0300
-+++ mozilla-build/mobile/xul/app/mobile.js 2012-06-05 20:48:20.193241600 -0300
-@@ -220,13 +220,13 @@
+diff -Nur a/mobile/android/app/mobile.js b/mobile/android/app/mobile.js
+--- a/mobile/android/app/mobile.js
++++ b/mobile/android/app/mobile.js
+@@ -230,13 +230,13 @@
/* preferences for the Get Add-ons pane */
pref("extensions.getAddons.cache.enabled", true);
pref("extensions.getAddons.maxResults", 15);
--pref("extensions.getAddons.recommended.browseURL", "https://addons.mozilla.org/%LOCALE%/mobile/recommended/");
--pref("extensions.getAddons.recommended.url", "https://services.addons.mozilla.org/%LOCALE%/mobile/api/%API_VERSION%/list/featured/all/%MAX_RESULTS%/%OS%/%VERSION%");
--pref("extensions.getAddons.search.browseURL", "https://addons.mozilla.org/%LOCALE%/mobile/search?q=%TERMS%");
--pref("extensions.getAddons.search.url", "https://services.addons.mozilla.org/%LOCALE%/mobile/api/%API_VERSION%/search/%TERMS%/all/%MAX_RESULTS%/%OS%/%VERSION%/%COMPATIBILITY_MODE%");
--pref("extensions.getAddons.browseAddons", "https://addons.mozilla.org/%LOCALE%/mobile/");
--pref("extensions.getAddons.get.url", "https://services.addons.mozilla.org/%LOCALE%/mobile/api/%API_VERSION%/search/guid:%IDS%?src=mobile&appOS=%OS%&appVersion=%VERSION%");
--pref("extensions.getAddons.getWithPerformance.url", "https://services.addons.mozilla.org/%LOCALE%/mobile/api/%API_VERSION%/search/guid:%IDS%?src=mobile&appOS=%OS%&appVersion=%VERSION%&tMain=%TIME_MAIN%&tFirstPaint=%TIME_FIRST_PAINT%&tSessionRestored=%TIME_SESSION_RESTORED%");
-+pref("extensions.getAddons.recommended.browseURL", "http://www.gnu.org/s/gnuzilla/addons.html");
-+pref("extensions.getAddons.recommended.url", "http://www.gnu.org/s/gnuzilla/addons.html");
-+pref("extensions.getAddons.search.browseURL", "http://www.gnu.org/s/gnuzilla/addons.html");
-+pref("extensions.getAddons.search.url", "http://www.gnu.org/s/gnuzilla/addons.html");
-+pref("extensions.getAddons.browseAddons", "http://www.gnu.org/s/gnuzilla/addons.html");
-+pref("extensions.getAddons.get.url", "http://www.gnu.org/s/gnuzilla/addons.html");
-+pref("extensions.getAddons.getWithPerformance.url", "http://www.gnu.org/s/gnuzilla/addons.html");
+-pref("extensions.getAddons.recommended.browseURL", "https://addons.mozilla.org/%LOCALE%/android/recommended/");
+-pref("extensions.getAddons.recommended.url", "https://services.addons.mozilla.org/%LOCALE%/android/api/%API_VERSION%/list/featured/all/%MAX_RESULTS%/%OS%/%VERSION%");
+-pref("extensions.getAddons.search.browseURL", "https://addons.mozilla.org/%LOCALE%/android/search?q=%TERMS%&platform=%OS%&appver=%VERSION%");
+-pref("extensions.getAddons.search.url", "https://services.addons.mozilla.org/%LOCALE%/android/api/%API_VERSION%/search/%TERMS%/all/%MAX_RESULTS%/%OS%/%VERSION%/%COMPATIBILITY_MODE%");
+-pref("extensions.getAddons.browseAddons", "https://addons.mozilla.org/%LOCALE%/android/");
+-pref("extensions.getAddons.get.url", "https://services.addons.mozilla.org/%LOCALE%/android/api/%API_VERSION%/search/guid:%IDS%?src=mobile&appOS=%OS%&appVersion=%VERSION%");
+-pref("extensions.getAddons.getWithPerformance.url", "https://services.addons.mozilla.org/%LOCALE%/android/api/%API_VERSION%/search/guid:%IDS%?src=mobile&appOS=%OS%&appVersion=%VERSION%&tMain=%TIME_MAIN%&tFirstPaint=%TIME_FIRST_PAINT%&tSessionRestored=%TIME_SESSION_RESTORED%");
++pref("extensions.getAddons.recommended.browseURL","http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.recommended.url","http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.search.browseURL","http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.search.url","http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.browseAddons","http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.get.url","http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.getWithPerformance.url","http://www.gnu.org/s/gnuzilla/addons.html");
/* preference for the locale picker */
pref("extensions.getLocales.get.url", "");
-@@ -243,7 +243,7 @@
- pref("dom.disable_window_open_dialog_feature", true);
-
- pref("keyword.enabled", true);
--pref("keyword.URL", "http://www.google.com/m?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q=");
-+pref("keyword.URL", "https://duckduckgo.com/lite/?q=");
-
- pref("accessibility.typeaheadfind", false);
- pref("accessibility.typeaheadfind.timeout", 5000);
-diff -urN iceweasel-13.0.orig/mobile/locales/en-US/chrome/region.properties iceweasel-13.0/mobile/locales/en-US/chrome/region.properties
---- mozilla-release.orig/mobile/locales/en-US/chrome/region.properties 2012-06-01 09:04:14.000000000 -0300
-+++ mozilla-release/mobile/locales/en-US/chrome/region.properties 2012-06-15 02:17:43.446130868 -0300
+diff -Nur a/mobile/locales/en-US/chrome/region.properties b/mobile/locales/en-US/chrome/region.properties
+--- a/mobile/locales/en-US/chrome/region.properties
++++ b/mobile/locales/en-US/chrome/region.properties
@@ -1,18 +1,18 @@
# Default search engine
-browser.search.defaultenginename=Google
@@ -166,12 +314,12 @@ diff -urN iceweasel-13.0.orig/mobile/locales/en-US/chrome/region.properties icew
+browser.contentHandlers.types.1.uri=about:blank
# Keyword URL (for location bar searches)
--keyword.URL=http://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q=
-+keyword.URL=https://duckduckgo.com/lite/?q=site%3A{moz:domain}+{searchTerms}
+-keyword.URL=https://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q=
++keyword.URL=https://duckduckgo.com/lite/?q=
# increment this number when anything gets changed in the list below. This will
# cause Firefox to re-read these prefs and inject any new handlers into the
-@@ -22,11 +22,11 @@
+@@ -22,11 +20,11 @@
gecko.handlerService.defaultHandlersVersion=2
# The default set of protocol handlers for webcal:
@@ -189,21 +337,54 @@ diff -urN iceweasel-13.0.orig/mobile/locales/en-US/chrome/region.properties icew
+gecko.handlerService.schemes.mailto.0.uriTemplate=about:blank
+gecko.handlerService.schemes.mailto.1.name=
+gecko.handlerService.schemes.mailto.1.uriTemplate=about:blank
-diff -urN iceweasel-13.0.orig/modules/libpref/src/init/all.js iceweasel-13.0/modules/libpref/src/init/all.js
---- mozilla-build.orig/modules/libpref/src/init/all.js 2012-06-01 09:04:16.000000000 -0300
-+++ mozilla-build/modules/libpref/src/init/all.js 2012-06-05 20:55:41.569045759 -0300
-@@ -47,7 +47,7 @@
- // SYNTAX HINTS: dashes are delimiters. Use underscores instead.
- // The first character after a period must be alphabetic.
+diff -Nur a/mobile/xul/app/mobile.js b/mobile/xul/app/mobile.js
+--- a/mobile/xul/app/mobile.js
++++ b/mobile/xul/app/mobile.js
+@@ -221,13 +221,13 @@
+ /* preferences for the Get Add-ons pane */
+ pref("extensions.getAddons.cache.enabled", true);
+ pref("extensions.getAddons.maxResults", 15);
+-pref("extensions.getAddons.recommended.browseURL", "https://addons.mozilla.org/%LOCALE%/mobile/recommended/");
+-pref("extensions.getAddons.recommended.url", "https://services.addons.mozilla.org/%LOCALE%/mobile/api/%API_VERSION%/list/featured/all/%MAX_RESULTS%/%OS%/%VERSION%");
+-pref("extensions.getAddons.search.browseURL", "https://addons.mozilla.org/%LOCALE%/mobile/search?q=%TERMS%&platform=%OS%&appver=%VERSION%");
+-pref("extensions.getAddons.search.url", "https://services.addons.mozilla.org/%LOCALE%/mobile/api/%API_VERSION%/search/%TERMS%/all/%MAX_RESULTS%/%OS%/%VERSION%/%COMPATIBILITY_MODE%");
+-pref("extensions.getAddons.browseAddons", "https://addons.mozilla.org/%LOCALE%/mobile/");
+-pref("extensions.getAddons.get.url", "https://services.addons.mozilla.org/%LOCALE%/mobile/api/%API_VERSION%/search/guid:%IDS%?src=mobile&appOS=%OS%&appVersion=%VERSION%");
+-pref("extensions.getAddons.getWithPerformance.url", "https://services.addons.mozilla.org/%LOCALE%/mobile/api/%API_VERSION%/search/guid:%IDS%?src=mobile&appOS=%OS%&appVersion=%VERSION%&tMain=%TIME_MAIN%&tFirstPaint=%TIME_FIRST_PAINT%&tSessionRestored=%TIME_SESSION_RESTORED%");
++pref("extensions.getAddons.recommended.browseURL","http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.recommended.url","http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.search.browseURL","http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.search.url","http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.browseAddons","http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.get.url","http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.getWithPerformance.url","http://www.gnu.org/s/gnuzilla/addons.html");
+
+ /* preference for the locale picker */
+ pref("extensions.getLocales.get.url", "");
+@@ -247,7 +247,7 @@
+ pref("dom.disable_window_open_dialog_feature", true);
+
+ pref("keyword.enabled", true);
+-pref("keyword.URL", "https://www.google.com/m?ie=UTF-8&oe=UTF-8&sourceid=navclient&q=");
++pref("keyword.URL","https://duckduckgo.com/lite/?q=");
+
+ pref("accessibility.typeaheadfind", false);
+ pref("accessibility.typeaheadfind.timeout", 5000);
+diff -Nur a/modules/libpref/src/init/all.js b/modules/libpref/src/init/all.js
+--- a/modules/libpref/src/init/all.js
++++ b/modules/libpref/src/init/all.js
+@@ -52,7 +52,7 @@
+ * - Computed values (e.g. 50 * 1024) don't work.
+ */
--pref("keyword.URL", "http://www.google.com/search?ie=UTF-8&oe=utf-8&q=");
-+pref("keyword.URL", "https://duckduckgo.com/lite/?q=");
+-pref("keyword.URL", "https://www.google.com/search?ie=UTF-8&oe=utf-8&q=");
++pref("keyword.URL","https://duckduckgo.com/lite/?q=");
pref("keyword.enabled", false);
pref("general.useragent.locale", "chrome://global/locale/intl.properties");
pref("general.useragent.compatMode.firefox", false);
-diff -urN iceweasel-13.0.orig/toolkit/locales/en-US/chrome/global-region/region.properties iceweasel-13.0/toolkit/locales/en-US/chrome/global-region/region.properties
---- mozilla-build.orig/toolkit/locales/en-US/chrome/global-region/region.properties 2012-06-01 09:04:20.000000000 -0300
-+++ mozilla-build/toolkit/locales/en-US/chrome/global-region/region.properties 2012-06-05 20:58:59.068158482 -0300
+diff -Naur a/toolkit/locales/en-US/chrome/global-region/region.properties b/toolkit/locales/en-US/chrome/global-region/region.properties
+--- a/toolkit/locales/en-US/chrome/global-region/region.properties
++++ b/toolkit/locales/en-US/chrome/global-region/region.properties
@@ -4,10 +4,10 @@
pluginStartupMessage=Starting Plugin for type
@@ -214,157 +395,10 @@ diff -urN iceweasel-13.0.orig/toolkit/locales/en-US/chrome/global-region/region.
-pluginupdates_url=http://www.mozilla.com/plugincheck/
-plugindoc_label=plugindoc.mozdev.org
-plugindoc_url=http://plugindoc.mozdev.org/
-+more_plugins_label=gnuzilla.gnu.org
-+more_plugins_url=http://www.gnu.org/s/gnuzilla/addons.html
-+pluginupdates_label=gnuzilla.gnu.org
-+pluginupdates_url=http://www.gnu.org/s/gnuzilla/addons.html
-+plugindoc_label=gnuzilla.gnu.org
-+plugindoc_url=http://www.gnu.org/s/gnuzilla/addons.html
-
-diff -urN iceweasel-13.0.orig/browser/locales/generic/profile/bookmarks.html.in iceweasel-13.0/browser/locales/generic/profile/bookmarks.html.in
---- mozilla-release.orig/browser/locales/generic/profile/bookmarks.html.in 2012-06-01 09:03:48.000000000 -0300
-+++ mozilla-release/browser/locales/generic/profile/bookmarks.html.in 2012-06-15 22:54:08.446274144 -0300
-@@ -11,13 +11,20 @@
- <DT><H3 PERSONAL_TOOLBAR_FOLDER="true" ID="rdf:#$FvPhC3">@bookmarks_toolbarfolder@</H3>
- <DD>@bookmarks_toolbarfolder_description@
- <DL><p>
-- <DT><A HREF="http://www.mozilla.com/@AB_CD@/firefox/central/" ID="rdf:#$GvPhC3">@getting_started@</A>
-+ <DT><A HREF="https://parabolagnulinux.org/" ID="rdf:#$GvPhC3">Parabola GNU/Linux-libre</A>
- </DL><p>
-- <DT><H3 ID="rdf:#$ZvPhC3">@firefox_heading@</H3>
-+ <DT><H3 ID="rdf:#$YvPhC3">Parabola GNU/Linux-libre</H3>
- <DL><p>
-- <DT><A HREF="http://www.mozilla.com/@AB_CD@/firefox/help/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$22iCK1">@firefox_help@</A>
-- <DT><A HREF="http://www.mozilla.com/@AB_CD@/firefox/customize/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$32iCK1">@firefox_customize@</A>
-- <DT><A HREF="http://www.mozilla.com/@AB_CD@/firefox/community/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$42iCK1">@firefox_community@</A>
-- <DT><A HREF="http://www.mozilla.com/@AB_CD@/about/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$52iCK1">@firefox_about@</A>
-+ <DT><A HREF="https://parabolagnulinux.org/">Parabola GNU/Linux-libre</A>
-+ <DT><A HREF="https://parabolagnulinux.org/packages/">Parabola GNU/Linux-libre Packages</A>
-+ <DT><A HREF="https://wiki.parabolagnulinux.org/">Parabola GNU/Linux-libre Wiki</A>
-+ <DT><A HREF="https://labs.parabola.nu/">Parabola GNU/Linux-libre Labs</A>
-+ </DL><p>
-+ <DT><H3 ID="rdf:#$ZvPhC3">Free Software Foundation</H3>
-+ <DL><p>
-+ <DT><A HREF="http://www.fsf.org/">Free Software Foundation</A>
-+ <DT><A HREF="http://libreplanet.org/">LibrePlanet</A>
-+ <DT><A HREF="http://www.gnu.org/software/gnuzilla/addons.html">Free addons</A>
-+ <DT><A HREF="http://www.h-node.org/">h-node</A>
- </DL><p>
- </DL><p>
-diff -urN iceweasel-13.0.orig/browser/base/content/aboutHome.js iceweasel-13.0/browser/base/content/abouthome/aboutHome.js
---- mozilla-release.orig/browser/base/content/aboutHome.js 2012-06-01 09:03:47.000000000 -0300
-+++ mozilla-release/browser/base/content/aboutHome.js 2012-06-13 18:07:51.217531774 -0300
-@@ -37,104 +37,6 @@
- *
- * ***** END LICENSE BLOCK ***** */
-
--// If a definition requires additional params, check that the final search url
--// is handled correctly by the engine.
--const SEARCH_ENGINES = {
-- "Google": {
-- image: "data:image/png;base64," +
-- "iVBORw0KGgoAAAANSUhEUgAAAEYAAAAcCAYAAADcO8kVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ" +
-- "bWFnZVJlYWR5ccllPAAADHdJREFUeNrsWQl0VNUZvve9NzNJJpnsIkuEJMoqAVJAodCKoFUsAUFQ" +
-- "qhig0npaRUE8Viv1FFtQWxSwLXVhEawbhOWobOICFCGiEIIQRGIgCSFjMslsb9567+1/Z+7gmIYK" +
-- "Vivt6Ztzz5y5b+7yf//3f/9/38PoW7gYY+i7uDDG39heJfT/q91LGTiTIcWJkCxzxDmCCBGCkBEO" +
-- "FDCm5CPs+CGWYvcliRxEzDwgu9I/IzZClonQgT/jC9Eu3GFTz6sdKc57kIzHWKaFjIA2wz++Zhkn" +
-- "yblMIDkAFIcDDFcQ+vtjGJuaOlKPkB2G4V4U9kcu8zfWlPtPVX/g9zZ7QwE03jDTqzWVndBUc57a" +
-- "Up91gToce0cf3R05El5u6gYyNQ0BKK/x/nNmjKwwxBmx8/eSNHiWsVLXlBJ/7UdTazcN3gn3bYEw" +
-- "FmG3pvOobRuScoc+ibEyF6GsUugrgEYuMGD4nqltmJjqFBkt+gcJ/ed0SZIA5crZ+gumrpQ0H319" +
-- "ogBFh6aJFoGmQguf2n7tu62HnvgJ1cPBcN3m6dAnX4CM4QAQigmxdQthm9EEJ58bY3bOl/CQ2YE5" +
-- "pu24LdBwZE7De+M+4gBAs/IntETphOHD4FOzNoNPbjuzBkn+48/9qKXywWPcM99Edvh2siPfHeyc" +
-- "nH8mU/pM2pJLsfshI0KCNRv7viiYYXW7sRnmxTFQhCp3G9/CTqzLsht3jtkrmGJdgGF0xmYpQx5G" +
-- "KBEInWdWSs4pnm6bLD3i95WJsDG7jmtiXFYwlmF2WXATmCPROE05IGa3G33sxPrsL014tGRMVo5D" +
-- "uVdirD/8zJBluQgC9qSF2JKcV9cuPwudsbq1YLqCydjYGOkSngYtKq36vJUs6jqhuqXtgCvursty" +
-- "uHOnSZIMWROnc/dR2J5pYAZO3tF0rOwvAXI/jvKZ/vN6zVNuHQGWjYNx/SWGiohtH9R1Y17HDRvf" +
-- "4XtUCEoaQwyGbEOr5QZ3HeeLbRwrosnRNB5lHNwpuBn+HK2KWFsLcd34scWpGJd5g6Ener61faoQ" +
-- "bOXk6OsWpycnP98yYdzMrLINxYks+3h1fvZlHfE6M6LXu0oa4mPko8s7TL70kuSnOmVIMxvW5n2v" +
-- "00111fF1htzXWiwpnrJAw8FbD60qXtHn9o9LUrJ6r2CUBoOnDpQeKxu0ncPhntgRwKLRcErUVd9t" +
-- "k1falinlvLLmLr7WHfndsh/t0WOdg9Dt1cOHTyrctWutRGzH5ZbNjcQ0FpEce+lMQwCnpMRqnSQ3" +
-- "Qu50hFIzMXJnSsjt+aI+fG/kiOwUStcFQuG9AMor0GUI0da6btoyKxIKnWKaXlR/zajFCYWlXNBB" +
-- "WslMKz+tpOEezkIxJtJzuvfl5ia1DCiQnuki6+MiXzRlR47s9Lwdaa1bCKAc4uscXnX5mwFvzdO6" +
-- "JnlQSv8lgiOUERZ1QYLG4PqJE+ZItl2y4MDB3wjma8/XnGiuavSuUMNhKNOshdyZkmViD7EAGBrX" +
-- "K9gzA1CYqPZEfEoAEK91eN3jTELIlRT7jnuhm9M5mxrmJZVNvjUio0VEC3Exr2ryLTbVCJI0/ZfL" +
-- "e/TI5ZusfbXbKAcjP2706msTQRHiH3pxa2ghgIlkU+9b91zqRA6OK6MIQh+nG8HP6wT4PPzD3n3z" +
-- "lxoRiohl5eVd/1G/qC2Ug8LBOcMYh5PYd6mqemTRJ8d88axb3r//NTkYT2tQ1e27W3yzo+aamh0k" +
-- "NoWIcfeJ1Ss8A2EU0xgqflEkYQBGBuYAe3hByAHiNVBcqyRdLzEjYLhpEGFk/CaHXFtZX79RD4WR" +
-- "Bl4plOWR3MhkbI0DMOHfFhNjaEK6Neas1D9Rg3qVHQFwLHIV9DkN01miaxD6LNUjQpKPMQLHl522" +
-- "jWAVtQxELTM7agBN+AdcGwYNvJREtDwjrOL5hQWpVf36TTtcVFRhGMaAlxsbpw+prCwt/fRTHoZE" +
-- "MVS1Sna5r5CUpKExisc0RVFix4BoKEFHlDES78dIcYjdf0FRhapqH5tQxAyTtiOwZHVTk3dWdnaV" +
-- "zFgv27a5RzfKlt6PAiOZFQWmrUTy2Y3WFntPdgruhXVWxIFRA2ZIBq9QqeP18PvlBPAtRq0gHGNQ" +
-- "uHbN4ej+qJDDmMZIaaZZYASC/MzTe1RScmmdqlZce/z4CLFfW7RoppWsSP1Wy7R5NeTpfMNnU+s2" +
-- "pGIZ2KC4oEGoOOCb/7aNpkKbWKsswhhoUrQZBmPdp/hXcWDUQCjIGZFByLB2Su9ogaUaRhAa8hsG" +
-- "DxXFCmlB8CBKleyhZynXiWkwv6VRpEVYkBtnBGq28bMPZcmjC0rKCxPLFqy4GDWbVwSOPemLGhvP" +
-- "SMJNlc2+es0fQGYo5HnH59sCoMQLWVU0LV4ISqHjf/obtbQQxCbMnPngRcM25MbCB5giDo+Hl6Xg" +
-- "qtVd6yqWeu7e91RyR++Rd28OthAUaLZRa+0Rrg+SNxQqD0dDyRx9lmqY6brOVDi7HFHV9/mWvV5z" +
-- "r63aSCF0yDOlcla7NZrFmA3AeH2E1052/ebi1ZZ6ej3oh8eZ2fe1vtPqOTi495SaHygOOc1/dOFj" +
-- "QnsYhdMw44lFaMysU6dOBCBvRcCB35fl+0X4am3COCaakdoVjVaoZgW1dESJnSd5hiz/7NU02Qbd" +
-- "4dpDYdLL7wizOLW5OGoRTAM+G0VCBrg0yDOMXRGJPB8GNpim2efF7Ozi9hgA4Hfxm0b53NbW/Zyy" +
-- "i7bQlyJBFjIjDF1ViKe29xhEJizP0Flw6S76klhfrX+j8C7dt/8BPRxpsGnGyqKfGRQ7O20OVr80" +
-- "NVT9bIMIBwhrygMsLr7RcKvT9bUq1zXLumVtdvaAs56V+GK+3UMXEK15HzU1jvANHa47/YIGJ2cT" +
-- "DmAWSIZtUdT9tiDpNjEQpZ1pJpumqiKih0AfSHTB2X7/2w2GsT4CNM8k5NlnPJ7Eyg+vT0+faVqW" +
-- "Z2tEu1cYaC3fQxsPnaS/swAYN2K/qnhQHpgAKC6/Xx6Qgtmkilo2Z9WHrFHQnO/Bf/rtoctPlOVM" +
-- "az35/pKIyhCAh6SUQre4H/M+L7lAqJl+RvKsVeHw0pBlntJME2VQunVzRsaERCfuyMzMfyszMzN+" +
-- "ak52XTQ2333prxdJzuyRXGSw7KjFEnlUwYF1zrROLbxO4umwcVOWkjV0z51YyXqaEQsR9djYQMX4" +
-- "TTwVQst8NiVlPqS+Upj0EAyZB9+tcB4ZByJ71V5C7ntcj550Q4KBTl7pvjFVmtbnYvSQ7ACcEZoD" +
-- "fTUwbgDE490fN6B5o5fRjdAXiDNBGKLwNVMLZnTJLPrDh1hypAFHAkTzXnNqc+GHfG75oYxVYN0k" +
-- "YEwQXPEAcuF9ZIH/01ku1/ChivJHkNCeMk8sCNXChCdhQr7+6uvC4RU4d8RJ1PRuV64JKdDSU3su" +
-- "HuHMuKJUcuWMhMU4QHwflWBHgFEb4tXuSs3gEaLV7bdDlXvU6rm7hKH8SobmmawohUNkeSDUghdD" +
-- "0vfXMrbnYdOoSij6Eg108TFje6EOMwbjwZ0zUHeXA5GGANoz6jm2VwCotikBcN7YpvHEtvrDnoqh" +
-- "t58kuzpDJcoPhQDO6YGn3+pTK/007QYUoClgOUHpWAUuldPV4VYYn8rXfMDpHN4NS4McOBpsJ7fZ" +
-- "9utrbNvLWYdzrq5H3PO+Hfmy8GCKaI7U7o/3wq6ObklOIkhykcD+sbuFMeKAcKYos8RvSczhEgLM" +
-- "EioJknDoTEznWLDNJb5RO2POPBfqf2frdFN3LAz6Im+agU9e+Xzn8HLod+dcueXnDk/vX2DZlQaK" +
-- "/ebpLV0miPmcCXs1xZySWC9JMA/Fz3/CeXZbgcTCIEVMqiSAkFguxQ0mX06IX9KueIuPpV/xPCS+" +
-- "ttQGnDMs6Tej8SaseF4LN9c9cnxNj6VxI8Q+3em9Hx+c3PmW1UDztMZtXVLEfdymbGAJ60kJGZQm" +
-- "tH99bE8YGN/wd/mgxdG7NFDb8/ZohryYA5HguHhI5uYO27vyoqtrmAiXr31JX/V48CuY8R8FJhxE" +
-- "eeEAQWk9HnYlFmMJoRKG03QLtUJ7/93FvpXXJ7wM/6Za4l71UEu5pWkoucv0Be0tm95vmUdy5t5k" +
-- "tpbPbe8B2vmsi7+rl2Nf4yVaUlLHSQXu7r8tw1JyT+ivhQBaAhZUxBSC5EPpPtMKVDzi3z/+HZHJ" +
-- "7K/7IvC/CRhZ6Ep6evGGyXJS3kAsp3SGcgLKc7uSktBhrW7ZFq32r/HHCVbb0P9fBSYOTpIoJ5SE" +
-- "7GUnpHbrbG8EzsfWfwgwAEfC/ToQIhkhAAAAAElFTkSuQmCC"
-- , params: "source=hp&channel=np"
-- }
--
--, "Яндекс":
-- {
-- image: "data:image/png;base64," +
-- "iVBORw0KGgoAAAANSUhEUgAAAEYAAAAcCAYAAADcO8kVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ" +
-- "bWFnZVJlYWR5ccllPAAABWFJREFUeNrsWWtsVEUUnltLH7tbaeuDbfCBojUoBTGmooLE+Igx+gON" +
-- "RvEJhEQNUdEYA0Ji4xNf2Bg1iBJJrGBC+CEBNYoxxmh94CMKRE2MitBqoZRi6bbdZT3TfhM/TmZ2" +
-- "u5jGsOEkX8/0ztzp3HPP4zu3UTabNUfEI9YwgzAxjUbBGkG7IAv0CwYE53rWC+KChFloRh329igN" +
-- "zD8keJR+P2DvEbgnrjp4eWT65GerSZuU6FWii9Fj5pGHvC6ow/WpdP1C7SV3Bm18eNpDG2a0oA0P" +
-- "v0qFSn3IMPOKxChsmBJ1/TpBEuNn1NxRB8XOoJSYRabfrCiG0FGiDXMZ9HeC73PfGpkOST0vmYGi" +
-- "LEraMCdB/5jP46xhnhaj7C3Sal2qjFSDcU8eb4m2m4xpHvKWYwSTBd2Cr1HBrIwVnCXYIdiiNrDh" +
-- "Wi8YQLVzZ+mDt/ar9acK5gqOE6wTvKvmE4JzsN83ghSu1+AMMcGngr/pnnHYM4nzrRX8EapKm5Fc" +
-- "3/bwlAn/Jt/EtJdNmdvidjxcpyrjT+D6Fx7LPoA5jf3ktU5metY9rtZcRHNn0vV3cO0rtf6GwN9v" +
-- "DCXfX6AbVLL1hJJOxIM6UtwnJG7ORuIaMl5W7W297g2MmwR3YLxQcDmty3jOdongCrrXyRTBaoyf" +
-- "x5qdgjZ4qzfHbCQ3mzXcChcYH8hhIGf0zwQ3Ch6k8/Ae9yEM3hc8LFguWIm5uwIvwYXhPdA2RNbT" +
-- "/BLoFsECwXsw1gUIZa9h7NvZivGLgkk010eHjv5jbitXD1HiWVMhuB7jDXR9E/R0Qa3nPvvmTxZc" +
-- "7fGWyQhNK6/R9b8Ev4aSr0HyunWQ3Q/li8/hdh8JTiOD+DpPa7jegHtriUN35zDMRMEJGH9J17dB" +
-- "18KzO9V9NvndjbH1sB9objp0u+CT4VYlJ5txKLvpDMFsIJ/EwYOs9bsEp+RYeyz0nx7y6ORsGu8K" +
-- "EM2kx1ts7rkXL+YxNd8I/TOcoCDDOB5jY/Fj/P4cEmVTjr0SlKNCOcjJ8fQgodAcQ/d/i/BLK8Oo" +
-- "ZtYcLVgGD1wq2K7mx0LvKITHaFlCbny/oI4M43uQDJJkL3KH5RWnB/auh96ax9AGnKQdoZNAyO4T" +
-- "VHv4VobC+XzPntWUMgpivtwzufbgWbVpSHYh4V0DnrA6YETrCWdgvGUYIboX9KEahqlFcq0GT2HZ" +
-- "jwrXBW4zJ/C8FYdqmEWUb94aZniUUbXJVbmm0N6/5zjbPnohcfKePiDlSfBJeO0r9Bx8pi7oEw/F" +
-- "MPMp8S0roARHar+QYS6FXp9nv230dicVcA7LaZoxHo/ncfIbEdi6Qgxje4vFRL5aRqA/uxn6Vc9c" +
-- "muK/lXqeuQXsPwZMdi0RPedxH1AFva0QwyygavDkCBjlFuy/HJWhksLQgOVyxWqh3mYx7RND2Pi8" +
-- "0n1+baawmU9e2o6x/XR7raIQVb4mskGQQaO4ydNENlATeTE1kXOQc/agXDpZqhq42dQL2US9G1Wl" +
-- "G5XEzaWJbyTBddzcTuSmAYTMOKybQWsmeppIbk5nqcbxJ1RHO37B10TeRL3KU543kUKF0J8leqgq" +
-- "8ae8PdAd6ltPL954LXQV/m4HEbgaYqjT6KNZHWhAKd5+mzpDN4WflUdw5koweitv4lldX2QpxQSc" +
-- "/UOfx9jvvTHBKP+/RmKRoHwIiYg8pgQJsszTKFYSV2qC0VcShyqnqlEKRpolqsAyFfnpKmLOnOgr" +
-- "VAVirhYnYzsZLbgSe57nwtL375N8H+Oy3H2qKpAKEL5eVc65E04rD2NW66uWrUDobKnAnPs7PR5+" +
-- "tLFQHjMS0knhEZLdim/8bxId+RetX/4RYACXlwEEPBQycwAAAABJRU5ErkJggg=="
-- }
--};
--
- // The process of adding a new default snippet involves:
- // * add a new entity to aboutHome.dtd
- // * add a <span/> for it in aboutHome.xhtml
-@@ -142,7 +44,7 @@
- // The <a/> part of the snippet will be linked to the corresponding url.
- const DEFAULT_SNIPPETS_URLS = [
- "http://www.mozilla.com/firefox/features/?WT.mc_ID=default1"
--, "https://addons.mozilla.org/firefox/?src=snippet&WT.mc_ID=default2"
-+, "http://www.gnu.org/software/gnuzilla/addons.html?src=snippet&WT.mc_ID=default2"
- ];
++more_plugins_label=
++more_plugins_url=about:blank
++pluginupdates_label=
++pluginupdates_url=about:blank
++plugindoc_label=
++plugindoc_url=about:blank
- const SNIPPETS_UPDATE_INTERVAL_MS = 86400000; // 1 Day.
diff --git a/libre/icecat/xulrunner-copy-stub.patch b/libre/icecat/xulrunner-copy-stub.patch
index d69bb4b16..8ccf127df 100644
--- a/libre/icecat/xulrunner-copy-stub.patch
+++ b/libre/icecat/xulrunner-copy-stub.patch
@@ -1,6 +1,6 @@
---- icecat-12.0/browser/app/Makefile.in~ 2011-12-25 16:19:29.000000000 -0500
-+++ icecat-12.0/browser/app/Makefile.in 2011-12-25 16:19:55.000000000 -0500
-@@ -224,7 +224,7 @@
+--- a/browser/app/Makefile.in
++++ b/browser/app/Makefile.in
+@@ -233,7 +233,7 @@
else
ifdef LIBXUL_SDK
libs::
diff --git a/libre/iceweasel-i18n/PKGBUILD b/libre/iceweasel-i18n/PKGBUILD
index 9e0469437..47a48dc9c 100644
--- a/libre/iceweasel-i18n/PKGBUILD
+++ b/libre/iceweasel-i18n/PKGBUILD
@@ -9,18 +9,18 @@
# - Run 'make'. It will take care of everything else for you.
_debname=iceweasel
-_debver=13.0.1
-_debrel=2
+_debver=15.0
+_debrel=1
_debrepo=http://ftp.debian.org/debian/pool/main/
debfile() { echo $@|sed -r 's@(.).*@\1/&/&@'; }
-_langpacks=(af ak ar as ast be bg bn-BD bn-IN br bs ca cs csb cy da de el en-GB en-ZA eo es-AR es-CL es-ES es-MX et eu fa fi fr fy-NL ga-IE gd gl gu-IN he hi-IN hr hu hy-AM id is it ja kk kn ko ku lg lt lv mai mk ml mr nb-NO nl nn-NO nso or pa-IN pl pt-BR pt-PT rm ro ru si sk sl son sq sr sv-SE ta ta-LK te th tr uk vi zh-CN zh-TW zu)
+_langpacks=(af ak ar as ast be bg bn-BD bn-IN br bs ca cs csb cy da de el en-GB en-ZA eo es-AR es-CL es-ES es-MX et eu fa ff fi fr fy-NL ga-IE gd gl gu-IN he hi-IN hr hu hy-AM id is it ja kk km kn ko ku lg lij lt lv mai mk ml mr nb-NO nl nn-NO nso or pa-IN pl pt-BR pt-PT rm ro ru si sk sl son sq sr sv-SE ta-LK ta te th tr uk vi zh-CN zh-TW zu)
pkgbase=iceweasel-i18n
pkgname=($(for lang in ${_langpacks[@]}
do echo $pkgbase-$lang | tr A-Z a-z
done))
-_pkgver=13.0.1
+_pkgver=15.0
pkgver=${_debver}.${_debrel}
pkgrel=1
@@ -56,87 +56,90 @@ package_iceweasel-i18n-$(echo $lang | tr A-Z a-z)() {
"
done
-md5sums=('757e700b430500bd1bc4a32531c9c5c2'
- 'beb404a571e3e666de849e3ccd6887c4'
- '3bef09f6330c11c43eaa3b2349d65172'
- '8abaeec4486169bb85be05f289c0eae9'
- '55d5c50733a1d08acbd85292cb596589'
- '10ed3b7da37259a870507287b026f69c'
- '8ef3e6cea973059a328eb5792a507e5d'
- '64a37cd546b0e092ddd2495e8ee8fb33'
- 'ce9a0bbdc6715ba9350050dcb640201a'
- '5506b1e58bb9e8a100b1c7a527f95dcf'
- '6920f4fb2d266d5839872a254a41c760'
- '73f6d4a70be7b0f0c15627e72685d402'
- '695fb3e883e6949d1ad13460389dbec2'
- 'c0ed06cb371edb89d2c42f4175dd8ab7'
- '074429b21f92d61db196d49d60fef32d'
- '9e4b3ecf3ecc9b577e5f8c33df68c006'
- '8e3b3090910d5d2b40b5deb0ee589359'
- 'a6c969cb9a8c97a548a16422ac4e2664'
- '6394347deb1924c46992eb9d5e9498c9'
- 'de44e8a2e3e8de215fdf6b6f6399f88f'
- '57b8a69ff712d6416160a5c5c61e6ba7'
- 'dd453683292ad2f2181e720a6b834f11'
- '04d2d05e22208106b67cc136d2b66892'
- 'f5474e87498f8da3ed27b11816a64906'
- '6d60eabb499c2e672a5ebc5ea32c6c58'
- '91b86461bfc8f1728d1b4e55d102622c'
- '525e770773177bbdb2c8ad14ffb4534b'
- '98139e2c2c1cc11e6d47a46b2483c290'
- '295ee591cc1480da7b2adacf470c1ab1'
- 'a95c27e109eb5768b1ce4dbf3e58ddca'
- 'b8dccb786a16c6ebf8c015997aa96577'
- 'a647e17fd8c7c9d039c140e36c3e18a7'
- 'd20309e9a6092e9a7a92c1ded0d55f62'
- 'e0e5948c8353d3de76912884edc20297'
- '8d0bf7dbb40e06495d8c749758163246'
- 'f34d9ec431acc2b1178ac3cdbfae3856'
- 'cb68c4036bdb9ac69428a035e04668dc'
- '2949b4e18de48b29c62ef03b3ba4f94d'
- 'aec2a61b12f7e5dac2f46251407c6b47'
- '60285cbb93249fea5d5afba3dbaf115f'
- 'c3f33724ded35468760aac7816b2b591'
- 'dc9b02972a247dc5fbeabcc42942c4ac'
- '512bffe5f782e92da15bc4c9b2035ded'
- '3c04ca7f6d726e417dc1459eaa8bc068'
- 'd8526259b9560e9164862df34db555a7'
- 'af3630dbd3a327ce99edf96b8cb35dce'
- 'ffeb0437949a5e623b12dbcde41b6d39'
- 'c653d9c9101394d29c5f5a3b7bf510e1'
- 'b31c230e4cbf3d1f73b499509ff3e805'
- '548228527e6772ee5f457fff41826b02'
- '40b5e98319effec4f1605a831c393cda'
- '09899eacc5d1e61767a87ecd093267d8'
- '1907de3acaa8e4c99539f99c0442770e'
- 'dc4cdef93b037e40ee6fd3f4c0848e29'
- '409e9fa01c0b2982ba7e335d7001b905'
- 'c30fed12e22cf16ea86374ca541a32aa'
- 'a9cc0798968851f51521399171e1454f'
- '6b53e84454a196870e631db5859fa9f3'
- '7939907fff93c0b984b445d8ea603baf'
- '7370eca015e6ed0289a9db4e5f4cd908'
- '84eaa820922b25b9b16724099a78c139'
- '23f15310ffd0d70d3aaf9b37436a16bb'
- 'a4063289c46317f0d351f11e8a0d1527'
- '012417e2c4b0d2e597273f988b9f877b'
- '3feaddb7edef32adfc561aa3eeedafe8'
- '69fc663f9951867c9139a3a39973e0a5'
- 'a9c3fed813c45fd32b17576a32ccf35a'
- '01fe030c2949facb8512a667e9e6e9ee'
- 'f8d63b2ae7d24753422e266224de32d2'
- '335ce46bda9f0a69414dc180ea780a70'
- 'a0b4ef73ad4322ea536d08918d630c9f'
- '39380afb97827cde59536c81310de562'
- '06930aeffde351d14554de1f0f93728b'
- '3d1fe2feefd0e44c213360c405006a98'
- '3f0af6bbd75b45b7703f35e3e594a7a7'
- '89f90e0a35b81423257b113a37a71681'
- '24fc060c80197d73585902fec40de1bf'
- '7738a9596bf1e198c6de3ec3e694e7eb'
- '8fbf72bb8c1d5cfc7dbcb02af506da3c'
- '8790e5d8e5317fba199bfb3f135847bc'
- 'd768e2190bcea36233625d948d879b39'
- '3bac90764599a61b14f82e9a51d72d36'
- 'eb3d0fa986f6ffd54f2bb48fc482227e'
- '3c8166c380597924871688c8c6bf795c')
+md5sums=('41a9b0d39466ec63707c77feb010f97c'
+ 'a868d76268f52f911683dce647af46b5'
+ '9eec699d60ca812ffbbf5939522b8393'
+ '388f4fbbe2266ba7b4896075c2bdbaef'
+ 'c64bc2261a3a5767f714a460255b15d5'
+ '2fc0a0395c1d92dd2529291258b7240b'
+ '0f59e1738c1b37d54b3bb05c2f7853a3'
+ '68ebd3ec4fc55187dafbfe599f62112e'
+ 'be4852fbb9c11b36648205f8f1f6cbd1'
+ 'e68a36c7cefc90e3c61f7d134bb838c7'
+ 'd242789df2d520b65fc88c1d3df0eae0'
+ 'e6c527cde3251a8409f16ea0bb278b03'
+ 'beeba513659afd8e0887a44a9cc44a57'
+ 'e8f4d9eee6eb1c270f99ddf08359c672'
+ '618fa08cfbe2ff33581ace766b2828fb'
+ '0d31f1a718ed91b6b1df885b205c7a75'
+ 'd823ae880fb0a193d107bc9546206299'
+ '4c446ef16e61f335f93eace4251f5d8c'
+ '2129b44ef2edd6223ff731e05aae5112'
+ 'ca4b27e3b8b9235235b0c59e7fb5e343'
+ 'ce2f7887eb064983923d917b094d14c2'
+ '8a5b6b934eb27b706aa52945256f32cf'
+ 'd6396fe6459c597572a10d1e02f195eb'
+ '78281b9ebd8a78f37ff6a8af07518cb7'
+ '36add693276f7d5c73f59e927d4645e4'
+ '93cafe70ca3b3b36ba0a56b4b4b4a7f9'
+ '6d911ee10f75ad316861ee6b8c435887'
+ 'ccd8d4f9ed54aa56e728508e42ec3538'
+ '4ef4fb5ef6b814bb414e4fed06ca7b14'
+ '7b49e8f2479c32c9435151a8e139f411'
+ '4f5974e5d1ec83a598892b729bbca5dc'
+ '3caf262ec4e12a3166cccbf2e163ec82'
+ 'eb4be46606957c856cf5d87c337184ca'
+ '45001918dacec18fb0db953c56e04032'
+ '766c6f9a84f6930317603d2014bd0a84'
+ 'bfe20727eb714f616c4a5cdee7300584'
+ 'fc6701b477ad209a3edb1429b529027f'
+ '5fb299bd54fd3fa10cf91d88d77df4e0'
+ '3b1988b200c303747aebfde97cb9333d'
+ '79bd597a764676dd1fddcf5e0a2aa646'
+ '9f63e8b4493063c770b835e80f883b66'
+ 'e9524c247402faaa8b767a93a5e5773a'
+ '457ae04a4f7437c0b16d1c021be71574'
+ '77828bdeef9d6e9b78719be537cb0491'
+ '4bb2c8bd527aed47ef0c50b3861fb2a4'
+ '4d94a161e882de38616c8344d1d2994a'
+ '098f4d49f2335cab2a5070c35d5f69e4'
+ '0deda71dbfb0b07b378de1de9209e047'
+ '331fab3aae394ef3a3674f4582d0b538'
+ '4daa8de8b393385d03379ed49b421bb3'
+ '60534b0e61dd9499ddb3ff3a29026b2f'
+ '519299dfc4764e987ece840b630fa8c9'
+ 'a13a1bc158353eadedd4d9a22f7a78fd'
+ '39804bd399a955cde36db0e7bfc0afd2'
+ '1c24d64463fb742fddb438939302a770'
+ 'a3246566714da549faaefed6a082747e'
+ '7d06acae2f3a3bc15344502cdef25bf0'
+ '68b3f9e98df3ddcca5458695297a6581'
+ '6cc30b2ec4e75c45a41bcd328385e285'
+ 'a0df4e646a376f8dce539309a057c340'
+ '8745389d916b522df730ea457fcc7b20'
+ '4982a6a88b3bf883b21633e3561a41d7'
+ '41ddec979a26c2fd6b212285cfa26b3c'
+ '7ac36674bd749e11c2a28cb646ed420c'
+ 'ba855d101c76ead73e7d4d7a74839a2b'
+ '4f2abadda53b3f0c0eeeb2bbefc96991'
+ '67e448c17a2ee9f981743427e6e69d69'
+ '90a365963d579ecb9d2681f0510b665f'
+ '92d635cf265e0eec023d80034b0d1cd0'
+ 'edd7160a59c4210b64bd384ee3196f76'
+ 'cd3c038c61d7ce643a01808ed88d92d0'
+ 'e5e07573a583ffc660f6ec846658b266'
+ '99e79e501170ca8a452d25eed5cfeab6'
+ 'dd6e06943820e0731d3b1697ac12d353'
+ 'c263cdeff3879481dc6b7cf44df9364a'
+ '3656bf7eba6a1042f3fa19c8cb494339'
+ '923313a52e0bf228fe2d41345401b296'
+ '1ba11249737fc1e2e61952e17fe764ec'
+ '8103d1b2f18f25df4b7702e3f1fc23ef'
+ '5d9cdf21c5bbd7bab97b10d9784f538e'
+ '4c032777e914f0e30cfeb2d1627f2b14'
+ '45a462e14b8e2c44d064f4bb6dffd3f5'
+ '075d374f6ee205df5b0f56629c0234fa'
+ '49517a540428d07cbf6809d96eecdd85'
+ '60f7b29f1325a6de41c45af2cb2423ba'
+ '8a000cb0afcb6655f7c626c05a313873'
+ '90e94eef2a30d9c20ecb0103d0203981') \ No newline at end of file
diff --git a/libre/iceweasel-libre/Bug-756390-Make-the-Reset-Firefox-feature-more-gener.patch b/libre/iceweasel-libre/Bug-756390-Make-the-Reset-Firefox-feature-more-gener.patch
index 3e7149308..240c3d4e8 100644
--- a/libre/iceweasel-libre/Bug-756390-Make-the-Reset-Firefox-feature-more-gener.patch
+++ b/libre/iceweasel-libre/Bug-756390-Make-the-Reset-Firefox-feature-more-gener.patch
@@ -1,17 +1,21 @@
+From: Mike Hommey <mh@glandium.org>
+Date: Tue, 5 Jun 2012 08:57:06 +0200
+Subject: Bug 756390 - Make the "Reset Firefox" feature more generic
+
diff --git a/browser/components/migration/content/migration.js b/browser/components/migration/content/migration.js
-index ffb0c34..442a5ff 100644
+index 0e8ccf5..fa46c08 100644
--- a/browser/components/migration/content/migration.js
+++ b/browser/components/migration/content/migration.js
-@@ -314,7 +314,7 @@ var MigrationWizard = {
+@@ -249,7 +249,7 @@ var MigrationWizard = {
}
- var bundle = document.getElementById("brandBundle");
+ var brandBundle = document.getElementById("brandBundle");
- // These strings don't exist when not using official branding. If that's
+ // These strings may not exist when not using official branding. If that's
// the case, just skip this page.
try {
- var pageTitle = bundle.getString("homePageMigrationPageTitle");
-@@ -346,8 +346,8 @@ var MigrationWizard = {
+ var pageTitle = brandBundle.getString("homePageMigrationPageTitle");
+@@ -281,8 +281,8 @@ var MigrationWizard = {
case "chrome":
source = "sourceNameChrome";
break;
@@ -22,99 +26,131 @@ index ffb0c34..442a5ff 100644
break;
}
-@@ -357,8 +357,13 @@ var MigrationWizard = {
+@@ -292,7 +292,12 @@ var MigrationWizard = {
var oldHomePageURL = this._migrator.sourceHomePageURL;
if (oldHomePageURL && source) {
-- var bundle2 = document.getElementById("bundle");
-- var appName = bundle2.getString(source);
+- var appName = MigrationUtils.getLocalizedString(source);
+ var appName;
+ if (source == "brand") {
-+ appName = bundle.GetStringFromName("brandFullName");
++ appName = brandBundle.GetStringFromName("brandFullName");
+ } else {
-+ var bundle2 = document.getElementById("bundle");
-+ appName = bundle2.getString(source);
++ appName = MigrationUtils.getLocalizedString(source);
+ }
- var oldHomePageLabel = bundle.getFormattedString("homePageImport",
- [appName]);
+ var oldHomePageLabel =
+ brandBundle.getFormattedString("homePageImport", [appName]);
var oldHomePage = document.getElementById("oldHomePage");
diff --git a/browser/components/migration/content/migration.xul b/browser/components/migration/content/migration.xul
-index f8653b1..f3ac62a 100644
+index f030756..23e37ff 100644
--- a/browser/components/migration/content/migration.xul
+++ b/browser/components/migration/content/migration.xul
-@@ -76,7 +76,7 @@
- #endif
- #endif
+@@ -42,7 +42,7 @@
+ #elifdef XP_UNIX
<radio id="chrome" label="&importFromChrome.label;" accesskey="&importFromChrome.accesskey;"/>
+ #endif
- <radio id="firefox" label="&importFromFirefox.label;" accesskey="&importFromFirefox.accesskey;"/>
+ <radio id="self" hidden="true"/>
- <radio id="fromfile" label="&importFromHTMLFile.label;" accesskey="&importFromHTMLFile.accesskey;" hidden="true"/>
<radio id="nothing" label="&importFromNothing.label;" accesskey="&importFromNothing.accesskey;" hidden="true"/>
</radiogroup>
+ <label id="noSources" hidden="true">&noMigrationSources.label;</label>
diff --git a/browser/components/migration/src/BrowserProfileMigrators.manifest b/browser/components/migration/src/BrowserProfileMigrators.manifest
-index f49e481..e490ddf 100644
+index d7fec75..d531b83 100644
--- a/browser/components/migration/src/BrowserProfileMigrators.manifest
+++ b/browser/components/migration/src/BrowserProfileMigrators.manifest
-@@ -3,4 +3,4 @@ contract @mozilla.org/toolkit/profile-migrator;1 {6F8BB968-C14F-4D6F-9733-6C6737
+@@ -3,7 +3,7 @@ contract @mozilla.org/toolkit/profile-migrator;1 {6F8BB968-C14F-4D6F-9733-6C6737
component {4cec1de4-1671-4fc3-a53e-6c539dc77a26} ChromeProfileMigrator.js
contract @mozilla.org/profile/migrator;1?app=browser&type=chrome {4cec1de4-1671-4fc3-a53e-6c539dc77a26}
component {91185366-ba97-4438-acba-48deaca63386} FirefoxProfileMigrator.js
-contract @mozilla.org/profile/migrator;1?app=browser&type=firefox {91185366-ba97-4438-acba-48deaca63386}
+contract @mozilla.org/profile/migrator;1?app=browser&type=self {91185366-ba97-4438-acba-48deaca63386}
+ #ifdef HAS_IE_MIGRATOR
+ component {3d2532e3-4932-4774-b7ba-968f5899d3a4} IEProfileMigrator.js
+ contract @mozilla.org/profile/migrator;1?app=browser&type=ie {3d2532e3-4932-4774-b7ba-968f5899d3a4}
diff --git a/browser/components/migration/src/FirefoxProfileMigrator.js b/browser/components/migration/src/FirefoxProfileMigrator.js
-index 7b4a6e4..add5bc4 100644
+index a6598fe..8f83da8 100644
--- a/browser/components/migration/src/FirefoxProfileMigrator.js
+++ b/browser/components/migration/src/FirefoxProfileMigrator.js
-@@ -448,7 +448,7 @@ FirefoxProfileMigrator.prototype = {
- ]),
+@@ -88,7 +88,7 @@ Object.defineProperty(FirefoxProfileMigrator.prototype, "startupOnlyMigrator", {
- classDescription: "Firefox Profile Migrator",
-- contractID: "@mozilla.org/profile/migrator;1?app=browser&type=firefox",
-+ contractID: "@mozilla.org/profile/migrator;1?app=browser&type=self",
- classID: Components.ID("{91185366-ba97-4438-acba-48deaca63386}")
- };
-diff --git a/browser/components/migration/src/ProfileMigrator.js b/browser/components/migration/src/ProfileMigrator.js
-index ea66675..fe4df10 100644
---- a/browser/components/migration/src/ProfileMigrator.js
-+++ b/browser/components/migration/src/ProfileMigrator.js
-@@ -51,6 +51,10 @@ ProfileMigrator.prototype = {
- params);
+ FirefoxProfileMigrator.prototype.classDescription = "Firefox Profile Migrator";
+-FirefoxProfileMigrator.prototype.contractID = "@mozilla.org/profile/migrator;1?app=browser&type=firefox";
++FirefoxProfileMigrator.prototype.contractID = "@mozilla.org/profile/migrator;1?app=browser&type=self";
+ FirefoxProfileMigrator.prototype.classID = Components.ID("{91185366-ba97-4438-acba-48deaca63386}");
+
+ const NSGetFactory = XPCOMUtils.generateNSGetFactory([FirefoxProfileMigrator]);
+diff --git a/browser/components/migration/src/MigrationUtils.jsm b/browser/components/migration/src/MigrationUtils.jsm
+index 0669aa8..19552e3 100644
+--- a/browser/components/migration/src/MigrationUtils.jsm
++++ b/browser/components/migration/src/MigrationUtils.jsm
+@@ -403,11 +403,6 @@ let MigrationUtils = Object.freeze({
+ * @see nsIStringBundle
+ */
+ getLocalizedString: function MU_getLocalizedString(aKey, aReplacements) {
+- const OVERRIDES = {
+- "4_firefox": "4_firefox_history_and_bookmarks"
+- };
+- aKey = OVERRIDES[aKey] || aKey;
+-
+ if (aReplacements === undefined)
+ return getMigrationBundle().GetStringFromName(aKey);
+ return getMigrationBundle().formatStringFromName(
+@@ -622,6 +617,17 @@ let MigrationUtils = Object.freeze({
},
-+ canMigrate: function PM__canMigrate(aMigratorKey) {
+ /**
++ * Returns whether a given migration type is supported.
++ *
++ * @param aKey Migrator key
++ * @returns whether the migrator key is supported.
++ */
++ canMigrate:
++ function MU_canMigrate(aMigratorKey) {
+ return "@mozilla.org/profile/migrator;1?app=browser&type=" + aMigratorKey in Cc;
+ },
+
- _toCString: function PM__toCString(aStr) {
- let cstr = Cc["@mozilla.org/supports-cstring;1"].
- createInstance(Ci.nsISupportsCString);
++ /**
+ * Cleans up references to migrators and nsIProfileInstance instances.
+ */
+ finishMigration: function MU_finishMigration() {
+diff --git a/browser/components/migration/src/ProfileMigrator.js b/browser/components/migration/src/ProfileMigrator.js
+index 744f117..59e5a4c 100644
+--- a/browser/components/migration/src/ProfileMigrator.js
++++ b/browser/components/migration/src/ProfileMigrator.js
+@@ -12,6 +12,7 @@ function ProfileMigrator() {
+
+ ProfileMigrator.prototype = {
+ migrate: MigrationUtils.startupMigration.bind(MigrationUtils),
++ canMigrate: MigrationUtils.canMigrate.bind(MigrationUtils),
+ QueryInterface: XPCOMUtils.generateQI([Components.interfaces.nsIProfileMigrator]),
+ classDescription: "Profile Migrator",
+ contractID: "@mozilla.org/toolkit/profile-migrator;1",
diff --git a/browser/locales/en-US/chrome/browser/migration/migration.dtd b/browser/locales/en-US/chrome/browser/migration/migration.dtd
-index 86e9d0b..8df7864 100644
+index 21cf405..f3c1a6b 100644
--- a/browser/locales/en-US/chrome/browser/migration/migration.dtd
+++ b/browser/locales/en-US/chrome/browser/migration/migration.dtd
-@@ -13,8 +13,6 @@
+@@ -17,8 +17,6 @@
<!ENTITY importFromSafari.accesskey "S">
<!ENTITY importFromChrome.label "Chrome">
<!ENTITY importFromChrome.accesskey "C">
-<!ENTITY importFromFirefox.label "Firefox">
-<!ENTITY importFromFirefox.accesskey "X">
- <!ENTITY importFromHTMLFile.label "From an HTML File">
- <!ENTITY importFromHTMLFile.accesskey "F">
+
+ <!ENTITY noMigrationSources.label "No programs that contain bookmarks, history or password data could be found.">
diff --git a/browser/locales/en-US/chrome/browser/migration/migration.properties b/browser/locales/en-US/chrome/browser/migration/migration.properties
-index 495ed78..0272654 100644
+index ab82d85..915f6b8 100644
--- a/browser/locales/en-US/chrome/browser/migration/migration.properties
+++ b/browser/locales/en-US/chrome/browser/migration/migration.properties
-@@ -4,7 +4,6 @@ profileName_format=%S %S
+@@ -8,7 +8,6 @@ profileName_format=%S %S
sourceNameIE=Internet Explorer
sourceNameSafari=Safari
sourceNameChrome=Google Chrome
-sourceNameFirefox=Mozilla Firefox
importedBookmarksFolder=From %S
- importedSearchURLsFolder=Keyword Searches (From %S)
-@@ -21,27 +20,27 @@ importedSafariBookmarks=From Safari
+
+@@ -22,22 +21,22 @@ importedSafariReadingList=Reading List (From Safari)
2_ie=Cookies
2_safari=Cookies
2_chrome=Cookies
@@ -124,8 +160,8 @@ index 495ed78..0272654 100644
4_ie=Browsing History
4_safari=Browsing History
4_chrome=Browsing History
--4_firefox=Browsing History
-+4_self=Browsing History
+-4_firefox_history_and_bookmarks=Browsing History and Bookmarks
++4_self=Browsing History and Bookmarks
8_ie=Saved Form History
8_safari=Saved Form History
@@ -141,36 +177,14 @@ index 495ed78..0272654 100644
32_ie=Favorites
32_safari=Bookmarks
- 32_chrome=Bookmarks
--32_firefox=Bookmarks
-+32_self=Bookmarks
-
+@@ -46,4 +45,4 @@ importedSafariReadingList=Reading List (From Safari)
64_ie=Other Data
64_safari=Other Data
-diff --git a/toolkit/content/aboutSupport.js b/toolkit/content/aboutSupport.js
-index c86d80c..ff1ccfe 100644
---- a/toolkit/content/aboutSupport.js
-+++ b/toolkit/content/aboutSupport.js
-@@ -608,13 +608,13 @@ function populateResetBox() {
- .getService(Ci.nsIToolkitProfileService);
- let currentProfileDir = Services.dirsvc.get("ProfD", Ci.nsIFile);
-
--#expand const MOZ_APP_NAME = "__MOZ_APP_NAME__";
--#expand const MOZ_BUILD_APP = "__MOZ_BUILD_APP__";
--
- // Only show the reset box for the default profile if the self-migrator used for reset exists.
- try {
- if (!currentProfileDir.equals(profileService.selectedProfile.rootDir) ||
-- !("@mozilla.org/profile/migrator;1?app=" + MOZ_BUILD_APP + "&type=" + MOZ_APP_NAME in Cc))
-+ !("@mozilla.org/toolkit/profile-migrator;1" in Cc))
-+ return;
-+ let pm = Cc["@mozilla.org/toolkit/profile-migrator;1"].createInstance(Ci.nsIProfileMigrator);
-+ if (!("canMigrate" in pm) || !pm.canMigrate("self"))
- return;
- document.getElementById("reset-box").style.visibility = "visible";
- } catch (e) {
+ 64_chrome=Other Data
+-64_firefox=Bookmarks Backups
++64_self=Bookmarks Backups
diff --git a/toolkit/content/jar.mn b/toolkit/content/jar.mn
-index 6f0d2d6..da7342b 100644
+index 697b217..b6e1709 100644
--- a/toolkit/content/jar.mn
+++ b/toolkit/content/jar.mn
@@ -38,7 +38,7 @@ toolkit.jar:
@@ -180,40 +194,55 @@ index 6f0d2d6..da7342b 100644
-* content/global/resetProfile.js (resetProfile.js)
+ content/global/resetProfile.js (resetProfile.js)
* content/global/resetProfile.xul (resetProfile.xul)
+ * content/global/resetProfileProgress.xul (resetProfileProgress.xul)
* content/global/treeUtils.js (treeUtils.js)
- *+ content/global/viewZoomOverlay.js (viewZoomOverlay.js)
diff --git a/toolkit/content/resetProfile.js b/toolkit/content/resetProfile.js
-index 975a9ed..d8e46b1 100644
+index dcb4065..09c1146 100644
--- a/toolkit/content/resetProfile.js
+++ b/toolkit/content/resetProfile.js
-@@ -6,12 +6,10 @@ Components.utils.import("resource://gre/modules/Services.jsm");
+@@ -36,13 +36,13 @@ function resetSupported() {
+ getService(Ci.nsIToolkitProfileService);
+ let currentProfileDir = Services.dirsvc.get("ProfD", Ci.nsIFile);
- // based on onImportItemsPageShow from migration.js
- function onResetProfileLoad() {
--#expand const MOZ_BUILD_APP = "__MOZ_BUILD_APP__";
-#expand const MOZ_APP_NAME = "__MOZ_APP_NAME__";
- const MAX_MIGRATED_TYPES = 16;
-
- var migratedItems = document.getElementById("migratedItems");
-- var bundle = Services.strings.createBundle("chrome://" + MOZ_BUILD_APP +
-+ var bundle = Services.strings.createBundle("chrome://browser" +
- "/locale/migration/migration.properties");
+-#expand const MOZ_BUILD_APP = "__MOZ_BUILD_APP__";
+-
+ // Reset is only supported for the default profile if the self-migrator used for reset exists.
+ try {
+- return currentProfileDir.equals(profileService.selectedProfile.rootDir) &&
+- ("@mozilla.org/profile/migrator;1?app=" + MOZ_BUILD_APP + "&type=" + MOZ_APP_NAME in Cc);
++ if (currentProfileDir.equals(profileService.selectedProfile.rootDir) &&
++ "@mozilla.org/toolkit/profile-migrator;1" in Cc) {
++ let pm = Cc["@mozilla.org/toolkit/profile-migrator;1"].createInstance(Ci.nsIProfileMigrator);
++ return ("canMigrate" in pm) && pm.canMigrate("self");
++ }
+ } catch (e) {
+ // Catch exception when there is no selected profile.
+ Cu.reportError(e);
+@@ -53,9 +53,6 @@ function resetSupported() {
+ function getMigratedData() {
+ Components.utils.import("resource:///modules/MigrationUtils.jsm");
- // Loop over possible data to migrate to give the user a list of what will be preserved. This
-@@ -21,7 +19,7 @@ function onResetProfileLoad() {
- var itemID = Math.pow(2, i);
+-#expand const MOZ_BUILD_APP = "__MOZ_BUILD_APP__";
+-#expand const MOZ_APP_NAME = "__MOZ_APP_NAME__";
+-
+ // From migration.properties
+ const MIGRATED_TYPES = [
+ 4, // History and Bookmarks
+@@ -68,7 +65,7 @@ function getMigratedData() {
+ let dataTypes = [];
+ for (let itemID of MIGRATED_TYPES) {
try {
- var checkbox = document.createElement("label");
-- checkbox.setAttribute("value", bundle.GetStringFromName(itemID + "_" + MOZ_APP_NAME));
-+ checkbox.setAttribute("value", bundle.GetStringFromName(itemID + "_self"));
- migratedItems.appendChild(checkbox);
+- let typeName = MigrationUtils.getLocalizedString(itemID + "_" + MOZ_APP_NAME);
++ let typeName = MigrationUtils.getLocalizedString(itemID + "_self");
+ dataTypes.push(typeName);
} catch (x) {
- // Catch exceptions when the string for a data type doesn't exist because it's not migrated
+ // Catch exceptions when the string for a data type doesn't exist.
diff --git a/toolkit/profile/nsIProfileMigrator.idl b/toolkit/profile/nsIProfileMigrator.idl
-index e941336..5b264af 100644
+index f35c227..7062886 100644
--- a/toolkit/profile/nsIProfileMigrator.idl
+++ b/toolkit/profile/nsIProfileMigrator.idl
-@@ -69,7 +69,7 @@ interface nsIProfileStartup : nsISupports
+@@ -37,7 +37,7 @@ interface nsIProfileStartup : nsISupports
* @client Toolkit (Startup code)
* @obtainable service, contractid("@mozilla.org/toolkit/profile-migrator;1")
*/
@@ -222,7 +251,7 @@ index e941336..5b264af 100644
interface nsIProfileMigrator : nsISupports
{
/**
-@@ -92,6 +92,14 @@ interface nsIProfileMigrator : nsISupports
+@@ -60,6 +60,14 @@ interface nsIProfileMigrator : nsISupports
* @note The startup code ignores COM exceptions thrown from this method.
*/
void migrate(in nsIProfileStartup aStartup, in ACString aKey);
@@ -238,15 +267,15 @@ index e941336..5b264af 100644
%{C++
diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp
-index 32eef5c..dbe1580 100644
+index e5d3042..6de3390 100644
--- a/toolkit/xre/nsAppRunner.cpp
+++ b/toolkit/xre/nsAppRunner.cpp
-@@ -3561,7 +3561,7 @@ XRE_main(int argc, char* argv[], const nsXREAppData* aAppData)
- if (gDoProfileReset) {
- // Automatically migrate from the current application if we just
- // reset the profile.
-- aKey = MOZ_APP_NAME;
-+ aKey = "self";
- pm->Migrate(&dirProvider, aKey);
- // Set the new profile as the default after migration.
- rv = SetCurrentProfileAsDefault(profileSvc, profD);
+@@ -3650,7 +3650,7 @@ XREMain::XRE_mainRun()
+ if (gDoProfileReset) {
+ // Automatically migrate from the current application if we just
+ // reset the profile.
+- aKey = MOZ_APP_NAME;
++ aKey = "self";
+ }
+ pm->Migrate(&mDirProvider, aKey);
+ }
diff --git a/libre/iceweasel-libre/PKGBUILD b/libre/iceweasel-libre/PKGBUILD
index a54e9d948..59435e71a 100644
--- a/libre/iceweasel-libre/PKGBUILD
+++ b/libre/iceweasel-libre/PKGBUILD
@@ -12,10 +12,10 @@
_pgo=false
-# We're getting this from Debian Sid
+# We're getting this from Debian Experimental
_debname=iceweasel
-_debver=13.0.1
-_debrel=2
+_debver=15.0
+_debrel=1
_debrepo=http://ftp.debian.org/debian/pool/main/
debfile() { echo $@|sed -r 's@(.).*@\1/&/&@'; }
@@ -50,16 +50,18 @@ source=("${_debrepo}/`debfile ${_debname}`_${_debver}.orig.tar.bz2"
libre.patch
iceweasel-install-dir.patch
vendor.js
+ shared-libs.patch
Bug-756390-Make-the-Reset-Firefox-feature-more-gener.patch)
-md5sums=('9eb7668e4a5b5be63ccf4d43c212d011'
- 'c5eb6357cecd0d83e75ef37a9dcf3683'
+md5sums=('aa5a7f08f55a2b02a71c86f30ef75a25'
+ 'b93090724434e3801375730744e79950'
'eab149c1994ab14392e55af3abb08e80'
'ac29b01c189f20abae2f3eef1618ffc0'
'a485a2b5dc544a8a2bd40c985d2e5813'
- '54bd934ac23839601c7d23a60fbefe6a'
+ '6d8816d2577263556d76f1aa4527b55b'
'e529742c0a425648087bc3ce537fe4c5'
'0d053487907de4376d67d8f499c5502b'
- 'efda47526ba76ef926b236bf2cda2456')
+ '52e52f840a49eb1d14be1c0065b03a93'
+ 'c52fac65c1e06290a5108b75c31ace79')
if [ "$_pkgname" != "$pkgname" ]; then
provides+=("$_pkgname=$pkgver")
@@ -88,6 +90,7 @@ build() {
patch -Np1 -i "$srcdir/iceweasel-install-dir.patch" # install to /usr/lib/$_pkgname
patch -Np1 -i "$srcdir/xulrunner-copy-stub.patch" # small fix
patch -Np1 -i "$srcdir/libre.patch"
+ patch -Np1 -i "$srcdir/shared-libs.patch"
cp "$srcdir/mozconfig" .mozconfig # Load our build config, disable SafeSearch
@@ -126,7 +129,7 @@ package() {
cd "${srcdir}/${DEBIAN_BUILD}"
make -j1 -f client.mk DESTDIR="$pkgdir" install
- install -m644 "$srcdir"/vendor.js "$pkgdir/usr/lib/$_pkgname/defaults/pref"
+ install -Dm644 "$srcdir"/vendor.js "$pkgdir/usr/lib/$_pkgname/defaults/preferences/vendor.js"
# I don't even know why we're hitting the objdir, and ConnOS didn't.
_brandingdir=debian/branding
diff --git a/libre/iceweasel-libre/libre.patch b/libre/iceweasel-libre/libre.patch
index 39ea86c05..9ffaf3a9a 100644
--- a/libre/iceweasel-libre/libre.patch
+++ b/libre/iceweasel-libre/libre.patch
@@ -63,7 +63,7 @@ diff -urN iceweasel-13.0.orig/browser/app/profile/firefox.js iceweasel-13.0/brow
// by default we show an infobar message when pages require plugins the user has not installed, or are outdated
pref("plugins.hide_infobar_for_missing_plugin", false);
-diff -urN iceweasel-13.0.orig/browser/locales/en-US/chrome/browser-region/region.properties iceweasel-13.0/browser/locales/en-US/chrome/browser-region/region.properties
+diff -urN iceweasel-14.0.1.orig/browser/locales/en-US/chrome/browser-region/region.properties iceweasel-14.0.1/browser/locales/en-US/chrome/browser-region/region.properties
--- mozilla-release.orig/browser/locales/en-US/chrome/browser-region/region.properties 2012-06-01 09:03:48.000000000 -0300
+++ mozilla-release/browser/locales/en-US/chrome/browser-region/region.properties 2012-06-15 02:17:00.978636665 -0300
@@ -1,23 +1,23 @@
@@ -94,7 +94,7 @@ diff -urN iceweasel-13.0.orig/browser/locales/en-US/chrome/browser-region/region
# TRANSLATION NOTE: {moz:domain} and {searchTerms} are placeholders for the site
# to be searched and the user's search query. Place them in the appropriate location
# for your locale's URL but do not translate them.
--browser.search.siteSearchURL=http://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&q=site%3A{moz:domain}+{searchTerms}
+-browser.search.siteSearchURL=https://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&q=site%3A{moz:domain}+{searchTerms}
+browser.search.siteSearchURL=https://duckduckgo.com/lite/?q=site%3A{moz:domain}+{searchTerms}
# increment this number when anything gets changed in the list below. This will
@@ -152,6 +152,39 @@ diff -urN iceweasel-13.0.orig/dom/ipc/test.xul iceweasel-13.0/dom/ipc/test.xul
+ <browser type="content" src="https://duckduckgo.com/lite" flex="1" id="page" remote="true"/>
<label id="messageLog" value="" crop="center"/>
</window>
+diff -Naur iceweasel-14.0.1.orig/mobile/android/app/mobile.js iceweasel-14.0.1.orig/mobile/android/app/mobile.js
+--- mozilla-build.orig/mobile/android/app/mobile.js 2012-07-12 14:27:37.000000000 -0300
++++ mozilla-build/mobile/android/app/mobile.js 2012-07-17 22:14:47.293560718 -0300
+@@ -226,13 +226,13 @@
+ /* preferences for the Get Add-ons pane */
+ pref("extensions.getAddons.cache.enabled", true);
+ pref("extensions.getAddons.maxResults", 15);
+-pref("extensions.getAddons.recommended.browseURL", "https://addons.mozilla.org/%LOCALE%/android/recommended/");
+-pref("extensions.getAddons.recommended.url", "https://services.addons.mozilla.org/%LOCALE%/android/api/%API_VERSION%/list/featured/all/%MAX_RESULTS%/%OS%/%VERSION%");
+-pref("extensions.getAddons.search.browseURL", "https://addons.mozilla.org/%LOCALE%/android/search?q=%TERMS%&platform=%OS%&appver=%VERSION%");
+-pref("extensions.getAddons.search.url", "https://services.addons.mozilla.org/%LOCALE%/android/api/%API_VERSION%/search/%TERMS%/all/%MAX_RESULTS%/%OS%/%VERSION%/%COMPATIBILITY_MODE%");
+-pref("extensions.getAddons.browseAddons", "https://addons.mozilla.org/%LOCALE%/android/");
+-pref("extensions.getAddons.get.url", "https://services.addons.mozilla.org/%LOCALE%/android/api/%API_VERSION%/search/guid:%IDS%?src=mobile&appOS=%OS%&appVersion=%VERSION%");
+-pref("extensions.getAddons.getWithPerformance.url", "https://services.addons.mozilla.org/%LOCALE%/android/api/%API_VERSION%/search/guid:%IDS%?src=mobile&appOS=%OS%&appVersion=%VERSION%&tMain=%TIME_MAIN%&tFirstPaint=%TIME_FIRST_PAINT%&tSessionRestored=%TIME_SESSION_RESTORED%");
++pref("extensions.getAddons.recommended.browseURL", "http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.recommended.url", "http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.search.browseURL", "http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.search.url", "http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.browseAddons", "http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.get.url", "http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.getWithPerformance.url", "http://www.gnu.org/s/gnuzilla/addons.html");
+
+ /* preference for the locale picker */
+ pref("extensions.getLocales.get.url", "");
+@@ -259,7 +259,7 @@
+ pref("dom.disable_window_find", true);
+
+ pref("keyword.enabled", true);
+-pref("keyword.URL", "");
++pref("keyword.URL", "https://duckduckgo.com/lite/?q=");
+
+ pref("accessibility.typeaheadfind", false);
+ pref("accessibility.typeaheadfind.timeout", 5000);
diff -urN iceweasel-13.0.orig/layout/ipc/test-ipcbrowser.xul iceweasel-13.0/layout/ipc/test-ipcbrowser.xul
--- mozilla-build.orig/layout/ipc/test-ipcbrowser.xul 2012-06-01 09:04:06.000000000 -0300
+++ mozilla-build/layout/ipc/test-ipcbrowser.xul 2012-06-05 20:44:00.714006926 -0300
@@ -163,7 +196,7 @@ diff -urN iceweasel-13.0.orig/layout/ipc/test-ipcbrowser.xul iceweasel-13.0/layo
+ <browser type="content" src="https://duckduckgo.com/lite" flex="1" id="content"
remote="true"/>
</window>
-diff -urN iceweasel-13.0.orig/mobile/xul/app/mobile.js iceweasel-13.0/mobile/xul/app/mobile.js
+diff -urN iceweasel-14.0.1.orig/mobile/xul/app/mobile.js iceweasel-14.0.1/mobile/xul/app/mobile.js
--- mozilla-build.orig/mobile/xul/app/mobile.js 2012-06-01 09:04:14.000000000 -0300
+++ mozilla-build/mobile/xul/app/mobile.js 2012-06-05 20:48:20.193241600 -0300
@@ -221,13 +221,12 @@
@@ -190,7 +223,7 @@ diff -urN iceweasel-13.0.orig/mobile/xul/app/mobile.js iceweasel-13.0/mobile/xul
pref("dom.disable_window_open_dialog_feature", true);
pref("keyword.enabled", true);
--pref("keyword.URL", "http://www.google.com/m?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q=");
+-pref("keyword.URL", "https://www.google.com/m?ie=UTF-8&oe=UTF-8&sourceid=navclient&q=");
+pref("keyword.URL", "https://duckduckgo.com/lite/?q=");
pref("accessibility.typeaheadfind", false);
@@ -219,7 +252,7 @@ diff -urN iceweasel-13.0.orig/mobile/locales/en-US/chrome/region.properties icew
+browser.contentHandlers.types.1.uri=about:blank
# Keyword URL (for location bar searches)
--keyword.URL=http://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q=
+-keyword.URL=https://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q=
+keyword.URL=https://duckduckgo.com/lite/?q=site%3A{moz:domain}+{searchTerms}
# increment this number when anything gets changed in the list below. This will
@@ -242,14 +275,14 @@ diff -urN iceweasel-13.0.orig/mobile/locales/en-US/chrome/region.properties icew
+gecko.handlerService.schemes.mailto.0.uriTemplate=about:blank
+gecko.handlerService.schemes.mailto.1.name=
+gecko.handlerService.schemes.mailto.1.uriTemplate=about:blank
-diff -urN iceweasel-13.0.orig/modules/libpref/src/init/all.js iceweasel-13.0/modules/libpref/src/init/all.js
+diff -urN iceweasel-14.0.orig/modules/libpref/src/init/all.js iceweasel-14.0/modules/libpref/src/init/all.js
--- mozilla-build.orig/modules/libpref/src/init/all.js 2012-06-01 09:04:16.000000000 -0300
+++ mozilla-build/modules/libpref/src/init/all.js 2012-06-05 20:55:41.569045759 -0300
@@ -47,7 +47,7 @@
// SYNTAX HINTS: dashes are delimiters. Use underscores instead.
// The first character after a period must be alphabetic.
--pref("keyword.URL", "http://www.google.com/search?ie=UTF-8&oe=utf-8&q=");
+-pref("keyword.URL", "https://www.google.com/search?ie=UTF-8&oe=utf-8&q=");
+pref("keyword.URL", "https://duckduckgo.com/lite/?q=");
pref("keyword.enabled", false);
pref("general.useragent.locale", "chrome://global/locale/intl.properties");
@@ -267,14 +300,14 @@ diff -urN iceweasel-13.0.orig/toolkit/locales/en-US/chrome/global-region/region.
-pluginupdates_url=http://www.mozilla.com/plugincheck/
-plugindoc_label=plugindoc.mozdev.org
-plugindoc_url=http://plugindoc.mozdev.org/
-+more_plugins_label=gnuzilla.gnu.org
-+more_plugins_url=http://www.gnu.org/s/gnuzilla/addons.html
-+pluginupdates_label=gnuzilla.gnu.org
-+pluginupdates_url=http://www.gnu.org/s/gnuzilla/addons.html
-+plugindoc_label=gnuzilla.gnu.org
-+plugindoc_url=http://www.gnu.org/s/gnuzilla/addons.html
-
-diff -urN iceweasel-13.0.orig/browser/locales/generic/profile/bookmarks.html.in iceweasel-13.0/browser/locales/generic/profile/bookmarks.html.in
++more_plugins_label=
++more_plugins_url=about:blank
++pluginupdates_label=
++pluginupdates_url=about:blank
++plugindoc_label=
++plugindoc_url=about:blank
+
+diff -urN iceweasel-14.0.1.orig/browser/locales/generic/profile/bookmarks.html.in iceweasel-14.0.1/browser/locales/generic/profile/bookmarks.html.in
--- mozilla-release.orig/browser/locales/generic/profile/bookmarks.html.in 2012-06-01 09:03:48.000000000 -0300
+++ mozilla-release/browser/locales/generic/profile/bookmarks.html.in 2012-06-15 22:54:08.446274144 -0300
@@ -11,13 +11,20 @@
@@ -282,7 +315,7 @@ diff -urN iceweasel-13.0.orig/browser/locales/generic/profile/bookmarks.html.in
<DD>@bookmarks_toolbarfolder_description@
<DL><p>
- <DT><A HREF="http://www.mozilla.com/@AB_CD@/firefox/central/" ID="rdf:#$GvPhC3">@getting_started@</A>
-+ <DT><A HREF="https://parabolagnulinux.org/" ID="rdf:#$GvPhC3">Parabola GNU/Linux-libre</A>
++ <DT><A HREF="https://parabolagnulinux.org/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AihUrGP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AIcXLSJvFCcn////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AbRIkcP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGwTI0JWEBtB////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wCAAAACVQ8crP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFYQHJI9ChRL////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlKzZHPQoUzgAAAAH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AknV8I0sdJv8kBgxU////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AMTExA1uTlX1JAYLyf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wC5ubkLhG1x6CQGDP0PAAARzJmZBf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AxsbGCZB+g/QkBgz/DQMDUdu2tgfMn5koxo2NOsxmmQX///8A////AP///wD///8A////AP///wD///8A////AJ2JjX+NeX3/JAYM/wwCA5T///8A////AL+AgAi/foFfuG51l7JgaXCvY3E2/4CAAv///wD///8A////AJlveHOzqqv6UCUt/yQGDP8MAgTW////AP///wD///8A////AKqAgAawXmhnqk9b36VNW/KjT13mqGh16Kl+hvCbdHz/YyYx/z0KFP8kBgz/DAIE7f///wD///8A////AP///wD///8A////AJlmZgWkQU5inDFD0ZUhNv+FFyz/bRMk/1UPHP89ChT/JAYM/wwCA9v///8A////AP///wD///8A////AP///wD///8A////AP///wCTIDMohRYtfW0TJMBVDxzQPQoU3SUGDcoMBARA//8AAP//AAD//wAA//8AAP/3AAD/9wAA//sAAP/7AAD/+QAA//kAAP/5AAD/+AAA9/AAAPwAAAD/AAAA/+EAAA%3D%3D" ID="rdf:#$GvPhC3">Parabola GNU/Linux-libre</A>
</DL><p>
- <DT><H3 ID="rdf:#$ZvPhC3">@firefox_heading@</H3>
+ <DT><H3 ID="rdf:#$YvPhC3">Parabola GNU/Linux-libre</H3>
@@ -291,17 +324,17 @@ diff -urN iceweasel-13.0.orig/browser/locales/generic/profile/bookmarks.html.in
- <DT><A HREF="http://www.mozilla.com/@AB_CD@/firefox/customize/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$32iCK1">@firefox_customize@</A>
- <DT><A HREF="http://www.mozilla.com/@AB_CD@/firefox/community/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$42iCK1">@firefox_community@</A>
- <DT><A HREF="http://www.mozilla.com/@AB_CD@/about/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$52iCK1">@firefox_about@</A>
-+ <DT><A HREF="https://parabolagnulinux.org/">Parabola GNU/Linux-libre</A>
-+ <DT><A HREF="https://parabolagnulinux.org/packages/">Parabola GNU/Linux-libre Packages</A>
-+ <DT><A HREF="https://wiki.parabolagnulinux.org/">Parabola GNU/Linux-libre Wiki</A>
-+ <DT><A HREF="https://labs.parabola.nu/">Parabola GNU/Linux-libre Labs</A>
++ <DT><A HREF="https://parabolagnulinux.org/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AihUrGP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AIcXLSJvFCcn////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AbRIkcP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGwTI0JWEBtB////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wCAAAACVQ8crP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFYQHJI9ChRL////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlKzZHPQoUzgAAAAH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AknV8I0sdJv8kBgxU////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AMTExA1uTlX1JAYLyf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wC5ubkLhG1x6CQGDP0PAAARzJmZBf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AxsbGCZB+g/QkBgz/DQMDUdu2tgfMn5koxo2NOsxmmQX///8A////AP///wD///8A////AP///wD///8A////AJ2JjX+NeX3/JAYM/wwCA5T///8A////AL+AgAi/foFfuG51l7JgaXCvY3E2/4CAAv///wD///8A////AJlveHOzqqv6UCUt/yQGDP8MAgTW////AP///wD///8A////AKqAgAawXmhnqk9b36VNW/KjT13mqGh16Kl+hvCbdHz/YyYx/z0KFP8kBgz/DAIE7f///wD///8A////AP///wD///8A////AJlmZgWkQU5inDFD0ZUhNv+FFyz/bRMk/1UPHP89ChT/JAYM/wwCA9v///8A////AP///wD///8A////AP///wD///8A////AP///wCTIDMohRYtfW0TJMBVDxzQPQoU3SUGDcoMBARA//8AAP//AAD//wAA//8AAP/3AAD/9wAA//sAAP/7AAD/+QAA//kAAP/5AAD/+AAA9/AAAPwAAAD/AAAA/+EAAA%3D%3D">Parabola GNU/Linux-libre</A>
++ <DT><A HREF="https://parabolagnulinux.org/packages/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AihUrGP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AIcXLSJvFCcn////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AbRIkcP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGwTI0JWEBtB////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wCAAAACVQ8crP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFYQHJI9ChRL////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlKzZHPQoUzgAAAAH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AknV8I0sdJv8kBgxU////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AMTExA1uTlX1JAYLyf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wC5ubkLhG1x6CQGDP0PAAARzJmZBf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AxsbGCZB+g/QkBgz/DQMDUdu2tgfMn5koxo2NOsxmmQX///8A////AP///wD///8A////AP///wD///8A////AJ2JjX+NeX3/JAYM/wwCA5T///8A////AL+AgAi/foFfuG51l7JgaXCvY3E2/4CAAv///wD///8A////AJlveHOzqqv6UCUt/yQGDP8MAgTW////AP///wD///8A////AKqAgAawXmhnqk9b36VNW/KjT13mqGh16Kl+hvCbdHz/YyYx/z0KFP8kBgz/DAIE7f///wD///8A////AP///wD///8A////AJlmZgWkQU5inDFD0ZUhNv+FFyz/bRMk/1UPHP89ChT/JAYM/wwCA9v///8A////AP///wD///8A////AP///wD///8A////AP///wCTIDMohRYtfW0TJMBVDxzQPQoU3SUGDcoMBARA//8AAP//AAD//wAA//8AAP/3AAD/9wAA//sAAP/7AAD/+QAA//kAAP/5AAD/+AAA9/AAAPwAAAD/AAAA/+EAAA%3D%3D">Parabola GNU/Linux-libre Packages</A>
++ <DT><A HREF="https://wiki.parabolagnulinux.org/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AihUrGP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AIcXLSJvFCcn////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AbRIkcP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGwTI0JWEBtB////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wCAAAACVQ8crP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFYQHJI9ChRL////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlKzZHPQoUzgAAAAH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AknV8I0sdJv8kBgxU////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AMTExA1uTlX1JAYLyf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wC5ubkLhG1x6CQGDP0PAAARzJmZBf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AxsbGCZB+g/QkBgz/DQMDUdu2tgfMn5koxo2NOsxmmQX///8A////AP///wD///8A////AP///wD///8A////AJ2JjX+NeX3/JAYM/wwCA5T///8A////AL+AgAi/foFfuG51l7JgaXCvY3E2/4CAAv///wD///8A////AJlveHOzqqv6UCUt/yQGDP8MAgTW////AP///wD///8A////AKqAgAawXmhnqk9b36VNW/KjT13mqGh16Kl+hvCbdHz/YyYx/z0KFP8kBgz/DAIE7f///wD///8A////AP///wD///8A////AJlmZgWkQU5inDFD0ZUhNv+FFyz/bRMk/1UPHP89ChT/JAYM/wwCA9v///8A////AP///wD///8A////AP///wD///8A////AP///wCTIDMohRYtfW0TJMBVDxzQPQoU3SUGDcoMBARA//8AAP//AAD//wAA//8AAP/3AAD/9wAA//sAAP/7AAD/+QAA//kAAP/5AAD/+AAA9/AAAPwAAAD/AAAA/+EAAA%3D%3D">Parabola GNU/Linux-libre Wiki</A>
++ <DT><A HREF="https://labs.parabola.nu/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AihUrGP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AIcXLSJvFCcn////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AbRIkcP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGwTI0JWEBtB////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wCAAAACVQ8crP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFYQHJI9ChRL////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlKzZHPQoUzgAAAAH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AknV8I0sdJv8kBgxU////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AMTExA1uTlX1JAYLyf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wC5ubkLhG1x6CQGDP0PAAARzJmZBf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AxsbGCZB+g/QkBgz/DQMDUdu2tgfMn5koxo2NOsxmmQX///8A////AP///wD///8A////AP///wD///8A////AJ2JjX+NeX3/JAYM/wwCA5T///8A////AL+AgAi/foFfuG51l7JgaXCvY3E2/4CAAv///wD///8A////AJlveHOzqqv6UCUt/yQGDP8MAgTW////AP///wD///8A////AKqAgAawXmhnqk9b36VNW/KjT13mqGh16Kl+hvCbdHz/YyYx/z0KFP8kBgz/DAIE7f///wD///8A////AP///wD///8A////AJlmZgWkQU5inDFD0ZUhNv+FFyz/bRMk/1UPHP89ChT/JAYM/wwCA9v///8A////AP///wD///8A////AP///wD///8A////AP///wCTIDMohRYtfW0TJMBVDxzQPQoU3SUGDcoMBARA//8AAP//AAD//wAA//8AAP/3AAD/9wAA//sAAP/7AAD/+QAA//kAAP/5AAD/+AAA9/AAAPwAAAD/AAAA/+EAAA%3D%3D">Parabola GNU/Linux-libre Labs</A>
+ </DL><p>
+ <DT><H3 ID="rdf:#$ZvPhC3">Free Software Foundation</H3>
+ <DL><p>
-+ <DT><A HREF="http://www.fsf.org/">Free Software Foundation</A>
-+ <DT><A HREF="http://libreplanet.org/">LibrePlanet</A>
-+ <DT><A HREF="http://www.gnu.org/software/gnuzilla/addons.html">Free addons</A>
-+ <DT><A HREF="http://www.h-node.org/">h-node</A>
++ <DT><A HREF="http://www.fsf.org/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAADG0lEQVQoFQEQA+/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQECAAAAAAAAAAAAAAAAAAAA2qOp7tTXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAP///wAAAAAAAOCyt7pUXQcSEgcQDwAAAP///wAAAAAAAAD//x9NSDqNhQEBAQQAAAAAAAAAAAAAAAAQJiQGDQ0aPToZPjoAAQEAAAAAAAAAAAABAQEpZV4AAAAAAAAAAAAA////////////////pSIv05KZ////////////////////////////////AAAAAQAAAP///6krNwAAAAAAAPHc3ggSEQcSEQAAAAAAAAAAABY3NEGelQAAAAAAAAEBAQEAAAD///+YARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGDg1g690CBgYAAAABAQEEAAAAAAAAS7etAAAAAAAAwGVtHklFIlJOAAAAAAAAAAAAAAAA+/X2BwYGAAAAAAAABAAAAAAAAB1IQwAAAAAAAAYNDBAmJB1IQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAgL//v4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAQEB//7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAECAv/+/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD////////////////cqK3qzM////////////////////////////////8AAAABAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGuLjDf9F8oBAAAAAElFTkSuQmCC">Free Software Foundation</A>
++ <DT><A HREF="http://libreplanet.org/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAC/v78AAAAAAPLy9ABsbakA/f3+APn5+QC6ur0A6urqAEpLbQACBLQApKW3AAULuQDMzMwAGBiDAL29vQCgocsAgnzJALu82QA+PpsAAQOvAOjo6ADZ2dkAysrKALS0zwD5+foAAgKRAAYGdQD19fUADhOjAAQJyACrnqIAxMTLAOnp7gDm5uYAzczNACgobwDg2dEAQkaeAA0RkAAUFnEA0MvQAIBzgAANDYsAk5OyAOTk5ADy8vYA1dXVAD8/cADGxsYA+fn7AAMHvgBzZnQApqauAAEGuQDExMQAAAGmAAoLmgADCMQAxMTdAAwPlwD+/v4ABg7MAF5ehADg4OAA0dHRAAAAoQAYEXAAwsLCALCxwQBnadkAAQGWAPz8/ACgoLgAbm6RANvb5wDr6+sA0dHSALe3uQADB8AAzc3NAGFhbAABAZcAOTtlALi4xwAAAJoA/Pz9AAQHnwADBJcACQl4AFVa3AChl6EAAgW2ABscdAABAq4A2NjYAAAAmwDAwMoAAQKmAAcMswDR0eQAAQSxANvX2wB4aXcAAQGpAAAAkwDW1tYAAgSpACIZZAAAAaEA+vr8AKuirAACBbcA8vLyALOztgADBZYAAACcAAACpwAEA6QAAQKnAPT09QD///8AvL3UADIpigDw8PAABwWOAK6dogBub4kAiozDANLS0gAFC8gAAgW4AP39/QAAAJ0A0NDQAMHBwQDp6ewACg2RAAIFqAAKCokA+/v7AAkOnwAAAaMA7OzsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeHh4eHh4eHh4eHh4eHh4AXh4eHhlbikzZlooeHh4eAF4eHh4hX1JVFweInh4eHgBeHh4XmlAGXNGSB8VeHh4AXg8LhaGcV9zKg0wQF54eAF4K0NNOGthjXNCUwAMS3gBPC82iW+CCRN2Iz4wTwx4AW0GgCc5OU41VnSKTBoOiwEFTz8hHIF5RANdQVRfNIMBeBUhe0o9jB0Pcjdzc1E8AXgsB3AbUlkQRVtnhHNoeAF4i45wJCAlYjJbdYRfY3gBeDwmEn4XMToKZDd6WDx4AXh4VTsIfwt3FGpsfAR4eAF4eHgEEYhQAodXYDx4eHgBeHh4eHg8GC1HPHh4eHh4AQABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA%3D">LibrePlanet</A>
++ <DT><A HREF="http://www.gnu.org/software/gnuzilla/addons.html" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAGFBMVEVFRUV+fn6mpqa/v7/Ozs7Y2Njg4OD8/Pwuhn+TAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEQAACxEBf2RfkQAAAAd0SU1FB9MBDhQ6Gd8s57cAAAEVSURBVBgZBcGxVtpgGADQL9gHSBzqSognzMixmcWWzB6pmRHhnyvku6/fewMAIPD3TwHmQxHs6vr+A16bphNum/vV0x429201hcPjAGBTDZGnR/Kw1U181+u4HXvOdSxjUcztz8jjg1xGVBG9XPYxt4PviKiaWLg168iXtbrq+mPT1utjNcR1U73deRnL43M2sRgj3+oYs8uL3rLphPd2QWmHbMu/VS/cnk6UdtSW657g9yBlcZ0UAkUWzPvyRaAYmfd+HT4IZtvC59ibEJxXiqJjQpBpNEufBYE0McoOAunGhRMEFIPc7h4goJigQEBxk8u7AgEpL3IEAUZfcgAByGFXQACm5+4MAuB19QMEgI8CAgDgP4rivVgoKP6ZAAAAAElFTkSuQmCC">Free addons</A>
++ <DT><A HREF="http://www.h-node.org/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAC7zrYAWYhNANjj1QA9fEcAEEwBAHTQkwAeVRkAPXMvALvOtwASVQEAHFcUAH/bpgB60p8AKnQmAGO1fgAjaRwALmA1AA5EAQDM2sgAN3ApAG7EjgC5zbQAVJxrAChwIgC0ya8ALmczAHXJmQBNf0EAgd6oADhwKgC8z7cA7vPtANTg0QANPwAARIhSADtyLQBzzpQAus21AEeKVQDC070AieyzALzPuAB93qEALGYvAO/z7gBEiVAAasWFAFuJTwBKil4AXotSAEuKXgAORQEAD0gBABlDFwBWpmoALGYwAGCNVQAbYBAAHGAQABBOAQCI6rIAjPG3AB1bDgAaXg4A////AGaRWwB/2qYAUYJEAEx+PwAZXAwAm7eUAD51MADN28oAJmwhACRiFAAzeTYAasaFAB9eDwBkt34Aus62AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPT09PT09PT09PT09PT09PT09PT0OIjALPRQmMkI9PT09PT09OkcHNQU+Q0oQPT09PT09PToVGDQtI0ABKz09PT09PT06JRg0Nh1ALxk9PT09PT09OiUYIS4TQC83PT09PT09PTpPSDsGG0BEAz09PT09PT06T0BGMRIsTRY9PT09PT09OgACJx8gQwooPT09PT09PToICAkJCUkkPT09PT09PT05HggETio9PT09PT09PT09Px4IERw9PT09PT09PT09PUUpCDMMPT09PT09PT09PT0NOEEEGj09PT09PT09PT09TBcPSzw9PT09PT09PT09PT09PT09PT09PT09PQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D">h-node</A>
</DL><p>
</DL><p>
diff -urN iceweasel-13.0.orig/browser/base/content/abouthome/aboutHome.js iceweasel-13.0/browser/base/content/abouthome/aboutHome.js
diff --git a/libre/iceweasel-libre/shared-libs.patch b/libre/iceweasel-libre/shared-libs.patch
new file mode 100644
index 000000000..1f22b2b0d
--- /dev/null
+++ b/libre/iceweasel-libre/shared-libs.patch
@@ -0,0 +1,12 @@
+diff -Nur mozilla-release.orig/browser/installer/Makefile.in mozilla-release/browser/installer/Makefile.in
+--- mozilla-release.orig/browser/installer/Makefile.in 2012-07-17 16:19:29.480356991 +0000
++++ mozilla-release/browser/installer/Makefile.in 2012-07-17 17:32:41.250937293 +0000
+@@ -50,7 +50,7 @@
+ MOZ_PKG_MANIFEST_P = $(srcdir)/package-manifest.in
+ # Some files have been already bundled with xulrunner
+ ifndef SYSTEM_LIBXUL
+-MOZ_PKG_FATAL_WARNINGS = 1
++MOZ_PKG_FATAL_WARNINGS = 0
+ endif
+
+ MOZ_NONLOCALIZED_PKG_LIST = \
diff --git a/libre/initscripts/0001-remove-run-nologin-before-leaving-rc.multi.patch b/libre/initscripts/0001-remove-run-nologin-before-leaving-rc.multi.patch
new file mode 100644
index 000000000..a9b7a2423
--- /dev/null
+++ b/libre/initscripts/0001-remove-run-nologin-before-leaving-rc.multi.patch
@@ -0,0 +1,29 @@
+From 55bd14c586f0f64b8ee5515161be1aa1098d3226 Mon Sep 17 00:00:00 2001
+From: Dave Reisner <dreisner@archlinux.org>
+Date: Tue, 3 Jul 2012 22:28:05 -0400
+Subject: [initscripts][PATCH] remove /run/nologin before leaving rc.multi
+To: arch-projects@archlinux.org
+
+systemd-186 writes this file when running systemd-tmpfiles, but
+initscripts never removes it. This disallows all non-root logins.
+
+Reported-by: Dan McGee <dan@archlinux.org>
+Signed-off-by: Dave Reisner <dreisner@archlinux.org>
+---
+ rc.multi | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/rc.multi b/rc.multi
+index daf2372..7d4acaa 100755
+--- a/rc.multi
++++ b/rc.multi
+@@ -31,4 +31,6 @@ run_hook multi_end
+
+ bootlogd_stop
+
++rm -f /run/nologin
++
+ # vim: set ts=2 sw=2 noet:
+--
+1.7.11.1
+
diff --git a/libre/initscripts/PKGBUILD b/libre/initscripts/PKGBUILD
index aee2585d9..cde66e1db 100644
--- a/libre/initscripts/PKGBUILD
+++ b/libre/initscripts/PKGBUILD
@@ -1,32 +1,36 @@
-# $Id: PKGBUILD 160065 2012-05-29 18:46:25Z tomegun $
+# $Id: PKGBUILD 164178 2012-07-26 23:40:45Z tomegun $
# Maintainer: Tom Gundersen <teg@jklm.no>
# Contributor: Thomas Bächler <thomas@archlinux.org>
# Contributor: Aaron Griffin <aaron@archlinux.org>
# Maintainer (Parabola): Nicolas Reynolds <fauno@kiwwwi.com.ar>
pkgname=initscripts
-pkgver=2012.06.28
+pkgver=2012.09.1
pkgrel=1
pkgdesc="System initialization/bootup scripts (Parabola branding)"
arch=('any')
url="https://parabolagnulinux.org"
license=('GPL2')
groups=('base')
-backup=(etc/inittab etc/rc.conf etc/rc.local etc/rc.local.shutdown etc/conf.d/wireless)
+provides=('initscripts-systemd')
+conflicts=('initscripts-systemd')
+replaces=('initscripts-systemd')
+backup=(etc/inittab etc/rc.conf etc/rc.local etc/rc.local.shutdown)
depends=('glibc' 'bash' 'coreutils' 'systemd-tools' 'iproute2' 'ncurses' 'findutils' 'sysvinit')
-optdepends=('bridge-utils: Network bridging support'
- 'dhcpcd: DHCP network configuration'
- 'net-tools: legacy network support'
- 'wireless_tools: Wireless networking')
+optdepends=('dhcpcd: DHCP network configuration'
+ 'bridge-utils: Legacy network bridging support'
+ 'net-tools: Legacy network support'
+ 'wireless_tools: Legacy wireless networking')
makedepends=(asciidoc)
install=initscripts.install
-source=("https://repo.parabolagnulinux.org/other/${pkgname}-${pkgver}.tar.xz"
- 'wireless.conf.d')
+source=("https://repo.parabolagnulinux.org/other/${pkgname}-${pkgver}.tar.xz"{,.sig})
package() {
cd ${srcdir}/${pkgname}-${pkgver}
make DESTDIR=${pkgdir} install
- install -D -m644 ${srcdir}/wireless.conf.d ${pkgdir}/etc/conf.d/wireless
+
+ # moved to filesystem
+ rm -rf ${pkgdir}/etc/profile.d
}
-md5sums=('21651eaba1fd34542c78f39c755cd171'
- '027576534885b8d5dded9be546057b12')
+md5sums=('16039aeb4c996194d9466a8c66a06f5a'
+ '522804c7981c32c3c779964844d64377')
diff --git a/libre/kdebase-konqueror-libre/PKGBUILD b/libre/kdebase-konqueror-libre/PKGBUILD
index 550ad4b3f..f69e561be 100644
--- a/libre/kdebase-konqueror-libre/PKGBUILD
+++ b/libre/kdebase-konqueror-libre/PKGBUILD
@@ -1,12 +1,12 @@
-# $Id: PKGBUILD 160829 2012-06-06 16:14:38Z andrea $
+# $Id: PKGBUILD 165939 2012-09-03 21:49:19Z andrea $
# Maintainer: Andrea Scarpino <andrea@archlinux.org>
# Contributor: Pierre Schmitz <pierre@archlinux.de>
# Maintainer (Parabola): Michał Masłowski <mtjm@mtjm.eu>
-# Maintainer (Parabola): André Silva <andre.paulista@adinet.com.uy>
+# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
_pkgname='kdebase-konqueror'
pkgname='kdebase-konqueror-libre'
-pkgver=4.8.4
+pkgver=4.9.1
pkgrel=1
arch=('i686' 'x86_64' 'mips64el')
url="http://kde.org/applications/internet/konqueror/"
@@ -15,7 +15,7 @@ groups=('kde' 'kdebase')
makedepends=('kdelibs' 'cmake' 'automoc4' 'tidyhtml')
source=("http://download.kde.org/stable/${pkgver}/src/kde-baseapps-${pkgver}.tar.xz"
"konq-about-fsdg.diff")
-sha1sums=('a1d6951b27c868c738a36dbd21702b658f3d6245'
+sha1sums=('9014332fd6fb18999c8290a3cbb498793d8caa2f'
'f41541371414dcbe5e76687835e648112b3ff364')
pkgdesc='KDE File Manager & Web Browser'
depends=('kdebase-dolphin' 'kdebase-keditbookmarks')
diff --git a/libre/kdebase-runtime-libre/PKGBUILD b/libre/kdebase-runtime-libre/PKGBUILD
new file mode 100644
index 000000000..ba6273763
--- /dev/null
+++ b/libre/kdebase-runtime-libre/PKGBUILD
@@ -0,0 +1,57 @@
+# $Id$
+# Maintainer: Andrea Scarpino <andrea@archlinux.org>
+# Contributor: Pierre Schmitz <pierre@archlinux.de>
+# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
+
+_pkgname=kdebase-runtime
+pkgname=kdebase-runtime-libre
+pkgver=4.9.1
+pkgrel=1
+pkgdesc="Plugins and applications necessary for the running of KDE applications (without non-privacy search providers)"
+arch=('i686' 'x86_64' 'mips64el')
+url='https://projects.kde.org/projects/kde/kde-runtime'
+license=('GPL' 'LGPL')
+depends=('nepomuk-core' 'smbclient' 'libssh' 'libcanberra' 'oxygen-icons' 'xorg-xauth'
+ 'kactivities')
+makedepends=('pkg-config' 'cmake' 'automoc4' 'kdepimlibs' 'openslp' 'doxygen'
+ 'networkmanager')
+optdepends=('kdepimlibs: to generate drkonqi reports'
+ 'htdig: to build the search index in khelpcenter'
+ 'rarian: needed by khelpcenter'
+ 'gdb: drkonq crash handler')
+replaces=("${_pkgname}")
+conflicts=("${_pkgname}")
+provides=("${_pkgname}=${pkgver}")
+install="${_pkgname}.install"
+source=("http://download.kde.org/stable/${pkgver}/src/kde-runtime-${pkgver}.tar.xz"
+ 'duckduckgo_lite.desktop')
+sha1sums=('4b67e0f12617c478ee29546da4d98f605cd35dec'
+ '265d4ca95c3a022b5f6f1d5daea6f8e3a25dee85')
+
+build() {
+ cd "${srcdir}"
+
+# Removing non-privacy search providers
+ rm -v kde-runtime-${pkgver}/kurifilter-plugins/ikws/searchproviders/{7digital,acronym,altavista,amazon{,_mp3},amg,austronaut,backports,baidu,bing,blip,cia,dbug,deb,duckduckgo{,_info,_shopping},facebook,ecosia,feedster,flickr,flickrcc,froogle,google,google_advanced,google_code,google_groups,google_images,google_lucky,google_maps,google_movie,google_news,gracenote,imdb,jeeves,katatudo,magnatune,metacrawler,msdn,nl-telephone,nl-teletekst,python,rpmfind,tvtome,uspto,vimeo,vivisimo,voila,yahoo,yahoo_image,yahoo_local,yahoo_shopping,yahoo_video,youtube}.desktop
+
+# Adding DuckDuckGo Lite
+ cp -v duckduckgo_lite.desktop "kde-runtime-${pkgver}/kurifilter-plugins/ikws/searchproviders"
+
+ mkdir build
+ cd build
+ cmake ../kde-runtime-${pkgver} \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_SKIP_RPATH=ON \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DWITH_QNtrack=OFF \
+ -DWITH_Xine=OFF
+ make
+}
+
+package() {
+ cd "$srcdir/build"
+ make DESTDIR="$pkgdir" install
+ rm -f "${pkgdir}/usr/share/icons/hicolor/index.theme"
+
+ ln -sf /usr/lib/kde4/libexec/kdesu "${pkgdir}/usr/bin/"
+}
diff --git a/libre/kdebase-runtime-libre/duckduckgo_lite.desktop b/libre/kdebase-runtime-libre/duckduckgo_lite.desktop
new file mode 100644
index 000000000..2b875b4c1
--- /dev/null
+++ b/libre/kdebase-runtime-libre/duckduckgo_lite.desktop
@@ -0,0 +1,113 @@
+[Desktop Entry]
+Charset=
+Hidden=false
+Keys=duckduckgo,dd,dukgo
+Name=Duck Duck Go Lite
+Name[ar]=Duck Duck Go Lite
+Name[ast]=Duck Duck Go Lite
+Name[bg]=Duck Duck Go Lite
+Name[bn]=Duck Duck Go Lite
+Name[bs]=Dak dak go lite
+Name[ca]=Duck Duck Go Lite
+Name[ca@valencia]=Duck Duck Go Lite
+Name[cs]=Duck Duck Go Lite
+Name[da]=Duck Duck Go Lite
+Name[de]=Duck Duck Go Lite
+Name[el]=Duck Duck Go Lite
+Name[en_GB]=Duck Duck Go Lite
+Name[eo]=Duck Duck Go Lite
+Name[es]=Duck Duck Go Lite
+Name[et]=Duck Duck Go Lite
+Name[eu]=Duck Duck Go Lite
+Name[fa]=Duck Duck Go Lite
+Name[fi]=Duck Duck Go Lite
+Name[fr]=Duck Duck Go Lite
+Name[ga]=Duck Duck Go Lite
+Name[gl]=Duck Duck Go Lite
+Name[gu]=Duck Duck Go Lite
+Name[he]=Duck Duck Go Lite
+Name[hi]=Duck Duck Go Lite
+Name[hr]=Duck Duck Go Lite
+Name[hu]=Duck Duck Go Lite
+Name[ia]=Duck Duck Go Lite
+Name[id]=Duck Duck Go Lite
+Name[is]=Duck Duck Go Lite
+Name[it]=Duck Duck Go Lite
+Name[ja]=Duck Duck Go Lite
+Name[kk]=Duck Duck Go Lite
+Name[km]=Duck Duck Go Lite
+Name[kn]=Duck Duck Go Lite
+Name[ko]=Duck Duck Go Lite
+Name[lt]=Duck Duck Go Lite
+Name[lv]=Duck Duck Go Lite
+Name[ml]=Duck Duck Go Lite
+Name[nb]=Duck Duck Go Lite
+Name[nds]=Duck Duck Go Lite
+Name[nl]=Duck Duck Go Lite
+Name[nn]=Duck Duck Go Lite
+Name[pa]=Duck Duck Go Lite
+Name[pl]=Duck Duck Go Lite
+Name[pt]=Duck Duck Go Lite
+Name[pt_BR]=Duck Duck Go Lite
+Name[ro]=Duck Duck Go Lite
+Name[ru]=Поиск Duck Duck Go Lite
+Name[si]=Duck Duck Go Lite
+Name[sk]=Duck Duck Go Lite
+Name[sl]=Duck Duck Go Lite
+Name[sr]=Duck Duck Go Lite
+Name[sr@ijekavian]=Duck Duck Go Lite
+Name[sr@ijekavianlatin]=Duck Duck Go Lite
+Name[sr@latin]=Duck Duck Go Lite
+Name[sv]=Duck Duck Go Lite
+Name[tg]=Duck Duck Go Lite
+Name[th]=Duck Duck Go Lite
+Name[tr]=Duck Duck Go Lite
+Name[ug]=Duck Duck Go Lite
+Name[uk]=Duck Duck Go Lite
+Name[vi]=Duck Duck Go Lite
+Name[wa]=Duck Duck Go Lite
+Name[x-test]=xxDuck Duck Go Litexx
+Name[zh_CN]=Duck Duck Go Lite
+Name[zh_TW]=Duck Duck Go Lite
+Query=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[bg]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[bn]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[ca]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[cs]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[da]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[de]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[el]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[eo]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[es]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[et]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[fi]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[fr]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[gl]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[hi]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[hu]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[ia]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[it]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[kk]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[km]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[nb]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[nl]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[pa]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[pl]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[pt]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[pt_BR]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[ro]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[ru]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[sl]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[sr]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[sr@ijekavian]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[sr@ijekavianlatin]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[sr@latin]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[sv]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[tr]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[uk]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[wa]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[x-test]=xxhttp://duckduckgo.com/lite/?q=\\{@}&t=KDExx
+Query[zh_CN]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+Query[zh_TW]=http://duckduckgo.com/lite/?q=\\{@}&t=KDE
+ServiceTypes=SearchProvider
+Type=Service
diff --git a/libre/kdebase-runtime-libre/kdebase-runtime.install b/libre/kdebase-runtime-libre/kdebase-runtime.install
new file mode 100644
index 000000000..c77e68041
--- /dev/null
+++ b/libre/kdebase-runtime-libre/kdebase-runtime.install
@@ -0,0 +1,13 @@
+post_install() {
+ xdg-icon-resource forceupdate --theme hicolor &> /dev/null
+ update-mime-database usr/share/mime &> /dev/null
+ update-desktop-database -q
+}
+
+post_upgrade() {
+ post_install
+}
+
+post_remove() {
+ post_install
+}
diff --git a/libre/kdelibs-libre/PKGBUILD b/libre/kdelibs-libre/PKGBUILD
index 25084c92c..e5fdb1ea6 100644
--- a/libre/kdelibs-libre/PKGBUILD
+++ b/libre/kdelibs-libre/PKGBUILD
@@ -1,35 +1,33 @@
-# $Id: PKGBUILD 162798 2012-06-30 15:30:51Z andrea $
+# $Id: PKGBUILD 165921 2012-09-03 21:48:13Z andrea $
# Maintainer: Andrea Scarpino <andrea@archlinux.org
# Contributor: Pierre Schmitz <pierre@archlinux.de>
# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
_pkgname=kdelibs
pkgname=kdelibs-libre
-pkgver=4.8.4
-pkgrel=4
+pkgver=4.9.1
+pkgrel=1
pkgdesc="KDE Core Libraries"
arch=('i686' 'x86_64' 'mips64el')
-url='http://www.kde.org'
+url='https://projects.kde.org/projects/kde/kdelibs'
license=('GPL' 'LGPL' 'FDL')
depends=('strigi' 'attica' 'libxss' 'soprano' 'krb5' 'grantlee'
'shared-desktop-ontologies' 'qca' 'libdbusmenu-qt' 'polkit-qt'
'shared-mime-info' 'enchant' 'giflib' 'jasper' 'openexr'
'docbook-xsl' 'upower' 'udisks' 'libxcursor' 'phonon' 'qtwebkit'
- 'media-player-info')
+ 'media-player-info' 'libxtst')
makedepends=('cmake' 'automoc4' 'avahi' 'libgl' 'hspell')
provides=("kdelibs=$pkgver")
-replaces=('kdelibs-experimental' 'kdelibs')
+replaces=('kdelibs')
conflicts=('kdelibs')
install=${_pkgname}.install
source=("http://download.kde.org/stable/${pkgver}/src/${_pkgname}-${pkgver}.tar.xz"
'kde-applications-menu.patch'
'use-pythondontwritebytecode.patch'
- 'fix-application-crashes.patch'
'khtml-fsdg.diff')
-sha1sums=('35cd199a30d84eb37b2b213fed5ee3adf810ea49'
+sha1sums=('33fb26ec7735122b2bb084b79f8fcffb826c58f0'
'86ee8c8660f19de8141ac99cd6943964d97a1ed7'
'bbacbbe2194f3961cd7557d98a9ddef158ca11aa'
- 'c271c712bf202f517015b597d61cfe1aed0db82b'
'a1502a964081ad583a00cf90c56e74bf60121830')
build() {
@@ -40,9 +38,7 @@ build() {
# Set PYTHONDONTWRITEBYTECODE (KDEBUG#276151)
patch -p0 -i "${srcdir}"/use-pythondontwritebytecode.patch
-
- # KDEBUG 301453
- patch -p1 -i "${srcdir}"/fix-application-crashes.patch
+
# Don't ask the user to download a plugin, it's probably nonfree.
patch -p1 -i "${srcdir}"/khtml-fsdg.diff
diff --git a/libre/kdenetwork-kopete-libre/PKGBUILD b/libre/kdenetwork-kopete-libre/PKGBUILD
index 66a48fea5..2bf71321c 100644
--- a/libre/kdenetwork-kopete-libre/PKGBUILD
+++ b/libre/kdenetwork-kopete-libre/PKGBUILD
@@ -1,22 +1,22 @@
-# $Id: PKGBUILD 160882 2012-06-06 16:17:23Z andrea $
+# $Id: PKGBUILD 165994 2012-09-03 21:52:07Z andrea $
# Maintainer: Andrea Scarpino <andrea@archlinux.org>
# Contributor: Pierre Schmitz <pierre@archlinux.de>
-# Maintainer (Parabola): André Silva <andre.paulista@adinet.com.uy>
+# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
pkgbase=kdenetwork
pkgname=('kdenetwork-kopete-libre')
-pkgver=4.8.4
+pkgver=4.9.1
pkgrel=1
arch=('i686' 'x86_64' 'mips64el')
url='http://www.kde.org'
license=('GPL' 'LGPL' 'FDL')
groups=('kde' 'kdenetwork')
makedepends=('cmake' 'automoc4' 'boost' 'speex' 'ortp' 'libotr' 'ppp'
- 'qca-ossl' 'kdebase-workspace' 'kdebase-lib' 'libvncserver' 'libmsn'
- 'v4l-utils' 'libidn' 'rdesktop' 'qimageblitz' 'libxdamage' 'libgadu'
- 'libktorrent' 'libmms' 'mediastreamer')
- source=("http://download.kde.org/stable/${pkgver}/src/${pkgbase}-${pkgver}.tar.xz")
-sha1sums=('b3926c5cd929cec209421c2f1cb8659cc1c82458')
+ 'qca-ossl' 'kdebase-workspace' 'kdebase-lib' 'libvncserver'
+ 'v4l-utils' 'libidn' 'qimageblitz' 'libxdamage' 'libgadu' 'libmsn'
+ 'libktorrent' 'libmms' 'mediastreamer' 'telepathy-qt')
+source=("http://download.kde.org/stable/${pkgver}/src/${pkgbase}-${pkgver}.tar.xz")
+sha1sums=('22f8cde8b5617ba7e401d82b0669a06899b17320')
build() {
cd "${srcdir}"
diff --git a/libre/kdeutils-ark-libre/PKGBUILD b/libre/kdeutils-ark-libre/PKGBUILD
index 5558e73f4..a71990231 100644
--- a/libre/kdeutils-ark-libre/PKGBUILD
+++ b/libre/kdeutils-ark-libre/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 160887 2012-06-06 16:17:38Z andrea $
+# $Id: PKGBUILD 165999 2012-09-03 21:52:22Z andrea $
# Maintainer: Andrea Scarpino <andrea@archlinux.org>
-# Maintainer (Parabola): André Silva <andre.paulista@adinet.com.uy>
+# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
_pkgname=kdeutils-ark
pkgname=kdeutils-ark-libre
-pkgver=4.8.4
+pkgver=4.9.1
pkgrel=1
pkgdesc='Archiving Tool'
url='http://kde.org/applications/utilities/ark/'
@@ -14,12 +14,12 @@ groups=('kde' 'kdeutils')
depends=('kdebase-runtime' 'kdebase-lib' 'libarchive' 'qjson')
makedepends=('cmake' 'automoc4')
optdepends=('p7zip' 'zip' 'unzip' 'ununrar')
+install=${_pkgname}.install
provides=("kdeutils-ark=$pkgver")
replaces=('kdeutils-ark')
conflicts=('kdeutils-ark')
-install=${_pkgname}.install
source=("http://download.kde.org/stable/${pkgver}/src/ark-${pkgver}.tar.xz")
-sha1sums=('1d0d311beb8beeee7f33a58baef7f95192eb69ac')
+sha1sums=('2f7d32b9f99913d14801b56f0c858eda128a7b91')
build() {
cd "${srcdir}"
diff --git a/libre/libcl-libre/PKGBUILD b/libre/libcl-libre/PKGBUILD
new file mode 100644
index 000000000..a564c2ffb
--- /dev/null
+++ b/libre/libcl-libre/PKGBUILD
@@ -0,0 +1,98 @@
+# Maintainer: Márcio Silva <coadde@lavabit.com>
+
+pkgname=libcl-libre
+true && pkgver=9.0.git20120905
+true && pkgrel=1
+arch=(
+ i686
+ x86_64
+ mips64el
+)
+makedepends=(
+ clang
+ dri2proto
+ git
+ glproto
+ imake
+ libdrm
+ libxdamage
+ libxext
+ libxml2
+ llvm
+ python2
+)
+license=(
+ MIT
+ Khronos
+ LGPL
+)
+url=http://mesa3d.sourceforge.net
+depends=(
+ gcc-libs
+ libdrm
+ libffi
+ libxcb
+ udev
+)
+conflicts=(
+ ${pkgname%-libre}
+)
+provides=(
+ ${pkgname%-libre}
+)
+replaces=(
+ ${pkgname%-libre}
+)
+pkgdesc='A libre version of OpenCL library and ICD loader, (Mesa OpenCL)'
+#source=(
+# ftp://ftp.freedesktop.org/pub/mesa/$pkgver/MesaLib-$pkgver.tar.bz2
+#)
+#sha512sums=(
+# b7e8879e92252d0588d9eeeed904fd502ce1f48551b9a97f52aeb1318c79a80fab27504521107d61fbb5d986b2d778d89023a892baf9f1c5a5d2ee3746fefa57
+#)
+
+_gitroot=git://anongit.freedesktop.org/git/mesa/mesa
+_gitname=mesa
+
+build() {
+ msg 'Connecting to git.freedesktop.org GIT server....'
+ if [ -d $_gitname ] ; then
+ cd $_gitname && git pull origin
+ else
+ git clone $_gitroot --depth 1
+ fi
+ msg 'GIT checkout done or server timeout'
+ msg 'Starting make...'
+
+ cd $srcdir
+
+ # Cleanup and prepare the build dir
+ [ -d build ] && rm -rf build
+ cp -r $_gitname build
+ cd build
+
+ #cd $srcdir/Mesa-$pkgver
+
+ autoreconf -vfi
+ ./autogen.sh --prefix=/usr \
+ --enable-opencl \
+ --enable-gallium-llvm \
+ --enable-r600-llvm-compiler \
+ --with-clang-libdir=/usr/lib \
+ --with-dri-drivers=nouveau,radeon,swrast \
+ --with-gallium-drivers=r300,r600,nouveau,swrast
+ make
+}
+
+package() {
+ make -C $srcdir/build/src/gallium/targets/opencl DESTDIR=$pkgdir install
+
+ cd $srcdir/build
+ #install -m755 -d $pkgdir/usr/lib/opencl
+ install -m755 -d $pkgdir/usr/share/licenses/${pkgname%-libre}
+ #bin/minstall src/gallium/targets/opencl/libOpenCL.la $pkgdir/usr/lib
+ #bin/minstall lib/libOpenCL.so* $pkgdir/usr/lib
+ #bin/minstall src/gallium/targets/pipe-loader/*.so $pkgdir/usr/lib/${pkgname%-libre}
+ bin/minstall docs/COPYING $pkgdir/usr/share/licenses/${pkgname%-libre}
+ bin/minstall docs/license.html $pkgdir/usr/share/licenses/${pkgname%-libre}
+}
diff --git a/libre/libdrm-libre/COPYING b/libre/libdrm-libre/COPYING
new file mode 100644
index 000000000..6e74c337c
--- /dev/null
+++ b/libre/libdrm-libre/COPYING
@@ -0,0 +1,48 @@
+ Copyright 2005 Adam Jackson.
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation on the rights to use, copy, modify, merge,
+ publish, distribute, sub license, and/or sell copies of the Software,
+ and to permit persons to whom the Software is furnished to do so,
+ subject to the following conditions:
+
+ The above copyright notice and this permission notice (including the
+ next paragraph) shall be included in all copies or substantial
+ portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NON-INFRINGEMENT. IN NO EVENT SHALL ADAM JACKSON BE LIABLE FOR ANY
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+------------------------------------------------------------------------
+
+ Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
+ Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
+ All Rights Reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice (including the
+ next paragraph) shall be included in all copies or substantial
+ portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS
+ SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
diff --git a/libre/libdrm-libre/PKGBUILD b/libre/libdrm-libre/PKGBUILD
new file mode 100644
index 000000000..1746710cb
--- /dev/null
+++ b/libre/libdrm-libre/PKGBUILD
@@ -0,0 +1,90 @@
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Maintainer (Parabola): Márcio Silva <coadde@lavabit.com>
+
+pkgname=libdrm-libre
+pkgver=2.4.39
+pkgrel=1
+pkgdesc='Userspace interface to kernel DRM services, without VMWare Graphics KMS API (vmwgfx)'
+arch=(
+ i686
+ x86_64
+ mips64el
+:)
+license=(
+ MIT
+)
+depends=(
+ libpciaccess
+ )
+makedepends=(
+ cairo
+ valgrind
+)
+options=(
+ !libtool
+)
+url=http://dri.freedesktop.org/
+provides=(
+ ${pkgname%-libre}=$pkgver
+ ${pkgname%-libre}-git
+ $pkgname-git
+)
+conflicts=(
+ ${pkgname%-libre}
+ ${pkgname%-libre}-git
+ $pkgname-git
+ ${pkgname%-libre}-new
+ ${pkgname%-libre}-nouveau
+ ${pkgname%-libre}-old
+)
+replaces=(
+ ${pkgname%-libre}
+ ${pkgname%-libre}-git
+ ${pkgname%-libre}-new
+ ${pkgname%-libre}-nouveau
+)
+
+source=(
+ http://dri.freedesktop.org/${pkgname%-libre}/${pkgname%-libre}-$pkgver.tar.bz2
+ COPYING
+)
+sha512sums=(
+ 51b849d501adbf6c9d65847d2e6b41e426137af8cdb1335d19e22939128b7cdae8685c27d750db3aad7b1c43e7bb5a448634491dcd86873ba98293d56320eb1f
+ b0ca349b882a4326b19f81f22804fabdb6fb7aef31cdc7b16b0a7ae191bfbb50c7daddb2fc4e6c33f1136af06d060a273de36f6f3412ea326f16fa4309fda660
+)
+
+build() {
+ cd ${pkgname%-libre}-$pkgver
+
+ sed -i '/PKG_CHECK_MODULES(PTHREADSTUBS, pthread-stubs)/d;/AC_SUBST(PTHREADSTUBS_CFLAGS)/d;/AC_SUBST(PTHREADSTUBS_LIBS)/d' \
+ configure.ac
+ sed -i '/ $(PTHREADSTUBS_CFLAGS) /d;s/ @PTHREADSTUBS_LIBS@//' \
+ exynos/Makefile.am
+ sed -i '/ $(PTHREADSTUBS_CFLAGS) /d;/ @PTHREADSTUBS_LIBS@ /d' \
+ intel/Makefile.am
+ sed -i '/ $(PTHREADSTUBS_CFLAGS) /d;s/ @PTHREADSTUBS_LIBS@//' \
+ nouveau/Makefile.am
+ sed -i '/ $(PTHREADSTUBS_CFLAGS) /d;s/ @PTHREADSTUBS_LIBS@//' \
+ omap/Makefile.am
+ sed -i '/ $(PTHREADSTUBS_CFLAGS) /d;s/ @PTHREADSTUBS_LIBS@//' \
+ radeon/Makefile.am
+
+ #libtoolize --force
+ autoreconf --force --install
+ ./configure --prefix=/usr \
+ --disable-vmwgfx-experimental-api \
+ --enable-udev
+ make V=0
+}
+
+check() {
+cd ${pkgname%-libre}-$pkgver
+ make -k check
+}
+
+package() {
+cd ${pkgname%-libre}-$pkgver
+ make DESTDIR=$pkgdir install
+ install -m755 -d $pkgdir/usr/share/licenses/${pkgname%-libre}
+ install -m644 ../COPYING $pkgdir/usr/share/licenses/${pkgname%-libre}
+}
diff --git a/libre/libquicktime-libre/PKGBUILD b/libre/libquicktime-libre/PKGBUILD
index 2a624348b..0538d1c76 100644
--- a/libre/libquicktime-libre/PKGBUILD
+++ b/libre/libquicktime-libre/PKGBUILD
@@ -1,11 +1,11 @@
# $Id$
# Maintainer: Mateusz Herych <heniekk@gmail.com>
-# Contributor (Parabola): Jorge Lopez <jorginho@adinet.com.uy>
+# Contributor (Parabola): Jorge Lopez <jorginho@lavabit.com>
pkgname=libquicktime-libre
_pkgname=libquicktime
pkgver=1.2.4
-pkgrel=1
+pkgrel=2
pkgdesc="A library for reading and writing quicktime files (no unfree faac support)."
arch=('i686' 'x86_64' 'mips64el')
license=('GPL')
diff --git a/libre/licenses-libre/PKGBUILD b/libre/licenses-libre/PKGBUILD
index 6097d67b8..8a3d62929 100644
--- a/libre/licenses-libre/PKGBUILD
+++ b/libre/licenses-libre/PKGBUILD
@@ -1,9 +1,10 @@
# $Id: PKGBUILD 82120 2010-06-08 16:36:51Z dan $
# Maintainer: Dan McGee <dan@archlinux.org>
# Maintainer (Parabola): fauno <fauno@kiwwwi.com.ar>
+# Maintainer (Parabola): Márcio Silva <coadde@lavabit.com>
pkgname=licenses-libre
-pkgver=2.8
+pkgver=2.9
pkgrel=1
pkgdesc="The standard licenses distribution package"
arch=('any')
@@ -13,6 +14,7 @@ groups=('base')
provides=("licenses=${pkgver}")
conflicts=('licenses')
replaces=('licenses')
+makedepends=(links)
source=(apache-2.0.txt::http://www.apache.org/licenses/LICENSE-2.0.txt
cc-by-3.0.txt
cc-by-sa-3.0.txt
@@ -120,7 +122,7 @@ md5sums=('3b83ef96387f14655fc854ddc3c6bd57'
'd09c120ca7db95ef2aeecec0cb08293b'
'b4a94da2a1f918b217ef5156634fc9e0'
'a45bb1bbeed9e26b26c5763df1d3913d'
- '68d59ff8306e3a9f5f1c01462c77a317'
+ 'bfecdc446cd2a6a4410ac9e6d0064b3a'
'f083e41c43db25e18f36c91e57750b64'
'a055911c32fb4ed6e96c453ceaeba857'
'dc8502850eab9e1ff330a12d7ca18a19')
diff --git a/libre/liferea-libre/PKGBUILD b/libre/liferea-libre/PKGBUILD
index ec48b73d5..c41112a07 100644
--- a/libre/liferea-libre/PKGBUILD
+++ b/libre/liferea-libre/PKGBUILD
@@ -1,12 +1,12 @@
-# $Id: PKGBUILD 161863 2012-06-15 23:14:52Z eric $
+# $Id: PKGBUILD 165910 2012-09-03 19:19:26Z eric $
# Maintainer: Eric Bélanger <eric@archlinux.org>
# Contributor (Parabola): bitlord
-# Contributor (Parabola): André Silva <andre.paulista@adinet.com.uy>
+# Contributor (Parabola): André Silva <emulatorman@lavabit.com>
_pkgname=liferea
pkgname=liferea-libre
-pkgver=1.8.6
-pkgrel=1
+pkgver=1.8.8
+pkgrel=1.2
pkgdesc="A desktop news aggregator for online news feeds and weblogs"
arch=('i686' 'x86_64' 'mips64el')
url="http://liferea.sourceforge.net/"
@@ -18,23 +18,23 @@ depends=('gconf' 'libwebkit' 'libnotify' 'libunique' 'json-glib' 'hicolor-icon-t
makedepends=('intltool')
options=('!libtool' '!emptydirs')
install=liferea.install
-source=(http://downloads.sourceforge.net/sourceforge/${_pkgname}/${_pkgname}-${pkgver}.tar.gz
+source=(http://downloads.sourceforge.net/sourceforge/liferea/liferea-${pkgver}.tar.gz
remove-non-free-suggestions.patch)
-sha1sums=('c469d87da4b0512270376aa360c7a955d02153c3'
+sha1sums=('9dfbf5ff8bd91060bdea93d74c37a8a828a2edfe'
'0d68c567c3d37932a49709c58c37c3f138fd19cb')
build() {
- cd "${srcdir}/${_pkgname}-${pkgver}"
+ cd "${srcdir}/liferea-${pkgver}"
patch -Np1 -i "$srcdir/remove-non-free-suggestions.patch"
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --disable-schemas-install
make
}
package() {
- cd "${srcdir}/${_pkgname}-${pkgver}"
+ cd "${srcdir}/liferea-${pkgver}"
make DESTDIR="${pkgdir}" install
install -d "${pkgdir}/usr/share/gconf/schemas"
- gconf-merge-schema "${pkgdir}/usr/share/gconf/schemas/${pkgname}.schemas" "${pkgdir}"/etc/gconf/schemas/*.schemas
+ gconf-merge-schema "${pkgdir}/usr/share/gconf/schemas/${_pkgname}.schemas" "${pkgdir}"/etc/gconf/schemas/*.schemas
rm -f "${pkgdir}"/etc/gconf/schemas/*.schemas
}
diff --git a/libre/liferea-libre/liferea.install b/libre/liferea-libre/liferea.install
index 7d812ccdb..3e1aa5820 100644
--- a/libre/liferea-libre/liferea.install
+++ b/libre/liferea-libre/liferea.install
@@ -1,7 +1,7 @@
-pkgname=liferea
+pkgname=liferea-libre
post_install() {
- usr/sbin/gconfpkg --install ${pkgname}
+ usr/sbin/gconfpkg --install ${_pkgname}
gtk-update-icon-cache -q -t -f usr/share/icons/hicolor
}
@@ -14,7 +14,7 @@ post_upgrade() {
}
pre_remove() {
- usr/sbin/gconfpkg --uninstall ${pkgname}
+ usr/sbin/gconfpkg --uninstall ${_pkgname}
}
post_remove() {
diff --git a/libre/linux-libre-api-headers/PKGBUILD b/libre/linux-libre-api-headers/PKGBUILD
index c229767b1..cf2fdca23 100644
--- a/libre/linux-libre-api-headers/PKGBUILD
+++ b/libre/linux-libre-api-headers/PKGBUILD
@@ -1,15 +1,15 @@
-# $Id: PKGBUILD 162855 2012-07-02 09:35:36Z allan $
+# $Id: PKGBUILD 165111 2012-08-11 08:21:11Z allan $
# Maintainer: Allan McRae <allan@archlinux.org>
# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
# toolchain build order: linux-libre-api-headers->glibc->binutils->gcc->binutils->glibc
pkgname=linux-libre-api-headers
-_basekernel=3.4
-_sublevel=4
+_basekernel=3.5
+_sublevel=1
pkgver=${_basekernel}.${_sublevel}
pkgrel=1
-pkgdesc="Kernel Libre headers sanitized for use in userspace"
+pkgdesc="Kernel libre headers sanitized for use in userspace"
arch=('i686' 'x86_64' 'mips64el')
url="http://www.gnu.org/software/libc"
license=('GPL2')
@@ -18,8 +18,8 @@ conflicts=('linux-api-headers')
replaces=('linux-api-headers')
source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gnu/linux-libre-${_basekernel}-gnu.tar.xz"
"http://linux-libre.fsfla.org/pub/linux-libre/releases/${pkgver}-gnu/patch-${_basekernel}-gnu-${pkgver}-gnu.xz")
-md5sums=('a5e128ca059cceb8b69148b41ff4ac6f'
- 'e9bb311ab329555a61696b1a18df2d34')
+md5sums=('2407fc9563a74acaf38aa0c06516eb1c'
+ '67b650dd355fbca16035510df063420b')
build() {
cd ${srcdir}/linux-${_basekernel}
diff --git a/libre/linux-libre-lts/.directory b/libre/linux-libre-lts/.directory
index 89e875be9..3bbc4dedd 100644
--- a/libre/linux-libre-lts/.directory
+++ b/libre/linux-libre-lts/.directory
@@ -1,2 +1,3 @@
[Dolphin]
-Timestamp=2012,4,16,17,55,34
+Timestamp=2012,8,9,22,54,43
+Version=3
diff --git a/libre/linux-libre-lts/PKGBUILD b/libre/linux-libre-lts/PKGBUILD
index f4807a4d8..03c280487 100644
--- a/libre/linux-libre-lts/PKGBUILD
+++ b/libre/linux-libre-lts/PKGBUILD
@@ -4,15 +4,13 @@
# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
# Maintainer (Parabola): Márcio Silva <coadde@lavabit.com>
-pkgbase=linux-libre-lts
-pkgname=('linux-libre-lts' 'linux-libre-lts-headers') # Build stock -LIBRE kernel
-# pkgname=linux-custom # Build kernel with a different name
-_kernelname=-LIBRE-LTS
+pkgbase=linux-libre-lts # Build stock -LIBRE-LTS kernel
+#pkgbase=linux-libre-custom # Build kernel with a different name
_basekernel=3.0
-_sublevel=36
+_sublevel=42
pkgver=${_basekernel}.${_sublevel}
-_lxopkgver=${_basekernel}.36 # nearly always the same as pkgver
-pkgrel=2
+pkgrel=1
+_lxopkgver=${_basekernel}.41 # nearly always the same as pkgver
arch=('i686' 'x86_64' 'mips64el')
url="http://linux-libre.fsfla.org/"
license=('GPL2')
@@ -23,18 +21,18 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gn
# the main kernel config files
'config.i686' 'config.x86_64'
# standard config files for mkinitcpio ramdisk
- "${pkgname}.preset"
+ "${pkgbase}.preset"
'Kbuild'
'Kbuild.platforms'
'boot-logo.patch'
'change-default-console-loglevel.patch'
'i915-fix-ghost-tv-output.patch'
'ext4-options.patch'
- "http://www.linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/linux-patches-${_lxopkgver}-gnu_0loongsonlibre_mipsel.tar.bz2")
+ "http://www.linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/linux-patches-${_lxopkgver}-gnu_0loongsonlibre_mipsel.tar.bz2")
md5sums=('5f64180fe7df4e574dac5911b78f5067'
- '150413437fe54d4822e9e43189e37319'
- '9cfcf3807201ce44aa720571232a10ce'
- '8bb5c5aa217202c3ac3798ba7798e07d'
+ '8f1c9341d99e941b07d1d6f85f1953aa'
+ '8cd05778fc1c2d8145b3b9932b4e3164'
+ '87a54dc6251cf2adf35f72ddeddb6ea8'
'c072b17032e80debc6a8626299245d46'
'2967cecc3af9f954ccc822fd63dca6ff'
'8267264d9a8966e57fdacd1fa1fc65c4'
@@ -42,13 +40,16 @@ md5sums=('5f64180fe7df4e574dac5911b78f5067'
'9d3c56a4b999c8bfbd4018089a62f662'
'263725f20c0b9eb9c353040792d644e5'
'f36222e7ce20c8e4dc27376f9be60f6c'
- '7102cdd847f0bd7102f0ad01fa43f454')
+ '1f082cc9e5a18e227f7a044ff429914a')
if [ "$CARCH" != "mips64el" ]; then
# Don't use the Loongson-specific patches on non-mips64el arches.
unset source[${#source[@]}-1]
unset md5sums[${#md5sums[@]}-1]
fi
+_kernelname=${pkgbase#linux-libre}
+_localversionname=-LIBRE-LTS
+
build() {
cd "${srcdir}/linux-${_basekernel}"
@@ -92,7 +93,7 @@ build() {
sed -ri -e "s|CONFIG_MIPS32_N32=.*|CONFIG_MIPS32_N32=y|g" \
-e "s|CONFIG_MIPS32_N32=.*|CONFIG_MIPS32_N32=y|g" \
-e "s|CONFIG_UEVENT_HELPER_PATH=.*|CONFIG_UEVENT_HELPER_PATH=\"\"|g" \
- -e "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" \
+ -e "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_localversionname}\"|g" \
-e "s;(CONFIG_USB(_COMMON|_EHCI_HCD|_OHCI_HCD|_STORAGE.*|_UAS)?)=.*;\1=y;g" \
./.config
else
@@ -100,7 +101,8 @@ build() {
fi
if [ "${_kernelname}" != "" ]; then
- sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" ./.config
+ sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_localversionname}\"|g" ./.config
+ sed -i "s|CONFIG_LOCALVERSION_AUTO=.*|CONFIG_LOCALVERSION_AUTO=n|" ./.config
fi
# set extraversion to pkgrel
@@ -120,15 +122,22 @@ build() {
#make oldconfig # using old config from previous kernel version
# ... or manually edit .config
+ # rewrite configuration
+ yes "" | make config >/dev/null
+
+ # save configuration for later reuse
+ if [ "${CARCH}" = "x86_64" ]; then
+ cat .config > "${startdir}/config.x86_64.last"
+ else
+ cat .config > "${startdir}/config.i686.last"
+ fi
+
####################
# stop here
# this is useful to configure the kernel
- #msg "Stopping build"
- #return 1
+ #msg "Stopping build"; return 1
####################
- yes "" | make config
-
# build!
if [ "$CARCH" == "mips64el" ]; then
# The build system passes it directly to linker, disable to avoid
@@ -136,21 +145,22 @@ build() {
export LDFLAGS=""
# bzImage is arch-specific and not supported on mips; vmlinux is
# useful for oprofile.
- make ${MAKEFLAGS} vmlinux vmlinuz modules
+ make ${MAKEFLAGS} LOCALVERSION= vmlinux vmlinuz modules
else
- make ${MAKEFLAGS} bzImage modules
+ make ${MAKEFLAGS} LOCALVERSION= bzImage modules
fi
}
-package_linux-libre-lts() {
- pkgdesc="The Linux-libre Kernel and modules - stable longtime supported kernel package suitable for servers"
+_package() {
+ pkgdesc="The ${pkgbase} kernel and modules - stable longtime supported kernel package suitable for servers"
+ [ "${pkgbase}" = "linux-libre" ] && groups=('base')
depends=('coreutils' 'kmod')
optdepends=('crda: to set the correct wireless channels of your country')
- provides=('kernel26-lts' "linux-lts=$pkgver")
- conflicts=('kernel26-lts' 'kernel26-libre-lts' 'linux-lts')
- replaces=('kernel26-lts' 'kernel26-libre-lts' 'linux-lts')
- backup=("etc/mkinitcpio.d/${pkgname}.preset")
- install=${pkgname}.install
+ provides=("kernel26${_kernelname}=${pkgver}" "linux${_kernelname}=${pkgver}")
+ conflicts=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}")
+ replaces=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}")
+ backup=("etc/mkinitcpio.d/${pkgbase}.preset")
+ install=${pkgbase}.install
if [ "$CARCH" = "mips64el" ]; then
optdepends+=('mkinitcpio: to make the initramfs (needs reinstall of this package)')
conflicts+=('mkinitcpio<0.7')
@@ -164,35 +174,42 @@ package_linux-libre-lts() {
[ $CARCH = "mips64el" ] && KARCH=mips
# get kernel version
- _kernver="$(make kernelrelease)"
+ _kernver="$(make LOCALVERSION= kernelrelease)"
+ _basekernel=${_kernver%%-*}
+ _basekernel=${_basekernel%.*}
mkdir -p "${pkgdir}"/{lib/modules,lib/firmware,boot}
- make INSTALL_MOD_PATH="${pkgdir}" modules_install
+ make LOCALVERSION= INSTALL_MOD_PATH="${pkgdir}" modules_install
if [ "$CARCH" == "mips64el" ]; then
- cp vmlinuz "${pkgdir}/boot/vmlinuz-${pkgname}"
- cp vmlinux "${pkgdir}/boot/vmlinux-${pkgname}"
+ cp vmlinuz "${pkgdir}/boot/vmlinuz-${pkgbase}"
+ cp vmlinux "${pkgdir}/boot/vmlinux-${pkgbase}"
else
- cp "arch/${KARCH}/boot/bzImage" "${pkgdir}/boot/vmlinuz-${pkgname}"
+ cp "arch/${KARCH}/boot/bzImage" "${pkgdir}/boot/vmlinuz-${pkgbase}"
fi
# add vmlinux
install -D -m644 vmlinux "${pkgdir}/usr/src/linux-${_kernver}/vmlinux"
# install fallback mkinitcpio.conf file and preset file for kernel
- install -D -m644 "${srcdir}/${pkgname}.preset" "${pkgdir}/etc/mkinitcpio.d/${pkgname}.preset"
+ install -D -m644 "${srcdir}/${pkgbase}.preset" "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset"
# set correct depmod command for install
sed \
- -e "s|ALL_kver=.*|ALL_kver=\"/boot/vmlinuz-${pkgname}\"|g" \
- -e "s|default_image=.*|default_image=\"/boot/initramfs-${pkgname}.img\"|g" \
- -e "s|fallback_image=.*|fallback_image=\"/boot/initramfs-${pkgname}-fallback.img\"|g" \
- -i "${pkgdir}/etc/mkinitcpio.d/${pkgname}.preset"
+ -e "s/KERNEL_NAME=.*/KERNEL_NAME=${_kernelname}/" \
+ -e "s/KERNEL_VERSION=.*/KERNEL_VERSION=${_kernver}/" \
+ -i "${startdir}/${pkgbase}.install"
+ sed \
+ -e "1s|'linux*.*'|'${pkgbase}'|" \
+ -e "s|ALL_kver=.*|ALL_kver=\"/boot/vmlinuz-${pkgbase}\"|" \
+ -e "s|default_image=.*|default_image=\"/boot/initramfs-${pkgbase}.img\"|" \
+ -e "s|fallback_image=.*|fallback_image=\"/boot/initramfs-${pkgbase}-fallback.img\"|" \
+ -i "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset"
# mkinitcpio 0.7 relies on bzImage to find the kernel version
if [ "$CARCH" == "mips64el" ]; then
- sed -e "s|ALL_kver=.*|ALL_kver=\"${_kernver}\"|g" \
- -i "${pkgdir}/etc/mkinitcpio.d/${pkgname}.preset"
+ sed -e "s|ALL_kver=.*|ALL_kver=\"${_kernver}\"|" \
+ -i "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset"
fi
# remove build and source links
@@ -202,10 +219,10 @@ package_linux-libre-lts() {
# gzip -9 all modules to save 100MB of space
find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \;
# make room for external modules
- ln -s "../extramodules-${_basekernel}${_kernelname:--LIBRE-LTS}" "${pkgdir}/lib/modules/${_kernver}/extramodules"
+ ln -s "../extramodules-${_basekernel}${_localversionname:--LIBRE-LTS}" "${pkgdir}/lib/modules/${_kernver}/extramodules"
# add real version for building modules and running depmod from post_install/upgrade
- mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname:--LIBRE-LTS}"
- echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname:--LIBRE-LTS}/version"
+ mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_localversionname:--LIBRE-LTS}"
+ echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_localversionname:--LIBRE-LTS}/version"
# move module tree /lib -> /usr/lib
mv "$pkgdir/lib" "$pkgdir/usr"
@@ -214,11 +231,11 @@ package_linux-libre-lts() {
depmod -b "$pkgdir" -F System.map "$_kernver"
}
-package_linux-libre-lts-headers() {
- pkgdesc="Header files and scripts for building modules for linux-libre-lts longtime supported kernel"
- provides=('kernel26-lts-headers' "linux-lts-headers=${pkgver}")
- conflicts=('kernel26-lts-headers' 'kernel26-libre-lts-headers' 'linux-lts-headers')
- replaces=('kernel26-lts-headers' 'kernel26-libre-lts-headers' 'linux-lts-headers')
+_package-headers() {
+ pkgdesc="Header files and scripts for building modules for ${pkgbase} kernel"
+ provides=("kernel26${_kernelname}-headers=${pkgver}" "linux${_kernelname}-headers=${pkgver}")
+ conflicts=("kernel26${_kernelname}-headers" "kernel26-libre${_kernelname}-headers" "linux${_kernelname}-headers")
+ replaces=("kernel26${_kernelname}-headers" "kernel26-libre${_kernelname}-headers" "linux${_kernelname}-headers")
KARCH=x86
[ $CARCH = "mips64el" ] && KARCH=mips
@@ -226,7 +243,7 @@ package_linux-libre-lts-headers() {
# In case of repackaging this is empty
if [ -z "${_kernver}" ]; then
cd "${srcdir}/linux-${_basekernel}"
- _kernver="$(make kernelrelease)"
+ _kernver="$(make LOCALVERSION= kernelrelease)"
fi
install -dm755 "${pkgdir}/usr/lib/modules/${_kernver}"
@@ -357,10 +374,19 @@ package_linux-libre-lts-headers() {
done
# remove unneeded architectures
- rm -rf "${pkgdir}"/usr/src/linux-${_kernver}/arch/{alpha,arm,arm26,avr32,blackfin,cris,frv,h8300,ia64,m32r,m68k,m68knommu,microblaze,mn10300,parisc,powerpc,ppc,s390,score,sh,sh64,sparc,sparc64,tile,um,unicore32,v850,xtensa}
+ rm -rf "${pkgdir}"/usr/src/linux-${_kernver}/arch/{alpha,arm,arm26,avr32,blackfin,c6x,cris,frv,h8300,hexagon,ia64,m32r,m68k,m68knommu,microblaze,mn10300,openrisc,parisc,powerpc,ppc,s390,score,sh,sh64,sparc,sparc64,tile,unicore32,um,v850,xtensa}
if [ "$CARCH" = "mips64el" ]; then
rm -rf ${pkgdir}/usr/src/linux-${_kernver}/arch/x86
else
rm -rf ${pkgdir}/usr/src/linux-${_kernver}/arch/mips
fi
}
+
+pkgname=("${pkgbase}" "${pkgbase}-headers")
+for _p in ${pkgname[@]}; do
+ eval "package_${_p}() {
+ _package${_p#${pkgbase}}
+ }"
+done
+
+# vim:set ts=8 sts=2 sw=2 et:
diff --git a/libre/linux-libre-lts/config.i686 b/libre/linux-libre-lts/config.i686
index 83bab0f8c..f4e10c441 100644
--- a/libre/linux-libre-lts/config.i686
+++ b/libre/linux-libre-lts/config.i686
@@ -1,6 +1,6 @@
#
# Automatically generated make config: don't edit
-# Linux/i386 3.0.29-1 Kernel Configuration
+# Linux/i386 3.0.40-2 Kernel Configuration
#
# CONFIG_64BIT is not set
CONFIG_X86_32=y
@@ -62,7 +62,7 @@ CONFIG_EXPERIMENTAL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_CROSS_COMPILE=""
CONFIG_LOCALVERSION="-LIBRE-LTS"
-CONFIG_LOCALVERSION_AUTO=y
+# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_HAVE_KERNEL_BZIP2=y
CONFIG_HAVE_KERNEL_LZMA=y
@@ -106,13 +106,14 @@ CONFIG_IRQ_FORCED_THREADING=y
#
# RCU Subsystem
#
-CONFIG_TREE_PREEMPT_RCU=y
-CONFIG_PREEMPT_RCU=y
+CONFIG_TREE_RCU=y
+# CONFIG_TREE_PREEMPT_RCU is not set
+# CONFIG_PREEMPT_RCU is not set
# CONFIG_RCU_TRACE is not set
CONFIG_RCU_FANOUT=32
# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_RCU_FAST_NO_HZ is not set
# CONFIG_TREE_RCU_TRACE is not set
-# CONFIG_RCU_BOOST is not set
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=19
@@ -192,9 +193,11 @@ CONFIG_TRACEPOINTS=y
CONFIG_OPROFILE=m
# CONFIG_OPROFILE_EVENT_MULTIPLEX is not set
CONFIG_HAVE_OPROFILE=y
-# CONFIG_KPROBES is not set
+CONFIG_KPROBES=y
CONFIG_JUMP_LABEL=y
+CONFIG_OPTPROBES=y
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
+CONFIG_KRETPROBES=y
CONFIG_USER_RETURN_NOTIFIER=y
CONFIG_HAVE_IOREMAP_PROT=y
CONFIG_HAVE_KPROBES=y
@@ -251,27 +254,27 @@ CONFIG_PADATA=y
# CONFIG_INLINE_SPIN_LOCK_BH is not set
# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_SPIN_UNLOCK is not set
+CONFIG_INLINE_SPIN_UNLOCK=y
# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
-# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
+CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
# CONFIG_INLINE_READ_TRYLOCK is not set
# CONFIG_INLINE_READ_LOCK is not set
# CONFIG_INLINE_READ_LOCK_BH is not set
# CONFIG_INLINE_READ_LOCK_IRQ is not set
# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_READ_UNLOCK is not set
+CONFIG_INLINE_READ_UNLOCK=y
# CONFIG_INLINE_READ_UNLOCK_BH is not set
-# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
+CONFIG_INLINE_READ_UNLOCK_IRQ=y
# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
# CONFIG_INLINE_WRITE_TRYLOCK is not set
# CONFIG_INLINE_WRITE_LOCK is not set
# CONFIG_INLINE_WRITE_LOCK_BH is not set
# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_WRITE_UNLOCK is not set
+CONFIG_INLINE_WRITE_UNLOCK=y
# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
-# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
+CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
# CONFIG_MUTEX_SPIN_ON_OWNER is not set
CONFIG_FREEZER=y
@@ -359,9 +362,9 @@ CONFIG_NR_CPUS=8
CONFIG_SCHED_SMT=y
CONFIG_SCHED_MC=y
# CONFIG_IRQ_TIME_ACCOUNTING is not set
-# CONFIG_PREEMPT_NONE is not set
+CONFIG_PREEMPT_NONE=y
# CONFIG_PREEMPT_VOLUNTARY is not set
-CONFIG_PREEMPT=y
+# CONFIG_PREEMPT is not set
CONFIG_X86_LOCAL_APIC=y
CONFIG_X86_IO_APIC=y
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
@@ -992,7 +995,9 @@ CONFIG_IP_DCCP_TFRC_LIB=y
# DCCP Kernel Hacking
#
# CONFIG_IP_DCCP_DEBUG is not set
+CONFIG_NET_DCCPPROBE=m
CONFIG_IP_SCTP=m
+CONFIG_NET_SCTPPROBE=m
# CONFIG_SCTP_DBG_MSG is not set
# CONFIG_SCTP_DBG_OBJCNT is not set
# CONFIG_SCTP_HMAC_NONE is not set
@@ -1104,6 +1109,7 @@ CONFIG_XPS=y
# Network testing
#
CONFIG_NET_PKTGEN=m
+CONFIG_NET_TCPPROBE=m
CONFIG_NET_DROP_MONITOR=y
CONFIG_HAMRADIO=y
@@ -3805,6 +3811,7 @@ CONFIG_DRM_TDFX=m
CONFIG_DRM_R128=m
CONFIG_DRM_RADEON=m
CONFIG_DRM_RADEON_KMS=y
+# CONFIG_DRM_I810 is not set
CONFIG_DRM_I915=m
CONFIG_DRM_I915_KMS=y
CONFIG_DRM_MGA=m
@@ -5311,7 +5318,6 @@ CONFIG_TIMER_STATS=y
# CONFIG_SLUB_DEBUG_ON is not set
# CONFIG_SLUB_STATS is not set
# CONFIG_DEBUG_KMEMLEAK is not set
-# CONFIG_DEBUG_PREEMPT is not set
# CONFIG_DEBUG_RT_MUTEXES is not set
# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
@@ -5342,7 +5348,7 @@ CONFIG_FRAME_POINTER=y
# CONFIG_BOOT_PRINTK_DELAY is not set
# CONFIG_RCU_TORTURE_TEST is not set
CONFIG_RCU_CPU_STALL_TIMEOUT=60
-# CONFIG_RCU_CPU_STALL_VERBOSE is not set
+# CONFIG_KPROBES_SANITY_TEST is not set
# CONFIG_BACKTRACE_SELF_TEST is not set
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
@@ -5378,7 +5384,6 @@ CONFIG_FTRACE=y
CONFIG_FUNCTION_TRACER=y
CONFIG_FUNCTION_GRAPH_TRACER=y
# CONFIG_IRQSOFF_TRACER is not set
-# CONFIG_PREEMPT_TRACER is not set
CONFIG_SCHED_TRACER=y
CONFIG_FTRACE_SYSCALLS=y
CONFIG_BRANCH_PROFILE_NONE=y
@@ -5386,6 +5391,7 @@ CONFIG_BRANCH_PROFILE_NONE=y
# CONFIG_PROFILE_ALL_BRANCHES is not set
CONFIG_STACK_TRACER=y
CONFIG_BLK_DEV_IO_TRACE=y
+CONFIG_KPROBE_EVENT=y
CONFIG_DYNAMIC_FTRACE=y
CONFIG_FUNCTION_PROFILER=y
CONFIG_FTRACE_MCOUNT_RECORD=y
@@ -5417,6 +5423,7 @@ CONFIG_DEBUG_RODATA=y
CONFIG_DOUBLEFAULT=y
# CONFIG_IOMMU_STRESS is not set
CONFIG_HAVE_MMIOTRACE_SUPPORT=y
+# CONFIG_X86_DECODER_SELFTEST is not set
CONFIG_IO_DELAY_TYPE_0X80=0
CONFIG_IO_DELAY_TYPE_0XED=1
CONFIG_IO_DELAY_TYPE_UDELAY=2
diff --git a/libre/linux-libre-lts/config.x86_64 b/libre/linux-libre-lts/config.x86_64
index fa7be5e5b..80f5a7aca 100644
--- a/libre/linux-libre-lts/config.x86_64
+++ b/libre/linux-libre-lts/config.x86_64
@@ -1,6 +1,6 @@
#
# Automatically generated make config: don't edit
-# Linux/x86_64 3.0.26-1 Kernel Configuration
+# Linux/x86_64 3.0.40-2 Kernel Configuration
#
CONFIG_64BIT=y
# CONFIG_X86_32 is not set
@@ -63,7 +63,7 @@ CONFIG_EXPERIMENTAL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_CROSS_COMPILE=""
CONFIG_LOCALVERSION="-LIBRE-LTS"
-CONFIG_LOCALVERSION_AUTO=y
+# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_HAVE_KERNEL_BZIP2=y
CONFIG_HAVE_KERNEL_LZMA=y
@@ -107,13 +107,14 @@ CONFIG_IRQ_FORCED_THREADING=y
#
# RCU Subsystem
#
-CONFIG_TREE_PREEMPT_RCU=y
-CONFIG_PREEMPT_RCU=y
+CONFIG_TREE_RCU=y
+# CONFIG_TREE_PREEMPT_RCU is not set
+# CONFIG_PREEMPT_RCU is not set
# CONFIG_RCU_TRACE is not set
CONFIG_RCU_FANOUT=64
# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_RCU_FAST_NO_HZ is not set
# CONFIG_TREE_RCU_TRACE is not set
-# CONFIG_RCU_BOOST is not set
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=19
@@ -193,9 +194,11 @@ CONFIG_TRACEPOINTS=y
CONFIG_OPROFILE=m
# CONFIG_OPROFILE_EVENT_MULTIPLEX is not set
CONFIG_HAVE_OPROFILE=y
-# CONFIG_KPROBES is not set
+CONFIG_KPROBES=y
CONFIG_JUMP_LABEL=y
+CONFIG_OPTPROBES=y
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
+CONFIG_KRETPROBES=y
CONFIG_USER_RETURN_NOTIFIER=y
CONFIG_HAVE_IOREMAP_PROT=y
CONFIG_HAVE_KPROBES=y
@@ -252,27 +255,27 @@ CONFIG_PADATA=y
# CONFIG_INLINE_SPIN_LOCK_BH is not set
# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_SPIN_UNLOCK is not set
+CONFIG_INLINE_SPIN_UNLOCK=y
# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
-# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
+CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
# CONFIG_INLINE_READ_TRYLOCK is not set
# CONFIG_INLINE_READ_LOCK is not set
# CONFIG_INLINE_READ_LOCK_BH is not set
# CONFIG_INLINE_READ_LOCK_IRQ is not set
# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_READ_UNLOCK is not set
+CONFIG_INLINE_READ_UNLOCK=y
# CONFIG_INLINE_READ_UNLOCK_BH is not set
-# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
+CONFIG_INLINE_READ_UNLOCK_IRQ=y
# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
# CONFIG_INLINE_WRITE_TRYLOCK is not set
# CONFIG_INLINE_WRITE_LOCK is not set
# CONFIG_INLINE_WRITE_LOCK_BH is not set
# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_WRITE_UNLOCK is not set
+CONFIG_INLINE_WRITE_UNLOCK=y
# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
-# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
+CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
# CONFIG_MUTEX_SPIN_ON_OWNER is not set
CONFIG_FREEZER=y
@@ -341,9 +344,9 @@ CONFIG_NR_CPUS=64
CONFIG_SCHED_SMT=y
CONFIG_SCHED_MC=y
# CONFIG_IRQ_TIME_ACCOUNTING is not set
-# CONFIG_PREEMPT_NONE is not set
+CONFIG_PREEMPT_NONE=y
# CONFIG_PREEMPT_VOLUNTARY is not set
-CONFIG_PREEMPT=y
+# CONFIG_PREEMPT is not set
CONFIG_X86_LOCAL_APIC=y
CONFIG_X86_IO_APIC=y
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
@@ -960,7 +963,9 @@ CONFIG_IP_DCCP_TFRC_LIB=y
# DCCP Kernel Hacking
#
# CONFIG_IP_DCCP_DEBUG is not set
+CONFIG_NET_DCCPPROBE=m
CONFIG_IP_SCTP=m
+CONFIG_NET_SCTPPROBE=m
# CONFIG_SCTP_DBG_MSG is not set
# CONFIG_SCTP_DBG_OBJCNT is not set
# CONFIG_SCTP_HMAC_NONE is not set
@@ -1070,10 +1075,9 @@ CONFIG_BPF_JIT=y
# Network testing
#
CONFIG_NET_PKTGEN=m
+CONFIG_NET_TCPPROBE=m
CONFIG_NET_DROP_MONITOR=y
CONFIG_HAMRADIO=y
-# CONFIG_CAN is not set
-CONFIG_IRDA=m
#
# Packet Radio protocols
@@ -1093,6 +1097,8 @@ CONFIG_BAYCOM_SER_FDX=m
CONFIG_BAYCOM_SER_HDX=m
CONFIG_BAYCOM_PAR=m
CONFIG_YAM=m
+# CONFIG_CAN is not set
+CONFIG_IRDA=m
#
# IrDA protocols
@@ -3621,6 +3627,7 @@ CONFIG_DRM_TDFX=m
CONFIG_DRM_R128=m
CONFIG_DRM_RADEON=m
CONFIG_DRM_RADEON_KMS=y
+# CONFIG_DRM_I810 is not set
CONFIG_DRM_I915=m
CONFIG_DRM_I915_KMS=y
CONFIG_DRM_MGA=m
@@ -5052,7 +5059,6 @@ CONFIG_TIMER_STATS=y
# CONFIG_DEBUG_OBJECTS is not set
# CONFIG_SLUB_DEBUG_ON is not set
# CONFIG_SLUB_STATS is not set
-# CONFIG_DEBUG_PREEMPT is not set
# CONFIG_DEBUG_RT_MUTEXES is not set
# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
@@ -5082,7 +5088,7 @@ CONFIG_FRAME_POINTER=y
# CONFIG_BOOT_PRINTK_DELAY is not set
# CONFIG_RCU_TORTURE_TEST is not set
CONFIG_RCU_CPU_STALL_TIMEOUT=60
-# CONFIG_RCU_CPU_STALL_VERBOSE is not set
+# CONFIG_KPROBES_SANITY_TEST is not set
# CONFIG_BACKTRACE_SELF_TEST is not set
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
@@ -5118,7 +5124,6 @@ CONFIG_FTRACE=y
CONFIG_FUNCTION_TRACER=y
CONFIG_FUNCTION_GRAPH_TRACER=y
# CONFIG_IRQSOFF_TRACER is not set
-# CONFIG_PREEMPT_TRACER is not set
CONFIG_SCHED_TRACER=y
CONFIG_FTRACE_SYSCALLS=y
CONFIG_BRANCH_PROFILE_NONE=y
@@ -5126,6 +5131,7 @@ CONFIG_BRANCH_PROFILE_NONE=y
# CONFIG_PROFILE_ALL_BRANCHES is not set
CONFIG_STACK_TRACER=y
CONFIG_BLK_DEV_IO_TRACE=y
+CONFIG_KPROBE_EVENT=y
CONFIG_DYNAMIC_FTRACE=y
CONFIG_FUNCTION_PROFILER=y
CONFIG_FTRACE_MCOUNT_RECORD=y
@@ -5157,6 +5163,7 @@ CONFIG_DEBUG_RODATA=y
# CONFIG_IOMMU_DEBUG is not set
# CONFIG_IOMMU_STRESS is not set
CONFIG_HAVE_MMIOTRACE_SUPPORT=y
+# CONFIG_X86_DECODER_SELFTEST is not set
CONFIG_IO_DELAY_TYPE_0X80=0
CONFIG_IO_DELAY_TYPE_0XED=1
CONFIG_IO_DELAY_TYPE_UDELAY=2
diff --git a/libre/linux-libre-lts/linux-libre-lts.install b/libre/linux-libre-lts/linux-libre-lts.install
index 8a688091d..05124e7ab 100644
--- a/libre/linux-libre-lts/linux-libre-lts.install
+++ b/libre/linux-libre-lts/linux-libre-lts.install
@@ -2,7 +2,7 @@
# arg 2: the old package version
KERNEL_NAME=-lts
-KERNEL_VERSION=3.0.36-2-LIBRE-LTS
+KERNEL_VERSION=3.0.42-1-LIBRE-LTS
# set a sane PATH to ensure that critical utils like depmod will be found
export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
@@ -33,7 +33,7 @@ post_install () {
post_upgrade() {
pacman -Q grub &>/dev/null
hasgrub=$?
- pacman -Q grub2-common &>/dev/null
+ pacman -Q grub-common &>/dev/null
hasgrub2=$?
pacman -Q lilo &>/dev/null
haslilo=$?
diff --git a/libre/linux-libre-manpages/PKGBUILD b/libre/linux-libre-manpages/PKGBUILD
index 1422f451f..e6cc4238c 100644
--- a/libre/linux-libre-manpages/PKGBUILD
+++ b/libre/linux-libre-manpages/PKGBUILD
@@ -1,18 +1,18 @@
-# $Id$
+# $Id: PKGBUILD 142395 2011-11-08 23:03:12Z thomas $
# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
# Maintainer: Thomas Baechler <thomas@archlinux.org>
-# Maintainer (Parabola): André Silva <andre.paulista@adinet.com.uy>
+# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
pkgname=linux-libre-manpages
pkgver=3.1
-pkgrel=1
-pkgdesc="Kernel hackers manual - Section 9 manpages that comes with the Linux-libre kernel."
+pkgrel=1.2
+pkgdesc="Kernel libre hackers manual - Section 9 manpages that comes with the linux-libre kernel"
arch=('any')
url="http://linux-libre.fsfla.org/"
license=('GPL2')
makedepends=('xmlto' 'docbook-xsl')
-replaces=('kernel26-manpages' 'linux-manpages')
-conflicts=('kernel26-manpages' 'linux-manpages')
+replaces=('kernel26-manpages' 'kernel26-libre-manpages' 'linux-manpages')
+conflicts=('kernel26-manpages' 'kernel26-libre-manpages' 'linux-manpages')
provides=('kernel26-manpages' 'linux-manpages')
source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${pkgver}-gnu/linux-libre-${pkgver}-gnu.tar.xz")
md5sums=('38703cdbb0b9107e7220bc094c5e36b1')
diff --git a/libre/linux-libre-tools/PKGBUILD b/libre/linux-libre-tools/PKGBUILD
index def346093..802800fa0 100644
--- a/libre/linux-libre-tools/PKGBUILD
+++ b/libre/linux-libre-tools/PKGBUILD
@@ -3,29 +3,43 @@
# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
pkgbase=linux-libre-tools
-_pkgname=('perf' 'cpupower' 'x86_energy_perf_policy')
-pkgname=('perf-libre' 'cpupower-libre' 'x86_energy_perf_policy-libre')
-_basekernel=3.4
+pkgname=('perf-libre' 'cpupower-libre' 'x86_energy_perf_policy-libre' 'usbip-libre')
+_basekernel=3.5
#_sublevel=1
#pkgver=${_basekernel}.${_sublevel}
pkgver=${_basekernel}
-pkgrel=3
+pkgrel=5
license=('GPL2')
arch=('i686' 'x86_64' 'mips64el')
url='http://linux-libre.fsfla.org/'
options=('!strip')
-makedepends=('asciidoc' 'xmlto')
# split packages need all package dependencies set manually in makedepends
-makedepends+=('python2' 'libnewt' 'elfutils' 'pciutils')
+# kernel source deps
+makedepends=('asciidoc' 'xmlto')
+# perf-libre deps
+makedepends+=('perl' 'python2' 'libnewt' 'elfutils')
+# cpupower-libre deps
+makedepends+=('pciutils')
+# usbip-libre deps
+makedepends+=('glib2' 'sysfsutils')
+groups=("$pkgbase")
source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gnu/linux-libre-${_basekernel}-gnu.tar.xz"
#"http://linux-libre.fsfla.org/pub/linux-libre/releases/${pkgver}-gnu/patch-${_basekernel}-gnu-${pkgver}-gnu.xz"
- 'cpupower.rc'
'cpupower.conf'
- 'cpupower.service')
-md5sums=('a5e128ca059cceb8b69148b41ff4ac6f'
- '73dbc931e86b3b73d6e2338dcbee81a4'
+ 'cpupower.rc'
+ 'cpupower.systemd'
+ 'cpupower.service'
+ 'usbipd.conf'
+ 'usbipd.rc'
+ 'usbipd.service')
+md5sums=('2407fc9563a74acaf38aa0c06516eb1c'
'18d5aa9e4c6bb23bb02bf65e155e0f0e'
- '20870541e88109d2f153be3c58a277f1')
+ '1d9214637968b91706b6e616a100d44b'
+ 'c0d17b5295fe964623c772a2dd981771'
+ '2450e8ff41b30eb58d43b5fffbfde1f4'
+ 'e8fac9c45a628015644b4150b139278a'
+ '8a3831d962ff6a9968c0c20fd601cdec'
+ 'ba7c1c513314dd21fb2334fb8417738f')
build() {
# apply stable patching set
@@ -34,41 +48,50 @@ build() {
patch -Np1 -i "${srcdir}/patch-${_basekernel}-gnu-${pkgver}-gnu"
fi
- msg2 'Build perf'
+ msg2 'Build perf-libre'
pushd linux-$pkgver/tools/perf
make \
+ WERROR=0 \
DESTDIR="$pkgdir/usr" \
- perfexecdir="lib/$_pkgname" \
+ perfexecdir='lib/perf' \
PYTHON=python2 \
NO_GTK2=1 \
PERF_VERSION=$pkgver-$pkgrel \
all man
popd
- msg2 'Build cpupower'
+ msg2 'Build cpupower-libre'
pushd linux-$pkgver/tools/power/cpupower
# we cannot use --as-needed
LDFLAGS=${LDFLAGS:+"$LDFLAGS,--no-as-needed"}
make VERSION=$pkgver-$pkgrel
popd
- msg2 'Build x86_energy_perf_policy'
+ msg2 'Build x86_energy_perf_policy-libre'
pushd linux-$pkgver/tools/power/x86/x86_energy_perf_policy
make
popd
+
+ msg2 'Build usbip-libre'
+ pushd linux-$pkgver/drivers/staging/usbip/userspace
+ ./autogen.sh
+ ./configure --prefix=/usr
+ make
+ popd
}
package_perf-libre() {
pkgdesc='Linux-libre kernel performance auditing tool'
- depends=('python2' 'libnewt' 'elfutils')
+ depends=('perl' 'python2' 'libnewt' 'elfutils')
replaces=('perf')
conflicts=('perf')
provides=("perf=$pkgver")
cd linux-$pkgver/tools/perf
make \
+ WERROR=0 \
DESTDIR="$pkgdir/usr" \
- perfexecdir="lib/$_pkgname" \
+ perfexecdir='lib/perf' \
PYTHON=python2 \
NO_GTK2=1 \
PERF_VERSION=$pkgver-$pkgrel \
@@ -78,7 +101,7 @@ package_perf-libre() {
package_cpupower-libre() {
pkgdesc='Linux-libre kernel tool to examine and tune power saving related features of your processor'
backup=('etc/conf.d/cpupower')
- depends=('pciutils')
+ depends=('bash' 'pciutils')
replaces=('cpupower')
conflicts=('cpupower' 'cpufrequtils')
provides=("cpupower=$pkgver")
@@ -90,21 +113,43 @@ package_cpupower-libre() {
docdir='/usr/share/doc/cpupower' \
install install-man
popd
- # install rc.d script
- install -D -m 755 cpupower.rc "$pkgdir/etc/rc.d/cpupower"
- install -D -m 644 cpupower.conf "$pkgdir/etc/conf.d/cpupower"
- install -D -m 644 cpupower.service "$pkgdir/usr/lib/systemd/system/cpupower.service"
+ # install startup scripts
+ install -Dm 755 cpupower.rc "$pkgdir/etc/rc.d/cpupower"
+ install -Dm 644 cpupower.conf "$pkgdir/etc/conf.d/cpupower"
+ install -Dm 644 cpupower.service "$pkgdir/usr/lib/systemd/system/cpupower.service"
+ install -Dm 755 cpupower.systemd "$pkgdir/usr/lib/systemd/scripts/cpupower"
}
package_x86_energy_perf_policy-libre() {
pkgdesc='Read or write MSR_IA32_ENERGY_PERF_BIAS'
+ depends=('glibc')
replaces=('x86_energy_perf_policy')
conflicts=('x86_energy_perf_policy')
provides=("x86_energy_perf_policy=$pkgver")
cd linux-$pkgver/tools/power/x86/x86_energy_perf_policy
- install -D -m 755 x86_energy_perf_policy "$pkgdir/usr/bin/x86_energy_perf_policy"
- install -D -m 644 x86_energy_perf_policy.8 "$pkgdir/usr/share/man/man8/x86_energy_perf_policy.8"
+ install -Dm 755 x86_energy_perf_policy "$pkgdir/usr/bin/x86_energy_perf_policy"
+ install -Dm 644 x86_energy_perf_policy.8 "$pkgdir/usr/share/man/man8/x86_energy_perf_policy.8"
+}
+
+package_usbip-libre() {
+ pkgdesc='An USB device sharing system over IP network'
+ depends=('glib2' 'sysfsutils')
+ options=('!libtool')
+ replaces=('usbip')
+ conflicts=('usbip')
+ provides=("usbip=$pkgver")
+
+ pushd linux-$pkgver/drivers/staging/usbip/userspace
+ make install DESTDIR="$pkgdir"
+ popd
+ # module loading
+ install -Dm 644 /dev/null "$pkgdir/usr/lib/modules-load.d/$pkgname.conf"
+ printf 'usbip-core\nusbip-host\n' > "$pkgdir/usr/lib/modules-load.d/$pkgname.conf"
+ # install daemon scripts
+ install -Dm 755 usbipd.rc "$pkgdir/etc/rc.d/usbipd"
+ install -Dm 644 usbipd.conf "$pkgdir/etc/conf.d/usbipd"
+ install -Dm 644 usbipd.service "$pkgdir/usr/lib/systemd/system/usbipd.service"
}
# vim:set ts=2 sw=2 ft=sh et:
diff --git a/libre/linux-libre-tools/cpupower.pmutils b/libre/linux-libre-tools/cpupower.pmutils
new file mode 100644
index 000000000..fb93cd7c1
--- /dev/null
+++ b/libre/linux-libre-tools/cpupower.pmutils
@@ -0,0 +1,37 @@
+#!/bin/bash
+
+[[ -x /usr/bin/cpupower ]] || exit $NA
+
+CPUPOWER_GOVERNOR_AC=${CPUPOWER_GOVERNOR_AC:-ondemand}
+CPUPOWER_GOVERNOR_BAT=${CPUPOWER_GOVERNOR_BAT:-conservative}
+
+help() {
+ cat <<EOF
+--------
+$0: Select cpupower frequency governor.
+
+Parameters:
+CPUPOWER_GOVERNOR_AC = Governor to use on AC.
+Defaults to ondemand.
+
+CPUPOWER_GOVERNOR_BAT = Governor to use on battery.
+Defaults to conservative.
+
+EOF
+}
+
+cpupow() {
+ printf 'Setting cpupower frequency governor to %s...' "$1"
+ cpupower -c all frequency-set -g "$1"
+}
+
+case $1 in
+ true) cpupow "$CPUPOWER_GOVERNOR_BAT" ;;
+ false) cpupow "$CPUPOWER_GOVERNOR_AC" ;;
+ help) help;;
+ *) exit $NA ;;
+esac
+
+exit 0
+
+# vim:set ts=2 sw=2 ft=sh et:
diff --git a/libre/linux-libre-tools/cpupower.rc b/libre/linux-libre-tools/cpupower.rc
index 27a491e95..2c4441c4e 100644
--- a/libre/linux-libre-tools/cpupower.rc
+++ b/libre/linux-libre-tools/cpupower.rc
@@ -2,40 +2,16 @@
. /etc/rc.conf
. /etc/rc.d/functions
-
-[[ -f /etc/conf.d/cpupower ]] && . /etc/conf.d/cpupower
+. /etc/conf.d/${0##*/}
case "$1" in
start|restart)
- stat_busy "Setting cpupower rules"
- declare -i fail=0
-
- # frequency-set options
- declare -a params=()
- params+=(${governor:+-g $governor})
- params+=(${min_freq:+-d $min_freq})
- params+=(${max_freq:+-u $max_freq})
- params+=(${freq:+-f $freq})
- if ((${#params[@]} > 0)); then
- cpupower frequency-set "${params[@]}" >/dev/null || fail=1
- fi
-
- # set options
- declare -a params=()
- params+=(${mc_scheduler:+-m $mc_scheduler})
- params+=(${smp_scheduler:+-s $smp_scheduler})
- params+=(${perf_bias:+-b $perf_bias})
- if ((${#params[@]} > 0)); then
- cpupower set "${params[@]}" >/dev/null || fail=1
- fi
-
- # print failure if any
- (($fail > 0)) && stat_fail && exit 1 || stat_done
+ status 'Setting cpupower rules' /usr/lib/systemd/scripts/cpupower || exit 1
;;
*)
- echo "usage: ${0##*/} {start|restart}"
+ echo "usage: ${0##*/} {start|restart}" >&2
+ exit 1
+ ;;
esac
-true
-
# vim:set ts=2 sw=2 ft=sh et:
diff --git a/libre/linux-libre-tools/cpupower.service b/libre/linux-libre-tools/cpupower.service
index f77cfdc97..aaeba2b08 100644
--- a/libre/linux-libre-tools/cpupower.service
+++ b/libre/linux-libre-tools/cpupower.service
@@ -3,7 +3,7 @@ Description=Apply cpupower configuration
[Service]
Type=oneshot
-ExecStart=/etc/rc.d/cpupower start
+ExecStart=/usr/lib/systemd/scripts/cpupower
RemainAfterExit=yes
[Install]
diff --git a/libre/linux-libre-tools/cpupower.systemd b/libre/linux-libre-tools/cpupower.systemd
new file mode 100644
index 000000000..f45b02bc8
--- /dev/null
+++ b/libre/linux-libre-tools/cpupower.systemd
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+. /etc/conf.d/cpupower
+
+declare -i fail=0
+
+# parse frequency options
+declare -a params=()
+params+=(${governor:+-g $governor})
+params+=(${min_freq:+-d $min_freq})
+params+=(${max_freq:+-u $max_freq})
+params+=(${freq:+-f $freq})
+
+# apply frequency options
+if ((${#params[@]} > 0)); then
+ cpupower frequency-set "${params[@]}" >/dev/null || fail=1
+fi
+
+# parse cpu options
+declare -a params=()
+params+=(${mc_scheduler:+-m $mc_scheduler})
+params+=(${smp_scheduler:+-s $smp_scheduler})
+params+=(${perf_bias:+-b $perf_bias})
+
+# apply cpu options
+if ((${#params[@]} > 0)); then
+ cpupower set "${params[@]}" >/dev/null || fail=1
+fi
+
+exit $fail
+
+# vim:set ts=2 sw=2 ft=sh et:
diff --git a/libre/linux-libre-tools/usbipd.conf b/libre/linux-libre-tools/usbipd.conf
new file mode 100644
index 000000000..5990b857a
--- /dev/null
+++ b/libre/linux-libre-tools/usbipd.conf
@@ -0,0 +1,3 @@
+# vim:set ts=2 sw=2 ft=sh noet:
+
+DAEMON_OPTS=''
diff --git a/libre/linux-libre-tools/usbipd.rc b/libre/linux-libre-tools/usbipd.rc
new file mode 100644
index 000000000..15a1bcf00
--- /dev/null
+++ b/libre/linux-libre-tools/usbipd.rc
@@ -0,0 +1,34 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+. /etc/conf.d/${0##*/}
+
+DAEMON=/usr/sbin/usbipd
+PID=$(pidof -o %PPID $DAEMON)
+DAEMON_OPTS="--daemon $DAEMON_OPTS"
+
+case "$1" in
+ start)
+ stat_busy "Starting ${0##*/} daemon"
+ [[ ! $PID ]] && $DAEMON $DAEMON_OPTS && add_daemon ${0##*/} && stat_done && exit 0
+ stat_fail
+ ;;
+ stop)
+ stat_busy "Stopping ${0##*/} daemon"
+ [[ $PID ]] && kill $PID &> /dev/null && rm_daemon ${0##*/} && stat_done && exit 0
+ stat_fail
+ ;;
+ restart)
+ $0 stop
+ $0 start
+ exit 0
+ ;;
+ *)
+ echo "usage: ${0##*/} {start|stop|restart}" >&2
+ ;;
+esac
+
+exit 1
+
+# vim:set ts=2 sw=2 ft=sh et:
diff --git a/libre/linux-libre-tools/usbipd.service b/libre/linux-libre-tools/usbipd.service
new file mode 100644
index 000000000..ac2f5f7c1
--- /dev/null
+++ b/libre/linux-libre-tools/usbipd.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=USB/IP server
+
+[Service]
+ExecStart=/usr/sbin/usbipd
+
+[Install]
+WantedBy=multi-user.target
diff --git a/libre/linux-libre/.directory b/libre/linux-libre/.directory
index f39ceed05..e6f3e33d1 100644
--- a/libre/linux-libre/.directory
+++ b/libre/linux-libre/.directory
@@ -1,5 +1,6 @@
[Dolphin]
-Timestamp=2012,4,8,18,21,16
+Timestamp=2012,8,9,22,54,19
+Version=3
[Settings]
HiddenFilesShown=true
diff --git a/libre/linux-libre/PKGBUILD b/libre/linux-libre/PKGBUILD
index 077df9256..f1b856977 100644
--- a/libre/linux-libre/PKGBUILD
+++ b/libre/linux-libre/PKGBUILD
@@ -7,15 +7,13 @@
# Maintainer (Parabola): Michał Masłowski <mtjm@mtjm.eu>
# Maintainer (Parabola): Márcio Silva <coadde@lavabit.com>
-pkgbase=linux-libre
-pkgname=('linux-libre' 'linux-libre-headers' 'linux-libre-docs') # Build stock -LIBRE kernel
-# pkgname=linux-custom # Build kernel with a different name
-_kernelname=-LIBRE
-_basekernel=3.4
-_sublevel=4
+pkgbase=linux-libre # Build stock -LIBRE kernel
+#pkgbase=linux-libre-custom # Build kernel with a different name
+_basekernel=3.5
+_sublevel=3
pkgver=${_basekernel}.${_sublevel}
-_lxopkgver=${_basekernel}.4 # nearly always the same as pkgver
-pkgrel=3
+pkgrel=1
+_lxopkgver=${_basekernel}.2 # nearly always the same as pkgver
arch=('i686' 'x86_64' 'mips64el')
url="http://linux-libre.fsfla.org/"
license=('GPL2')
@@ -26,32 +24,37 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gn
# the main kernel config files
'config.i686' 'config.x86_64'
# standard config files for mkinitcpio ramdisk
- "${pkgname}.preset"
+ "${pkgbase}.preset"
'Kbuild'
'Kbuild.platforms'
'boot-logo.patch'
'change-default-console-loglevel.patch'
- 'i915-fix-ghost-tv-output.patch'
- '3.4.4-fix-backlight-regression.patch'
- "http://www.linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/linux-patches-${_lxopkgver}-gnu_0loongsonlibre_mipsel.tar.bz2")
-md5sums=('a5e128ca059cceb8b69148b41ff4ac6f'
- 'e9bb311ab329555a61696b1a18df2d34'
- '669c3f9d5c6a2109bad8e511287826c3'
- '454231e14419e56a5281eb7bc6fde83e'
+ 'alsa-powersave-3.5.x.patch'
+ 'watchdog-3.5.x.patch'
+ 'i915-i2c-crash-3.5.x.patch'
+ "http://www.linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/linux-patches-${_lxopkgver}-gnu_0loongsonlibre_mipsel.tar.bz2")
+md5sums=('2407fc9563a74acaf38aa0c06516eb1c'
+ '861f5f97c75b1a572fc5078605248ea3'
+ '3ba164b409d8024fdd433f3cc4ae1fea'
+ 'fa1e2ab2f036974199374f015f5a2c46'
'e49ac236dfeef709f91a3d993ea7b62c'
'2967cecc3af9f954ccc822fd63dca6ff'
'8267264d9a8966e57fdacd1fa1fc65c4'
'04b21c79df0a952c22d681dd4f4562df'
'9d3c56a4b999c8bfbd4018089a62f662'
- '263725f20c0b9eb9c353040792d644e5'
- '80a46681386bb87813989faeb92bdd9a'
- '86910efeadb5d1e5d5416ff1a9dacb33')
+ 'c1d58e712112cf8f95e7831012a1e67a'
+ 'ae13ed1e92bba07e9b17cf5c8d89683c'
+ 'ff4a203dd52e4dfb5d60948bb667d06d'
+ 'd822cc131b20090f39b0d448b0e1f8be')
if [ "$CARCH" != "mips64el" ]; then
# Don't use the Loongson-specific patches on non-mips64el arches.
unset source[${#source[@]}-1]
unset md5sums[${#md5sums[@]}-1]
fi
+_kernelname=${pkgbase#linux-libre}
+_localversionname=-LIBRE
+
build() {
cd "${srcdir}/linux-${_basekernel}"
@@ -62,21 +65,17 @@ build() {
# Add freedo as boot logo
patch -Np1 -i "${srcdir}/boot-logo.patch"
- # add latest fixes from stable queue, if needed
- # http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git
+ # fix alsa powersave bug, probably fixed in 3.5.4
+ # https://bugs.archlinux.org/task/31255
+ patch -Np1 -i "${srcdir}/alsa-powersave-3.5.x.patch"
- # Some chips detect a ghost TV output
- # mailing list discussion: http://lists.freedesktop.org/archives/intel-gfx/2011-April/010371.html
- # Arch Linux bug report: FS#19234
- #
- # It is unclear why this patch wasn't merged upstream, it was accepted,
- # then dropped because the reasoning was unclear. However, it is clearly
- # needed.
- patch -Np1 -i "${srcdir}/i915-fix-ghost-tv-output.patch"
+ # fix broken watchdog
+ # https://bugzilla.kernel.org/show_bug.cgi?id=44991
+ patch -Np1 -i "${srcdir}/watchdog-3.5.x.patch"
- # Fix backlight control on some laptops:
- # https://bugzilla.kernel.org/show_bug.cgi?id=43168
- patch -Np1 -i "${srcdir}/3.4.4-fix-backlight-regression.patch"
+ # fix i915 i2c crash
+ # https://bugzilla.kernel.org/show_bug.cgi?id=46381
+ patch -Np1 -i "${srcdir}/i915-i2c-crash-3.5.x.patch"
# set DEFAULT_CONSOLE_LOGLEVEL to 4 (same value as the 'quiet' kernel param)
# remove this when a Kconfig knob is made available by upstream
@@ -95,18 +94,22 @@ build() {
# https://git.kernel.org/?p=linux/hotplug/udev.git;a=blob_plain;f=README
# and make USB storage support builtin (e.g. for booting from USB
# disks without slowly loading an initramfs)
+# since 3.4 rtl8187 supports adhoc mode, so batman-adv is enabled again
sed -ri -e "s|CONFIG_MIPS32_N32=.*|CONFIG_MIPS32_N32=y|g" \
-e "s|CONFIG_MIPS32_N32=.*|CONFIG_MIPS32_N32=y|g" \
-e "s|CONFIG_UEVENT_HELPER_PATH=.*|CONFIG_UEVENT_HELPER_PATH=\"\"|g" \
- -e "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" \
+ -e "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_localversionname}\"|g" \
-e "s;(CONFIG_USB(_COMMON|_EHCI_HCD|_OHCI_HCD|_STORAGE.*|_UAS)?)=.*;\1=y;g" \
+ -e "s|# CONFIG_BATMAN_ADV is not set|CONFIG_BATMAN_ADV=m|g" \
./.config
+ echo -e "CONFIG_BATMAN_ADV_BLA=y\nCONFIG_BATMAN_ADV_DEBUG=n" >> .config
else
cat "${srcdir}/config.${CARCH}" > ./.config # simpler
fi
if [ "${_kernelname}" != "" ]; then
- sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" ./.config
+ sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_localversionname}\"|g" ./.config
+ sed -i "s|CONFIG_LOCALVERSION_AUTO=.*|CONFIG_LOCALVERSION_AUTO=n|" ./.config
fi
# set extraversion to pkgrel
@@ -126,15 +129,22 @@ build() {
#make oldconfig # using old config from previous kernel version
# ... or manually edit .config
+ # rewrite configuration
+ yes "" | make config >/dev/null
+
+ # save configuration for later reuse
+ if [ "${CARCH}" = "x86_64" ]; then
+ cat .config > "${startdir}/config.x86_64.last"
+ else
+ cat .config > "${startdir}/config.i686.last"
+ fi
+
####################
# stop here
# this is useful to configure the kernel
- #msg "Stopping build"
- #return 1
+ #msg "Stopping build"; return 1
####################
- yes "" | make config
-
# build!
if [ "$CARCH" == "mips64el" ]; then
# The build system passes it directly to linker, disable to avoid
@@ -142,22 +152,22 @@ build() {
export LDFLAGS=""
# bzImage is arch-specific and not supported on mips; vmlinux is
# useful for oprofile.
- make ${MAKEFLAGS} vmlinux vmlinuz modules
+ make ${MAKEFLAGS} LOCALVERSION= vmlinux vmlinuz modules
else
- make ${MAKEFLAGS} bzImage modules
+ make ${MAKEFLAGS} LOCALVERSION= bzImage modules
fi
}
-package_linux-libre() {
- pkgdesc="The Linux-libre Kernel and modules"
- groups=('base')
+_package() {
+ pkgdesc="The ${pkgbase} kernel and modules"
+ [ "${pkgbase}" = "linux-libre" ] && groups=('base')
depends=('coreutils' 'kmod')
optdepends=('crda: to set the correct wireless channels of your country')
- provides=('kernel26' "linux=$pkgver")
- conflicts=('kernel26' 'kernel26-libre' 'linux')
- replaces=('kernel26' 'kernel26-libre' 'linux')
- backup=("etc/mkinitcpio.d/${pkgname}.preset")
- install=${pkgname}.install
+ provides=("kernel26${_kernelname}=${pkgver}" "linux${_kernelname}=${pkgver}")
+ conflicts=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}")
+ replaces=("kernel26${_kernelname}" "kernel26-libre${_kernelname}" "linux${_kernelname}")
+ backup=("etc/mkinitcpio.d/${pkgbase}.preset")
+ install=${pkgbase}.install
if [ "$CARCH" = "mips64el" ]; then
optdepends+=('mkinitcpio: to make the initramfs (needs reinstall of this package)')
conflicts+=('mkinitcpio<0.7')
@@ -171,35 +181,42 @@ package_linux-libre() {
[ $CARCH = "mips64el" ] && KARCH=mips
# get kernel version
- _kernver="$(make kernelrelease)"
+ _kernver="$(make LOCALVERSION= kernelrelease)"
+ _basekernel=${_kernver%%-*}
+ _basekernel=${_basekernel%.*}
mkdir -p "${pkgdir}"/{lib/modules,lib/firmware,boot}
- make INSTALL_MOD_PATH="${pkgdir}" modules_install
+ make LOCALVERSION= INSTALL_MOD_PATH="${pkgdir}" modules_install
if [ "$CARCH" == "mips64el" ]; then
- cp vmlinuz "${pkgdir}/boot/vmlinuz-${pkgname}"
- cp vmlinux "${pkgdir}/boot/vmlinux-${pkgname}"
+ cp vmlinuz "${pkgdir}/boot/vmlinuz-${pkgbase}"
+ cp vmlinux "${pkgdir}/boot/vmlinux-${pkgbase}"
else
- cp "arch/${KARCH}/boot/bzImage" "${pkgdir}/boot/vmlinuz-${pkgname}"
+ cp "arch/${KARCH}/boot/bzImage" "${pkgdir}/boot/vmlinuz-${pkgbase}"
fi
# add vmlinux
install -D -m644 vmlinux "${pkgdir}/usr/src/linux-${_kernver}/vmlinux"
# install fallback mkinitcpio.conf file and preset file for kernel
- install -D -m644 "${srcdir}/${pkgname}.preset" "${pkgdir}/etc/mkinitcpio.d/${pkgname}.preset"
+ install -D -m644 "${srcdir}/${pkgbase}.preset" "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset"
# set correct depmod command for install
sed \
- -e "s|ALL_kver=.*|ALL_kver=\"/boot/vmlinuz-${pkgname}\"|g" \
- -e "s|default_image=.*|default_image=\"/boot/initramfs-${pkgname}.img\"|g" \
- -e "s|fallback_image=.*|fallback_image=\"/boot/initramfs-${pkgname}-fallback.img\"|g" \
- -i "${pkgdir}/etc/mkinitcpio.d/${pkgname}.preset"
+ -e "s/KERNEL_NAME=.*/KERNEL_NAME=${_kernelname}/" \
+ -e "s/KERNEL_VERSION=.*/KERNEL_VERSION=${_kernver}/" \
+ -i "${startdir}/${pkgbase}.install"
+ sed \
+ -e "1s|'linux*.*'|'${pkgbase}'|" \
+ -e "s|ALL_kver=.*|ALL_kver=\"/boot/vmlinuz-${pkgbase}\"|" \
+ -e "s|default_image=.*|default_image=\"/boot/initramfs-${pkgbase}.img\"|" \
+ -e "s|fallback_image=.*|fallback_image=\"/boot/initramfs-${pkgbase}-fallback.img\"|" \
+ -i "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset"
# mkinitcpio 0.7 relies on bzImage to find the kernel version
if [ "$CARCH" == "mips64el" ]; then
- sed -e "s|ALL_kver=.*|ALL_kver=\"${_kernver}\"|g" \
- -i "${pkgdir}/etc/mkinitcpio.d/${pkgname}.preset"
+ sed -e "s|ALL_kver=.*|ALL_kver=\"${_kernver}\"|" \
+ -i "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset"
fi
# remove build and source links
@@ -209,10 +226,10 @@ package_linux-libre() {
# gzip -9 all modules to save 100MB of space
find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \;
# make room for external modules
- ln -s "../extramodules-${_basekernel}${_kernelname:--LIBRE}" "${pkgdir}/lib/modules/${_kernver}/extramodules"
+ ln -s "../extramodules-${_basekernel}${_localversionname:--LIBRE}" "${pkgdir}/lib/modules/${_kernver}/extramodules"
# add real version for building modules and running depmod from post_install/upgrade
- mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname:--LIBRE}"
- echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname:--LIBRE}/version"
+ mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_localversionname:--LIBRE}"
+ echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_localversionname:--LIBRE}/version"
# move module tree /lib -> /usr/lib
mv "$pkgdir/lib" "$pkgdir/usr"
@@ -221,11 +238,11 @@ package_linux-libre() {
depmod -b "$pkgdir" -F System.map "$_kernver"
}
-package_linux-libre-headers() {
- pkgdesc="Header files and scripts for building modules for linux-libre kernel"
- provides=('kernel26-headers' "linux-headers=${pkgver}")
- conflicts=('kernel26-headers' 'kernel26-libre-headers' 'linux-headers')
- replaces=('kernel26-headers' 'kernel26-libre-headers' 'linux-headers')
+_package-headers() {
+ pkgdesc="Header files and scripts for building modules for ${pkgbase} kernel"
+ provides=("kernel26${_kernelname}-headers=${pkgver}" "linux${_kernelname}-headers=${pkgver}")
+ conflicts=("kernel26${_kernelname}-headers" "kernel26-libre${_kernelname}-headers" "linux${_kernelname}-headers")
+ replaces=("kernel26${_kernelname}-headers" "kernel26-libre${_kernelname}-headers" "linux${_kernelname}-headers")
KARCH=x86
[ $CARCH = "mips64el" ] && KARCH=mips
@@ -233,7 +250,7 @@ package_linux-libre-headers() {
# In case of repackaging this is empty
if [ -z "${_kernver}" ]; then
cd "${srcdir}/linux-${_basekernel}"
- _kernver="$(make kernelrelease)"
+ _kernver="$(make LOCALVERSION= kernelrelease)"
fi
install -dm755 "${pkgdir}/usr/lib/modules/${_kernver}"
@@ -289,7 +306,7 @@ package_linux-libre-headers() {
cp drivers/media/video/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video/"
- for i in bt8xx cpia2 cx25840 cx88 em28xx et61x251 pwc saa7134 sn9c102; do
+ for i in bt8xx cpia2 cx25840 cx88 em28xx pwc saa7134 sn9c102; do
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video/${i}"
cp -a drivers/media/video/${i}/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video/${i}"
done
@@ -372,11 +389,11 @@ package_linux-libre-headers() {
fi
}
-package_linux-libre-docs() {
- pkgdesc="Kernel hackers manual - HTML documentation that comes with the Linux-libre kernel."
- provides=('kernel26-docs' "linux-docs=$pkgver")
- conflicts=('kernel26-docs' 'kernel26-libre-docs' 'linux-docs')
- replaces=('kernel26-docs' 'kernel26-libre-docs' 'linux-docs')
+_package-docs() {
+ pkgdesc="Kernel libre hackers manual - HTML documentation that comes with the ${pkgbase} kernel"
+ provides=("kernel26${_kernelname}-docs=${pkgver}" "linux${_kernelname}-docs=${pkgver}")
+ conflicts=("kernel26${_kernelname}-docs" "kernel26-libre${_kernelname}-docs" "linux${_kernelname}-docs")
+ replaces=("kernel26${_kernelname}-docs" "kernel26-libre${_kernelname}-docs" "linux${_kernelname}-docs")
cd "${srcdir}/linux-${_basekernel}"
@@ -388,3 +405,12 @@ package_linux-libre-docs() {
# remove a file already in linux package
rm -f "${pkgdir}/usr/src/linux-${_kernver}/Documentation/DocBook/Makefile"
}
+
+pkgname=("${pkgbase}" "${pkgbase}-headers" "${pkgbase}-docs")
+for _p in ${pkgname[@]}; do
+ eval "package_${_p}() {
+ _package${_p#${pkgbase}}
+ }"
+done
+
+# vim:set ts=8 sts=2 sw=2 et:
diff --git a/libre/linux-libre/alsa-powersave-3.5.x.patch b/libre/linux-libre/alsa-powersave-3.5.x.patch
new file mode 100644
index 000000000..189fd1ceb
--- /dev/null
+++ b/libre/linux-libre/alsa-powersave-3.5.x.patch
@@ -0,0 +1,29 @@
+From: Takashi Iwai <tiwai@suse.de>
+Date: Mon, 20 Aug 2012 19:25:22 +0000 (+0200)
+Subject: ALSA: hda - Fix leftover codec->power_transition
+X-Git-Tag: v3.6-rc3~14^2~1
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux.git;a=commitdiff_plain;h=535b6c51fe8293c88ce919cdfc4390c67a1cb6d1
+
+ALSA: hda - Fix leftover codec->power_transition
+
+When the codec turn-on operation is canceled by the immediate
+power-on, the driver left the power_transition flag as is.
+This caused the persistent avoidance of power-save behavior.
+
+Cc: <stable@vger.kernel.org> [v3.5+]
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+---
+
+diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
+index c3077d5..f560051 100644
+--- a/sound/pci/hda/hda_codec.c
++++ b/sound/pci/hda/hda_codec.c
+@@ -4454,6 +4454,8 @@ static void __snd_hda_power_up(struct hda_codec *codec, bool wait_power_down)
+ * then there is no need to go through power up here.
+ */
+ if (codec->power_on) {
++ if (codec->power_transition < 0)
++ codec->power_transition = 0;
+ spin_unlock(&codec->power_lock);
+ return;
+ }
diff --git a/libre/linux-libre/avmfritz-only-few-bytes-are-transfered-on-a-conn.patch b/libre/linux-libre/avmfritz-only-few-bytes-are-transfered-on-a-conn.patch
new file mode 100644
index 000000000..f8bb193c6
--- /dev/null
+++ b/libre/linux-libre/avmfritz-only-few-bytes-are-transfered-on-a-conn.patch
@@ -0,0 +1,48 @@
+From 285c08154eede7dc4387bfc925967c884594dcc9 Mon Sep 17 00:00:00 2001
+From: Karsten Keil <keil@b1-systems.de>
+Date: Sat, 28 Jul 2012 20:10:04 +0200
+Subject: [PATCH] mISDN: Bugfix only few bytes are transfered on a connection
+
+The test for the fillempty condition was wrong in one place.
+Changed the variable to the right boolean type.
+
+Signed-off-by: Karsten Keil <keil@b1-systems.de>
+---
+ drivers/isdn/hardware/mISDN/avmfritz.c | 7 ++++---
+ 1 files changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/isdn/hardware/mISDN/avmfritz.c b/drivers/isdn/hardware/mISDN/avmfritz.c
+index c08fc60..fa6ca47 100644
+--- a/drivers/isdn/hardware/mISDN/avmfritz.c
++++ b/drivers/isdn/hardware/mISDN/avmfritz.c
+@@ -449,7 +449,8 @@ hdlc_fill_fifo(struct bchannel *bch)
+ {
+ struct fritzcard *fc = bch->hw;
+ struct hdlc_hw *hdlc;
+- int count, fs, cnt = 0, idx, fillempty = 0;
++ int count, fs, cnt = 0, idx;
++ bool fillempty = false;
+ u8 *p;
+ u32 *ptr, val, addr;
+
+@@ -462,7 +463,7 @@ hdlc_fill_fifo(struct bchannel *bch)
+ return;
+ count = fs;
+ p = bch->fill;
+- fillempty = 1;
++ fillempty = true;
+ } else {
+ count = bch->tx_skb->len - bch->tx_idx;
+ if (count <= 0)
+@@ -477,7 +478,7 @@ hdlc_fill_fifo(struct bchannel *bch)
+ hdlc->ctrl.sr.cmd |= HDLC_CMD_XME;
+ }
+ ptr = (u32 *)p;
+- if (fillempty) {
++ if (!fillempty) {
+ pr_debug("%s.B%d: %d/%d/%d", fc->name, bch->nr, count,
+ bch->tx_idx, bch->tx_skb->len);
+ bch->tx_idx += count;
+--
+1.7.7
+
diff --git a/libre/linux-libre/config.i686 b/libre/linux-libre/config.i686
index a6e1a6310..54db12ba1 100644
--- a/libre/linux-libre/config.i686
+++ b/libre/linux-libre/config.i686
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/i386 3.4.0-1 Kernel Configuration
+# Linux/i386 3.5.0-2 Kernel Configuration
#
# CONFIG_64BIT is not set
CONFIG_X86_32=y
@@ -9,10 +9,6 @@ CONFIG_X86=y
CONFIG_INSTRUCTION_DECODER=y
CONFIG_OUTPUT_FORMAT="elf32-i386"
CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"
-CONFIG_GENERIC_CMOS_UPDATE=y
-CONFIG_CLOCKSOURCE_WATCHDOG=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
@@ -26,9 +22,7 @@ CONFIG_GENERIC_GPIO=y
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
-# CONFIG_GENERIC_TIME_VSYSCALL is not set
CONFIG_ARCH_HAS_CPU_RELAX=y
CONFIG_ARCH_HAS_DEFAULT_IDLE=y
CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
@@ -46,11 +40,12 @@ CONFIG_HAVE_INTEL_TXT=y
CONFIG_X86_32_SMP=y
CONFIG_X86_HT=y
CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-ecx -fcall-saved-edx"
-CONFIG_KTIME_SCALAR=y
CONFIG_ARCH_CPU_PROBE_RELEASE=y
+CONFIG_ARCH_SUPPORTS_UPROBES=y
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
CONFIG_HAVE_IRQ_WORK=y
CONFIG_IRQ_WORK=y
+CONFIG_BUILDTIME_EXTABLE_SORT=y
#
# General setup
@@ -101,6 +96,20 @@ CONFIG_IRQ_DOMAIN=y
# CONFIG_IRQ_DOMAIN_DEBUG is not set
CONFIG_IRQ_FORCED_THREADING=y
CONFIG_SPARSE_IRQ=y
+CONFIG_CLOCKSOURCE_WATCHDOG=y
+CONFIG_KTIME_SCALAR=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
+CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y
+CONFIG_GENERIC_CMOS_UPDATE=y
+
+#
+# Timers subsystem
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
#
# RCU Subsystem
@@ -108,6 +117,7 @@ CONFIG_SPARSE_IRQ=y
CONFIG_TREE_PREEMPT_RCU=y
CONFIG_PREEMPT_RCU=y
CONFIG_RCU_FANOUT=32
+CONFIG_RCU_FANOUT_LEAF=16
# CONFIG_RCU_FANOUT_EXACT is not set
CONFIG_RCU_FAST_NO_HZ=y
# CONFIG_TREE_RCU_TRACE is not set
@@ -139,7 +149,6 @@ CONFIG_BLK_CGROUP=y
CONFIG_NAMESPACES=y
CONFIG_UTS_NS=y
CONFIG_IPC_NS=y
-CONFIG_USER_NS=y
CONFIG_PID_NS=y
CONFIG_NET_NS=y
CONFIG_SCHED_AUTOGROUP=y
@@ -182,7 +191,6 @@ CONFIG_HAVE_PERF_EVENTS=y
# Kernel Performance Events And Counters
#
CONFIG_PERF_EVENTS=y
-CONFIG_PERF_COUNTERS=y
# CONFIG_DEBUG_PERF_USE_VMALLOC is not set
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_PCI_QUIRKS=y
@@ -196,9 +204,11 @@ CONFIG_OPROFILE=m
# CONFIG_OPROFILE_EVENT_MULTIPLEX is not set
CONFIG_HAVE_OPROFILE=y
CONFIG_OPROFILE_NMI_TIMER=y
-# CONFIG_KPROBES is not set
+CONFIG_KPROBES=y
CONFIG_JUMP_LABEL=y
+CONFIG_UPROBES=y
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
+CONFIG_KRETPROBES=y
CONFIG_USER_RETURN_NOTIFIER=y
CONFIG_HAVE_IOREMAP_PROT=y
CONFIG_HAVE_KPROBES=y
@@ -206,7 +216,9 @@ CONFIG_HAVE_KRETPROBES=y
CONFIG_HAVE_OPTPROBES=y
CONFIG_HAVE_ARCH_TRACEHOOK=y
CONFIG_HAVE_DMA_ATTRS=y
+CONFIG_HAVE_DMA_CONTIGUOUS=y
CONFIG_USE_GENERIC_SMP_HELPERS=y
+CONFIG_GENERIC_SMP_IDLE_THREAD=y
CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
CONFIG_HAVE_DMA_API_DEBUG=y
CONFIG_HAVE_HW_BREAKPOINT=y
@@ -218,6 +230,8 @@ CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y
CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y
CONFIG_HAVE_CMPXCHG_LOCAL=y
CONFIG_HAVE_CMPXCHG_DOUBLE=y
+CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
+CONFIG_SECCOMP_FILTER=y
#
# GCOV-based kernel profiling
@@ -312,11 +326,6 @@ CONFIG_FREEZER=y
# Processor type and features
#
CONFIG_ZONE_DMA=y
-CONFIG_TICK_ONESHOT=y
-CONFIG_NO_HZ=y
-CONFIG_HIGH_RES_TIMERS=y
-CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y
CONFIG_SMP=y
CONFIG_X86_MPPARSE=y
# CONFIG_X86_BIGSMP is not set
@@ -325,7 +334,7 @@ CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y
CONFIG_X86_32_IRIS=m
CONFIG_SCHED_OMIT_FRAME_POINTER=y
CONFIG_PARAVIRT_GUEST=y
-# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set
+CONFIG_PARAVIRT_TIME_ACCOUNTING=y
# CONFIG_XEN_PRIVILEGED_GUEST is not set
CONFIG_KVM_CLOCK=y
CONFIG_KVM_GUEST=y
@@ -451,7 +460,9 @@ CONFIG_HWPOISON_INJECT=m
CONFIG_TRANSPARENT_HUGEPAGE=y
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
+CONFIG_CROSS_MEMORY_ATTACH=y
CONFIG_CLEANCACHE=y
+CONFIG_FRONTSWAP=y
# CONFIG_HIGHPTE is not set
CONFIG_X86_CHECK_BIOS_CORRUPTION=y
CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
@@ -496,6 +507,10 @@ CONFIG_HIBERNATION=y
CONFIG_PM_STD_PARTITION=""
CONFIG_PM_SLEEP=y
CONFIG_PM_SLEEP_SMP=y
+CONFIG_PM_AUTOSLEEP=y
+CONFIG_PM_WAKELOCKS=y
+CONFIG_PM_WAKELOCKS_LIMIT=100
+CONFIG_PM_WAKELOCKS_GC=y
CONFIG_PM_RUNTIME=y
CONFIG_PM=y
CONFIG_PM_DEBUG=y
@@ -632,7 +647,6 @@ CONFIG_PCI_LABEL=y
CONFIG_ISA_DMA_API=y
CONFIG_ISA=y
# CONFIG_EISA is not set
-# CONFIG_MCA is not set
# CONFIG_SCx200 is not set
CONFIG_OLPC=y
CONFIG_OLPC_XO1_PM=y
@@ -678,6 +692,7 @@ CONFIG_RAPIDIO=y
CONFIG_RAPIDIO_TSI721=y
CONFIG_RAPIDIO_DISC_TIMEOUT=30
# CONFIG_RAPIDIO_ENABLE_RX_TX_PORTS is not set
+CONFIG_RAPIDIO_DMA_ENGINE=y
CONFIG_RAPIDIO_DEBUG=y
CONFIG_RAPIDIO_TSI57X=y
CONFIG_RAPIDIO_CPS_XX=y
@@ -705,6 +720,7 @@ CONFIG_PACKET=y
CONFIG_UNIX=y
CONFIG_UNIX_DIAG=m
CONFIG_XFRM=y
+CONFIG_XFRM_ALGO=m
CONFIG_XFRM_USER=m
# CONFIG_XFRM_SUB_POLICY is not set
# CONFIG_XFRM_MIGRATE is not set
@@ -843,6 +859,7 @@ CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
CONFIG_NETFILTER_XT_TARGET_CT=m
CONFIG_NETFILTER_XT_TARGET_DSCP=m
CONFIG_NETFILTER_XT_TARGET_HL=m
+CONFIG_NETFILTER_XT_TARGET_HMARK=m
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
CONFIG_NETFILTER_XT_TARGET_LED=m
CONFIG_NETFILTER_XT_TARGET_LOG=m
@@ -1003,7 +1020,6 @@ CONFIG_IP_NF_ARP_MANGLE=m
#
CONFIG_NF_DEFRAG_IPV6=m
CONFIG_NF_CONNTRACK_IPV6=m
-CONFIG_IP6_NF_QUEUE=m
CONFIG_IP6_NF_IPTABLES=m
CONFIG_IP6_NF_MATCH_AH=m
CONFIG_IP6_NF_MATCH_EUI64=m
@@ -1057,7 +1073,9 @@ CONFIG_IP_DCCP_TFRC_LIB=y
# DCCP Kernel Hacking
#
# CONFIG_IP_DCCP_DEBUG is not set
+CONFIG_NET_DCCPPROBE=m
CONFIG_IP_SCTP=m
+CONFIG_NET_SCTPPROBE=m
# CONFIG_SCTP_DBG_MSG is not set
# CONFIG_SCTP_DBG_OBJCNT is not set
# CONFIG_SCTP_HMAC_NONE is not set
@@ -1099,11 +1117,11 @@ CONFIG_IPDDP_ENCAP=y
CONFIG_IPDDP_DECAP=y
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
CONFIG_PHONET=m
CONFIG_IEEE802154=m
CONFIG_IEEE802154_6LOWPAN=m
+CONFIG_MAC802154=m
CONFIG_NET_SCHED=y
#
@@ -1127,6 +1145,8 @@ CONFIG_NET_SCH_DRR=m
CONFIG_NET_SCH_MQPRIO=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_QFQ=m
+CONFIG_NET_SCH_CODEL=m
+CONFIG_NET_SCH_FQ_CODEL=m
CONFIG_NET_SCH_INGRESS=m
CONFIG_NET_SCH_PLUG=m
@@ -1162,6 +1182,7 @@ CONFIG_NET_SCH_FIFO=y
# CONFIG_DCB is not set
CONFIG_DNS_RESOLVER=y
CONFIG_BATMAN_ADV=m
+CONFIG_BATMAN_ADV_BLA=y
# CONFIG_BATMAN_ADV_DEBUG is not set
CONFIG_OPENVSWITCH=m
CONFIG_RPS=y
@@ -1174,6 +1195,7 @@ CONFIG_BQL=y
# Network testing
#
CONFIG_NET_PKTGEN=m
+CONFIG_NET_TCPPROBE=m
CONFIG_NET_DROP_MONITOR=y
CONFIG_HAMRADIO=y
@@ -1339,6 +1361,8 @@ CONFIG_CEPH_LIB=m
# CONFIG_CEPH_LIB_USE_DNS_RESOLVER is not set
CONFIG_NFC=m
CONFIG_NFC_NCI=m
+CONFIG_NFC_HCI=m
+# CONFIG_NFC_SHDLC is not set
# CONFIG_NFC_LLCP is not set
#
@@ -1370,6 +1394,7 @@ CONFIG_EXTRA_FIRMWARE=""
CONFIG_REGMAP=y
CONFIG_REGMAP_I2C=m
CONFIG_DMA_SHARED_BUFFER=y
+# CONFIG_CMA is not set
CONFIG_CONNECTOR=y
CONFIG_PROC_EVENTS=y
CONFIG_MTD=m
@@ -1500,7 +1525,6 @@ CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
CONFIG_MTD_UBI_BEB_RESERVE=1
# CONFIG_MTD_UBI_GLUEBI is not set
-# CONFIG_MTD_UBI_DEBUG is not set
CONFIG_OF=y
#
@@ -1512,7 +1536,6 @@ CONFIG_OF_PROMTREE=y
CONFIG_OF_ADDRESS=y
CONFIG_OF_IRQ=y
CONFIG_OF_DEVICE=y
-CONFIG_OF_GPIO=y
CONFIG_OF_I2C=m
CONFIG_OF_NET=y
CONFIG_OF_MDIO=m
@@ -1599,7 +1622,8 @@ CONFIG_SENSORS_APDS990X=m
CONFIG_HMC6352=m
CONFIG_DS1682=m
CONFIG_VMWARE_BALLOON=m
-CONFIG_BMP085=m
+CONFIG_BMP085=y
+CONFIG_BMP085_I2C=m
# CONFIG_PCH_PHUB is not set
CONFIG_USB_SWITCH_FSA9480=m
CONFIG_C2PORT=m
@@ -1629,6 +1653,7 @@ CONFIG_SENSORS_LIS3_I2C=m
# Altera FPGA firmware download module
#
CONFIG_ALTERA_STAPL=m
+CONFIG_INTEL_MEI=m
CONFIG_HAVE_IDE=y
# CONFIG_IDE is not set
@@ -1764,6 +1789,7 @@ CONFIG_SCSI_PAS16=m
CONFIG_SCSI_QLOGIC_FAS=m
CONFIG_SCSI_QLOGIC_1280=m
CONFIG_SCSI_QLA_FC=m
+CONFIG_TCM_QLA2XXX=m
CONFIG_SCSI_QLA_ISCSI=m
CONFIG_SCSI_LPFC=m
# CONFIG_SCSI_LPFC_DEBUG_FS is not set
@@ -1936,6 +1962,7 @@ CONFIG_TCM_PSCSI=m
CONFIG_LOOPBACK_TARGET=m
CONFIG_TCM_FC=m
CONFIG_ISCSI_TARGET=m
+CONFIG_SBP_TARGET=m
CONFIG_FUSION=y
CONFIG_FUSION_SPI=m
CONFIG_FUSION_FC=m
@@ -1972,10 +1999,12 @@ CONFIG_EQUALIZER=m
CONFIG_MII=m
CONFIG_IEEE802154_DRIVERS=m
CONFIG_IEEE802154_FAKEHARD=m
+CONFIG_IEEE802154_FAKELB=m
CONFIG_IFB=m
CONFIG_NET_TEAM=m
CONFIG_NET_TEAM_MODE_ROUNDROBIN=m
CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m
+CONFIG_NET_TEAM_MODE_LOADBALANCE=m
CONFIG_MACVLAN=m
CONFIG_MACVTAP=m
CONFIG_NETCONSOLE=m
@@ -2118,10 +2147,13 @@ CONFIG_E1000=m
CONFIG_E1000E=m
CONFIG_IGB=m
CONFIG_IGB_DCA=y
+CONFIG_IGB_PTP=y
CONFIG_IGBVF=m
CONFIG_IXGB=m
CONFIG_IXGBE=m
+CONFIG_IXGBE_HWMON=y
CONFIG_IXGBE_DCA=y
+CONFIG_IXGBE_PTP=y
CONFIG_IXGBEVF=m
CONFIG_NET_VENDOR_I825XX=y
CONFIG_ELPLUS=m
@@ -2211,8 +2243,8 @@ CONFIG_EPIC100=m
CONFIG_SMSC9420=m
CONFIG_NET_VENDOR_STMICRO=y
CONFIG_STMMAC_ETH=m
-CONFIG_STMMAC_PLATFORM=m
-CONFIG_STMMAC_PCI=m
+# CONFIG_STMMAC_PLATFORM is not set
+CONFIG_STMMAC_PCI=y
# CONFIG_STMMAC_DEBUG_FS is not set
# CONFIG_STMMAC_DA is not set
CONFIG_STMMAC_RING=y
@@ -2230,6 +2262,12 @@ CONFIG_NET_VENDOR_VIA=y
CONFIG_VIA_RHINE=m
# CONFIG_VIA_RHINE_MMIO is not set
CONFIG_VIA_VELOCITY=m
+CONFIG_NET_VENDOR_WIZNET=y
+CONFIG_WIZNET_W5100=m
+CONFIG_WIZNET_W5300=m
+# CONFIG_WIZNET_BUS_DIRECT is not set
+# CONFIG_WIZNET_BUS_INDIRECT is not set
+CONFIG_WIZNET_BUS_ANY=y
CONFIG_NET_VENDOR_XIRCOM=y
CONFIG_PCMCIA_XIRC2PS=m
# CONFIG_FDDI is not set
@@ -2256,6 +2294,8 @@ CONFIG_STE10XP=m
CONFIG_LSI_ET1011C_PHY=m
CONFIG_MICREL_PHY=m
# CONFIG_MDIO_BITBANG is not set
+CONFIG_MDIO_BUS_MUX=m
+CONFIG_MDIO_BUS_MUX_GPIO=m
CONFIG_PLIP=m
CONFIG_PPP=m
CONFIG_PPP_BSDCOMP=m
@@ -2274,7 +2314,6 @@ CONFIG_SLHC=m
# CONFIG_SLIP_COMPRESSED is not set
# CONFIG_SLIP_SMART is not set
# CONFIG_SLIP_MODE_SLIP6 is not set
-# CONFIG_TR is not set
#
# USB Network Adapters
@@ -2389,6 +2428,7 @@ CONFIG_BRCMUTIL=m
CONFIG_BRCMSMAC=m
CONFIG_BRCMFMAC=m
CONFIG_BRCMFMAC_SDIO=y
+# CONFIG_BRCMFMAC_SDIO_OOB is not set
CONFIG_BRCMFMAC_USB=y
# CONFIG_BRCMDBG is not set
CONFIG_HOSTAP=m
@@ -2470,17 +2510,19 @@ CONFIG_RTL8192CU=m
CONFIG_RTLWIFI=m
# CONFIG_RTLWIFI_DEBUG is not set
CONFIG_RTL8192C_COMMON=m
+CONFIG_WL_TI=y
CONFIG_WL1251=m
CONFIG_WL1251_SDIO=m
-CONFIG_WL12XX_MENU=m
CONFIG_WL12XX=m
-CONFIG_WL12XX_SDIO=m
+CONFIG_WLCORE=m
+CONFIG_WLCORE_SDIO=m
CONFIG_WL12XX_PLATFORM_DATA=y
CONFIG_ZD1211RW=m
# CONFIG_ZD1211RW_DEBUG is not set
CONFIG_MWIFIEX=m
CONFIG_MWIFIEX_SDIO=m
CONFIG_MWIFIEX_PCIE=m
+CONFIG_MWIFIEX_USB=m
#
# WiMAX Wireless Broadband devices
@@ -2647,6 +2689,7 @@ CONFIG_INPUT=y
CONFIG_INPUT_FF_MEMLESS=m
CONFIG_INPUT_POLLDEV=m
CONFIG_INPUT_SPARSEKMAP=m
+CONFIG_INPUT_MATRIXKMAP=m
#
# Userland interfaces
@@ -2675,6 +2718,7 @@ CONFIG_KEYBOARD_TCA6416=m
CONFIG_KEYBOARD_TCA8418=m
CONFIG_KEYBOARD_MATRIX=m
# CONFIG_KEYBOARD_LM8323 is not set
+CONFIG_KEYBOARD_LM8333=m
# CONFIG_KEYBOARD_MAX7359 is not set
CONFIG_KEYBOARD_MCS=m
CONFIG_KEYBOARD_MPR121=m
@@ -2762,6 +2806,7 @@ CONFIG_TOUCHSCREEN_ILI210X=m
CONFIG_TOUCHSCREEN_GUNZE=m
CONFIG_TOUCHSCREEN_ELO=m
CONFIG_TOUCHSCREEN_WACOM_W8001=m
+CONFIG_TOUCHSCREEN_WACOM_I2C=m
CONFIG_TOUCHSCREEN_MAX11801=m
CONFIG_TOUCHSCREEN_MCS5000=m
CONFIG_TOUCHSCREEN_MTOUCH=m
@@ -2778,6 +2823,7 @@ CONFIG_TOUCHSCREEN_WM9705=y
CONFIG_TOUCHSCREEN_WM9712=y
CONFIG_TOUCHSCREEN_WM9713=y
CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
+CONFIG_TOUCHSCREEN_MC13783=m
CONFIG_TOUCHSCREEN_USB_EGALAX=y
CONFIG_TOUCHSCREEN_USB_PANJIT=y
CONFIG_TOUCHSCREEN_USB_3M=y
@@ -2802,11 +2848,11 @@ CONFIG_TOUCHSCREEN_TSC2007=m
CONFIG_TOUCHSCREEN_ST1232=m
CONFIG_TOUCHSCREEN_TPS6507X=m
CONFIG_INPUT_MISC=y
-CONFIG_INPUT_AB8500_PONKEY=m
CONFIG_INPUT_AD714X=m
CONFIG_INPUT_AD714X_I2C=m
CONFIG_INPUT_BMA150=m
CONFIG_INPUT_PCSPKR=m
+CONFIG_INPUT_MC13783_PWRBUTTON=m
CONFIG_INPUT_MMA8450=m
CONFIG_INPUT_MPU3050=m
CONFIG_INPUT_APANEL=m
@@ -2953,7 +2999,6 @@ CONFIG_TCG_ATMEL=m
CONFIG_TCG_INFINEON=m
CONFIG_TELCLOCK=m
CONFIG_DEVPORT=y
-CONFIG_RAMOOPS=m
CONFIG_I2C=m
CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_COMPAT=y
@@ -3054,6 +3099,7 @@ CONFIG_DP83640_PHY=m
CONFIG_PTP_1588_CLOCK_PCH=m
CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
CONFIG_GPIOLIB=y
+CONFIG_OF_GPIO=y
# CONFIG_DEBUG_GPIO is not set
CONFIG_GPIO_SYSFS=y
@@ -3063,6 +3109,7 @@ CONFIG_GPIO_SYSFS=y
# CONFIG_GPIO_GENERIC_PLATFORM is not set
# CONFIG_GPIO_IT8761E is not set
CONFIG_GPIO_SCH=m
+CONFIG_GPIO_ICH=m
# CONFIG_GPIO_VX855 is not set
#
@@ -3217,6 +3264,7 @@ CONFIG_SENSORS_SCH5636=m
CONFIG_SENSORS_ADS1015=m
CONFIG_SENSORS_ADS7828=m
CONFIG_SENSORS_AMC6821=m
+CONFIG_SENSORS_INA2XX=m
CONFIG_SENSORS_THMC50=m
CONFIG_SENSORS_TMP102=m
CONFIG_SENSORS_TMP401=m
@@ -3236,6 +3284,7 @@ CONFIG_SENSORS_W83L786NG=m
CONFIG_SENSORS_W83627HF=m
CONFIG_SENSORS_W83627EHF=m
CONFIG_SENSORS_APPLESMC=m
+CONFIG_SENSORS_MC13783_ADC=m
#
# ACPI drivers
@@ -3266,6 +3315,7 @@ CONFIG_IB700_WDT=m
CONFIG_IBMASR=m
CONFIG_WAFER_WDT=m
CONFIG_I6300ESB_WDT=m
+CONFIG_IE6XX_WDT=m
CONFIG_ITCO_WDT=m
CONFIG_ITCO_VENDOR_SUPPORT=y
CONFIG_IT8712F_WDT=m
@@ -3344,21 +3394,23 @@ CONFIG_MFD_SM501=m
CONFIG_MFD_SM501_GPIO=y
CONFIG_HTC_PASIC3=m
CONFIG_UCB1400_CORE=m
+CONFIG_MFD_LM3533=m
# CONFIG_TPS6105X is not set
CONFIG_TPS65010=m
CONFIG_TPS6507X=m
CONFIG_MFD_TPS65217=m
# CONFIG_MFD_TMIO is not set
-CONFIG_MFD_WM8400=m
CONFIG_MFD_PCF50633=m
CONFIG_PCF50633_ADC=m
CONFIG_PCF50633_GPIO=m
+CONFIG_MFD_MC13783=m
+CONFIG_MFD_MC13XXX=m
+CONFIG_MFD_MC13XXX_I2C=m
CONFIG_ABX500_CORE=y
-CONFIG_AB8500_CORE=y
-# CONFIG_AB8500_DEBUG is not set
CONFIG_MFD_CS5535=m
# CONFIG_MFD_TIMBERDALE is not set
CONFIG_LPC_SCH=m
+CONFIG_LPC_ICH=m
CONFIG_MFD_RDC321X=m
# CONFIG_MFD_JANZ_CMODIO is not set
CONFIG_MFD_VX855=m
@@ -3430,7 +3482,9 @@ CONFIG_MEDIA_TUNER_MXL5007T=m
CONFIG_MEDIA_TUNER_MC44S803=m
CONFIG_MEDIA_TUNER_MAX2165=m
CONFIG_MEDIA_TUNER_TDA18218=m
+CONFIG_MEDIA_TUNER_FC0011=m
CONFIG_MEDIA_TUNER_TDA18212=m
+CONFIG_MEDIA_TUNER_TUA9001=m
CONFIG_VIDEO_V4L2=m
CONFIG_VIDEOBUF_GEN=m
CONFIG_VIDEOBUF_DMA_SG=m
@@ -3549,6 +3603,7 @@ CONFIG_VIDEO_THS7303=m
CONFIG_VIDEO_M52790=m
CONFIG_VIDEO_VIVI=m
CONFIG_V4L_USB_DRIVERS=y
+CONFIG_VIDEO_AU0828=m
CONFIG_USB_VIDEO_CLASS=m
CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
CONFIG_USB_GSPCA=m
@@ -3606,7 +3661,7 @@ CONFIG_VIDEO_HDPVR=m
CONFIG_VIDEO_EM28XX=m
CONFIG_VIDEO_EM28XX_ALSA=m
CONFIG_VIDEO_EM28XX_DVB=m
-CONFIG_VIDEO_EM28XX_RC=y
+CONFIG_VIDEO_EM28XX_RC=m
CONFIG_VIDEO_TLG2300=m
CONFIG_VIDEO_CX231XX=m
CONFIG_VIDEO_CX231XX_RC=y
@@ -3616,7 +3671,6 @@ CONFIG_VIDEO_TM6000=m
CONFIG_VIDEO_TM6000_ALSA=m
CONFIG_VIDEO_TM6000_DVB=m
CONFIG_VIDEO_USBVISION=m
-CONFIG_USB_ET61X251=m
CONFIG_USB_SN9C102=m
CONFIG_USB_PWC=m
# CONFIG_USB_PWC_DEBUG is not set
@@ -3626,7 +3680,6 @@ CONFIG_USB_ZR364XX=m
CONFIG_USB_STKWEBCAM=m
CONFIG_USB_S2255=m
CONFIG_V4L_PCI_DRIVERS=y
-CONFIG_VIDEO_AU0828=m
CONFIG_VIDEO_BT848=m
CONFIG_VIDEO_BT848_DVB=y
CONFIG_VIDEO_CX18=m
@@ -3741,6 +3794,7 @@ CONFIG_DVB_USB_TECHNISAT_USB2=m
CONFIG_DVB_USB_IT913X=m
CONFIG_DVB_USB_MXL111SF=m
CONFIG_DVB_USB_RTL28XXU=m
+CONFIG_DVB_USB_AF9035=m
CONFIG_DVB_TTUSB_BUDGET=m
CONFIG_DVB_TTUSB_DEC=m
CONFIG_SMS_SIANO_MDTV=m
@@ -3890,8 +3944,11 @@ CONFIG_DVB_OR51132=m
CONFIG_DVB_BCM3510=m
CONFIG_DVB_LGDT330X=m
CONFIG_DVB_LGDT3305=m
+CONFIG_DVB_LG2160=m
CONFIG_DVB_S5H1409=m
CONFIG_DVB_AU8522=m
+CONFIG_DVB_AU8522_DTV=m
+CONFIG_DVB_AU8522_V4L=m
CONFIG_DVB_S5H1411=m
#
@@ -3923,6 +3980,7 @@ CONFIG_DVB_TDA665x=m
CONFIG_DVB_IX2505V=m
CONFIG_DVB_IT913X_FE=m
CONFIG_DVB_M88RS2000=m
+CONFIG_DVB_AF9033=m
#
# Tools to develop new frontends
@@ -3975,6 +4033,9 @@ CONFIG_DRM_GMA500=m
CONFIG_DRM_GMA600=y
CONFIG_DRM_GMA3600=y
CONFIG_DRM_UDL=m
+CONFIG_DRM_AST=m
+CONFIG_DRM_MGAG200=m
+CONFIG_DRM_CIRRUS_QEMU=m
# CONFIG_STUB_POULSBO is not set
CONFIG_VGASTATE=m
CONFIG_VIDEO_OUTPUT_CONTROL=m
@@ -4048,12 +4109,14 @@ CONFIG_FB_VIRTUAL=m
# CONFIG_FB_METRONOME is not set
# CONFIG_FB_MB862XX is not set
# CONFIG_FB_BROADSHEET is not set
+# CONFIG_FB_AUO_K190X is not set
# CONFIG_EXYNOS_VIDEO is not set
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_LCD_CLASS_DEVICE=m
CONFIG_LCD_PLATFORM=m
CONFIG_BACKLIGHT_CLASS_DEVICE=y
# CONFIG_BACKLIGHT_GENERIC is not set
+CONFIG_BACKLIGHT_LM3533=m
CONFIG_BACKLIGHT_PROGEAR=m
CONFIG_BACKLIGHT_APPLE=m
# CONFIG_BACKLIGHT_SAHARA is not set
@@ -4084,6 +4147,7 @@ CONFIG_FONT_8x16=y
# CONFIG_FONT_SUN8x16 is not set
# CONFIG_FONT_SUN12x22 is not set
# CONFIG_FONT_10x18 is not set
+CONFIG_FONT_AUTOSELECT=y
# CONFIG_LOGO is not set
CONFIG_SOUND=m
CONFIG_SOUND_OSS_CORE=y
@@ -4229,7 +4293,6 @@ CONFIG_SND_HDA_INPUT_BEEP_MODE=1
CONFIG_SND_HDA_INPUT_JACK=y
CONFIG_SND_HDA_PATCH_LOADER=y
CONFIG_SND_HDA_CODEC_REALTEK=y
-CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS=y
CONFIG_SND_HDA_CODEC_ANALOG=y
CONFIG_SND_HDA_CODEC_SIGMATEL=y
CONFIG_SND_HDA_CODEC_VIA=y
@@ -4287,16 +4350,13 @@ CONFIG_SND_PDAUDIOCF=m
# CONFIG_SND_SOC is not set
# CONFIG_SOUND_PRIME is not set
CONFIG_AC97_BUS=m
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=m
-CONFIG_HIDRAW=y
#
-# USB Input Devices
+# HID support
#
-CONFIG_USB_HID=m
-CONFIG_HID_PID=y
-CONFIG_USB_HIDDEV=y
+CONFIG_HID=m
+CONFIG_HIDRAW=y
+CONFIG_HID_GENERIC=m
#
# Special HID drivers
@@ -4305,6 +4365,7 @@ CONFIG_HID_A4TECH=m
CONFIG_HID_ACRUX=m
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_APPLE=m
+CONFIG_HID_AUREAL=m
CONFIG_HID_BELKIN=m
CONFIG_HID_CHERRY=m
CONFIG_HID_CHICONY=m
@@ -4362,12 +4423,18 @@ CONFIG_HID_TOPSEED=m
CONFIG_HID_THRUSTMASTER=m
CONFIG_THRUSTMASTER_FF=y
CONFIG_HID_WACOM=m
-CONFIG_HID_WACOM_POWER_SUPPLY=y
CONFIG_HID_WIIMOTE=m
CONFIG_HID_WIIMOTE_EXT=y
CONFIG_HID_ZEROPLUS=m
CONFIG_ZEROPLUS_FF=y
CONFIG_HID_ZYDACRON=m
+
+#
+# USB HID support
+#
+CONFIG_USB_HID=m
+CONFIG_HID_PID=y
+CONFIG_USB_HIDDEV=y
CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB_ARCH_HAS_EHCI=y
CONFIG_USB_ARCH_HAS_XHCI=y
@@ -4381,8 +4448,6 @@ CONFIG_USB=m
#
# Miscellaneous USB options
#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_DEVICE_CLASS is not set
CONFIG_USB_DYNAMIC_MINORS=y
CONFIG_USB_SUSPEND=y
# CONFIG_USB_OTG is not set
@@ -4421,9 +4486,15 @@ CONFIG_USB_R8A66597_HCD=m
CONFIG_USB_RENESAS_USBHS_HCD=m
CONFIG_USB_WHCI_HCD=m
CONFIG_USB_HWA_HCD=m
+# CONFIG_USB_HCD_BCMA is not set
+# CONFIG_USB_HCD_SSB is not set
CONFIG_USB_MUSB_HDRC=m
CONFIG_USB_MUSB_TUSB6010=m
CONFIG_MUSB_PIO_ONLY=y
+CONFIG_USB_CHIPIDEA=m
+CONFIG_USB_CHIPIDEA_UDC=y
+CONFIG_USB_CHIPIDEA_HOST=y
+# CONFIG_USB_CHIPIDEA_DEBUG is not set
CONFIG_USB_RENESAS_USBHS=m
#
@@ -4537,6 +4608,7 @@ CONFIG_USB_SERIAL_OPTICON=m
CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m
CONFIG_USB_SERIAL_ZIO=m
CONFIG_USB_SERIAL_SSU100=m
+CONFIG_USB_SERIAL_QT2=m
# CONFIG_USB_SERIAL_DEBUG is not set
#
@@ -4563,6 +4635,11 @@ CONFIG_USB_IOWARRIOR=m
CONFIG_USB_TEST=m
CONFIG_USB_ISIGHTFW=m
CONFIG_USB_YUREX=m
+
+#
+# USB Physical Layer drivers
+#
+CONFIG_USB_ISP1301=m
CONFIG_USB_ATM=m
CONFIG_USB_SPEEDTOUCH=m
CONFIG_USB_CXACRU=m
@@ -4574,6 +4651,10 @@ CONFIG_USB_GADGET=m
# CONFIG_USB_GADGET_DEBUG_FS is not set
CONFIG_USB_GADGET_VBUS_DRAW=2
CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
+
+#
+# USB Peripheral Controller
+#
CONFIG_USB_FUSB300=m
CONFIG_USB_R8A66597=m
CONFIG_USB_RENESAS_USBHS_UDC=m
@@ -4581,12 +4662,10 @@ CONFIG_USB_MV_UDC=m
CONFIG_USB_GADGET_MUSB_HDRC=m
CONFIG_USB_M66592=m
CONFIG_USB_AMD5536UDC=m
-CONFIG_USB_CI13XXX_PCI=m
CONFIG_USB_NET2272=m
CONFIG_USB_NET2272_DMA=y
CONFIG_USB_NET2280=m
CONFIG_USB_GOKU=m
-CONFIG_USB_LANGWELL=m
CONFIG_USB_EG20T=m
CONFIG_USB_DUMMY_HCD=m
CONFIG_USB_GADGET_DUALSPEED=y
@@ -4606,6 +4685,7 @@ CONFIG_USB_FUNCTIONFS_GENERIC=y
CONFIG_USB_FILE_STORAGE=m
# CONFIG_USB_FILE_STORAGE_TEST is not set
# CONFIG_USB_MASS_STORAGE is not set
+CONFIG_USB_GADGET_TARGET=m
CONFIG_USB_G_SERIAL=m
CONFIG_USB_MIDI_GADGET=m
CONFIG_USB_G_PRINTER=m
@@ -4625,7 +4705,6 @@ CONFIG_USB_G_WEBCAM=m
CONFIG_USB_OTG_UTILS=y
# CONFIG_USB_GPIO_VBUS is not set
CONFIG_NOP_USB_XCEIV=m
-# CONFIG_AB8500_USB is not set
CONFIG_UWB=m
CONFIG_UWB_HWA=m
CONFIG_UWB_WHCI=m
@@ -4680,6 +4759,7 @@ CONFIG_LEDS_CLASS=y
# LED drivers
#
CONFIG_LEDS_LM3530=m
+CONFIG_LEDS_LM3533=m
CONFIG_LEDS_PCA9532=m
# CONFIG_LEDS_PCA9532_GPIO is not set
# CONFIG_LEDS_GPIO is not set
@@ -4693,6 +4773,7 @@ CONFIG_LEDS_BD2802=m
CONFIG_LEDS_INTEL_SS4200=m
CONFIG_LEDS_LT3593=m
CONFIG_LEDS_DELL_NETBOOKS=m
+CONFIG_LEDS_MC13783=m
CONFIG_LEDS_TCA6507=m
CONFIG_LEDS_OT200=m
CONFIG_LEDS_TRIGGERS=y
@@ -4709,6 +4790,7 @@ CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
#
# iptables trigger is under Netfilter config (LED target)
#
+CONFIG_LEDS_TRIGGER_TRANSIENT=m
CONFIG_ACCESSIBILITY=y
CONFIG_A11Y_BRAILLE_CONSOLE=y
# CONFIG_INFINIBAND is not set
@@ -4796,11 +4878,11 @@ CONFIG_RTC_DRV_BQ4802=m
CONFIG_RTC_DRV_RP5C01=m
CONFIG_RTC_DRV_V3020=m
CONFIG_RTC_DRV_PCF50633=m
-CONFIG_RTC_DRV_AB8500=m
#
# on-CPU RTC drivers
#
+CONFIG_RTC_DRV_MC13XXX=m
CONFIG_DMADEVICES=y
# CONFIG_DMADEVICES_DEBUG is not set
@@ -4843,6 +4925,7 @@ CONFIG_VIRTIO_RING=y
CONFIG_VIRTIO_PCI=m
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_MMIO=m
+CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
#
# Microsoft Hyper-V guest support
@@ -4861,6 +4944,8 @@ CONFIG_PRISM2_USB=m
CONFIG_ECHO=m
CONFIG_COMEDI=m
# CONFIG_COMEDI_DEBUG is not set
+CONFIG_COMEDI_DEFAULT_BUF_SIZE_KB=2048
+CONFIG_COMEDI_DEFAULT_BUF_MAXSIZE_KB=20480
CONFIG_COMEDI_MISC_DRIVERS=m
CONFIG_COMEDI_KCOMEDILIB=m
CONFIG_COMEDI_BOND=m
@@ -4880,9 +4965,13 @@ CONFIG_COMEDI_PCL816=m
CONFIG_COMEDI_PCL818=m
CONFIG_COMEDI_PCM3724=m
CONFIG_COMEDI_PCM3730=m
+CONFIG_COMEDI_AMPLC_DIO200_ISA=m
+CONFIG_COMEDI_AMPLC_PC236_ISA=m
+CONFIG_COMEDI_AMPLC_PC263_ISA=m
CONFIG_COMEDI_RTI800=m
CONFIG_COMEDI_RTI802=m
CONFIG_COMEDI_DAS16M1=m
+CONFIG_COMEDI_DAS08_ISA=m
CONFIG_COMEDI_DAS16=m
CONFIG_COMEDI_DAS800=m
CONFIG_COMEDI_DAS1800=m
@@ -4934,12 +5023,13 @@ CONFIG_COMEDI_ADL_PCI9118=m
CONFIG_COMEDI_ADV_PCI1710=m
CONFIG_COMEDI_ADV_PCI1723=m
CONFIG_COMEDI_ADV_PCI_DIO=m
-CONFIG_COMEDI_AMPLC_DIO200=m
-CONFIG_COMEDI_AMPLC_PC236=m
-CONFIG_COMEDI_AMPLC_PC263=m
+CONFIG_COMEDI_AMPLC_DIO200_PCI=m
+CONFIG_COMEDI_AMPLC_PC236_PCI=m
+CONFIG_COMEDI_AMPLC_PC263_PCI=m
CONFIG_COMEDI_AMPLC_PCI224=m
CONFIG_COMEDI_AMPLC_PCI230=m
CONFIG_COMEDI_CONTEC_PCI_DIO=m
+CONFIG_COMEDI_DAS08_PCI=m
CONFIG_COMEDI_DT3000=m
CONFIG_COMEDI_DYNA_PCI10XX=m
CONFIG_COMEDI_UNIOXX5=m
@@ -4986,8 +5076,11 @@ CONFIG_COMEDI_MITE=m
CONFIG_COMEDI_NI_TIO=m
CONFIG_COMEDI_NI_LABPC=m
CONFIG_COMEDI_8255=m
-CONFIG_COMEDI_DAS08=m
CONFIG_COMEDI_FC=m
+CONFIG_COMEDI_AMPLC_DIO200=m
+CONFIG_COMEDI_AMPLC_PC236=m
+CONFIG_COMEDI_AMPLC_PC263=m
+CONFIG_COMEDI_DAS08=m
# CONFIG_FB_OLPC_DCON is not set
CONFIG_ASUS_OLED=m
# CONFIG_PANEL is not set
@@ -5013,12 +5106,9 @@ CONFIG_LINE6_USB=m
# CONFIG_LINE6_USB_RAW is not set
# CONFIG_LINE6_USB_IMPULSE_RESPONSE is not set
CONFIG_USB_SERIAL_QUATECH2=m
-CONFIG_USB_SERIAL_QUATECH_USB2=m
CONFIG_VT6655=m
CONFIG_VT6656=m
-# CONFIG_VME_BUS is not set
CONFIG_DX_SEP=m
-# CONFIG_IIO is not set
CONFIG_ZRAM=m
# CONFIG_ZRAM_DEBUG is not set
CONFIG_ZCACHE=y
@@ -5056,7 +5146,6 @@ CONFIG_SPEAKUP_SYNTH_TXPRT=m
CONFIG_SPEAKUP_SYNTH_DUMMY=m
CONFIG_TOUCHSCREEN_CLEARPAD_TM1217=m
CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4=m
-CONFIG_INTEL_MEI=m
CONFIG_STAGING_MEDIA=y
CONFIG_DVB_AS102=m
CONFIG_DVB_CXD2099=m
@@ -5094,6 +5183,16 @@ CONFIG_LIRC_ZILOG=m
# CONFIG_ANDROID is not set
# CONFIG_PHONE is not set
CONFIG_USB_WPAN_HCD=m
+CONFIG_IPACK_BUS=m
+CONFIG_BOARD_TPCI200=m
+CONFIG_SERIAL_IPOCTAL=m
+CONFIG_WIMAX_GDM72XX=m
+CONFIG_WIMAX_GDM72XX_QOS=y
+CONFIG_WIMAX_GDM72XX_K_MODE=y
+CONFIG_WIMAX_GDM72XX_WIMAX2=y
+CONFIG_WIMAX_GDM72XX_USB=y
+# CONFIG_WIMAX_GDM72XX_SDIO is not set
+CONFIG_WIMAX_GDM72XX_USB_PM=y
CONFIG_X86_PLATFORM_DEVICES=y
CONFIG_ACER_WMI=m
CONFIG_ACERHDF=m
@@ -5166,6 +5265,15 @@ CONFIG_INTEL_IOMMU_FLOPPY_WA=y
#
CONFIG_VIRT_DRIVERS=y
# CONFIG_PM_DEVFREQ is not set
+CONFIG_EXTCON=m
+
+#
+# Extcon Device Drivers
+#
+CONFIG_EXTCON_GPIO=m
+CONFIG_MEMORY=y
+# CONFIG_IIO is not set
+# CONFIG_VME_BUS is not set
#
# Firmware Drivers
@@ -5315,11 +5423,9 @@ CONFIG_JFFS2_ZLIB=y
CONFIG_JFFS2_RTIME=y
# CONFIG_JFFS2_RUBIN is not set
CONFIG_UBIFS_FS=m
-CONFIG_UBIFS_FS_XATTR=y
# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
CONFIG_UBIFS_FS_LZO=y
CONFIG_UBIFS_FS_ZLIB=y
-# CONFIG_UBIFS_FS_DEBUG is not set
CONFIG_LOGFS=m
CONFIG_CRAMFS=m
CONFIG_SQUASHFS=m
@@ -5338,6 +5444,7 @@ CONFIG_OMFS_FS=m
# CONFIG_QNX6FS_FS is not set
# CONFIG_ROMFS_FS is not set
CONFIG_PSTORE=y
+CONFIG_PSTORE_RAM=m
# CONFIG_SYSV_FS is not set
CONFIG_UFS_FS=m
# CONFIG_UFS_FS_WRITE is not set
@@ -5347,6 +5454,7 @@ CONFIG_EXOFS_FS=m
CONFIG_ORE=m
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NFS_FS=m
+CONFIG_NFS_V2=y
CONFIG_NFS_V3=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFS_V4=y
@@ -5435,6 +5543,17 @@ CONFIG_NLS_ISO8859_14=m
CONFIG_NLS_ISO8859_15=m
CONFIG_NLS_KOI8_R=m
CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_MAC_ROMAN=m
+CONFIG_NLS_MAC_CELTIC=m
+CONFIG_NLS_MAC_CENTEURO=m
+CONFIG_NLS_MAC_CROATIAN=m
+CONFIG_NLS_MAC_CYRILLIC=m
+CONFIG_NLS_MAC_GAELIC=m
+CONFIG_NLS_MAC_GREEK=m
+CONFIG_NLS_MAC_ICELAND=m
+CONFIG_NLS_MAC_INUIT=m
+CONFIG_NLS_MAC_ROMANIAN=m
+CONFIG_NLS_MAC_TURKISH=m
CONFIG_NLS_UTF8=m
CONFIG_DLM=m
# CONFIG_DLM_DEBUG is not set
@@ -5450,6 +5569,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y
CONFIG_FRAME_WARN=1024
CONFIG_MAGIC_SYSRQ=y
CONFIG_STRIP_ASM_SYMS=y
+# CONFIG_READABLE_ASM is not set
CONFIG_UNUSED_SYMBOLS=y
CONFIG_DEBUG_FS=y
# CONFIG_HEADERS_CHECK is not set
@@ -5462,6 +5582,8 @@ CONFIG_HARDLOCKUP_DETECTOR=y
CONFIG_BOOTPARAM_HARDLOCKUP_PANIC_VALUE=0
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+# CONFIG_PANIC_ON_OOPS is not set
+CONFIG_PANIC_ON_OOPS_VALUE=0
CONFIG_DETECT_HUNG_TASK=y
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
@@ -5507,6 +5629,7 @@ CONFIG_RCU_CPU_STALL_TIMEOUT=60
# CONFIG_RCU_CPU_STALL_VERBOSE is not set
# CONFIG_RCU_CPU_STALL_INFO is not set
# CONFIG_RCU_TRACE is not set
+# CONFIG_KPROBES_SANITY_TEST is not set
# CONFIG_BACKTRACE_SELF_TEST is not set
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
@@ -5518,7 +5641,6 @@ CONFIG_CPU_NOTIFIER_ERROR_INJECT=m
# CONFIG_DEBUG_PAGEALLOC is not set
CONFIG_USER_STACKTRACE_SUPPORT=y
CONFIG_NOP_TRACER=y
-CONFIG_HAVE_FTRACE_NMI_ENTER=y
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y
@@ -5529,7 +5651,6 @@ CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
CONFIG_HAVE_C_RECORDMCOUNT=y
CONFIG_TRACER_MAX_TRACE=y
CONFIG_RING_BUFFER=y
-CONFIG_FTRACE_NMI_ENTER=y
CONFIG_EVENT_TRACING=y
CONFIG_EVENT_POWER_TRACING_DEPRECATED=y
CONFIG_CONTEXT_SWITCH_TRACER=y
@@ -5549,6 +5670,9 @@ CONFIG_BRANCH_PROFILE_NONE=y
# CONFIG_PROFILE_ALL_BRANCHES is not set
CONFIG_STACK_TRACER=y
CONFIG_BLK_DEV_IO_TRACE=y
+CONFIG_KPROBE_EVENT=y
+CONFIG_UPROBE_EVENT=y
+CONFIG_PROBE_EVENTS=y
CONFIG_DYNAMIC_FTRACE=y
CONFIG_FUNCTION_PROFILER=y
CONFIG_FTRACE_MCOUNT_RECORD=y
@@ -5580,6 +5704,7 @@ CONFIG_DEBUG_RODATA=y
CONFIG_DOUBLEFAULT=y
# CONFIG_IOMMU_STRESS is not set
CONFIG_HAVE_MMIOTRACE_SUPPORT=y
+# CONFIG_X86_DECODER_SELFTEST is not set
CONFIG_IO_DELAY_TYPE_0X80=0
CONFIG_IO_DELAY_TYPE_0XED=1
CONFIG_IO_DELAY_TYPE_UDELAY=2
@@ -5759,6 +5884,7 @@ CONFIG_HAVE_KVM_EVENTFD=y
CONFIG_KVM_APIC_ARCHITECTURE=y
CONFIG_KVM_MMIO=y
CONFIG_KVM_ASYNC_PF=y
+CONFIG_HAVE_KVM_MSI=y
CONFIG_VIRTUALIZATION=y
CONFIG_KVM=m
CONFIG_KVM_INTEL=m
@@ -5773,6 +5899,8 @@ CONFIG_BINARY_PRINTF=y
#
CONFIG_RAID6_PQ=m
CONFIG_BITREVERSE=y
+CONFIG_GENERIC_STRNCPY_FROM_USER=y
+CONFIG_GENERIC_STRNLEN_USER=y
CONFIG_GENERIC_FIND_FIRST_BIT=y
CONFIG_GENERIC_PCI_IOMAP=y
CONFIG_GENERIC_IOMAP=y
@@ -5811,6 +5939,8 @@ CONFIG_DECOMPRESS_XZ=y
CONFIG_DECOMPRESS_LZO=y
CONFIG_GENERIC_ALLOCATOR=y
CONFIG_REED_SOLOMON=m
+CONFIG_REED_SOLOMON_ENC8=y
+CONFIG_REED_SOLOMON_DEC8=y
CONFIG_REED_SOLOMON_DEC16=y
CONFIG_BCH=m
CONFIG_BCH_CONST_PARAMS=y
@@ -5829,3 +5959,4 @@ CONFIG_NLATTR=y
CONFIG_LRU_CACHE=m
CONFIG_AVERAGE=y
CONFIG_CORDIC=m
+CONFIG_DDR=y
diff --git a/libre/linux-libre/config.x86_64 b/libre/linux-libre/config.x86_64
index 9f3698ac2..31da569ad 100644
--- a/libre/linux-libre/config.x86_64
+++ b/libre/linux-libre/config.x86_64
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/x86_64 3.4.1-1 Kernel Configuration
+# Linux/x86_64 3.5.0-2 Kernel Configuration
#
CONFIG_64BIT=y
# CONFIG_X86_32 is not set
@@ -9,11 +9,6 @@ CONFIG_X86=y
CONFIG_INSTRUCTION_DECODER=y
CONFIG_OUTPUT_FORMAT="elf64-x86-64"
CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig"
-CONFIG_GENERIC_CMOS_UPDATE=y
-CONFIG_CLOCKSOURCE_WATCHDOG=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_ARCH_CLOCKSOURCE_DATA=y
-CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
@@ -28,9 +23,7 @@ CONFIG_GENERIC_GPIO=y
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_GENERIC_TIME_VSYSCALL=y
CONFIG_ARCH_HAS_CPU_RELAX=y
CONFIG_ARCH_HAS_DEFAULT_IDLE=y
CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
@@ -48,11 +41,12 @@ CONFIG_HAVE_INTEL_TXT=y
CONFIG_X86_64_SMP=y
CONFIG_X86_HT=y
CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-rdi -fcall-saved-rsi -fcall-saved-rdx -fcall-saved-rcx -fcall-saved-r8 -fcall-saved-r9 -fcall-saved-r10 -fcall-saved-r11"
-# CONFIG_KTIME_SCALAR is not set
CONFIG_ARCH_CPU_PROBE_RELEASE=y
+CONFIG_ARCH_SUPPORTS_UPROBES=y
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
CONFIG_HAVE_IRQ_WORK=y
CONFIG_IRQ_WORK=y
+CONFIG_BUILDTIME_EXTABLE_SORT=y
#
# General setup
@@ -99,8 +93,25 @@ CONFIG_GENERIC_HARDIRQS=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_GENERIC_IRQ_SHOW=y
CONFIG_GENERIC_PENDING_IRQ=y
+CONFIG_IRQ_DOMAIN=y
+# CONFIG_IRQ_DOMAIN_DEBUG is not set
CONFIG_IRQ_FORCED_THREADING=y
CONFIG_SPARSE_IRQ=y
+CONFIG_CLOCKSOURCE_WATCHDOG=y
+CONFIG_ARCH_CLOCKSOURCE_DATA=y
+CONFIG_GENERIC_TIME_VSYSCALL=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
+CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y
+CONFIG_GENERIC_CMOS_UPDATE=y
+
+#
+# Timers subsystem
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
#
# RCU Subsystem
@@ -108,6 +119,7 @@ CONFIG_SPARSE_IRQ=y
CONFIG_TREE_PREEMPT_RCU=y
CONFIG_PREEMPT_RCU=y
CONFIG_RCU_FANOUT=64
+CONFIG_RCU_FANOUT_LEAF=16
# CONFIG_RCU_FANOUT_EXACT is not set
CONFIG_RCU_FAST_NO_HZ=y
# CONFIG_TREE_RCU_TRACE is not set
@@ -139,7 +151,6 @@ CONFIG_BLK_CGROUP=y
CONFIG_NAMESPACES=y
CONFIG_UTS_NS=y
CONFIG_IPC_NS=y
-CONFIG_USER_NS=y
CONFIG_PID_NS=y
CONFIG_NET_NS=y
CONFIG_SCHED_AUTOGROUP=y
@@ -182,7 +193,6 @@ CONFIG_HAVE_PERF_EVENTS=y
# Kernel Performance Events And Counters
#
CONFIG_PERF_EVENTS=y
-CONFIG_PERF_COUNTERS=y
# CONFIG_DEBUG_PERF_USE_VMALLOC is not set
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_PCI_QUIRKS=y
@@ -196,9 +206,11 @@ CONFIG_OPROFILE=m
# CONFIG_OPROFILE_EVENT_MULTIPLEX is not set
CONFIG_HAVE_OPROFILE=y
CONFIG_OPROFILE_NMI_TIMER=y
-# CONFIG_KPROBES is not set
+CONFIG_KPROBES=y
CONFIG_JUMP_LABEL=y
+CONFIG_UPROBES=y
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
+CONFIG_KRETPROBES=y
CONFIG_USER_RETURN_NOTIFIER=y
CONFIG_HAVE_IOREMAP_PROT=y
CONFIG_HAVE_KPROBES=y
@@ -207,6 +219,7 @@ CONFIG_HAVE_OPTPROBES=y
CONFIG_HAVE_ARCH_TRACEHOOK=y
CONFIG_HAVE_DMA_ATTRS=y
CONFIG_USE_GENERIC_SMP_HELPERS=y
+CONFIG_GENERIC_SMP_IDLE_THREAD=y
CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
CONFIG_HAVE_DMA_API_DEBUG=y
CONFIG_HAVE_HW_BREAKPOINT=y
@@ -219,6 +232,8 @@ CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y
CONFIG_HAVE_CMPXCHG_LOCAL=y
CONFIG_HAVE_CMPXCHG_DOUBLE=y
CONFIG_ARCH_WANT_OLD_COMPAT_IPC=y
+CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
+CONFIG_SECCOMP_FILTER=y
#
# GCOV-based kernel profiling
@@ -313,11 +328,6 @@ CONFIG_FREEZER=y
# Processor type and features
#
CONFIG_ZONE_DMA=y
-CONFIG_TICK_ONESHOT=y
-CONFIG_NO_HZ=y
-CONFIG_HIGH_RES_TIMERS=y
-CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y
CONFIG_SMP=y
CONFIG_X86_X2APIC=y
CONFIG_X86_MPPARSE=y
@@ -325,7 +335,7 @@ CONFIG_X86_MPPARSE=y
CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y
CONFIG_SCHED_OMIT_FRAME_POINTER=y
CONFIG_PARAVIRT_GUEST=y
-# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set
+CONFIG_PARAVIRT_TIME_ACCOUNTING=y
CONFIG_XEN=y
CONFIG_XEN_DOM0=y
CONFIG_XEN_PRIVILEGED_GUEST=y
@@ -439,7 +449,9 @@ CONFIG_HWPOISON_INJECT=m
CONFIG_TRANSPARENT_HUGEPAGE=y
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
+CONFIG_CROSS_MEMORY_ATTACH=y
CONFIG_CLEANCACHE=y
+CONFIG_FRONTSWAP=y
CONFIG_X86_CHECK_BIOS_CORRUPTION=y
CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
CONFIG_X86_RESERVE_LOW=64
@@ -484,6 +496,10 @@ CONFIG_HIBERNATION=y
CONFIG_PM_STD_PARTITION=""
CONFIG_PM_SLEEP=y
CONFIG_PM_SLEEP_SMP=y
+CONFIG_PM_AUTOSLEEP=y
+CONFIG_PM_WAKELOCKS=y
+CONFIG_PM_WAKELOCKS_LIMIT=100
+CONFIG_PM_WAKELOCKS_GC=y
CONFIG_PM_RUNTIME=y
CONFIG_PM=y
CONFIG_PM_DEBUG=y
@@ -633,6 +649,7 @@ CONFIG_RAPIDIO=y
CONFIG_RAPIDIO_TSI721=y
CONFIG_RAPIDIO_DISC_TIMEOUT=30
# CONFIG_RAPIDIO_ENABLE_RX_TX_PORTS is not set
+CONFIG_RAPIDIO_DMA_ENGINE=y
CONFIG_RAPIDIO_DEBUG=y
CONFIG_RAPIDIO_TSI57X=y
CONFIG_RAPIDIO_CPS_XX=y
@@ -657,6 +674,7 @@ CONFIG_COMPAT_FOR_U64_ALIGNMENT=y
CONFIG_SYSVIPC_COMPAT=y
CONFIG_KEYS_COMPAT=y
CONFIG_HAVE_TEXT_POKE_SMP=y
+CONFIG_X86_DEV_DMA_OPS=y
CONFIG_NET=y
CONFIG_COMPAT_NETLINK_MESSAGES=y
@@ -667,6 +685,7 @@ CONFIG_PACKET=y
CONFIG_UNIX=y
CONFIG_UNIX_DIAG=m
CONFIG_XFRM=y
+CONFIG_XFRM_ALGO=m
CONFIG_XFRM_USER=m
# CONFIG_XFRM_SUB_POLICY is not set
# CONFIG_XFRM_MIGRATE is not set
@@ -805,6 +824,7 @@ CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
CONFIG_NETFILTER_XT_TARGET_CT=m
CONFIG_NETFILTER_XT_TARGET_DSCP=m
CONFIG_NETFILTER_XT_TARGET_HL=m
+CONFIG_NETFILTER_XT_TARGET_HMARK=m
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
CONFIG_NETFILTER_XT_TARGET_LED=m
CONFIG_NETFILTER_XT_TARGET_LOG=m
@@ -965,7 +985,6 @@ CONFIG_IP_NF_ARP_MANGLE=m
#
CONFIG_NF_DEFRAG_IPV6=m
CONFIG_NF_CONNTRACK_IPV6=m
-CONFIG_IP6_NF_QUEUE=m
CONFIG_IP6_NF_IPTABLES=m
CONFIG_IP6_NF_MATCH_AH=m
CONFIG_IP6_NF_MATCH_EUI64=m
@@ -1019,7 +1038,9 @@ CONFIG_IP_DCCP_TFRC_LIB=y
# DCCP Kernel Hacking
#
# CONFIG_IP_DCCP_DEBUG is not set
+CONFIG_NET_DCCPPROBE=m
CONFIG_IP_SCTP=m
+CONFIG_NET_SCTPPROBE=m
# CONFIG_SCTP_DBG_MSG is not set
# CONFIG_SCTP_DBG_OBJCNT is not set
# CONFIG_SCTP_HMAC_NONE is not set
@@ -1057,11 +1078,11 @@ CONFIG_IPDDP_ENCAP=y
CONFIG_IPDDP_DECAP=y
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
CONFIG_PHONET=m
CONFIG_IEEE802154=m
CONFIG_IEEE802154_6LOWPAN=m
+CONFIG_MAC802154=m
CONFIG_NET_SCHED=y
#
@@ -1085,6 +1106,8 @@ CONFIG_NET_SCH_DRR=m
CONFIG_NET_SCH_MQPRIO=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_QFQ=m
+CONFIG_NET_SCH_CODEL=m
+CONFIG_NET_SCH_FQ_CODEL=m
CONFIG_NET_SCH_INGRESS=m
CONFIG_NET_SCH_PLUG=m
@@ -1120,6 +1143,7 @@ CONFIG_NET_SCH_FIFO=y
# CONFIG_DCB is not set
CONFIG_DNS_RESOLVER=y
CONFIG_BATMAN_ADV=m
+CONFIG_BATMAN_ADV_BLA=y
# CONFIG_BATMAN_ADV_DEBUG is not set
CONFIG_OPENVSWITCH=m
CONFIG_RPS=y
@@ -1127,13 +1151,13 @@ CONFIG_RFS_ACCEL=y
CONFIG_XPS=y
CONFIG_NETPRIO_CGROUP=m
CONFIG_BQL=y
-CONFIG_HAVE_BPF_JIT=y
CONFIG_BPF_JIT=y
#
# Network testing
#
CONFIG_NET_PKTGEN=m
+CONFIG_NET_TCPPROBE=m
CONFIG_NET_DROP_MONITOR=y
CONFIG_HAMRADIO=y
@@ -1294,6 +1318,8 @@ CONFIG_CEPH_LIB=m
# CONFIG_CEPH_LIB_USE_DNS_RESOLVER is not set
CONFIG_NFC=m
CONFIG_NFC_NCI=m
+CONFIG_NFC_HCI=m
+# CONFIG_NFC_SHDLC is not set
# CONFIG_NFC_LLCP is not set
#
@@ -1302,6 +1328,7 @@ CONFIG_NFC_NCI=m
CONFIG_PN544_NFC=m
CONFIG_NFC_PN533=m
CONFIG_NFC_WILINK=m
+CONFIG_HAVE_BPF_JIT=y
#
# Device Drivers
@@ -1452,7 +1479,6 @@ CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
CONFIG_MTD_UBI_BEB_RESERVE=1
# CONFIG_MTD_UBI_GLUEBI is not set
-# CONFIG_MTD_UBI_DEBUG is not set
CONFIG_PARPORT=m
CONFIG_PARPORT_PC=m
CONFIG_PARPORT_SERIAL=m
@@ -1532,7 +1558,8 @@ CONFIG_SENSORS_APDS990X=m
CONFIG_HMC6352=m
CONFIG_DS1682=m
CONFIG_VMWARE_BALLOON=m
-CONFIG_BMP085=m
+CONFIG_BMP085=y
+CONFIG_BMP085_I2C=m
CONFIG_PCH_PHUB=m
CONFIG_USB_SWITCH_FSA9480=m
CONFIG_C2PORT=m
@@ -1562,6 +1589,7 @@ CONFIG_SENSORS_LIS3_I2C=m
# Altera FPGA firmware download module
#
CONFIG_ALTERA_STAPL=m
+CONFIG_INTEL_MEI=m
CONFIG_HAVE_IDE=y
# CONFIG_IDE is not set
@@ -1685,6 +1713,7 @@ CONFIG_SCSI_IPR=m
# CONFIG_SCSI_IPR_DUMP is not set
CONFIG_SCSI_QLOGIC_1280=m
CONFIG_SCSI_QLA_FC=m
+CONFIG_TCM_QLA2XXX=m
CONFIG_SCSI_QLA_ISCSI=m
CONFIG_SCSI_LPFC=m
# CONFIG_SCSI_LPFC_DEBUG_FS is not set
@@ -1844,6 +1873,7 @@ CONFIG_TCM_PSCSI=m
CONFIG_LOOPBACK_TARGET=m
CONFIG_TCM_FC=m
CONFIG_ISCSI_TARGET=m
+CONFIG_SBP_TARGET=m
CONFIG_FUSION=y
CONFIG_FUSION_SPI=m
CONFIG_FUSION_FC=m
@@ -1881,10 +1911,12 @@ CONFIG_EQUALIZER=m
CONFIG_MII=m
CONFIG_IEEE802154_DRIVERS=m
CONFIG_IEEE802154_FAKEHARD=m
+CONFIG_IEEE802154_FAKELB=m
CONFIG_IFB=m
CONFIG_NET_TEAM=m
CONFIG_NET_TEAM_MODE_ROUNDROBIN=m
CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m
+CONFIG_NET_TEAM_MODE_LOADBALANCE=m
CONFIG_MACVLAN=m
CONFIG_MACVTAP=m
CONFIG_NETCONSOLE=m
@@ -2015,10 +2047,13 @@ CONFIG_E1000=m
CONFIG_E1000E=m
CONFIG_IGB=m
CONFIG_IGB_DCA=y
+CONFIG_IGB_PTP=y
CONFIG_IGBVF=m
CONFIG_IXGB=m
CONFIG_IXGBE=m
+CONFIG_IXGBE_HWMON=y
CONFIG_IXGBE_DCA=y
+CONFIG_IXGBE_PTP=y
CONFIG_IXGBEVF=m
CONFIG_NET_VENDOR_I825XX=y
CONFIG_ZNET=m
@@ -2091,8 +2126,8 @@ CONFIG_EPIC100=m
CONFIG_SMSC9420=m
CONFIG_NET_VENDOR_STMICRO=y
CONFIG_STMMAC_ETH=m
-CONFIG_STMMAC_PLATFORM=m
-CONFIG_STMMAC_PCI=m
+# CONFIG_STMMAC_PLATFORM is not set
+CONFIG_STMMAC_PCI=y
# CONFIG_STMMAC_DEBUG_FS is not set
# CONFIG_STMMAC_DA is not set
CONFIG_STMMAC_RING=y
@@ -2110,6 +2145,12 @@ CONFIG_NET_VENDOR_VIA=y
CONFIG_VIA_RHINE=m
# CONFIG_VIA_RHINE_MMIO is not set
CONFIG_VIA_VELOCITY=m
+CONFIG_NET_VENDOR_WIZNET=y
+CONFIG_WIZNET_W5100=m
+CONFIG_WIZNET_W5300=m
+# CONFIG_WIZNET_BUS_DIRECT is not set
+# CONFIG_WIZNET_BUS_INDIRECT is not set
+CONFIG_WIZNET_BUS_ANY=y
CONFIG_NET_VENDOR_XIRCOM=y
CONFIG_PCMCIA_XIRC2PS=m
# CONFIG_FDDI is not set
@@ -2154,7 +2195,6 @@ CONFIG_SLHC=m
# CONFIG_SLIP_COMPRESSED is not set
# CONFIG_SLIP_SMART is not set
# CONFIG_SLIP_MODE_SLIP6 is not set
-# CONFIG_TR is not set
#
# USB Network Adapters
@@ -2269,6 +2309,7 @@ CONFIG_BRCMUTIL=m
CONFIG_BRCMSMAC=m
CONFIG_BRCMFMAC=m
CONFIG_BRCMFMAC_SDIO=y
+# CONFIG_BRCMFMAC_SDIO_OOB is not set
CONFIG_BRCMFMAC_USB=y
# CONFIG_BRCMDBG is not set
CONFIG_HOSTAP=m
@@ -2350,17 +2391,19 @@ CONFIG_RTL8192CU=m
CONFIG_RTLWIFI=m
# CONFIG_RTLWIFI_DEBUG is not set
CONFIG_RTL8192C_COMMON=m
+CONFIG_WL_TI=y
CONFIG_WL1251=m
CONFIG_WL1251_SDIO=m
-CONFIG_WL12XX_MENU=m
CONFIG_WL12XX=m
-CONFIG_WL12XX_SDIO=m
+CONFIG_WLCORE=m
+CONFIG_WLCORE_SDIO=m
CONFIG_WL12XX_PLATFORM_DATA=y
CONFIG_ZD1211RW=m
# CONFIG_ZD1211RW_DEBUG is not set
CONFIG_MWIFIEX=m
CONFIG_MWIFIEX_SDIO=m
CONFIG_MWIFIEX_PCIE=m
+CONFIG_MWIFIEX_USB=m
#
# WiMAX Wireless Broadband devices
@@ -2513,6 +2556,7 @@ CONFIG_INPUT=y
CONFIG_INPUT_FF_MEMLESS=m
CONFIG_INPUT_POLLDEV=m
CONFIG_INPUT_SPARSEKMAP=m
+CONFIG_INPUT_MATRIXKMAP=m
#
# Userland interfaces
@@ -2541,6 +2585,7 @@ CONFIG_KEYBOARD_TCA6416=m
CONFIG_KEYBOARD_TCA8418=m
CONFIG_KEYBOARD_MATRIX=m
# CONFIG_KEYBOARD_LM8323 is not set
+CONFIG_KEYBOARD_LM8333=m
# CONFIG_KEYBOARD_MAX7359 is not set
CONFIG_KEYBOARD_MCS=m
CONFIG_KEYBOARD_MPR121=m
@@ -2623,6 +2668,7 @@ CONFIG_TOUCHSCREEN_ILI210X=m
CONFIG_TOUCHSCREEN_GUNZE=m
CONFIG_TOUCHSCREEN_ELO=m
CONFIG_TOUCHSCREEN_WACOM_W8001=m
+CONFIG_TOUCHSCREEN_WACOM_I2C=m
CONFIG_TOUCHSCREEN_MAX11801=m
CONFIG_TOUCHSCREEN_MCS5000=m
CONFIG_TOUCHSCREEN_MTOUCH=m
@@ -2638,6 +2684,7 @@ CONFIG_TOUCHSCREEN_WM9705=y
CONFIG_TOUCHSCREEN_WM9712=y
CONFIG_TOUCHSCREEN_WM9713=y
CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
+CONFIG_TOUCHSCREEN_MC13783=m
CONFIG_TOUCHSCREEN_USB_EGALAX=y
CONFIG_TOUCHSCREEN_USB_PANJIT=y
CONFIG_TOUCHSCREEN_USB_3M=y
@@ -2662,11 +2709,11 @@ CONFIG_TOUCHSCREEN_TSC2007=m
CONFIG_TOUCHSCREEN_ST1232=m
CONFIG_TOUCHSCREEN_TPS6507X=m
CONFIG_INPUT_MISC=y
-CONFIG_INPUT_AB8500_PONKEY=m
CONFIG_INPUT_AD714X=m
CONFIG_INPUT_AD714X_I2C=m
CONFIG_INPUT_BMA150=m
CONFIG_INPUT_PCSPKR=m
+CONFIG_INPUT_MC13783_PWRBUTTON=m
CONFIG_INPUT_MMA8450=m
CONFIG_INPUT_MPU3050=m
CONFIG_INPUT_APANEL=m
@@ -2809,7 +2856,6 @@ CONFIG_TCG_ATMEL=m
CONFIG_TCG_INFINEON=m
CONFIG_TELCLOCK=m
CONFIG_DEVPORT=y
-CONFIG_RAMOOPS=m
CONFIG_I2C=m
CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_COMPAT=y
@@ -2916,6 +2962,7 @@ CONFIG_GPIO_SYSFS=y
# CONFIG_GPIO_GENERIC_PLATFORM is not set
# CONFIG_GPIO_IT8761E is not set
CONFIG_GPIO_SCH=m
+CONFIG_GPIO_ICH=m
# CONFIG_GPIO_VX855 is not set
#
@@ -3068,6 +3115,7 @@ CONFIG_SENSORS_SCH5636=m
CONFIG_SENSORS_ADS1015=m
CONFIG_SENSORS_ADS7828=m
CONFIG_SENSORS_AMC6821=m
+CONFIG_SENSORS_INA2XX=m
CONFIG_SENSORS_THMC50=m
CONFIG_SENSORS_TMP102=m
CONFIG_SENSORS_TMP401=m
@@ -3087,6 +3135,7 @@ CONFIG_SENSORS_W83L786NG=m
CONFIG_SENSORS_W83627HF=m
CONFIG_SENSORS_W83627EHF=m
CONFIG_SENSORS_APPLESMC=m
+CONFIG_SENSORS_MC13783_ADC=m
#
# ACPI drivers
@@ -3117,6 +3166,7 @@ CONFIG_IB700_WDT=m
CONFIG_IBMASR=m
CONFIG_WAFER_WDT=m
CONFIG_I6300ESB_WDT=m
+CONFIG_IE6XX_WDT=m
CONFIG_ITCO_WDT=m
CONFIG_ITCO_VENDOR_SUPPORT=y
CONFIG_IT8712F_WDT=m
@@ -3183,26 +3233,28 @@ CONFIG_BCMA_HOST_PCI=y
#
# Multifunction device drivers
#
-CONFIG_MFD_CORE=y
+CONFIG_MFD_CORE=m
CONFIG_MFD_SM501=m
CONFIG_MFD_SM501_GPIO=y
CONFIG_HTC_PASIC3=m
CONFIG_UCB1400_CORE=m
+CONFIG_MFD_LM3533=m
# CONFIG_TPS6105X is not set
CONFIG_TPS65010=m
CONFIG_TPS6507X=m
CONFIG_MFD_TPS65217=m
# CONFIG_MFD_TMIO is not set
-CONFIG_MFD_WM8400=m
CONFIG_MFD_PCF50633=m
CONFIG_PCF50633_ADC=m
CONFIG_PCF50633_GPIO=m
+CONFIG_MFD_MC13783=m
+CONFIG_MFD_MC13XXX=m
+CONFIG_MFD_MC13XXX_I2C=m
CONFIG_ABX500_CORE=y
-CONFIG_AB8500_CORE=y
-# CONFIG_AB8500_DEBUG is not set
CONFIG_MFD_CS5535=m
# CONFIG_MFD_TIMBERDALE is not set
CONFIG_LPC_SCH=m
+CONFIG_LPC_ICH=m
CONFIG_MFD_RDC321X=m
# CONFIG_MFD_JANZ_CMODIO is not set
CONFIG_MFD_VX855=m
@@ -3274,7 +3326,9 @@ CONFIG_MEDIA_TUNER_MXL5007T=m
CONFIG_MEDIA_TUNER_MC44S803=m
CONFIG_MEDIA_TUNER_MAX2165=m
CONFIG_MEDIA_TUNER_TDA18218=m
+CONFIG_MEDIA_TUNER_FC0011=m
CONFIG_MEDIA_TUNER_TDA18212=m
+CONFIG_MEDIA_TUNER_TUA9001=m
CONFIG_VIDEO_V4L2=m
CONFIG_VIDEOBUF_GEN=m
CONFIG_VIDEOBUF_DMA_SG=m
@@ -3393,6 +3447,7 @@ CONFIG_VIDEO_THS7303=m
CONFIG_VIDEO_M52790=m
CONFIG_VIDEO_VIVI=m
CONFIG_V4L_USB_DRIVERS=y
+CONFIG_VIDEO_AU0828=m
CONFIG_USB_VIDEO_CLASS=m
CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
CONFIG_USB_GSPCA=m
@@ -3450,7 +3505,7 @@ CONFIG_VIDEO_HDPVR=m
CONFIG_VIDEO_EM28XX=m
CONFIG_VIDEO_EM28XX_ALSA=m
CONFIG_VIDEO_EM28XX_DVB=m
-CONFIG_VIDEO_EM28XX_RC=y
+CONFIG_VIDEO_EM28XX_RC=m
CONFIG_VIDEO_TLG2300=m
CONFIG_VIDEO_CX231XX=m
CONFIG_VIDEO_CX231XX_RC=y
@@ -3460,7 +3515,6 @@ CONFIG_VIDEO_TM6000=m
CONFIG_VIDEO_TM6000_ALSA=m
CONFIG_VIDEO_TM6000_DVB=m
CONFIG_VIDEO_USBVISION=m
-CONFIG_USB_ET61X251=m
CONFIG_USB_SN9C102=m
CONFIG_USB_PWC=m
# CONFIG_USB_PWC_DEBUG is not set
@@ -3470,7 +3524,6 @@ CONFIG_USB_ZR364XX=m
CONFIG_USB_STKWEBCAM=m
CONFIG_USB_S2255=m
CONFIG_V4L_PCI_DRIVERS=y
-CONFIG_VIDEO_AU0828=m
CONFIG_VIDEO_BT848=m
CONFIG_VIDEO_BT848_DVB=y
CONFIG_VIDEO_CX18=m
@@ -3584,6 +3637,7 @@ CONFIG_DVB_USB_TECHNISAT_USB2=m
CONFIG_DVB_USB_IT913X=m
CONFIG_DVB_USB_MXL111SF=m
CONFIG_DVB_USB_RTL28XXU=m
+CONFIG_DVB_USB_AF9035=m
CONFIG_DVB_TTUSB_BUDGET=m
CONFIG_DVB_TTUSB_DEC=m
CONFIG_SMS_SIANO_MDTV=m
@@ -3733,8 +3787,11 @@ CONFIG_DVB_OR51132=m
CONFIG_DVB_BCM3510=m
CONFIG_DVB_LGDT330X=m
CONFIG_DVB_LGDT3305=m
+CONFIG_DVB_LG2160=m
CONFIG_DVB_S5H1409=m
CONFIG_DVB_AU8522=m
+CONFIG_DVB_AU8522_DTV=m
+CONFIG_DVB_AU8522_V4L=m
CONFIG_DVB_S5H1411=m
#
@@ -3766,6 +3823,7 @@ CONFIG_DVB_TDA665x=m
CONFIG_DVB_IX2505V=m
CONFIG_DVB_IT913X_FE=m
CONFIG_DVB_M88RS2000=m
+CONFIG_DVB_AF9033=m
#
# Tools to develop new frontends
@@ -3812,6 +3870,9 @@ CONFIG_DRM_GMA500=m
CONFIG_DRM_GMA600=y
CONFIG_DRM_GMA3600=y
CONFIG_DRM_UDL=m
+CONFIG_DRM_AST=m
+CONFIG_DRM_MGAG200=m
+CONFIG_DRM_CIRRUS_QEMU=m
# CONFIG_STUB_POULSBO is not set
CONFIG_VGASTATE=m
CONFIG_VIDEO_OUTPUT_CONTROL=m
@@ -3883,12 +3944,14 @@ CONFIG_XEN_FBDEV_FRONTEND=m
# CONFIG_FB_METRONOME is not set
# CONFIG_FB_MB862XX is not set
# CONFIG_FB_BROADSHEET is not set
+# CONFIG_FB_AUO_K190X is not set
# CONFIG_EXYNOS_VIDEO is not set
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_LCD_CLASS_DEVICE=m
CONFIG_LCD_PLATFORM=m
CONFIG_BACKLIGHT_CLASS_DEVICE=y
# CONFIG_BACKLIGHT_GENERIC is not set
+CONFIG_BACKLIGHT_LM3533=m
CONFIG_BACKLIGHT_PROGEAR=m
CONFIG_BACKLIGHT_APPLE=m
# CONFIG_BACKLIGHT_SAHARA is not set
@@ -3918,6 +3981,7 @@ CONFIG_FONT_8x16=y
# CONFIG_FONT_SUN8x16 is not set
# CONFIG_FONT_SUN12x22 is not set
# CONFIG_FONT_10x18 is not set
+CONFIG_FONT_AUTOSELECT=y
# CONFIG_LOGO is not set
CONFIG_SOUND=m
CONFIG_SOUND_OSS_CORE=y
@@ -4027,7 +4091,6 @@ CONFIG_SND_HDA_INPUT_BEEP_MODE=1
CONFIG_SND_HDA_INPUT_JACK=y
CONFIG_SND_HDA_PATCH_LOADER=y
CONFIG_SND_HDA_CODEC_REALTEK=y
-CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS=y
CONFIG_SND_HDA_CODEC_ANALOG=y
CONFIG_SND_HDA_CODEC_SIGMATEL=y
CONFIG_SND_HDA_CODEC_VIA=y
@@ -4084,16 +4147,13 @@ CONFIG_SND_PDAUDIOCF=m
# CONFIG_SND_SOC is not set
# CONFIG_SOUND_PRIME is not set
CONFIG_AC97_BUS=m
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=m
-CONFIG_HIDRAW=y
#
-# USB Input Devices
+# HID support
#
-CONFIG_USB_HID=m
-CONFIG_HID_PID=y
-CONFIG_USB_HIDDEV=y
+CONFIG_HID=m
+CONFIG_HIDRAW=y
+CONFIG_HID_GENERIC=m
#
# Special HID drivers
@@ -4102,6 +4162,7 @@ CONFIG_HID_A4TECH=m
CONFIG_HID_ACRUX=m
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_APPLE=m
+CONFIG_HID_AUREAL=m
CONFIG_HID_BELKIN=m
CONFIG_HID_CHERRY=m
CONFIG_HID_CHICONY=m
@@ -4159,12 +4220,18 @@ CONFIG_HID_TOPSEED=m
CONFIG_HID_THRUSTMASTER=m
CONFIG_THRUSTMASTER_FF=y
CONFIG_HID_WACOM=m
-CONFIG_HID_WACOM_POWER_SUPPLY=y
CONFIG_HID_WIIMOTE=m
CONFIG_HID_WIIMOTE_EXT=y
CONFIG_HID_ZEROPLUS=m
CONFIG_ZEROPLUS_FF=y
CONFIG_HID_ZYDACRON=m
+
+#
+# USB HID support
+#
+CONFIG_USB_HID=m
+CONFIG_HID_PID=y
+CONFIG_USB_HIDDEV=y
CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB_ARCH_HAS_EHCI=y
CONFIG_USB_ARCH_HAS_XHCI=y
@@ -4178,8 +4245,6 @@ CONFIG_USB=m
#
# Miscellaneous USB options
#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_DEVICE_CLASS is not set
CONFIG_USB_DYNAMIC_MINORS=y
CONFIG_USB_SUSPEND=y
# CONFIG_USB_OTG is not set
@@ -4218,9 +4283,15 @@ CONFIG_USB_R8A66597_HCD=m
CONFIG_USB_RENESAS_USBHS_HCD=m
CONFIG_USB_WHCI_HCD=m
CONFIG_USB_HWA_HCD=m
+# CONFIG_USB_HCD_BCMA is not set
+# CONFIG_USB_HCD_SSB is not set
CONFIG_USB_MUSB_HDRC=m
CONFIG_USB_MUSB_TUSB6010=m
CONFIG_MUSB_PIO_ONLY=y
+CONFIG_USB_CHIPIDEA=m
+CONFIG_USB_CHIPIDEA_UDC=y
+CONFIG_USB_CHIPIDEA_HOST=y
+# CONFIG_USB_CHIPIDEA_DEBUG is not set
CONFIG_USB_RENESAS_USBHS=m
#
@@ -4334,6 +4405,7 @@ CONFIG_USB_SERIAL_OPTICON=m
CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m
CONFIG_USB_SERIAL_ZIO=m
CONFIG_USB_SERIAL_SSU100=m
+CONFIG_USB_SERIAL_QT2=m
# CONFIG_USB_SERIAL_DEBUG is not set
#
@@ -4360,6 +4432,11 @@ CONFIG_USB_IOWARRIOR=m
CONFIG_USB_TEST=m
CONFIG_USB_ISIGHTFW=m
CONFIG_USB_YUREX=m
+
+#
+# USB Physical Layer drivers
+#
+CONFIG_USB_ISP1301=m
CONFIG_USB_ATM=m
CONFIG_USB_SPEEDTOUCH=m
CONFIG_USB_CXACRU=m
@@ -4371,13 +4448,16 @@ CONFIG_USB_GADGET=m
# CONFIG_USB_GADGET_DEBUG_FS is not set
CONFIG_USB_GADGET_VBUS_DRAW=2
CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
+
+#
+# USB Peripheral Controller
+#
CONFIG_USB_R8A66597=m
CONFIG_USB_RENESAS_USBHS_UDC=m
CONFIG_USB_MV_UDC=m
CONFIG_USB_GADGET_MUSB_HDRC=m
CONFIG_USB_M66592=m
CONFIG_USB_AMD5536UDC=m
-CONFIG_USB_CI13XXX_PCI=m
CONFIG_USB_NET2272=m
CONFIG_USB_NET2272_DMA=y
CONFIG_USB_NET2280=m
@@ -4401,6 +4481,7 @@ CONFIG_USB_FUNCTIONFS_GENERIC=y
CONFIG_USB_FILE_STORAGE=m
# CONFIG_USB_FILE_STORAGE_TEST is not set
# CONFIG_USB_MASS_STORAGE is not set
+CONFIG_USB_GADGET_TARGET=m
CONFIG_USB_G_SERIAL=m
CONFIG_USB_MIDI_GADGET=m
CONFIG_USB_G_PRINTER=m
@@ -4420,7 +4501,6 @@ CONFIG_USB_G_WEBCAM=m
CONFIG_USB_OTG_UTILS=y
# CONFIG_USB_GPIO_VBUS is not set
CONFIG_NOP_USB_XCEIV=m
-# CONFIG_AB8500_USB is not set
CONFIG_UWB=m
CONFIG_UWB_HWA=m
CONFIG_UWB_WHCI=m
@@ -4475,6 +4555,7 @@ CONFIG_LEDS_CLASS=y
# LED drivers
#
CONFIG_LEDS_LM3530=m
+CONFIG_LEDS_LM3533=m
CONFIG_LEDS_PCA9532=m
# CONFIG_LEDS_PCA9532_GPIO is not set
# CONFIG_LEDS_GPIO is not set
@@ -4488,6 +4569,7 @@ CONFIG_LEDS_BD2802=m
CONFIG_LEDS_INTEL_SS4200=m
CONFIG_LEDS_LT3593=m
CONFIG_LEDS_DELL_NETBOOKS=m
+CONFIG_LEDS_MC13783=m
CONFIG_LEDS_TCA6507=m
CONFIG_LEDS_OT200=m
CONFIG_LEDS_TRIGGERS=y
@@ -4504,6 +4586,7 @@ CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
#
# iptables trigger is under Netfilter config (LED target)
#
+CONFIG_LEDS_TRIGGER_TRANSIENT=m
CONFIG_ACCESSIBILITY=y
CONFIG_A11Y_BRAILLE_CONSOLE=y
# CONFIG_INFINIBAND is not set
@@ -4589,11 +4672,11 @@ CONFIG_RTC_DRV_BQ4802=m
CONFIG_RTC_DRV_RP5C01=m
CONFIG_RTC_DRV_V3020=m
CONFIG_RTC_DRV_PCF50633=m
-CONFIG_RTC_DRV_AB8500=m
#
# on-CPU RTC drivers
#
+CONFIG_RTC_DRV_MC13XXX=m
CONFIG_DMADEVICES=y
# CONFIG_DMADEVICES_DEBUG is not set
@@ -4636,6 +4719,7 @@ CONFIG_VIRTIO_RING=m
CONFIG_VIRTIO_PCI=m
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_MMIO=m
+CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
#
# Microsoft Hyper-V guest support
@@ -4675,6 +4759,8 @@ CONFIG_PRISM2_USB=m
CONFIG_ECHO=m
CONFIG_COMEDI=m
# CONFIG_COMEDI_DEBUG is not set
+CONFIG_COMEDI_DEFAULT_BUF_SIZE_KB=2048
+CONFIG_COMEDI_DEFAULT_BUF_MAXSIZE_KB=20480
CONFIG_COMEDI_MISC_DRIVERS=m
CONFIG_COMEDI_KCOMEDILIB=m
CONFIG_COMEDI_BOND=m
@@ -4706,12 +4792,13 @@ CONFIG_COMEDI_ADL_PCI9118=m
CONFIG_COMEDI_ADV_PCI1710=m
CONFIG_COMEDI_ADV_PCI1723=m
CONFIG_COMEDI_ADV_PCI_DIO=m
-CONFIG_COMEDI_AMPLC_DIO200=m
-CONFIG_COMEDI_AMPLC_PC236=m
-CONFIG_COMEDI_AMPLC_PC263=m
+CONFIG_COMEDI_AMPLC_DIO200_PCI=m
+CONFIG_COMEDI_AMPLC_PC236_PCI=m
+CONFIG_COMEDI_AMPLC_PC263_PCI=m
CONFIG_COMEDI_AMPLC_PCI224=m
CONFIG_COMEDI_AMPLC_PCI230=m
CONFIG_COMEDI_CONTEC_PCI_DIO=m
+CONFIG_COMEDI_DAS08_PCI=m
CONFIG_COMEDI_DT3000=m
CONFIG_COMEDI_DYNA_PCI10XX=m
CONFIG_COMEDI_UNIOXX5=m
@@ -4758,8 +4845,11 @@ CONFIG_COMEDI_MITE=m
CONFIG_COMEDI_NI_TIO=m
CONFIG_COMEDI_NI_LABPC=m
CONFIG_COMEDI_8255=m
-CONFIG_COMEDI_DAS08=m
CONFIG_COMEDI_FC=m
+CONFIG_COMEDI_AMPLC_DIO200=m
+CONFIG_COMEDI_AMPLC_PC236=m
+CONFIG_COMEDI_AMPLC_PC263=m
+CONFIG_COMEDI_DAS08=m
CONFIG_ASUS_OLED=m
# CONFIG_PANEL is not set
CONFIG_R8187SE=m
@@ -4784,12 +4874,9 @@ CONFIG_LINE6_USB=m
# CONFIG_LINE6_USB_RAW is not set
# CONFIG_LINE6_USB_IMPULSE_RESPONSE is not set
CONFIG_USB_SERIAL_QUATECH2=m
-CONFIG_USB_SERIAL_QUATECH_USB2=m
CONFIG_VT6655=m
CONFIG_VT6656=m
-# CONFIG_VME_BUS is not set
CONFIG_DX_SEP=m
-# CONFIG_IIO is not set
CONFIG_ZRAM=m
# CONFIG_ZRAM_DEBUG is not set
CONFIG_ZCACHE=y
@@ -4827,7 +4914,6 @@ CONFIG_SPEAKUP_SYNTH_TXPRT=m
CONFIG_SPEAKUP_SYNTH_DUMMY=m
CONFIG_TOUCHSCREEN_CLEARPAD_TM1217=m
CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4=m
-CONFIG_INTEL_MEI=m
CONFIG_STAGING_MEDIA=y
CONFIG_DVB_AS102=m
CONFIG_DVB_CXD2099=m
@@ -4865,6 +4951,16 @@ CONFIG_LIRC_ZILOG=m
# CONFIG_ANDROID is not set
# CONFIG_PHONE is not set
CONFIG_USB_WPAN_HCD=m
+CONFIG_IPACK_BUS=m
+CONFIG_BOARD_TPCI200=m
+CONFIG_SERIAL_IPOCTAL=m
+CONFIG_WIMAX_GDM72XX=m
+CONFIG_WIMAX_GDM72XX_QOS=y
+CONFIG_WIMAX_GDM72XX_K_MODE=y
+CONFIG_WIMAX_GDM72XX_WIMAX2=y
+CONFIG_WIMAX_GDM72XX_USB=y
+# CONFIG_WIMAX_GDM72XX_SDIO is not set
+CONFIG_WIMAX_GDM72XX_USB_PM=y
CONFIG_X86_PLATFORM_DEVICES=y
CONFIG_ACER_WMI=m
CONFIG_ACERHDF=m
@@ -4938,6 +5034,15 @@ CONFIG_IRQ_REMAP=y
#
CONFIG_VIRT_DRIVERS=y
# CONFIG_PM_DEVFREQ is not set
+CONFIG_EXTCON=m
+
+#
+# Extcon Device Drivers
+#
+CONFIG_EXTCON_GPIO=m
+CONFIG_MEMORY=y
+# CONFIG_IIO is not set
+# CONFIG_VME_BUS is not set
#
# Firmware Drivers
@@ -5088,11 +5193,9 @@ CONFIG_JFFS2_ZLIB=y
CONFIG_JFFS2_RTIME=y
# CONFIG_JFFS2_RUBIN is not set
CONFIG_UBIFS_FS=m
-CONFIG_UBIFS_FS_XATTR=y
# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
CONFIG_UBIFS_FS_LZO=y
CONFIG_UBIFS_FS_ZLIB=y
-# CONFIG_UBIFS_FS_DEBUG is not set
CONFIG_LOGFS=m
CONFIG_CRAMFS=m
CONFIG_SQUASHFS=m
@@ -5111,6 +5214,7 @@ CONFIG_OMFS_FS=m
# CONFIG_QNX6FS_FS is not set
# CONFIG_ROMFS_FS is not set
CONFIG_PSTORE=y
+CONFIG_PSTORE_RAM=m
# CONFIG_SYSV_FS is not set
CONFIG_UFS_FS=m
# CONFIG_UFS_FS_WRITE is not set
@@ -5120,6 +5224,7 @@ CONFIG_EXOFS_FS=m
CONFIG_ORE=m
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NFS_FS=m
+CONFIG_NFS_V2=y
CONFIG_NFS_V3=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFS_V4=y
@@ -5208,6 +5313,17 @@ CONFIG_NLS_ISO8859_14=m
CONFIG_NLS_ISO8859_15=m
CONFIG_NLS_KOI8_R=m
CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_MAC_ROMAN=m
+CONFIG_NLS_MAC_CELTIC=m
+CONFIG_NLS_MAC_CENTEURO=m
+CONFIG_NLS_MAC_CROATIAN=m
+CONFIG_NLS_MAC_CYRILLIC=m
+CONFIG_NLS_MAC_GAELIC=m
+CONFIG_NLS_MAC_GREEK=m
+CONFIG_NLS_MAC_ICELAND=m
+CONFIG_NLS_MAC_INUIT=m
+CONFIG_NLS_MAC_ROMANIAN=m
+CONFIG_NLS_MAC_TURKISH=m
CONFIG_NLS_UTF8=m
CONFIG_DLM=m
# CONFIG_DLM_DEBUG is not set
@@ -5223,6 +5339,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y
CONFIG_FRAME_WARN=2048
CONFIG_MAGIC_SYSRQ=y
CONFIG_STRIP_ASM_SYMS=y
+# CONFIG_READABLE_ASM is not set
CONFIG_UNUSED_SYMBOLS=y
CONFIG_DEBUG_FS=y
# CONFIG_HEADERS_CHECK is not set
@@ -5235,6 +5352,8 @@ CONFIG_HARDLOCKUP_DETECTOR=y
CONFIG_BOOTPARAM_HARDLOCKUP_PANIC_VALUE=0
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+# CONFIG_PANIC_ON_OOPS is not set
+CONFIG_PANIC_ON_OOPS_VALUE=0
CONFIG_DETECT_HUNG_TASK=y
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
@@ -5279,6 +5398,7 @@ CONFIG_RCU_CPU_STALL_TIMEOUT=60
# CONFIG_RCU_CPU_STALL_VERBOSE is not set
# CONFIG_RCU_CPU_STALL_INFO is not set
# CONFIG_RCU_TRACE is not set
+# CONFIG_KPROBES_SANITY_TEST is not set
# CONFIG_BACKTRACE_SELF_TEST is not set
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
@@ -5290,7 +5410,6 @@ CONFIG_CPU_NOTIFIER_ERROR_INJECT=m
# CONFIG_DEBUG_PAGEALLOC is not set
CONFIG_USER_STACKTRACE_SUPPORT=y
CONFIG_NOP_TRACER=y
-CONFIG_HAVE_FTRACE_NMI_ENTER=y
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y
@@ -5301,7 +5420,6 @@ CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
CONFIG_HAVE_C_RECORDMCOUNT=y
CONFIG_TRACER_MAX_TRACE=y
CONFIG_RING_BUFFER=y
-CONFIG_FTRACE_NMI_ENTER=y
CONFIG_EVENT_TRACING=y
CONFIG_EVENT_POWER_TRACING_DEPRECATED=y
CONFIG_CONTEXT_SWITCH_TRACER=y
@@ -5321,6 +5439,9 @@ CONFIG_BRANCH_PROFILE_NONE=y
# CONFIG_PROFILE_ALL_BRANCHES is not set
CONFIG_STACK_TRACER=y
CONFIG_BLK_DEV_IO_TRACE=y
+CONFIG_KPROBE_EVENT=y
+CONFIG_UPROBE_EVENT=y
+CONFIG_PROBE_EVENTS=y
CONFIG_DYNAMIC_FTRACE=y
CONFIG_FUNCTION_PROFILER=y
CONFIG_FTRACE_MCOUNT_RECORD=y
@@ -5352,6 +5473,7 @@ CONFIG_DEBUG_RODATA=y
# CONFIG_IOMMU_DEBUG is not set
# CONFIG_IOMMU_STRESS is not set
CONFIG_HAVE_MMIOTRACE_SUPPORT=y
+# CONFIG_X86_DECODER_SELFTEST is not set
CONFIG_IO_DELAY_TYPE_0X80=0
CONFIG_IO_DELAY_TYPE_0XED=1
CONFIG_IO_DELAY_TYPE_UDELAY=2
@@ -5533,6 +5655,7 @@ CONFIG_HAVE_KVM_EVENTFD=y
CONFIG_KVM_APIC_ARCHITECTURE=y
CONFIG_KVM_MMIO=y
CONFIG_KVM_ASYNC_PF=y
+CONFIG_HAVE_KVM_MSI=y
CONFIG_VIRTUALIZATION=y
CONFIG_KVM=m
CONFIG_KVM_INTEL=m
@@ -5546,6 +5669,8 @@ CONFIG_BINARY_PRINTF=y
#
CONFIG_RAID6_PQ=m
CONFIG_BITREVERSE=y
+CONFIG_GENERIC_STRNCPY_FROM_USER=y
+CONFIG_GENERIC_STRNLEN_USER=y
CONFIG_GENERIC_FIND_FIRST_BIT=y
CONFIG_GENERIC_PCI_IOMAP=y
CONFIG_GENERIC_IOMAP=y
@@ -5583,6 +5708,8 @@ CONFIG_DECOMPRESS_XZ=y
CONFIG_DECOMPRESS_LZO=y
CONFIG_GENERIC_ALLOCATOR=y
CONFIG_REED_SOLOMON=m
+CONFIG_REED_SOLOMON_ENC8=y
+CONFIG_REED_SOLOMON_DEC8=y
CONFIG_REED_SOLOMON_DEC16=y
CONFIG_BCH=m
CONFIG_BCH_CONST_PARAMS=y
@@ -5601,3 +5728,4 @@ CONFIG_NLATTR=y
CONFIG_LRU_CACHE=m
CONFIG_AVERAGE=y
CONFIG_CORDIC=m
+CONFIG_DDR=y
diff --git a/libre/linux-libre/i915-i2c-crash-3.5.x.patch b/libre/linux-libre/i915-i2c-crash-3.5.x.patch
new file mode 100644
index 000000000..d202b531c
--- /dev/null
+++ b/libre/linux-libre/i915-i2c-crash-3.5.x.patch
@@ -0,0 +1,47 @@
+From cee25168e9c4ef7f9417632af2dc78b8521dfda7 Mon Sep 17 00:00:00 2001
+From: Jani Nikula <jani.nikula@intel.com>
+Date: Mon, 13 Aug 2012 17:33:02 +0300
+Subject: [PATCH] drm/i915: ensure i2c adapter is all set before adding it
+
+i2c_add_adapter() may do i2c transfers on the bus to detect supported
+devices. Therefore the adapter needs to be all set before adding it. This
+was not the case for the bit-banging fallback, resulting in an oops if the
+device detection GMBUS transfers timed out. Fix the issue by calling
+i2c_add_adapter() only after intel_gpio_setup().
+
+LKML-Reference: <5021F00B.7000503@ionic.de>
+Tested-by: Mihai Moldovan <ionic@ionic.de>
+Signed-off-by: Jani Nikula <jani.nikula@intel.com>
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+---
+ drivers/gpu/drm/i915/intel_i2c.c | 7 ++++---
+ 1 files changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/intel_i2c.c b/drivers/gpu/drm/i915/intel_i2c.c
+index d79500b..b9755f6 100644
+--- a/drivers/gpu/drm/i915/intel_i2c.c
++++ b/drivers/gpu/drm/i915/intel_i2c.c
+@@ -486,9 +486,6 @@ int intel_setup_gmbus(struct drm_device *dev)
+ bus->dev_priv = dev_priv;
+
+ bus->adapter.algo = &gmbus_algorithm;
+- ret = i2c_add_adapter(&bus->adapter);
+- if (ret)
+- goto err;
+
+ /* By default use a conservative clock rate */
+ bus->reg0 = port | GMBUS_RATE_100KHZ;
+@@ -498,6 +495,10 @@ int intel_setup_gmbus(struct drm_device *dev)
+ bus->force_bit = true;
+
+ intel_gpio_setup(bus, port);
++
++ ret = i2c_add_adapter(&bus->adapter);
++ if (ret)
++ goto err;
+ }
+
+ intel_i2c_reset(dev_priv->dev);
+--
+1.7.7.6
+
diff --git a/libre/linux-libre/linux-libre.install b/libre/linux-libre/linux-libre.install
index 44850230f..0cd51930e 100644
--- a/libre/linux-libre/linux-libre.install
+++ b/libre/linux-libre/linux-libre.install
@@ -2,7 +2,7 @@
# arg 2: the old package version
KERNEL_NAME=
-KERNEL_VERSION=3.4.4-3-LIBRE
+KERNEL_VERSION=3.5.3-1-LIBRE
# set a sane PATH to ensure that critical utils like depmod will be found
export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
@@ -33,7 +33,7 @@ post_install () {
post_upgrade() {
pacman -Q grub &>/dev/null
hasgrub=$?
- pacman -Q grub2-common &>/dev/null
+ pacman -Q grub-common &>/dev/null
hasgrub2=$?
pacman -Q lilo &>/dev/null
haslilo=$?
diff --git a/libre/linux-libre/watchdog-3.5.x.patch b/libre/linux-libre/watchdog-3.5.x.patch
new file mode 100644
index 000000000..7ac1e6732
--- /dev/null
+++ b/libre/linux-libre/watchdog-3.5.x.patch
@@ -0,0 +1,60 @@
+diff --git a/drivers/mfd/lpc_ich.c b/drivers/mfd/lpc_ich.c
+index 027cc8f..a05fdfc 100644
+--- a/drivers/mfd/lpc_ich.c
++++ b/drivers/mfd/lpc_ich.c
+@@ -765,7 +765,6 @@ static int __devinit lpc_ich_init_wdt(struct pci_dev *dev,
+ u32 base_addr_cfg;
+ u32 base_addr;
+ int ret;
+- bool acpi_conflict = false;
+ struct resource *res;
+
+ /* Setup power management base register */
+@@ -780,20 +779,11 @@ static int __devinit lpc_ich_init_wdt(struct pci_dev *dev,
+ res = wdt_io_res(ICH_RES_IO_TCO);
+ res->start = base_addr + ACPIBASE_TCO_OFF;
+ res->end = base_addr + ACPIBASE_TCO_END;
+- ret = acpi_check_resource_conflict(res);
+- if (ret) {
+- acpi_conflict = true;
+- goto wdt_done;
+- }
+
+ res = wdt_io_res(ICH_RES_IO_SMI);
+ res->start = base_addr + ACPIBASE_SMI_OFF;
+ res->end = base_addr + ACPIBASE_SMI_END;
+- ret = acpi_check_resource_conflict(res);
+- if (ret) {
+- acpi_conflict = true;
+- goto wdt_done;
+- }
++
+ lpc_ich_enable_acpi_space(dev);
+
+ /*
+@@ -813,11 +803,6 @@ static int __devinit lpc_ich_init_wdt(struct pci_dev *dev,
+ res = wdt_mem_res(ICH_RES_MEM_GCS);
+ res->start = base_addr + ACPIBASE_GCS_OFF;
+ res->end = base_addr + ACPIBASE_GCS_END;
+- ret = acpi_check_resource_conflict(res);
+- if (ret) {
+- acpi_conflict = true;
+- goto wdt_done;
+- }
+ }
+
+ lpc_ich_finalize_cell(&lpc_ich_cells[LPC_WDT], id);
+@@ -825,9 +810,6 @@ static int __devinit lpc_ich_init_wdt(struct pci_dev *dev,
+ 1, NULL, 0);
+
+ wdt_done:
+- if (acpi_conflict)
+- pr_warn("Resource conflict(s) found affecting %s\n",
+- lpc_ich_cells[LPC_WDT].name);
+ return ret;
+ }
+
+--
+1.7.1
+
+ \ No newline at end of file
diff --git a/libre/lirc-libre/PKGBUILD b/libre/lirc-libre/PKGBUILD
index 3b73a9f2f..0968afd17 100644
--- a/libre/lirc-libre/PKGBUILD
+++ b/libre/lirc-libre/PKGBUILD
@@ -6,14 +6,14 @@ _pkgbase=lirc
pkgbase=lirc-libre
pkgname=('lirc-libre' 'lirc-utils-libre')
pkgver=0.9.0
-pkgrel=20
+pkgrel=26
epoch=1
-_extramodules=extramodules-3.4-LIBRE
+_extramodules=extramodules-3.5-LIBRE
arch=('i686' 'x86_64' 'mips64el')
url="http://www.lirc.org/"
license=('GPL')
### NOTICE don't forget to bump version in depends in package_lirc
-makedepends=('help2man' 'linux-libre-headers>=3.4' 'linux-libre-headers<3.5' 'alsa-lib' 'libx11' 'libftdi' 'libirman' 'python2')
+makedepends=('help2man' 'linux-libre-headers>=3.5' 'linux-libre-headers<3.6' 'alsa-lib' 'libx11' 'libftdi' 'libirman' 'python2')
options=('!makeflags' '!strip')
source=(http://prdownloads.sourceforge.net/${_pkgbase}/${_pkgbase}-${pkgver}.tar.bz2
lirc_wpc8769l.patch
@@ -63,7 +63,7 @@ build() {
}
package_lirc-libre() {
- pkgdesc="Linux-libre Infrared Remote Control kernel modules for stock libre kernel"
+ pkgdesc="Linux-libre Infrared Remote Control kernel modules for stock kernel libre"
depends=('lirc-utils-libre' 'linux-libre>=3.4' 'linux-libre<3.5')
replaces=('lirc' 'lirc+pctv')
conflicts=('lirc')
diff --git a/libre/lirc-libre/lirc.install b/libre/lirc-libre/lirc.install
index c50e384c8..b39282da6 100644
--- a/libre/lirc-libre/lirc.install
+++ b/libre/lirc-libre/lirc.install
@@ -1,4 +1,4 @@
-EXTRAMODULES=extramodules-3.4-LIBRE
+EXTRAMODULES=extramodules-3.5-LIBRE
post_install() {
# updating module dependencies
diff --git a/libre/luxblend25/PKGBUILD b/libre/luxblend25/PKGBUILD
new file mode 100644
index 000000000..3ce9b57db
--- /dev/null
+++ b/libre/luxblend25/PKGBUILD
@@ -0,0 +1,44 @@
+# Maintainer: Lukas Jirkovsky <l.jirkovsky@gmail.com>
+# Maintainer (Parabola): Márcio Silva <coadde@lavabit.com>
+pkgname=luxblend25
+pkgver=1.0rc4
+_pkgver=06194cf93745
+_blender=2.63
+pkgrel=1
+pkgdesc='A LuxRender exporter for Blender-libre'
+arch=(
+ any
+)
+url=http://www.{pkgname::3}render.net/
+license=(
+ GPL
+)
+depends=(
+ blender=$_blender
+ ${pkgname::3}render
+)
+replaces=(
+ $pkgname
+)
+conflicts=(
+ $pkgname
+)
+provides=(
+ $pkgname=$pkgver
+)
+source=(
+ https://bitbucket.org/${pkgname::3}render/$pkgname/get/$_pkgver.tar.bz2
+)
+md5sums=(
+ c5719c2a0e8567cd9f0aef429a2996f0
+)
+
+package() {
+ install -d -m755 $pkgdir/usr/share/blender/$_blender/scripts/addons
+ cp -a $srcdir/${pkgname::3}render-$pkgname-$_pkgver/src/${pkgname::3}render \
+ $pkgdir/usr/share/blender/$_blender/scripts/addons
+ # change the search path in exporter so it finds pylux in its new location
+ sed -i 's|from.*import pylux|import pylux|' $pkgdir/usr/share/blender/$_blender/scripts/addons/${pkgname::3}render/outputs/pure_api.py
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/libre/luxrays-libre/PKGBUILD b/libre/luxrays-libre/PKGBUILD
index 3a5654396..279e6622e 100644
--- a/libre/luxrays-libre/PKGBUILD
+++ b/libre/luxrays-libre/PKGBUILD
@@ -3,8 +3,8 @@
# Maintainer (Parabola): Márcio Silva <coadde@adinet.com.uy>
_pkgname=luxrays
pkgname=luxrays-libre
-pkgver=1.0rc2
-_pkgver=8707be9e6dc9
+pkgver=1.0rc3
+_pkgver=eb749c000ffc
pkgrel=1
epoch=0
pkgdesc="Accelerate the ray intersection process by using CPUs (without OpenCL)"
@@ -17,7 +17,7 @@ replaces=('luxrays')
conflicts=('luxrays')
provides=("luxrays=$pkgver")
source=(https://bitbucket.org/luxrender/luxrays/get/$_pkgver.tar.bz2)
-md5sums=('b4f31563a8235a2791ab9df58be43adb')
+md5sums=('f5f4b53df22a1c7ad301c78d046edd7d')
build() {
cd "$srcdir/luxrender-$_pkgname-$_pkgver"
diff --git a/libre/luxrender-libre/PKGBUILD b/libre/luxrender-libre/PKGBUILD
index c802e1200..be6fd88e8 100644
--- a/libre/luxrender-libre/PKGBUILD
+++ b/libre/luxrender-libre/PKGBUILD
@@ -2,10 +2,10 @@
# Maintainer: Lukas Jirkovsky <l.jirkovsky@gmail.com>
# Initial contributor: flixie <69one@gmx.net>
# Contributor: Imanol Celaya <ornitorrincos@archlinux-es.org>
-# Maintainer (Parabola): Márcio Silva <coadde@adinet.com.uy>
+# Maintainer (Parabola): Márcio Silva <coadde@lavabit.com>
pkgname=luxrender-libre
-pkgver=1.0rc2
-_pkgver=008805644181
+pkgver=1.0rc3
+_pkgver=9ed6b94cef05
pkgrel=1
pkgdesc="Rendering system for physically correct, unbiased image synthesis (without OpenCL)"
arch=('i686' 'x86_64' 'mips64el')
@@ -18,12 +18,18 @@ makedepends=('cmake' 'boost' 'qt' 'luxrays-libre' 'python')
replaces=('luxrender')
conflicts=('luxrender')
provides=("luxrender=$pkgver")
-source=(https://bitbucket.org/luxrender/lux/get/"$_pkgver".tar.bz2)
-md5sums=('1922ccce6f70e7d707b340e2415875cd')
+source=(https://bitbucket.org/luxrender/lux/get/$_pkgver.tar.bz2 \
+ boost_1.50_fix.diff)
+md5sums=('54ff625a7833541c3cff5f0a77a93863'
+ '8c7774bb0c97aadd77d9e665d8fa4aab')
build() {
cd "$srcdir"/luxrender-lux-$_pkgver
+ # fix for boost 1.50
+ # the boost::TIME_UTC has been renamed due to the conflict with C++11
+ patch -Np1 < "$srcdir"/boost_1.50_fix.diff || true
+
export CXXFLAGS="$CXXFLAGS -lpthread"
cmake -DCMAKE_INSTALL_PREFIX=/usr \
-DLUXRAYS_DISABLE_OPENCL=ON \
diff --git a/libre/luxrender-libre/boost_1.50_fix.diff b/libre/luxrender-libre/boost_1.50_fix.diff
new file mode 100644
index 000000000..c1aa0a8e2
--- /dev/null
+++ b/libre/luxrender-libre/boost_1.50_fix.diff
@@ -0,0 +1,131 @@
+diff -rup luxrender-lux-008805644181/core/film.cpp luxrender-lux-008805644181.new/core/film.cpp
+--- luxrender-lux-008805644181/core/film.cpp 2012-06-02 08:40:33.000000000 +0200
++++ luxrender-lux-008805644181.new/core/film.cpp 2012-07-07 15:44:59.867492295 +0200
+@@ -618,7 +618,7 @@ Film::Film(u_int xres, u_int yres, Filte
+ int yRealHeight = Floor2Int(yPixelStart + .5f + yPixelCount + filter->yWidth) - Floor2Int(yPixelStart + .5f - filter->yWidth);
+ samplePerPass = xRealWidth * yRealHeight;
+
+- boost::xtime_get(&creationTime, boost::TIME_UTC);
++ boost::xtime_get(&creationTime, boost::TIME_UTC_);
+
+ //Queryable parameters
+ AddIntAttribute(*this, "xResolution", "Horizontal resolution (pixels)", &Film::GetXResolution);
+@@ -855,7 +855,7 @@ void Film::AddSampleCount(float count) {
+ if (haltTime > 0) {
+ // Check if we have met the enough rendering time condition
+ boost::xtime t;
+- boost::xtime_get(&t, boost::TIME_UTC);
++ boost::xtime_get(&t, boost::TIME_UTC_);
+ if (t.sec - creationTime.sec > haltTime)
+ enoughSamplesPerPixel = true;
+ }
+diff -rup luxrender-lux-008805644181/core/photonmap.cpp luxrender-lux-008805644181.new/core/photonmap.cpp
+--- luxrender-lux-008805644181/core/photonmap.cpp 2012-06-02 08:40:33.000000000 +0200
++++ luxrender-lux-008805644181.new/core/photonmap.cpp 2012-07-07 15:44:59.870825579 +0200
+@@ -474,13 +474,13 @@ void PhotonMapPreprocess(const RandomGen
+
+ boost::xtime photonShootingStartTime;
+ boost::xtime lastUpdateTime;
+- boost::xtime_get(&photonShootingStartTime, boost::TIME_UTC);
+- boost::xtime_get(&lastUpdateTime, boost::TIME_UTC);
++ boost::xtime_get(&photonShootingStartTime, boost::TIME_UTC_);
++ boost::xtime_get(&lastUpdateTime, boost::TIME_UTC_);
+ u_int nshot = 0;
+ while ((!radianceDone || !directDone || !causticDone || !indirectDone) && !scene.terminated) {
+ // Dade - print some progress information
+ boost::xtime currentTime;
+- boost::xtime_get(&currentTime, boost::TIME_UTC);
++ boost::xtime_get(&currentTime, boost::TIME_UTC_);
+ if (currentTime.sec - lastUpdateTime.sec > 5) {
+ ss.str("");
+ ss << "Photon shooting progress: Direct[" << directPhotons.size();
+@@ -686,7 +686,7 @@ void PhotonMapPreprocess(const RandomGen
+ return;
+
+ boost::xtime photonShootingEndTime;
+- boost::xtime_get(&photonShootingEndTime, boost::TIME_UTC);
++ boost::xtime_get(&photonShootingEndTime, boost::TIME_UTC_);
+ LOG(LUX_INFO,LUX_NOERROR) << "Photon shooting done (" << ( photonShootingEndTime.sec - photonShootingStartTime.sec ) << "s)";
+
+ if (computeRadianceMap) {
+@@ -700,7 +700,7 @@ void PhotonMapPreprocess(const RandomGen
+ for (u_int i = 0; i < radiancePhotons.size(); ++i) {
+ // Dade - print some progress info
+ boost::xtime currentTime;
+- boost::xtime_get(&currentTime, boost::TIME_UTC);
++ boost::xtime_get(&currentTime, boost::TIME_UTC_);
+ if (currentTime.sec - lastUpdateTime.sec > 5) {
+ LOG(LUX_INFO,LUX_NOERROR) << "Radiance photon map computation progress: " << i << " (" << (100 * i / radiancePhotons.size()) << "%)";
+
+@@ -740,7 +740,7 @@ void PhotonMapPreprocess(const RandomGen
+
+
+ boost::xtime radianceComputeEndTime;
+- boost::xtime_get(&radianceComputeEndTime, boost::TIME_UTC);
++ boost::xtime_get(&radianceComputeEndTime, boost::TIME_UTC_);
+ LOG(LUX_INFO,LUX_NOERROR) << "Radiance photon map computed (" << ( radianceComputeEndTime.sec - photonShootingEndTime.sec ) << "s)";
+ }
+
+diff -rup luxrender-lux-008805644181/core/renderfarm.cpp luxrender-lux-008805644181.new/core/renderfarm.cpp
+--- luxrender-lux-008805644181/core/renderfarm.cpp 2012-06-02 08:40:33.000000000 +0200
++++ luxrender-lux-008805644181.new/core/renderfarm.cpp 2012-07-07 15:44:59.870825579 +0200
+@@ -100,7 +100,7 @@ void FilmUpdaterThread::updateFilm(FilmU
+ // Dade - thread to update the film with data from servers
+
+ boost::xtime reft;
+- boost::xtime_get(&reft, boost::TIME_UTC);
++ boost::xtime_get(&reft, boost::TIME_UTC_);
+
+ while (filmUpdaterThread->signal == SIG_NONE) {
+ // Dade - check signal every 1 sec
+@@ -108,7 +108,7 @@ void FilmUpdaterThread::updateFilm(FilmU
+ for(;;) {
+ // Dade - sleep for 1 sec
+ boost::xtime xt;
+- boost::xtime_get(&xt, boost::TIME_UTC);
++ boost::xtime_get(&xt, boost::TIME_UTC_);
+ xt.sec += 1;
+ boost::thread::sleep(xt);
+
+diff -rup luxrender-lux-008805644181/film/fleximage.cpp luxrender-lux-008805644181.new/film/fleximage.cpp
+--- luxrender-lux-008805644181/film/fleximage.cpp 2012-06-02 08:40:33.000000000 +0200
++++ luxrender-lux-008805644181.new/film/fleximage.cpp 2012-07-07 15:44:59.877492150 +0200
+@@ -191,7 +191,7 @@ FlexImageFilm::FlexImageFilm(u_int xres,
+ m_CameraResponseEnabled = d_CameraResponseEnabled = m_CameraResponseFile != "";
+
+ // init timer
+- boost::xtime_get(&lastWriteImageTime, boost::TIME_UTC);
++ boost::xtime_get(&lastWriteImageTime, boost::TIME_UTC_);
+ lastWriteFLMTime = lastWriteImageTime;
+ }
+
+@@ -812,7 +812,7 @@ void FlexImageFilm::CheckWriteOuputInter
+ {
+ // Check write output interval
+ boost::xtime currentTime;
+- boost::xtime_get(&currentTime, boost::TIME_UTC);
++ boost::xtime_get(&currentTime, boost::TIME_UTC_);
+ bool timeToWriteImage = (currentTime.sec - lastWriteImageTime.sec > writeInterval);
+ bool timeToWriteFLM = (currentTime.sec - lastWriteFLMTime.sec > flmWriteInterval);
+
+@@ -834,7 +834,7 @@ void FlexImageFilm::CheckWriteOuputInter
+ // WriteImage can take a very long time to be executed (i.e. by saving
+ // the film. It is better to refresh timestamps after the
+ // execution of WriteImage instead than before.
+- boost::xtime_get(&currentTime, boost::TIME_UTC);
++ boost::xtime_get(&currentTime, boost::TIME_UTC_);
+
+ if (timeToWriteImage)
+ lastWriteImageTime = currentTime;
+diff -rup luxrender-lux-008805644181/renderers/sppmrenderer.h luxrender-lux-008805644181.new/renderers/sppmrenderer.h
+--- luxrender-lux-008805644181/renderers/sppmrenderer.h 2012-06-02 08:40:33.000000000 +0200
++++ luxrender-lux-008805644181.new/renderers/sppmrenderer.h 2012-07-07 15:44:59.874158864 +0200
+@@ -126,7 +126,7 @@ public:
+ {
+ while (state == PAUSE && !boost::this_thread::interruption_requested()) {
+ boost::xtime xt;
+- boost::xtime_get(&xt, boost::TIME_UTC);
++ boost::xtime_get(&xt, boost::TIME_UTC_);
+ xt.sec += 1;
+ boost::thread::sleep(xt);
+ }
diff --git a/libre/mc-libre/PKGBUILD b/libre/mc-libre/PKGBUILD
new file mode 100644
index 000000000..fabd87469
--- /dev/null
+++ b/libre/mc-libre/PKGBUILD
@@ -0,0 +1,69 @@
+# $Id$
+# Contributor: Daniel J Griffiths <ghost1227@archlinux.us>
+# Maintainer: schuay <jakob.gruber@gmail.com>
+
+_pkgname=mc
+pkgname=mc-libre
+pkgver=4.8.4
+pkgrel=1
+pkgdesc="Midnight Commander is a text based filemanager/shell that emulates Norton Commander"
+arch=('i686' 'x86_64' 'mips64el')
+url="http://www.ibiblio.org/mc/"
+license=('GPL')
+depends=('e2fsprogs' 'glib2' 'pcre' 'gpm' 'slang')
+makedepends=('libxt' 'libx11')
+optdepends=('p7zip: support for 7zip archives'
+ 'mtools: a+ extfs'
+ 'cdparanoia: audio extfs'
+ 'gawk: hp48+ extfs'
+ 'cdrkit: iso9660 extfs'
+ 'perl: needed by several extfs scripts'
+ 'python-boto: s3+ extfs'
+ 'python2-pytz: s3+ extfs'
+ 'p7zip: u7z extfs'
+ 'arj: uarj extfs'
+ 'cabextract: ucab extfs'
+ 'ununrar: urar extfs'
+ 'zip: uzip extfs')
+conflicts=('mc')
+replaces=('mc')
+provides=("mc=${pkgver}")
+options=('!emptydirs' '!makeflags')
+backup=('etc/mc/edit.indent.rc'
+ 'etc/mc/edit.spell.rc'
+ 'etc/mc/filehighlight.ini'
+ 'etc/mc/mcedit.menu'
+ 'etc/mc/mc.ext'
+ 'etc/mc/mc.keymap'
+ 'etc/mc/mc.menu'
+ 'etc/mc/sfs.ini')
+source=("http://www.midnight-commander.org/downloads/${_pkgname}-${pkgver}.tar.bz2")
+
+build() {
+ cd "${srcdir}/${_pkgname}-${pkgver}"
+
+ ./configure \
+ --prefix=/usr --sysconfdir=/etc --mandir=/usr/share/man \
+ --enable-background --enable-charset --enable-largefile \
+ --with-edit --with-gpm-mouse --with-mmap --enable-vfs-smb \
+ --with-screen=slang --with-subshell --with-vfs --with-x \
+ --without-debug --without-gnome --without-included-gettext \
+ --libexecdir=/usr/lib
+
+ make
+}
+
+package() {
+ cd "${srcdir}/${_pkgname}-${pkgver}"
+
+ make DESTDIR="${pkgdir}" install
+
+ # Fix FS#15177
+ sed 's|op_has_zipinfo = 0|op_has_zipinfo = 1|' \
+ -i "${pkgdir}/usr/lib/mc/extfs.d/uzip"
+
+ sed 's#/usr/bin/env python#/usr/bin/python2#' \
+ -i "${pkgdir}/usr/lib/mc/extfs.d/s3+"
+}
+
+md5sums=('a8edb8226cb25869f925ecce043faf1e')
diff --git a/libre/mcomix-libre/PKGBUILD b/libre/mcomix-libre/PKGBUILD
new file mode 100644
index 000000000..d30bbb1a3
--- /dev/null
+++ b/libre/mcomix-libre/PKGBUILD
@@ -0,0 +1,47 @@
+# $Id$
+# Maintainer: schuay <jakob.gruber@gmail.com>
+# Contributor: Ray Powell <ray_al@xphoniexx.net>
+# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
+
+_pkgname=mcomix
+pkgname=mcomix-libre
+pkgver=0.99
+pkgrel=1
+pkgdesc="A user-friendly, customizable image viewer specifically designed to handle comic books"
+arch=('any')
+url="http://sourceforge.net/projects/mcomix/"
+license=('GPL')
+depends=('pygtk' 'python-imaging' 'xdg-utils' 'python2' \
+ 'desktop-file-utils' 'hicolor-icon-theme' 'python2-distribute')
+makedepends=('gettext' 'intltool')
+optdepends=('ununrar: for rar compressed comics')
+conflicts=('mcomix' 'comix')
+replaces=('mcomix' 'comix')
+provides=("mcomix=${pkgver}")
+install='mcomix.install'
+source=("http://downloads.sourceforge.net/project/mcomix/MComix-${pkgver}/mcomix-${pkgver}.tar.bz2")
+
+build() {
+ cd ${srcdir}/${_pkgname}-${pkgver}
+
+ # python2 fix
+ for file in $(grep -Rl "/usr/bin/env python" .);
+ do
+ sed -i 's_#!/usr/bin/env python_#!/usr/bin/env python2_' $file
+ done
+}
+
+package() {
+ cd ${srcdir}/${_pkgname}-${pkgver}
+
+ export PYTHONPATH=${pkgdir}/usr/lib/python2.7/site-packages/
+ mkdir -p $PYTHONPATH
+
+ python2 setup.py install --prefix=${pkgdir}/usr --optimize=1 \
+ --single-version-externally-managed --root=/
+
+ install -Dm644 mime/comicbook.schemas \
+ ${pkgdir}/usr/share/gconf/schemas/mcomix.schemas
+}
+
+md5sums=('a1ff7e1955042069d5005b4034e7a914')
diff --git a/libre/mcomix-libre/mcomix.install b/libre/mcomix-libre/mcomix.install
new file mode 100644
index 000000000..2d3c6c3e3
--- /dev/null
+++ b/libre/mcomix-libre/mcomix.install
@@ -0,0 +1,32 @@
+pkgname=mcomix
+
+post_install() {
+ if [ -f usr/bin/xdg-icon-resource ]; then
+ xdg-icon-resource forceupdate
+ fi
+ if [ -f usr/sbin/gconfpkg ]; then
+ usr/sbin/gconfpkg --install ${pkgname}
+ fi
+ update-desktop-database -q
+}
+
+pre_upgrade() {
+ pre_remove $1
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+pre_remove() {
+ if [ -f usr/sbin/gconfpkg ]; then
+ usr/sbin/gconfpkg --uninstall ${pkgname}
+ fi
+}
+
+post_remove() {
+ if [ -f usr/bin/xdg-icon-resource ]; then
+ xdg-icon-resource forceupdate
+ fi
+ update-desktop-database -q
+}
diff --git a/libre/mozilla-devscripts/PKGBUILD b/libre/mozilla-devscripts/PKGBUILD
index faa4b3a2a..ef7ea7641 100644
--- a/libre/mozilla-devscripts/PKGBUILD
+++ b/libre/mozilla-devscripts/PKGBUILD
@@ -1,8 +1,9 @@
# Maintainer: Michał Masłowski <mtjm@mtjm.eu>
+# Contributor: Márcio Silva <coadde@lavabit.com>
pkgname=mozilla-devscripts
-pkgver=0.30
-pkgrel=1.1
+pkgver=0.32
+pkgrel=1
pkgdesc="Development scripts used by Debian Mozilla's addons packages"
arch=("any")
url="http://packages.debian.org/source/unstable/mozilla-devscripts"
@@ -11,8 +12,8 @@ depends=("python2" "zip" "unzip")
_debrepo=http://ftp.debian.org/debian/pool/main/
source=("${_debrepo}/m/${pkgname}/${pkgname}_${pkgver}.dsc"
"${_debrepo}/m/${pkgname}/${pkgname}_${pkgver}.tar.gz")
-md5sums=("6e517cef69c115356eb808866fd29268"
- "4e95fb93d0d93b56543d2a789d457309")
+md5sums=("386a5854601f29dca4a293f90f6c2a69"
+ "230126afa15fa654eb254bb4e61b4a93")
build() {
cd "$srcdir/$pkgname-$pkgver"
diff --git a/libre/mplayer-libre/PKGBUILD b/libre/mplayer-libre/PKGBUILD
index cf2be2b5f..3e9d0a44d 100644
--- a/libre/mplayer-libre/PKGBUILD
+++ b/libre/mplayer-libre/PKGBUILD
@@ -1,33 +1,27 @@
-# $Id: PKGBUILD 152227 2012-03-05 09:38:48Z ibiru $
+# $Id: PKGBUILD 163126 2012-07-07 16:29:25Z ibiru $
# Maintainer : Ionut Biru <ibiru@archlinux.org>
# Contributor: Hugo Doria <hugo@archlinux.org>
-# Maintainer (Parabola): André Silva <andre.paulista@adinet.com.uy>
-
-# libvdpau is currently useful only with proprietary software
+# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
_pkgbase=mplayer
pkgbase=mplayer-libre
pkgname=('mplayer-libre' 'mencoder-libre')
-pkgver=34799
-pkgrel=2
+pkgver=35014
+pkgrel=1
arch=('i686' 'x86_64')
-makedepends=('libxxf86dga' 'libxxf86vm' 'libmad' 'cdparanoia' 'libxinerama' 'sdl' 'lame' 'libtheora' 'xvidcore' 'libmng' 'libxss' 'libgl' 'smbclient'
+makedepends=('libxxf86dga' 'libxxf86vm' 'libmad' 'libxinerama' 'sdl' 'lame' 'libtheora' 'xvidcore' 'libmng' 'libxss' 'libgl' 'smbclient'
'aalib' 'jack' 'libcaca' 'x264' 'faad2' 'lirc-utils' 'libxvmc' 'enca' 'libvdpau' 'opencore-amr' 'libdca' 'a52dec' 'schroedinger' 'libvpx'
-'libpulse' 'fribidi' 'unzip-libre' 'mesa' 'live-media' 'yasm' 'git' 'fontconfig' 'mpg123' 'ladspa' 'libass' 'libbluray' 'libcdio')
+'libpulse' 'fribidi' 'unzip-libre' 'mesa' 'live-media' 'yasm' 'git' 'fontconfig' 'mpg123' 'ladspa' 'libass' 'libbluray' 'libcdio' 'subversion')
license=('GPL')
url="http://www.mplayerhq.hu/"
options=(!buildflags !emptydirs)
-source=(ftp://ftp.archlinux.org/other/$_pkgbase/$_pkgbase-$pkgver.tar.xz mplayer.desktop
- live-media.patch)
-md5sums=('e8bd960bcdb48fdc5a1f45390dc13c53'
- 'c0d6ef795cf6de48e3b87ff7c23f0319'
- 'b6c057633ff7001ee0c102b5f81ec1e3')
+source=(ftp://ftp.archlinux.org/other/$_pkgbase/$_pkgbase-$pkgver.tar.xz mplayer.desktop)
+md5sums=('d0785560e5e8eb02e089728ef4412eae'
+ 'c0d6ef795cf6de48e3b87ff7c23f0319')
build() {
cd "$srcdir/$_pkgbase"
- patch -Np0 -i "$srcdir/live-media.patch"
-
./configure --prefix=/usr \
--enable-runtime-cpudetection \
--disable-gui \
@@ -52,11 +46,11 @@ build() {
}
package_mplayer-libre() {
- pkgdesc="A movie player for GNU/Linux (no unfree faac support)"
+ pkgdesc="A movie player for GNU/Linux (without unfree faac support)"
install=mplayer.install
backup=('etc/mplayer/codecs.conf' 'etc/mplayer/input.conf')
depends=('desktop-file-utils' 'ttf-dejavu' 'enca' 'libxss' 'a52dec' 'libvpx' 'lirc-utils' 'x264' 'libmng' 'libdca' 'aalib' 'lame' 'fontconfig' 'libgl'
- 'libxinerama' 'libvdpau' 'libpulse' 'smbclient' 'xvidcore' 'opencore-amr' 'jack' 'cdparanoia' 'libmad' 'sdl' 'libtheora' 'libcaca' 'libxxf86dga' 'fribidi'
+ 'libxinerama' 'libvdpau' 'libpulse' 'smbclient' 'xvidcore' 'opencore-amr' 'jack' 'libmad' 'sdl' 'libtheora' 'libcaca' 'libxxf86dga' 'fribidi'
'libjpeg' 'faad2' 'libxvmc' 'schroedinger' 'mpg123' 'libass' 'libxxf86vm' 'libbluray' 'libcdio')
provides=("mplayer=$pkgver")
replaces=('mplayer')
@@ -76,7 +70,7 @@ package_mplayer-libre() {
package_mencoder-libre() {
pkgdesc="Free command line video decoding, encoding and filtering tool (without unfree faac support)"
- depends=('enca' 'a52dec' 'libvpx' 'x264' 'libmng' 'libdca' 'bzip2' 'lame' 'alsa-lib' 'fontconfig' 'giflib' 'libpng' 'smbclient' 'xvidcore' 'opencore-amr' 'cdparanoia'
+ depends=('enca' 'a52dec' 'libvpx' 'x264' 'libmng' 'libdca' 'bzip2' 'lame' 'alsa-lib' 'fontconfig' 'giflib' 'libpng' 'smbclient' 'xvidcore' 'opencore-amr'
'libmad' 'libtheora' 'fribidi' 'libjpeg' 'faad2' 'schroedinger' 'mpg123' 'libass' 'libbluray' 'libcdio')
provides=("mencoder=$pkgver")
replaces=('mencoder')
diff --git a/libre/mplayer-vaapi-libre/PKGBUILD b/libre/mplayer-vaapi-libre/PKGBUILD
index 3ef5c65ee..41f84e022 100644
--- a/libre/mplayer-vaapi-libre/PKGBUILD
+++ b/libre/mplayer-vaapi-libre/PKGBUILD
@@ -1,47 +1,42 @@
# $Id$
-# Maintainer (Parabola): fauno <fauno@kiwwwi.com.ar>
-# Contributor (Parabola): André Silva <andre.paulista@adinet.com.uy>
# Maintainer: Evangelos Foutras <evangelos@foutrelis.com>
# Contributor: Ionut Biru <ibiru@archlinux.org>
# Contributor: Hugo Doria <hugo@archlinux.org>
+# Maintainer (Parabola): fauno <fauno@kiwwwi.com.ar>
+# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
-_pkgname=mplayer-vaapi
pkgname=mplayer-vaapi-libre
-pkgver=34578
-pkgrel=5.1
-pkgdesc="A movie player, compiled with vaapi support"
+pkgver=35014
+pkgrel=1
+pkgdesc="A movie player, compiled with vaapi (without unfree faac support)"
arch=('i686' 'x86_64')
url="http://gitorious.org/vaapi/mplayer"
license=('GPL')
-depends=('libxxf86dga' 'libxxf86vm' 'libmad' 'libcdio' 'libxinerama' 'sdl-libre'
+depends=('libxxf86dga' 'libxxf86vm' 'libmad' 'libcdio' 'libxinerama' 'sdl'
'lame' 'fontconfig' 'libtheora' 'xvidcore' 'libmng' 'libxss' 'mesa'
'smbclient' 'aalib' 'jack' 'libcaca' 'x264' 'speex' 'faad2'
'lirc-utils' 'ttf-dejavu' 'libxvmc' 'enca' 'opencore-amr' 'libdca'
- 'a52dec' 'schroedinger' 'mpg123' 'libvpx' 'libpulse' 'fribidi' 'faad2'
- 'libva' 'libass' 'desktop-file-utils')
+ 'a52dec' 'schroedinger' 'mpg123' 'libvpx' 'libpulse' 'fribidi'
+ 'libbluray' 'libva' 'libass' 'desktop-file-utils')
makedepends=('unzip-libre' 'live-media' 'yasm' 'ladspa' 'git')
-provides=("$_pkgname=$pkgver" "mplayer=$pkgver")
-conflicts=('mplayer' "$_pkgname")
+provides=("mplayer=$pkgver" "mplayer-vaapi=$pkgver")
+conflicts=('mplayer' 'mplayer-vaapi')
replaces=('mplayer-vaapi')
backup=('etc/mplayer/codecs.conf' 'etc/mplayer/input.conf')
source=(http://pkgbuild.com/~foutrelis/mplayer-vaapi-$pkgver.tar.xz
- tweak-desktop-file.patch
- mplayer.png
- live-media.patch)
+ tweak-desktop-file.patch)
options=('!buildflags' '!emptydirs')
install=mplayer-vaapi.install
-sha256sums=('cc35a057c8a64d2cdec2dc0a037811ef0f91dd03cd3d07465c7272a08665a37d'
- '5b39f0a61969bf330c4434cb17975101be93c27334f65e154e4a93033033e795'
- '061739a8cc267748ad58f168034cc39785d949a5262772535e1b347c7842af48'
- '9c1400f27dd2ea54c125c66ed1af0eab19761b1b2ae808fa491cd3732fd8a685')
+sha256sums=('db19a938e7de46aad567b6d7d8866ec6cb3919a29d60236609a83ebf4e1bb5f0'
+ '5a09fb462729a4e573568f9e8c1f57dbe7f69c0b68cfa4f6d70b3e52c450d93b')
build() {
cd "$srcdir/mplayer-vaapi-$pkgver"
patch -d etc -Np0 -i "$srcdir/tweak-desktop-file.patch"
- patch -Np0 -i "$srcdir/live-media.patch"
- ./configure --prefix=/usr \
+ ./configure \
+ --prefix=/usr \
--enable-runtime-cpudetection \
--disable-gui \
--disable-arts \
@@ -56,6 +51,8 @@ build() {
--disable-ass-internal \
--disable-faac \
--enable-xvmc \
+ --enable-radio \
+ --enable-radio-capture \
--disable-vdpau \
--enable-vaapi \
--language=all \
@@ -69,13 +66,13 @@ build() {
package() {
cd "$srcdir/mplayer-vaapi-$pkgver"
- make -j1 DESTDIR="$pkgdir" install-mplayer install-mplayer-man
+ make DESTDIR="$pkgdir" install-mplayer install-mplayer-man
install -Dm644 etc/{codecs.conf,input.conf,example.conf} "$pkgdir/etc/mplayer/"
install -Dm644 etc/mplayer.desktop "$pkgdir/usr/share/applications/mplayer.desktop"
install -d "$pkgdir/usr/share/mplayer/"
ln -s /usr/share/fonts/TTF/DejaVuSans.ttf "$pkgdir/usr/share/mplayer/subfont.ttf"
rm -rf "$pkgdir/usr/share/mplayer/font"
- install -Dm644 "$srcdir/mplayer.png" "$pkgdir/usr/share/pixmaps/mplayer.png"
+ install -Dm644 etc/mplayer256x256.png "$pkgdir/usr/share/pixmaps/mplayer.png"
}
# vim:set ts=2 sw=2 et:
diff --git a/libre/mplayer-vaapi-libre/mplayer-vaapi.install b/libre/mplayer-vaapi-libre/mplayer-vaapi.install
index af56cdbf4..a44f19aef 100644
--- a/libre/mplayer-vaapi-libre/mplayer-vaapi.install
+++ b/libre/mplayer-vaapi-libre/mplayer-vaapi.install
@@ -1,9 +1,11 @@
post_install() {
- update-desktop-database -q
+ update-desktop-database -q
}
post_upgrade() {
- post_install
+ post_install
}
post_remove() {
- post_install
+ post_install
}
+
+# vim:set ts=2 sw=2 et:
diff --git a/libre/mplayer-vaapi-libre/tweak-desktop-file.patch b/libre/mplayer-vaapi-libre/tweak-desktop-file.patch
index db0f377d2..606e356b0 100644
--- a/libre/mplayer-vaapi-libre/tweak-desktop-file.patch
+++ b/libre/mplayer-vaapi-libre/tweak-desktop-file.patch
@@ -1,19 +1,6 @@
---- mplayer.desktop.orig 2012-05-13 19:25:26.000000000 +0300
-+++ mplayer.desktop 2012-05-13 19:32:19.000000000 +0300
-@@ -7,12 +7,6 @@ GenericName[de]=Medienwiedergabe
- GenericName[fr]=Lecteur multimédia
- GenericName[it]=Lettore multimediale
- GenericName[ja]=メディアプレーヤー
--X-GNOME-FullName=MPlayer Media Player
--X-GNOME-FullName[ca]=MPlayer Reproductor multimèdia
--X-GNOME-FullName[de]=MPlayer Medienwiedergabe
--X-GNOME-FullName[fr]=MPlayer Lecteur multimédia
--X-GNOME-FullName[it]=MPlayer Lettore multimediale
--X-GNOME-FullName[ja]=MPlayer メディアプレーヤー
- Comment=Play movies and songs
- Comment[ca]=Reproduïu vídeos i cançons
- Comment[de]=Filme und Musik wiedergeben
-@@ -20,8 +14,9 @@ Comment[fr]=Lit les films et musiques
+--- mplayer.desktop.orig 2012-07-08 22:18:27.000000000 +0300
++++ mplayer.desktop 2012-07-08 22:19:08.000000000 +0300
+@@ -23,8 +23,9 @@ Comment[fr]=Lit les films et musiques
Comment[it]=Riproduce filmati e musica
Comment[ja]=動画や音声のファイルを再生します
Icon=mplayer
@@ -24,5 +11,4 @@
Terminal=false
+NoDisplay=true
Categories=GTK;AudioVideo;Audio;Video;Player;TV;
--MimeType=application/ogg;application/x-ogg;application/sdp;application/smil;application/x-smil;application/streamingmedia;application/x-streamingmedia;application/vnd.rn-realmedia;application/vnd.rn-realmedia-vbr;audio/aac;audio/x-aac;audio/m4a;audio/x-m4a;audio/mp1;audio/x-mp1;audio/mp2;audio/x-mp2;audio/mp3;audio/x-mp3;audio/mpeg;audio/x-mpeg;audio/mpegurl;audio/x-mpegurl;audio/mpg;audio/x-mpg;audio/rn-mpeg;audio/scpls;audio/x-scpls;audio/vnd.rn-realaudio;audio/wav;audio/x-pn-windows-pcm;audio/x-realaudio;audio/x-pn-realaudio;audio/x-ms-wma;audio/x-pls;audio/x-wav;video/mpeg;video/x-mpeg;video/x-mpeg2;video/msvideo;video/x-msvideo;video/quicktime;video/vnd.rn-realvideo;video/x-ms-afs;video/x-ms-asf;video/x-ms-wmv;video/x-ms-wmx;video/x-ms-wvxvideo;video/x-avi;video/x-fli;video/x-theora;video/x-matroska;video/3gpp;application/x-flash-video;
-+MimeType=application/ogg;application/x-ogg;application/sdp;application/smil;application/x-smil;application/streamingmedia;application/x-streamingmedia;application/vnd.rn-realmedia;application/vnd.rn-realmedia-vbr;audio/aac;audio/x-aac;audio/m4a;audio/x-m4a;audio/mp1;audio/x-mp1;audio/mp2;audio/x-mp2;audio/mp3;audio/x-mp3;audio/mpeg;audio/x-mpeg;audio/mpegurl;audio/x-mpegurl;audio/mpg;audio/x-mpg;audio/rn-mpeg;audio/scpls;audio/x-scpls;audio/vnd.rn-realaudio;audio/wav;audio/x-pn-windows-pcm;audio/x-realaudio;audio/x-pn-realaudio;audio/x-ms-wma;audio/x-pls;audio/x-wav;video/mpeg;video/x-mpeg;video/x-mpeg2;video/mp4;video/msvideo;video/x-msvideo;video/quicktime;video/vnd.rn-realvideo;video/x-ms-afs;video/x-ms-asf;video/x-ms-wmv;video/x-ms-wmx;video/x-ms-wvxvideo;video/x-avi;video/x-fli;video/x-flv;video/x-theora;video/x-matroska;video/3gpp;application/x-flash-video;
+ MimeType=application/mxf;application/x-netshow-channel;application/ogg;application/ram;application/vnd.rn-realmedia;application/x-shockwave-flash;application/smil;audio/ac3;audio/x-adpcm;audio/x-aiff;audio/AMR;audio/AMR-WB;audio/x-ape;audio/basic;audio/flac;audio/x-flac;audio/x-flac+ogg;audio/x-m4b;audio/x-matroska;audio/mp2;audio/mp4;audio/mpeg;audio/x-mpegurl;audio/x-ms-asx;audio/x-ms-wma;audio/x-musepack;audio/ogg;audio/vnd.rn-realaudio;audio/x-scpls;audio/x-voc;audio/x-vorbis+ogg;audio/x-wav;audio/x-wavpack;video/3gpp;video/3gpp2;video/dv;video/x-flic;video/x-flv;video/x-matroska;video/mp2t;video/mp4;video/mpeg;video/x-ms-asf;video/x-ms-wmv;video/x-msvideo;video/x-nsv;video/ogg;video/x-ogm+ogg;video/quicktime;video/vnd.rn-realvideo;video/x-theora+ogg;video/webm;
diff --git a/libre/pacman/0001-Add-conflict-for-replacing-owned-empty-directory.patch b/libre/pacman/0001-Add-conflict-for-replacing-owned-empty-directory.patch
new file mode 100644
index 000000000..85622aaac
--- /dev/null
+++ b/libre/pacman/0001-Add-conflict-for-replacing-owned-empty-directory.patch
@@ -0,0 +1,152 @@
+From 717fdb8ee0fd23cf72fc7d2832317f513caefa2c Mon Sep 17 00:00:00 2001
+From: Allan McRae <allan@archlinux.org>
+Date: Sun, 8 Jul 2012 21:36:36 +1000
+Subject: [PATCH 1/4] Add conflict for replacing owned empty directory
+
+When two packages own an empty directory, pacman finds no conflict when
+one of those packages wants to replace the directory with a file or a
+symlink. When it comes to actually extracting the new file/symlink,
+pacman sees the directory is still there (we do not remove empty
+directories if they are owned by a package) and refuses to extract.
+
+Detect this potential conflict early and bail. Note that it is a
+_potential_ conflict and not a guaranteed one as the other package owning
+the directory could be updated or removed first which would remove
+the conflict. However, pacman currently can not sort package installation
+order to ensure this, so this conflict requires manual upgrade ordering.
+
+Signed-off-by: Allan McRae <allan@archlinux.org>
+Signed-off-by: Dan McGee <dan@archlinux.org>
+---
+ lib/libalpm/conflict.c | 32 ++++++++++++++++++++++++++------
+ test/pacman/tests/fileconflict009.py | 20 ++++++++++++++++++++
+ test/pacman/tests/fileconflict010.py | 20 ++++++++++++++++++++
+ 3 files changed, 66 insertions(+), 6 deletions(-)
+ create mode 100644 test/pacman/tests/fileconflict009.py
+ create mode 100644 test/pacman/tests/fileconflict010.py
+
+diff --git a/lib/libalpm/conflict.c b/lib/libalpm/conflict.c
+index 32f6f30..efa1a87 100644
+--- a/lib/libalpm/conflict.c
++++ b/lib/libalpm/conflict.c
+@@ -328,15 +328,35 @@ const alpm_file_t *_alpm_filelist_contains(alpm_filelist_t *filelist,
+ return NULL;
+ }
+
+-static int dir_belongsto_pkg(const char *root, const char *dirpath,
++static int dir_belongsto_pkg(alpm_handle_t *handle, const char *dirpath,
+ alpm_pkg_t *pkg)
+ {
++ alpm_list_t *i;
+ struct stat sbuf;
+ char path[PATH_MAX];
+ char abspath[PATH_MAX];
+- struct dirent *ent = NULL;
+ DIR *dir;
++ struct dirent *ent = NULL;
++ const char *root = handle->root;
++
++ /* TODO: this is an overly strict check but currently pacman will not
++ * overwrite a directory with a file (case 10/11 in add.c). Adjusting that
++ * is not simple as even if the directory is being unowned by a conflicting
++ * package, pacman does not sort this to ensure all required directory
++ * "removals" happen before installation of file/symlink */
++
++ /* check that no other _installed_ package owns the directory */
++ for(i = _alpm_db_get_pkgcache(handle->db_local); i; i = i->next) {
++ if(pkg == i->data) {
++ continue;
++ }
++
++ if(_alpm_filelist_contains(alpm_pkg_get_files(i->data), dirpath)) {
++ return 0;
++ }
++ }
+
++ /* check all files in directory are owned by the package */
+ snprintf(abspath, PATH_MAX, "%s%s", root, dirpath);
+ dir = opendir(abspath);
+ if(dir == NULL) {
+@@ -349,13 +369,13 @@ static int dir_belongsto_pkg(const char *root, const char *dirpath,
+ if(strcmp(name, ".") == 0 || strcmp(name, "..") == 0) {
+ continue;
+ }
+- snprintf(path, PATH_MAX, "%s/%s", dirpath, name);
++ snprintf(path, PATH_MAX, "%s%s", dirpath, name);
+ snprintf(abspath, PATH_MAX, "%s%s", root, path);
+ if(stat(abspath, &sbuf) != 0) {
+ continue;
+ }
+ if(S_ISDIR(sbuf.st_mode)) {
+- if(dir_belongsto_pkg(root, path, pkg)) {
++ if(dir_belongsto_pkg(handle, path, pkg)) {
+ continue;
+ } else {
+ closedir(dir);
+@@ -529,9 +549,9 @@ alpm_list_t *_alpm_db_find_fileconflicts(alpm_handle_t *handle,
+ sprintf(dir, "%s/", filestr);
+ if(_alpm_filelist_contains(alpm_pkg_get_files(dbpkg), dir)) {
+ _alpm_log(handle, ALPM_LOG_DEBUG,
+- "check if all files in %s belongs to %s\n",
++ "check if all files in %s belong to %s\n",
+ dir, dbpkg->name);
+- resolved_conflict = dir_belongsto_pkg(handle->root, filestr, dbpkg);
++ resolved_conflict = dir_belongsto_pkg(handle, dir, dbpkg);
+ }
+ free(dir);
+ }
+diff --git a/test/pacman/tests/fileconflict009.py b/test/pacman/tests/fileconflict009.py
+new file mode 100644
+index 0000000..904af4a
+--- /dev/null
++++ b/test/pacman/tests/fileconflict009.py
+@@ -0,0 +1,20 @@
++self.description = "dir->symlink change during package upgrade (directory conflict)"
++
++lp1 = pmpkg("pkg1")
++lp1.files = ["dir/"]
++self.addpkg2db("local", lp1)
++
++lp2 = pmpkg("pkg2")
++lp2.files = ["dir/"]
++self.addpkg2db("local", lp2)
++
++p = pmpkg("pkg1", "1.0-2")
++p.files = ["dir -> /usr/dir"]
++self.addpkg2db("sync", p)
++
++self.args = "-S pkg1"
++
++self.addrule("PACMAN_RETCODE=1")
++self.addrule("PKG_VERSION=pkg1|1.0-1")
++self.addrule("PKG_VERSION=pkg2|1.0-1")
++self.addrule("DIR_EXIST=dir/")
+diff --git a/test/pacman/tests/fileconflict010.py b/test/pacman/tests/fileconflict010.py
+new file mode 100644
+index 0000000..0a3ce83
+--- /dev/null
++++ b/test/pacman/tests/fileconflict010.py
+@@ -0,0 +1,20 @@
++self.description = "dir->file change during package upgrade (directory conflict)"
++
++lp1 = pmpkg("pkg1")
++lp1.files = ["dir/"]
++self.addpkg2db("local", lp1)
++
++lp2 = pmpkg("pkg2")
++lp2.files = ["dir/"]
++self.addpkg2db("local", lp2)
++
++p = pmpkg("pkg1", "1.0-2")
++p.files = ["dir"]
++self.addpkg2db("sync", p)
++
++self.args = "-S pkg1"
++
++self.addrule("PACMAN_RETCODE=1")
++self.addrule("PKG_VERSION=pkg1|1.0-1")
++self.addrule("PKG_VERSION=pkg2|1.0-1")
++self.addrule("DIR_EXIST=dir/")
+--
+1.7.11.1
+
diff --git a/libre/pacman/0002-Check-empty-subdirectory-ownership.patch b/libre/pacman/0002-Check-empty-subdirectory-ownership.patch
new file mode 100644
index 000000000..6cf496d16
--- /dev/null
+++ b/libre/pacman/0002-Check-empty-subdirectory-ownership.patch
@@ -0,0 +1,61 @@
+From 44e9fdd0e848382337edb97d41e7317638a67bac Mon Sep 17 00:00:00 2001
+From: Allan McRae <allan@archlinux.org>
+Date: Sun, 8 Jul 2012 23:58:37 +1000
+Subject: [PATCH 2/4] Check empty subdirectory ownership
+
+When checking if a package owns a directory, it is important to check
+not only that all the files in the directory are part of the package,
+but also if the directory is part of a package. This catches empty
+subdirectories during conflict checking for directory to file/symlink
+replacements.
+
+Signed-off-by: Allan McRae <allan@archlinux.org>
+Signed-off-by: Dan McGee <dan@archlinux.org>
+---
+ lib/libalpm/conflict.c | 5 +++++
+ test/pacman/tests/fileconflict012.py | 17 +++++++++++++++++
+ 2 files changed, 22 insertions(+)
+ create mode 100644 test/pacman/tests/fileconflict012.py
+
+diff --git a/lib/libalpm/conflict.c b/lib/libalpm/conflict.c
+index efa1a87..d6e5d8c 100644
+--- a/lib/libalpm/conflict.c
++++ b/lib/libalpm/conflict.c
+@@ -339,6 +339,11 @@ static int dir_belongsto_pkg(alpm_handle_t *handle, const char *dirpath,
+ struct dirent *ent = NULL;
+ const char *root = handle->root;
+
++ /* check directory is actually in package - used for subdirectory checks */
++ if(!_alpm_filelist_contains(alpm_pkg_get_files(pkg), dirpath)) {
++ return 0;
++ }
++
+ /* TODO: this is an overly strict check but currently pacman will not
+ * overwrite a directory with a file (case 10/11 in add.c). Adjusting that
+ * is not simple as even if the directory is being unowned by a conflicting
+diff --git a/test/pacman/tests/fileconflict012.py b/test/pacman/tests/fileconflict012.py
+new file mode 100644
+index 0000000..421b739
+--- /dev/null
++++ b/test/pacman/tests/fileconflict012.py
+@@ -0,0 +1,17 @@
++self.description = "dir->file change during package upgrade (filesystem file conflict)"
++
++lp1 = pmpkg("pkg1")
++lp1.files = ["dir/"]
++self.addpkg2db("local", lp1)
++
++self.filesystem = ["dir/file"]
++
++p = pmpkg("pkg1", "1.0-2")
++p.files = ["dir"]
++self.addpkg2db("sync", p)
++
++self.args = "-S pkg1"
++
++self.addrule("PACMAN_RETCODE=1")
++self.addrule("PKG_VERSION=pkg1|1.0-1")
++self.addrule("DIR_EXIST=dir/")
+--
+1.7.11.1
+
diff --git a/libre/pacman/PKGBUILD b/libre/pacman/PKGBUILD
index 01f49a93e..4f05be586 100644
--- a/libre/pacman/PKGBUILD
+++ b/libre/pacman/PKGBUILD
@@ -4,38 +4,42 @@
# Maintainer: Dave Reisner <dave@archlinux.org>
pkgname=pacman
-pkgver=4.0.2
-pkgrel=1
+pkgver=4.0.3
+pkgrel=3
pkgdesc="A library-based package manager with dependency support"
arch=('i686' 'x86_64' 'mips64el')
url="http://www.archlinux.org/pacman/"
license=('GPL')
groups=('base')
-depends=('bash' 'glibc' 'libarchive>=3.0.2' 'curl>=7.19.4'
- 'gpgme' 'pacman-mirrorlist')
+depends=('bash' 'glibc>=2.15' 'libarchive>=3.0.2' 'curl>=7.19.4'
+ 'gpgme' 'pacman-mirrorlist' 'archlinux-keyring' 'parabola-keyring')
makedepends=('asciidoc')
optdepends=('fakeroot: for makepkg usage as normal user')
backup=(etc/pacman.conf etc/makepkg.conf)
install=pacman.install
options=(!libtool)
source=(ftp://ftp.archlinux.org/other/pacman/$pkgname-$pkgver.tar.gz{,.sig}
+ 0001-Add-conflict-for-replacing-owned-empty-directory.patch
+ 0002-Check-empty-subdirectory-ownership.patch
pacman.conf
pacman.conf.x86_64
pacman.conf.mips64el
makepkg.conf)
-md5sums=('289ba4a19a16393096e065cec1cb9b0a'
- '575140dce3ea597d91b6d081aa3f6a00'
- '858d1ffb284afc6b15f72578ba3cac50'
- '7dade0c0a4d597c480d779afa4f5097c'
- 'd4ca1a1d8e6708c0302a225628a489eb'
+md5sums=('387965c7125e60e5f0b9ff3b427fe0f9'
+ '1a70392526c8768470da678b31905a6e'
+ '1a9b79788640907a2b34e8671cacc94a'
+ 'a9ddd43891bed364e1e97d27b2887bf1'
+ '080d9f76f56e135cc62205874636aa0f'
+ 'ce9943fc8086d491890565e91ea1a0d8'
+ 'eb8dba9bd0b315230fbf0e5dc0a7335b'
'debc512689a1aa8c124fe0ccf27f5758')
-# keep an upgrade path for older installations
-PKGEXT='.pkg.tar.gz'
-
build() {
cd $srcdir/$pkgname-$pkgver
+ patch -p1 -i $srcdir/0001-Add-conflict-for-replacing-owned-empty-directory.patch
+ patch -p1 -i $srcdir/0002-Check-empty-subdirectory-ownership.patch
+
./configure --prefix=/usr --sysconfdir=/etc \
--localstatedir=/var --enable-doc
make
@@ -83,8 +87,10 @@ package() {
-e "s|@CARCHFLAGS[@]|$myflags|g"
# install completion files
- mkdir -p $pkgdir/etc/bash_completion.d/
- install -m644 contrib/bash_completion $pkgdir/etc/bash_completion.d/pacman
- mkdir -p $pkgdir/usr/share/zsh/site-functions/
- install -m644 contrib/zsh_completion $pkgdir/usr/share/zsh/site-functions/_pacman
+ install -Dm644 contrib/bash_completion "$pkgdir/usr/share/bash-completion/completions/pacman"
+ for f in makepkg pacman-key; do
+ ln -s pacman "$pkgdir/usr/share/bash-completion/completions/$f"
+ done
+
+ install -Dm644 contrib/zsh_completion $pkgdir/usr/share/zsh/site-functions/_pacman
}
diff --git a/libre/pacman/pacman.conf b/libre/pacman/pacman.conf
index 92befa5fa..115217b59 100644
--- a/libre/pacman/pacman.conf
+++ b/libre/pacman/pacman.conf
@@ -36,18 +36,13 @@ Architecture = auto
CheckSpace
#VerbosePkgLists
-# PGP signature checking
-# NOTE: None of this will work without running `pacman-key --init` first.
-# The compiled in default is equivalent to the following line. This requires
-# you to locally sign and trust packager keys using `pacman-key` for them to be
-# considered valid.
+# By default, pacman accepts packages signed by keys that its local keyring
+# trusts (see pacman-key and its man page), as well as unsigned packages.
#SigLevel = Optional TrustedOnly
-# If you wish to check signatures but avoid local sign and trust issues, use
-# the following line. This will treat any key imported into pacman's keyring as
-# trusted.
-#SigLevel = Optional TrustAll
-# For now, off by default unless you read the above.
-SigLevel = Never
+
+# NOTE: You must run `pacman-key --init` before first using pacman; the local
+# keyring can then be populated with the keys of all official Arch Linux
+# packagers with `pacman-key --populate archlinux`.
#
# REPOSITORIES
@@ -77,7 +72,7 @@ SigLevel = Never
#Include = /etc/pacman.d/mirrorlist
[libre]
-#SigLevel = PackageRequired
+SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
#[testing]
@@ -85,11 +80,11 @@ Include = /etc/pacman.d/mirrorlist
#Include = /etc/pacman.d/mirrorlist
[core]
-#SigLevel = PackageRequired
+SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
[extra]
-#SigLevel = PackageOptional
+SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
#[community-testing]
@@ -97,7 +92,7 @@ Include = /etc/pacman.d/mirrorlist
#Include = /etc/pacman.d/mirrorlist
[community]
-#SigLevel = PackageOptional
+SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
# Parabola also supports community projects and personal repositories, to find
diff --git a/libre/pacman/pacman.conf.mips64el b/libre/pacman/pacman.conf.mips64el
index a74f2d3da..f286c3290 100644
--- a/libre/pacman/pacman.conf.mips64el
+++ b/libre/pacman/pacman.conf.mips64el
@@ -16,9 +16,7 @@
#GPGDir = /etc/pacman.d/gnupg/
HoldPkg = pacman glibc
# If upgrades are available for these packages they will be asked for first
-# Don't list pacman here unless you want it broken when there is a
-# libarchive or glibc update.
-#SyncFirst =
+SyncFirst = pacman
#XferCommand = /usr/bin/curl -C - -f %u > %o
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled
@@ -35,21 +33,16 @@ Architecture = mips64el
#UseSyslog
#UseDelta
#TotalDownload
-#CheckSpace
+CheckSpace
#VerbosePkgLists
-# PGP signature checking
-# NOTE: None of this will work without running `pacman-key --init` first.
-# The compiled in default is equivalent to the following line. This requires
-# you to locally sign and trust packager keys using `pacman-key` for them to be
-# considered valid.
+# By default, pacman accepts packages signed by keys that its local keyring
+# trusts (see pacman-key and its man page), as well as unsigned packages.
#SigLevel = Optional TrustedOnly
-# If you wish to check signatures but avoid local sign and trust issues, use
-# the following line. This will treat any key imported into pacman's keyring as
-# trusted.
-#SigLevel = Optional TrustAll
-# For now, off by default unless you read the above.
-SigLevel = Never
+
+# NOTE: You must run `pacman-key --init` before first using pacman; the local
+# keyring can then be populated with the keys of all official Arch Linux
+# packagers with `pacman-key --populate archlinux`.
#
# REPOSITORIES
@@ -79,7 +72,7 @@ SigLevel = Never
#Include = /etc/pacman.d/mirrorlist
[libre]
-#SigLevel = PackageRequired
+SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
#[testing]
@@ -87,11 +80,11 @@ Include = /etc/pacman.d/mirrorlist
#Include = /etc/pacman.d/mirrorlist
[core]
-#SigLevel = PackageRequired
+SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
[extra]
-#SigLevel = PackageOptional
+SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
#[community-testing]
@@ -99,7 +92,7 @@ Include = /etc/pacman.d/mirrorlist
#Include = /etc/pacman.d/mirrorlist
[community]
-#SigLevel = PackageOptional
+SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
# Parabola also supports community projects and personal repositories, to find
diff --git a/libre/pacman/pacman.conf.x86_64 b/libre/pacman/pacman.conf.x86_64
index 0eddc159c..4c67b089f 100644
--- a/libre/pacman/pacman.conf.x86_64
+++ b/libre/pacman/pacman.conf.x86_64
@@ -36,18 +36,13 @@ Architecture = auto
CheckSpace
#VerbosePkgLists
-# PGP signature checking
-# NOTE: None of this will work without running `pacman-key --init` first.
-# The compiled in default is equivalent to the following line. This requires
-# you to locally sign and trust packager keys using `pacman-key` for them to be
-# considered valid.
+# By default, pacman accepts packages signed by keys that its local keyring
+# trusts (see pacman-key and its man page), as well as unsigned packages.
#SigLevel = Optional TrustedOnly
-# If you wish to check signatures but avoid local sign and trust issues, use
-# the following line. This will treat any key imported into pacman's keyring as
-# trusted.
-#SigLevel = Optional TrustAll
-# For now, off by default unless you read the above.
-SigLevel = Never
+
+# NOTE: You must run `pacman-key --init` before first using pacman; the local
+# keyring can then be populated with the keys of all official Arch Linux
+# packagers with `pacman-key --populate archlinux`.
#
# REPOSITORIES
@@ -77,7 +72,7 @@ SigLevel = Never
#Include = /etc/pacman.d/mirrorlist
[libre]
-#SigLevel = PackageRequired
+SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
#[testing]
@@ -85,11 +80,11 @@ Include = /etc/pacman.d/mirrorlist
#Include = /etc/pacman.d/mirrorlist
[core]
-#SigLevel = PackageRequired
+SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
[extra]
-#SigLevel = PackageOptional
+SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
#[community-testing]
@@ -97,7 +92,7 @@ Include = /etc/pacman.d/mirrorlist
#Include = /etc/pacman.d/mirrorlist
[community]
-#SigLevel = PackageOptional
+SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
# If you want to run 32 bit applications on your x86_64 system,
@@ -108,7 +103,7 @@ Include = /etc/pacman.d/mirrorlist
#Include = /etc/pacman.d/mirrorlist
#[multilib]
-#SigLevel = PackageOptional
+#SigLevel = PackageRequired
#Include = /etc/pacman.d/mirrorlist
# Parabola also supports community projects and personal repositories, to find
diff --git a/libre/pacman/pacman.install b/libre/pacman/pacman.install
index 4369edab1..5dc55c0c2 100644
--- a/libre/pacman/pacman.install
+++ b/libre/pacman/pacman.install
@@ -9,7 +9,9 @@ post_upgrade() {
if [ "$(vercmp $2 3.5.0)" -lt 0 ]; then
_warnupgrade
fi
- _check_pubring
+ if [ ! -f "etc/pacman.d/gnupg/pubring.gpg" ] || [ "$(vercmp $2 4.0.3-2)" -lt 0 ]; then
+ _check_pubring
+ fi
}
post_install() {
@@ -17,9 +19,10 @@ post_install() {
}
_check_pubring() {
- if [ ! -f "etc/pacman.d/gnupg/pubring.gpg" ]; then
- echo " >>> Run \`pacman-key --init\` to set up your pacman keyring."
- fi
+ echo " >>> Run \`pacman-key --init; pacman-key --populate archlinux\`"
+ echo " >>> And \`pacman-key --populate parabola\`"
+ echo " >>> to import the data required by pacman for package verification."
+ echo " >>> See: https://www.archlinux.org/news/having-pacman-verify-packages"
}
_warnupgrade() {
diff --git a/libre/pacman/rePKGBUILD b/libre/pacman/rePKGBUILD
new file mode 100644
index 000000000..810eff5b9
--- /dev/null
+++ b/libre/pacman/rePKGBUILD
@@ -0,0 +1,37 @@
+# Maintainer: Nicolas Reynolds <fauno@kiwwwi.com.ar>
+source PKGBUILD
+unset build package md5sums source check
+_repo=core
+source=(PKGBUILD
+ ftp://ftp.archlinux.org/${_repo}/os/${CARCH}/${pkgname%-libre}-$pkgver-$pkgrel-$CARCH$PKGEXT
+ # files for pkg modifications
+ pacman.conf
+ pacman.conf.x86_64
+ )
+options=(!strip)
+
+build() {
+ cd "${srcdir}/"
+ rm -vf .{INSTALL,PKGINFO} ${srcdir}/${pkgname%-libre}-$pkgver-$pkgrel-$CARCH$PKGEXT
+ # put actions for package modifications below this line
+
+}
+
+package() {
+ cp -a ${srcdir}/* ${pkgdir}
+
+ rm ${pkgdir}/{PKGBUILD,pacman.conf{,.x86_64}}
+
+# No need to repackage for mips64el
+ case "$CARCH" in
+ i686)
+ install -m644 $srcdir/pacman.conf $pkgdir/etc/pacman.conf
+ ;;
+ x86_64)
+ install -m644 $srcdir/pacman.conf.x86_64 $pkgdir/etc/pacman.conf
+ ;;
+ esac
+}
+
+
+# vim:set ts=2 sw=2 et:
diff --git a/libre/parabola-keyring/PKGBUILD b/libre/parabola-keyring/PKGBUILD
new file mode 100644
index 000000000..7a95abd0b
--- /dev/null
+++ b/libre/parabola-keyring/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id$
+# Maintainer: André Silva <emulatorman@lavabit.com>
+
+pkgname=parabola-keyring
+pkgver=20120816
+pkgrel=1
+pkgdesc='Parabola GNU/Linux-libre PGP keyring'
+arch=('any')
+url='https://projects.parabolagnulinux.org/hackers.git/'
+license=('GPL')
+install="${pkgname}.install"
+source=("http://repo.parabolagnulinux.org/other/${pkgname}-${pkgver}.tar.gz"
+ "http://repo.parabolagnulinux.org/other/${pkgname}-${pkgver}.tar.gz.sig")
+
+package() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ make PREFIX=/usr DESTDIR=${pkgdir} install
+}
+md5sums=('4163ebfce3ccc32e2398e18c19158fc1'
+ 'b4b1b532657eb754ef2e9f7cf4d0a09a')
diff --git a/libre/parabola-keyring/parabola-keyring.install b/libre/parabola-keyring/parabola-keyring.install
new file mode 100644
index 000000000..1c70f1a8d
--- /dev/null
+++ b/libre/parabola-keyring/parabola-keyring.install
@@ -0,0 +1,11 @@
+post_upgrade() {
+ if usr/bin/pacman-key -l >/dev/null 2>&1; then
+ usr/bin/pacman-key --populate parabola
+ fi
+}
+
+post_install() {
+ if [ -x usr/bin/pacman-key ]; then
+ post_upgrade
+ fi
+}
diff --git a/libre/parabola-themes-slim/PKGBUILD b/libre/parabola-themes-slim/PKGBUILD
index 9c29caf0b..a921253da 100644
--- a/libre/parabola-themes-slim/PKGBUILD
+++ b/libre/parabola-themes-slim/PKGBUILD
@@ -6,7 +6,7 @@ replaces=('archlinux-themes-slim')
conflicts=('archlinux-themes-slim')
pkgname=parabola-themes-slim
pkgver=1.0
-pkgrel=1
+pkgrel=1.1
pkgdesc="a theme parabolero to the Slim login manager"
arch=('any')
url="https://parabolagnulinux.org/"
diff --git a/libre/sdl-libre/PKGBUILD b/libre/sdl-libre/PKGBUILD
index e31f18c5b..839585e37 100644
--- a/libre/sdl-libre/PKGBUILD
+++ b/libre/sdl-libre/PKGBUILD
@@ -1,46 +1,47 @@
-# $Id: PKGBUILD 135310 2011-08-12 14:45:48Z ibiru $
-#mips64el Maintainer: Allan McRae <allan@archlinux.org>
+# $Id: PKGBUILD 165847 2012-09-01 12:22:15Z heftig $
+# Maintainer: Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
+# Contributor: Allan McRae <allan@archlinux.org>
# Contributor: dorphell <dorphell@archlinux.org>
+# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
+# Maintainer (Parabola): Márcio Silva <coadde@lavabit.com>
# Maintainer (Connochaetos): Henry Jensen <hjensen@connochaetos.org>
-# Maintainer (Parabola): André Silva <andre.paulista@adinet.com.uy>
-# Maintainer (Parabola): Márcio Silva <coadde@adinet.com.uy>
pkgname=sdl-libre
pkgver=1.2.15
-pkgrel=1.1
+pkgrel=2
pkgdesc="A library for portable low-level access to a video framebuffer, audio output, mouse, and keyboard"
arch=('i686' 'x86_64' 'mips64el')
url="http://www.libsdl.org"
license=('LGPL')
provides=("sdl=${pkgver}")
conflicts=('sdl')
+replaces=('sdl')
depends=('glibc' 'libxext' 'libxrender' 'libx11')
makedepends=('alsa-lib' 'mesa' 'libpulse')
-replaces=('sdl')
options=('!libtool')
source=(http://www.libsdl.org/release/SDL-${pkgver}.tar.gz
sdl-1.2.14-fix-mouse-clicking.patch
sdl-1.2.14-disable-mmx.patch
- riva_mmio.patch
- no-riva-accel.patch)
+ fix_joystick_misc_axes.diff
+ libre.patch)
md5sums=('9d96df8417572a2afb781a7c4c811a85'
'04d8c179f125e04bcd4c9d60e013c2d7'
'e5c16b7611f62c7cb25f0534eff68852'
- 'f5ab9ba6ba2bb8df74d0f768f9df3ea8'
- 'eb2f5899db608ad27b379faa5e0beb80')
+ '687586a108b597a2a6b73070c1d37e51'
+ '5c665f72b8a2adc97a91f6db6f2da79a')
build() {
- cd ${srcdir}/SDL-${pkgver}
- patch -Np1 -i $srcdir/sdl-1.2.14-fix-mouse-clicking.patch
- patch -Np1 -i $srcdir/sdl-1.2.14-disable-mmx.patch
- patch -Np0 -i $srcdir/riva_mmio.patch
- patch -Np0 -i $srcdir/no-riva-accel.patch
+ cd SDL-$pkgver
+ patch -Np1 -i ../sdl-1.2.14-fix-mouse-clicking.patch
+ patch -Np1 -i ../sdl-1.2.14-disable-mmx.patch
+ patch -Np1 -i ../fix_joystick_misc_axes.diff
+ patch -Np0 -i ../libre.patch
./configure --prefix=/usr --disable-nasm --enable-alsa --enable-esd \
--with-x --disable-rpath --disable-static
make
}
package() {
- cd ${srcdir}/SDL-${pkgver}
- make DESTDIR=${pkgdir} install
+ cd SDL-$pkgver
+ make DESTDIR="$pkgdir" install
}
diff --git a/libre/sdl-libre/fix_joystick_misc_axes.diff b/libre/sdl-libre/fix_joystick_misc_axes.diff
new file mode 100644
index 000000000..75e3755c9
--- /dev/null
+++ b/libre/sdl-libre/fix_joystick_misc_axes.diff
@@ -0,0 +1,13 @@
+diff --git a/src/joystick/linux/SDL_sysjoystick.c b/src/joystick/linux/SDL_sysjoystick.c
+index ee43974..80e46e4 100644
+--- a/src/joystick/linux/SDL_sysjoystick.c
++++ b/src/joystick/linux/SDL_sysjoystick.c
+@@ -702,7 +702,7 @@ static SDL_bool EV_ConfigJoystick(SDL_Joystick *joystick, int fd)
+ ++joystick->nbuttons;
+ }
+ }
+- for ( i=0; i<ABS_MISC; ++i ) {
++ for ( i=0; i<ABS_MAX; ++i ) {
+ /* Skip hats */
+ if ( i == ABS_HAT0X ) {
+ i = ABS_HAT3Y;
diff --git a/libre/sdl-libre/libre.patch b/libre/sdl-libre/libre.patch
new file mode 100644
index 000000000..72f7da56a
--- /dev/null
+++ b/libre/sdl-libre/libre.patch
@@ -0,0 +1,578 @@
+--- src/video/fbcon/riva_mmio.h 2012-01-19 04:30:06.000000000 -0200
++++ /dev/null 2012-04-01 13:58:27.776718756 -0300
+@@ -1,449 +0,0 @@
+-/***************************************************************************\
+-|* *|
+-|* Copyright 1993-1999 NVIDIA, Corporation. All rights reserved. *|
+-|* *|
+-|* NOTICE TO USER: The source code is copyrighted under U.S. and *|
+-|* international laws. Users and possessors of this source code are *|
+-|* hereby granted a nonexclusive, royalty-free copyright license to *|
+-|* use this code in individual and commercial software. *|
+-|* *|
+-|* Any use of this source code must include, in the user documenta- *|
+-|* tion and internal comments to the code, notices to the end user *|
+-|* as follows: *|
+-|* *|
+-|* Copyright 1993-1999 NVIDIA, Corporation. All rights reserved. *|
+-|* *|
+-|* NVIDIA, CORPORATION MAKES NO REPRESENTATION ABOUT THE SUITABILITY *|
+-|* OF THIS SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" *|
+-|* WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. NVIDIA, CORPOR- *|
+-|* ATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOURCE CODE, *|
+-|* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGE- *|
+-|* MENT, AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL *|
+-|* NVIDIA, CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT, INCI- *|
+-|* DENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RE- *|
+-|* SULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION *|
+-|* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF *|
+-|* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOURCE CODE. *|
+-|* *|
+-|* U.S. Government End Users. This source code is a "commercial *|
+-|* item," as that term is defined at 48 C.F.R. 2.101 (OCT 1995), *|
+-|* consisting of "commercial computer software" and "commercial *|
+-|* computer software documentation," as such terms are used in *|
+-|* 48 C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Govern- *|
+-|* ment only as a commercial end item. Consistent with 48 C.F.R. *|
+-|* 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), *|
+-|* all U.S. Government End Users acquire the source code with only *|
+-|* those rights set forth herein. *|
+-|* *|
+-\***************************************************************************/
+-
+-#ifndef __RIVA_HW_H__
+-#define __RIVA_HW_H__
+-#define RIVA_SW_VERSION 0x00010003
+-
+-/*
+- * Typedefs to force certain sized values.
+- */
+-typedef Uint8 U008;
+-typedef Uint16 U016;
+-typedef Uint32 U032;
+-
+-/*
+- * HW access macros.
+- */
+-#define NV_WR08(p,i,d) (((U008 *)(p))[i]=(d))
+-#define NV_RD08(p,i) (((U008 *)(p))[i])
+-#define NV_WR16(p,i,d) (((U016 *)(p))[(i)/2]=(d))
+-#define NV_RD16(p,i) (((U016 *)(p))[(i)/2])
+-#define NV_WR32(p,i,d) (((U032 *)(p))[(i)/4]=(d))
+-#define NV_RD32(p,i) (((U032 *)(p))[(i)/4])
+-#define VGA_WR08(p,i,d) NV_WR08(p,i,d)
+-#define VGA_RD08(p,i) NV_RD08(p,i)
+-
+-/*
+- * Define supported architectures.
+- */
+-#define NV_ARCH_03 0x03
+-#define NV_ARCH_04 0x04
+-#define NV_ARCH_10 0x10
+-/***************************************************************************\
+-* *
+-* FIFO registers. *
+-* *
+-\***************************************************************************/
+-
+-/*
+- * Raster OPeration. Windows style ROP3.
+- */
+-typedef volatile struct
+-{
+- U032 reserved00[4];
+- U016 FifoFree;
+- U016 Nop;
+- U032 reserved01[0x0BB];
+- U032 Rop3;
+-} RivaRop;
+-/*
+- * 8X8 Monochrome pattern.
+- */
+-typedef volatile struct
+-{
+- U032 reserved00[4];
+- U016 FifoFree;
+- U016 Nop;
+- U032 reserved01[0x0BD];
+- U032 Shape;
+- U032 reserved03[0x001];
+- U032 Color0;
+- U032 Color1;
+- U032 Monochrome[2];
+-} RivaPattern;
+-/*
+- * Scissor clip rectangle.
+- */
+-typedef volatile struct
+-{
+- U032 reserved00[4];
+- U016 FifoFree;
+- U016 Nop;
+- U032 reserved01[0x0BB];
+- U032 TopLeft;
+- U032 WidthHeight;
+-} RivaClip;
+-/*
+- * 2D filled rectangle.
+- */
+-typedef volatile struct
+-{
+- U032 reserved00[4];
+- U016 FifoFree;
+- U016 Nop[1];
+- U032 reserved01[0x0BC];
+- U032 Color;
+- U032 reserved03[0x03E];
+- U032 TopLeft;
+- U032 WidthHeight;
+-} RivaRectangle;
+-/*
+- * 2D screen-screen BLT.
+- */
+-typedef volatile struct
+-{
+- U032 reserved00[4];
+- U016 FifoFree;
+- U016 Nop;
+- U032 reserved01[0x0BB];
+- U032 TopLeftSrc;
+- U032 TopLeftDst;
+- U032 WidthHeight;
+-} RivaScreenBlt;
+-/*
+- * 2D pixel BLT.
+- */
+-typedef volatile struct
+-{
+- U032 reserved00[4];
+- U016 FifoFree;
+- U016 Nop[1];
+- U032 reserved01[0x0BC];
+- U032 TopLeft;
+- U032 WidthHeight;
+- U032 WidthHeightIn;
+- U032 reserved02[0x03C];
+- U032 Pixels;
+-} RivaPixmap;
+-/*
+- * Filled rectangle combined with monochrome expand. Useful for glyphs.
+- */
+-typedef volatile struct
+-{
+- U032 reserved00[4];
+- U016 FifoFree;
+- U016 Nop;
+- U032 reserved01[0x0BB];
+- U032 reserved03[(0x040)-1];
+- U032 Color1A;
+- struct
+- {
+- U032 TopLeft;
+- U032 WidthHeight;
+- } UnclippedRectangle[64];
+- U032 reserved04[(0x080)-3];
+- struct
+- {
+- U032 TopLeft;
+- U032 BottomRight;
+- } ClipB;
+- U032 Color1B;
+- struct
+- {
+- U032 TopLeft;
+- U032 BottomRight;
+- } ClippedRectangle[64];
+- U032 reserved05[(0x080)-5];
+- struct
+- {
+- U032 TopLeft;
+- U032 BottomRight;
+- } ClipC;
+- U032 Color1C;
+- U032 WidthHeightC;
+- U032 PointC;
+- U032 MonochromeData1C;
+- U032 reserved06[(0x080)+121];
+- struct
+- {
+- U032 TopLeft;
+- U032 BottomRight;
+- } ClipD;
+- U032 Color1D;
+- U032 WidthHeightInD;
+- U032 WidthHeightOutD;
+- U032 PointD;
+- U032 MonochromeData1D;
+- U032 reserved07[(0x080)+120];
+- struct
+- {
+- U032 TopLeft;
+- U032 BottomRight;
+- } ClipE;
+- U032 Color0E;
+- U032 Color1E;
+- U032 WidthHeightInE;
+- U032 WidthHeightOutE;
+- U032 PointE;
+- U032 MonochromeData01E;
+-} RivaBitmap;
+-/*
+- * 3D textured, Z buffered triangle.
+- */
+-typedef volatile struct
+-{
+- U032 reserved00[4];
+- U016 FifoFree;
+- U016 Nop;
+- U032 reserved01[0x0BC];
+- U032 TextureOffset;
+- U032 TextureFormat;
+- U032 TextureFilter;
+- U032 FogColor;
+-/* This is a problem on LynxOS */
+-#ifdef Control
+-#undef Control
+-#endif
+- U032 Control;
+- U032 AlphaTest;
+- U032 reserved02[0x339];
+- U032 FogAndIndex;
+- U032 Color;
+- float ScreenX;
+- float ScreenY;
+- float ScreenZ;
+- float EyeM;
+- float TextureS;
+- float TextureT;
+-} RivaTexturedTriangle03;
+-typedef volatile struct
+-{
+- U032 reserved00[4];
+- U016 FifoFree;
+- U016 Nop;
+- U032 reserved01[0x0BB];
+- U032 ColorKey;
+- U032 TextureOffset;
+- U032 TextureFormat;
+- U032 TextureFilter;
+- U032 Blend;
+-/* This is a problem on LynxOS */
+-#ifdef Control
+-#undef Control
+-#endif
+- U032 Control;
+- U032 FogColor;
+- U032 reserved02[0x39];
+- struct
+- {
+- float ScreenX;
+- float ScreenY;
+- float ScreenZ;
+- float EyeM;
+- U032 Color;
+- U032 Specular;
+- float TextureS;
+- float TextureT;
+- } Vertex[16];
+- U032 DrawTriangle3D;
+-} RivaTexturedTriangle05;
+-/*
+- * 2D line.
+- */
+-typedef volatile struct
+-{
+- U032 reserved00[4];
+- U016 FifoFree;
+- U016 Nop[1];
+- U032 reserved01[0x0BC];
+- U032 Color; /* source color 0304-0307*/
+- U032 Reserved02[0x03e];
+- struct { /* start aliased methods in array 0400- */
+- U032 point0; /* y_x S16_S16 in pixels 0- 3*/
+- U032 point1; /* y_x S16_S16 in pixels 4- 7*/
+- } Lin[16]; /* end of aliased methods in array -047f*/
+- struct { /* start aliased methods in array 0480- */
+- U032 point0X; /* in pixels, 0 at left 0- 3*/
+- U032 point0Y; /* in pixels, 0 at top 4- 7*/
+- U032 point1X; /* in pixels, 0 at left 8- b*/
+- U032 point1Y; /* in pixels, 0 at top c- f*/
+- } Lin32[8]; /* end of aliased methods in array -04ff*/
+- U032 PolyLin[32]; /* y_x S16_S16 in pixels 0500-057f*/
+- struct { /* start aliased methods in array 0580- */
+- U032 x; /* in pixels, 0 at left 0- 3*/
+- U032 y; /* in pixels, 0 at top 4- 7*/
+- } PolyLin32[16]; /* end of aliased methods in array -05ff*/
+- struct { /* start aliased methods in array 0600- */
+- U032 color; /* source color 0- 3*/
+- U032 point; /* y_x S16_S16 in pixels 4- 7*/
+- } ColorPolyLin[16]; /* end of aliased methods in array -067f*/
+-} RivaLine;
+-/*
+- * 2D/3D surfaces
+- */
+-typedef volatile struct
+-{
+- U032 reserved00[4];
+- U016 FifoFree;
+- U016 Nop;
+- U032 reserved01[0x0BE];
+- U032 Offset;
+-} RivaSurface;
+-typedef volatile struct
+-{
+- U032 reserved00[4];
+- U016 FifoFree;
+- U016 Nop;
+- U032 reserved01[0x0BD];
+- U032 Pitch;
+- U032 RenderBufferOffset;
+- U032 ZBufferOffset;
+-} RivaSurface3D;
+-
+-/***************************************************************************\
+-* *
+-* Virtualized RIVA H/W interface. *
+-* *
+-\***************************************************************************/
+-
+-struct _riva_hw_inst;
+-struct _riva_hw_state;
+-/*
+- * Virtialized chip interface. Makes RIVA 128 and TNT look alike.
+- */
+-typedef struct _riva_hw_inst
+-{
+- /*
+- * Chip specific settings.
+- */
+- U032 Architecture;
+- U032 Version;
+- U032 CrystalFreqKHz;
+- U032 RamAmountKBytes;
+- U032 MaxVClockFreqKHz;
+- U032 RamBandwidthKBytesPerSec;
+- U032 EnableIRQ;
+- U032 IO;
+- U032 VBlankBit;
+- U032 FifoFreeCount;
+- U032 FifoEmptyCount;
+- /*
+- * Non-FIFO registers.
+- */
+- volatile U032 *PCRTC;
+- volatile U032 *PRAMDAC;
+- volatile U032 *PFB;
+- volatile U032 *PFIFO;
+- volatile U032 *PGRAPH;
+- volatile U032 *PEXTDEV;
+- volatile U032 *PTIMER;
+- volatile U032 *PMC;
+- volatile U032 *PRAMIN;
+- volatile U032 *FIFO;
+- volatile U032 *CURSOR;
+- volatile U032 *CURSORPOS;
+- volatile U032 *VBLANKENABLE;
+- volatile U032 *VBLANK;
+- volatile U008 *PCIO;
+- volatile U008 *PVIO;
+- volatile U008 *PDIO;
+- /*
+- * Common chip functions.
+- */
+- int (*Busy)(struct _riva_hw_inst *);
+- void (*CalcStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *,int,int,int,int,int,int,int,int,int,int,int,int,int);
+- void (*LoadStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *);
+- void (*UnloadStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *);
+- void (*SetStartAddress)(struct _riva_hw_inst *,U032);
+- void (*SetSurfaces2D)(struct _riva_hw_inst *,U032,U032);
+- void (*SetSurfaces3D)(struct _riva_hw_inst *,U032,U032);
+- int (*ShowHideCursor)(struct _riva_hw_inst *,int);
+- void (*LockUnlock)(struct _riva_hw_inst *, int);
+- /*
+- * Current extended mode settings.
+- */
+- struct _riva_hw_state *CurrentState;
+- /*
+- * FIFO registers.
+- */
+- RivaRop *Rop;
+- RivaPattern *Patt;
+- RivaClip *Clip;
+- RivaPixmap *Pixmap;
+- RivaScreenBlt *Blt;
+- RivaBitmap *Bitmap;
+- RivaLine *Line;
+- RivaTexturedTriangle03 *Tri03;
+- RivaTexturedTriangle05 *Tri05;
+-} RIVA_HW_INST;
+-/*
+- * Extended mode state information.
+- */
+-typedef struct _riva_hw_state
+-{
+- U032 bpp;
+- U032 width;
+- U032 height;
+- U032 repaint0;
+- U032 repaint1;
+- U032 screen;
+- U032 pixel;
+- U032 horiz;
+- U032 arbitration0;
+- U032 arbitration1;
+- U032 vpll;
+- U032 pllsel;
+- U032 general;
+- U032 config;
+- U032 cursor0;
+- U032 cursor1;
+- U032 cursor2;
+- U032 offset0;
+- U032 offset1;
+- U032 offset2;
+- U032 offset3;
+- U032 pitch0;
+- U032 pitch1;
+- U032 pitch2;
+- U032 pitch3;
+-} RIVA_HW_STATE;
+-
+-/*
+- * FIFO Free Count. Should attempt to yield processor if RIVA is busy.
+- */
+-
+-#define RIVA_FIFO_FREE(hwptr,cnt) \
+-{ \
+- while (FifoFreeCount < (cnt)) \
+- FifoFreeCount = hwptr->FifoFree >> 2; \
+- FifoFreeCount -= (cnt); \
+-}
+-#endif /* __RIVA_HW_H__ */
+-
+--- src/video/fbcon/SDL_fbriva.c 2012-01-19 04:30:06.000000000 -0200
++++ src/video/fbcon/SDL_fbriva.c 2012-04-01 15:10:10.108451467 -0300
+@@ -24,12 +24,10 @@
+ #include "SDL_video.h"
+ #include "../SDL_blit.h"
+ #include "SDL_fbriva.h"
+-#include "riva_mmio.h"
+ #include "riva_regs.h"
+
+
+ static int FifoEmptyCount = 0;
+-static int FifoFreeCount = 0;
+
+ /* Wait for vertical retrace */
+ static void WaitVBL(_THIS)
+@@ -41,20 +39,6 @@
+ while ( !(*port & 0x08) )
+ ;
+ }
+-static void NV3WaitIdle(_THIS)
+-{
+- RivaRop *Rop = (RivaRop *)(mapped_io + ROP_OFFSET);
+- while ( (Rop->FifoFree < FifoEmptyCount) ||
+- (*(mapped_io + PGRAPH_OFFSET + 0x000006B0) & 0x01) )
+- ;
+-}
+-static void NV4WaitIdle(_THIS)
+-{
+- RivaRop *Rop = (RivaRop *)(mapped_io + ROP_OFFSET);
+- while ( (Rop->FifoFree < FifoEmptyCount) ||
+- (*(mapped_io + PGRAPH_OFFSET + 0x00000700) & 0x01) )
+- ;
+-}
+
+ #if 0 /* Not yet implemented? */
+ /* Sets video mem colorkey and accelerated blit function */
+@@ -74,7 +58,6 @@
+ {
+ int dstX, dstY;
+ int dstW, dstH;
+- RivaBitmap *Bitmap = (RivaBitmap *)(mapped_io + BITMAP_OFFSET);
+
+ /* Don't blit to the display surface when switched away */
+ if ( switched_away ) {
+@@ -93,13 +76,6 @@
+ dstX += rect->x;
+ dstY += rect->y;
+
+- RIVA_FIFO_FREE(Bitmap, 1);
+- Bitmap->Color1A = color;
+-
+- RIVA_FIFO_FREE(Bitmap, 2);
+- Bitmap->UnclippedRectangle[0].TopLeft = (dstX << 16) | dstY;
+- Bitmap->UnclippedRectangle[0].WidthHeight = (dstW << 16) | dstH;
+-
+ FB_AddBusySurface(dst);
+
+ if ( dst == this->screen ) {
+@@ -115,7 +91,6 @@
+ int srcX, srcY;
+ int dstX, dstY;
+ int dstW, dstH;
+- RivaScreenBlt *Blt = (RivaScreenBlt *)(mapped_io + BLT_OFFSET);
+
+ /* FIXME: For now, only blit to display surface */
+ if ( dst->pitch != SDL_VideoSurface->pitch ) {
+@@ -142,11 +117,6 @@
+ dstX += dstrect->x;
+ dstY += dstrect->y;
+
+- RIVA_FIFO_FREE(Blt, 3);
+- Blt->TopLeftSrc = (srcY << 16) | srcX;
+- Blt->TopLeftDst = (dstY << 16) | dstX;
+- Blt->WidthHeight = (dstH << 16) | dstW;
+-
+ FB_AddBusySurface(src);
+ FB_AddBusySurface(dst);
+
+@@ -185,23 +155,15 @@
+
+ void FB_RivaAccel(_THIS, __u32 card)
+ {
+- RivaRop *Rop = (RivaRop *)(mapped_io + ROP_OFFSET);
+
+ /* We have hardware accelerated surface functions */
+ this->CheckHWBlit = CheckHWBlit;
+ wait_vbl = WaitVBL;
+ switch (card) {
+- case FB_ACCEL_NV3:
+- wait_idle = NV3WaitIdle;
+- break;
+- case FB_ACCEL_NV4:
+- wait_idle = NV4WaitIdle;
+- break;
+ default:
+ /* Hmm... FIXME */
+ break;
+ }
+- FifoEmptyCount = Rop->FifoFree;
+
+ /* The Riva has an accelerated color fill */
+ this->info.blit_fill = 1;
+--- src/video/fbcon/SDL_fbvideo.c.orig 2011-09-08 17:30:03.670583685 +0200
++++ src/video/fbcon/SDL_fbvideo.c 2011-09-08 17:30:24.230582737 +0200
+@@ -46,7 +46,6 @@
+ #include "SDL_fbevents_c.h"
+ #include "SDL_fb3dfx.h"
+ #include "SDL_fbmatrox.h"
+-#include "SDL_fbriva.h"
+
+ /*#define FBCON_DEBUG*/
+
+@@ -769,13 +768,6 @@
+ #endif
+ FB_3DfxAccel(this, finfo.accel);
+ break;
+- case FB_ACCEL_NV3:
+- case FB_ACCEL_NV4:
+-#ifdef FBACCEL_DEBUG
+- printf("NVidia hardware accelerator!\n");
+-#endif
+- FB_RivaAccel(this, finfo.accel);
+- break;
+ default:
+ #ifdef FBACCEL_DEBUG
+ printf("Unknown hardware accelerator.\n");
diff --git a/libre/spectrwm-libre/LICENSE b/libre/spectrwm-libre/LICENSE
new file mode 100644
index 000000000..24c04f3a0
--- /dev/null
+++ b/libre/spectrwm-libre/LICENSE
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2009 Marco Peereboom <marco@peereboom.us>
+ * Copyright (c) 2009 Ryan McBride <mcbride@countersiege.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+/*
+ * Much code and ideas taken from dwm under the following license:
+ * MIT/X Consortium License
+ *
+ * 2006-2008 Anselm R Garbe <garbeam at gmail dot com>
+ * 2006-2007 Sander van Dijk <a dot h dot vandijk at gmail dot com>
+ * 2006-2007 Jukka Salmi <jukka at salmi dot ch>
+ * 2007 Premysl Hruby <dfenze at gmail dot com>
+ * 2007 Szabolcs Nagy <nszabolcs at gmail dot com>
+ * 2007 Christof Musik <christof at sendfax dot de>
+ * 2007-2008 Enno Gottox Boland <gottox at s01 dot de>
+ * 2007-2008 Peter Hartlich <sgkkr at hartlich dot com>
+ * 2008 Martin Hurton <martin dot hurton at gmail dot com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
diff --git a/libre/spectrwm-libre/PKGBUILD b/libre/spectrwm-libre/PKGBUILD
new file mode 100644
index 000000000..4b4bccec3
--- /dev/null
+++ b/libre/spectrwm-libre/PKGBUILD
@@ -0,0 +1,65 @@
+# $Id$
+# Maintainer: Kyle Keen <keenerd@gmail.com>
+# Contributor: Christoph Zeiler <archNOSPAM_at_moonblade.dot.org>
+
+_pkgname=spectrwm
+pkgname=spectrwm-libre
+pkgver=2.0.1
+pkgrel=1
+pkgdesc="A minimalistic automatic tiling window manager that tries to stay out of the way (without unfree profont support)"
+arch=('i686' 'x86_64' 'mips64el')
+url="http://www.spectrwm.org"
+_watch="https://opensource.conformal.com/snapshots/spectrwm/"
+license=('custom:ISC')
+depends=('dmenu' 'xcb-util' 'xcb-util-wm' 'xcb-util-keysyms' 'libxrandr' 'libxft' 'libxcursor')
+replaces=('spectrwm' 'scrotwm')
+conflicts=('spectrwm')
+provides=("spectrwm=${pkgver}")
+makedepends=('libxt')
+optdepends=('scrot: screenshots' 'xlockmore: screenlocking' 'terminus-font: great font')
+backup=(etc/spectrwm.conf)
+source=(http://opensource.conformal.com/snapshots/$_pkgname/$_pkgname-$pkgver.tgz \
+ LICENSE \
+ baraction.sh)
+md5sums=('ed553574e65bb364e26d359790e204f2'
+ 'a67cfe51079481e5b0eab1ad371379e3'
+ '950d663692e1da56e0ac864c6c3ed80e')
+
+build() {
+ cd "$srcdir/$_pkgname-$pkgver"
+
+ # it is like a patch, only less fragile
+ sed -i 's|\"/usr/local/lib/libswmhack.so\"|\"libswmhack.so\"|' spectrwm.c
+ sed -i 's/verbose_layout = 0;/verbose_layout = 1;/' spectrwm.c
+ sed -i 's/# modkey = Mod1/modkey = Mod4/' spectrwm.conf
+ sed -i 's/-\*-terminus-medium-\*-\*-\*-\*/-*-profont-*-*-*-*-12/' spectrwm.conf
+
+ cd linux
+ make PREFIX="/usr"
+}
+
+package() {
+ cd "$srcdir/$_pkgname-$pkgver/linux"
+ make PREFIX="/usr" DESTDIR="$pkgdir" install
+ install -Dm644 spectrwm.desktop "$pkgdir/usr/share/xsessions/spectrwm.desktop"
+ cd ..
+ install -Dm644 spectrwm.conf "$pkgdir/etc/spectrwm.conf"
+ install -Dm755 screenshot.sh "$pkgdir/usr/share/spectrwm/screenshot.sh"
+ mkdir -p "$pkgdir/etc/spectrwm"
+ cp spectrwm_*.conf "$pkgdir/etc/spectrwm/"
+ cd "$srcdir"
+ install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$_pkgname/LICENSE"
+ install -Dm755 baraction.sh "$pkgdir/usr/share/spectrwm/baraction.sh"
+
+ ln -s /usr/lib/libswmhack.so.0.0 "$pkgdir/usr/lib/libswmhack.so.0"
+ ln -s /usr/lib/libswmhack.so.0.0 "$pkgdir/usr/lib/libswmhack.so"
+
+ # fix this for real in the makefile
+ rm "$pkgdir/usr/bin/scrotwm"
+ ln -s "/usr/bin/spectrwm" "$pkgdir/usr/bin/scrotwm"
+ mkdir -p "$pkgdir"/usr/share/man/{es,it,pt,ru}/man1/
+ mv "$pkgdir/usr/share/man/man1/spectrwm_es.1" "$pkgdir/usr/share/man/es/man1/"
+ mv "$pkgdir/usr/share/man/man1/spectrwm_it.1" "$pkgdir/usr/share/man/it/man1/"
+ mv "$pkgdir/usr/share/man/man1/spectrwm_pt.1" "$pkgdir/usr/share/man/pt/man1/"
+ mv "$pkgdir/usr/share/man/man1/spectrwm_ru.1" "$pkgdir/usr/share/man/ru/man1/"
+}
diff --git a/libre/spectrwm-libre/baraction.sh b/libre/spectrwm-libre/baraction.sh
new file mode 100644
index 000000000..96a8a7b1a
--- /dev/null
+++ b/libre/spectrwm-libre/baraction.sh
@@ -0,0 +1,82 @@
+#!/bin/bash
+# baraction.sh for spectrwm status bar
+# From http://wiki.archlinux.org/index.php/Scrotwm
+
+SLEEP_SEC=5
+#loops forever outputting a line every SLEEP_SEC secs
+while :; do
+
+ eval $(cat /proc/acpi/battery/BAT0/state | awk '/charging state/ {printf "BAT_CHGSTATE=%s;", $3}; /remaining capacity/ {printf "BAT_REMNG=%s;",$3}; /present rate/ {printf "BAT_RATE=%s;",$3};' -)
+ eval $(cat /proc/acpi/battery/BAT0/info | awk '/present/ {printf "BAT_PRESENT=%s;", $2}; /last full capacity/ {printf "BAT_LASTFULL=%s;",$4};' -)
+
+ BAT_REMNG_WH=`echo "scale=1; a=($BAT_REMNG+50)/1000; print a" | bc -l`
+ BAT_RATE_W=`echo "scale=1; a=($BAT_RATE+50)/1000; print a" | bc -l`
+ BCSCRIPT="scale=0; a=(100*$BAT_REMNG / $BAT_LASTFULL); print a"
+ BAT_PCT=`echo $BCSCRIPT | bc -l`%
+
+ case $BAT_PRESENT in
+ no)
+ POWER_STR="AC, NO BATTERY"
+ ;;
+ yes)
+
+ case $BAT_CHGSTATE in
+ charged)
+ #on ac
+ AC_STATUS="ON AC"
+ TIME_REMNG="N/A"
+ POWER_STR="$AC_STATUS $BAT_CHGSTATE $BAT_PCT"
+ ;;
+ charging)
+ #on ac
+ AC_STATUS="ON AC"
+ BCSCRIPT="scale=1; a=(60*($BAT_LASTFULL - $BAT_REMNG) / $BAT_RATE); print a"
+ TIMETOFULL_MIN=`echo $BCSCRIPT | bc -l`
+ POWER_STR="$AC_STATUS $BAT_CHGSTATE $BAT_PCT C="$BAT_REMNG_WH"Wh Rate="$BAT_RATE_W"W TTF="$TIMETOFULL_MIN"min"
+ ;;
+ discharging)
+ AC_STATUS="ON BATT"
+ TIME_REMNG_MIN=`echo "scale=0; a=(60*$BAT_REMNG / $BAT_RATE); print a" | bc -l`
+ TIME_REMNG_HH=`echo "scale=0; a=($BAT_REMNG / $BAT_RATE); if (a<10) {print "0"; print a} else {print a}" | bc -l`
+
+ TIME_REMNG_MM=`echo "scale=0; a=($TIME_REMNG_MIN-60*$TIME_REMNG_HH); if (a<10) {print "0"; print a} else {print a}" | bc -l`
+ POWER_STR="$AC_STATUS $BAT_PCT C="$BAT_REMNG_WH"Wh P="$BAT_RATE_W"W R="$TIME_REMNG_HH":"$TIME_REMNG_MM
+ ;;
+ *)
+ POWER_STR=$BAT_CHGSTATE
+ ;;
+ esac
+
+ ;;
+ *)
+ POWER_STR="error"
+ ;;
+ esac
+
+ #spectrwm bar_print can't handle UTF-8 characters, such as degree symbol
+ #Core 0: +67.0°C (crit = +100.0°C)
+ eval $(sensors 2>/dev/null | sed s/[°+]//g | awk '/^Core 0/ {printf "CORE0TEMP=%s;", $3}; /^Core 1/ {printf "CORE1TEMP=%s;",$3}; /^fan1/ {printf "FANSPD=%s;",$2};' -)
+ TEMP_STR="Tcpu=$CORE0TEMP,$CORE1TEMP F=$FANSPD"
+
+ WLAN_ESSID=$(iwconfig wlan0 | awk -F "\"" '/wlan0/ { print $2 }')
+ eval $(cat /proc/net/wireless | sed s/[.]//g | awk '/wlan0/ {printf "WLAN_QULTY=%s; WLAN_SIGNL=%s; WLAN_NOISE=%s", $3,$4,$5};' -)
+ BCSCRIPT="scale=0;a=100*$WLAN_QULTY/70;print a"
+ WLAN_QPCT=`echo $BCSCRIPT | bc -l`
+ WLAN_POWER=`iwconfig 2>/dev/null| grep "Tx-Power"| awk {'print $4'}|sed s/Tx-Power=//`
+ WLAN_STR="$WLAN_ESSID: Q=$WLAN_QPCT% S/N="$WLAN_SIGNL"/"$WLAN_NOISE"dBm T="$WLAN_POWER"dBm"
+
+ CPUFREQ_STR=`echo "Freq:"$(cat /proc/cpuinfo | grep 'cpu MHz' | sed 's/.*: //g; s/\..*//g;')`
+ CPULOAD_STR="Load:$(uptime | sed 's/.*://; s/,//g')"
+
+ eval $(awk '/^MemTotal/ {printf "MTOT=%s;", $2}; /^MemFree/ {printf "MFREE=%s;",$2}' /proc/meminfo)
+ MUSED=$(( $MTOT - $MFREE ))
+ MUSEDPT=$(( ($MUSED * 100) / $MTOT ))
+ MEM_STR="Mem:${MUSEDPT}%"
+
+ echo -e "$POWER_STR $TEMP_STR $CPUFREQ_STR $CPULOAD_STR $MEM_STR $WLAN_STR"
+ #alternatively if you prefer a different date format
+ #DATE_STR=`date +"%H:%M %a %d %b`
+ #echo -e "$DATE_STR $POWER_STR $TEMP_STR $CPUFREQ_STR $CPULOAD_STR $MEM_STR $WLAN_STR"
+
+ sleep $SLEEP_SEC
+done
diff --git a/libre/syslinux/PKGBUILD b/libre/syslinux/PKGBUILD
index 3fbbafb04..193db8900 100644
--- a/libre/syslinux/PKGBUILD
+++ b/libre/syslinux/PKGBUILD
@@ -1,11 +1,11 @@
-# $Id$
+# $Id: PKGBUILD 165555 2012-08-23 18:27:20Z thomas $
# Maintainer: Thomas Bächler <thomas@archlinux.org>
# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
-# Maintainer (Parabola): André Silva <andre.paulista@adinet.com.uy>
+# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
pkgname=syslinux
pkgver=4.05
-pkgrel=4.3
+pkgrel=7
arch=('i686' 'x86_64' 'mips64el')
pkgdesc="Collection of boot loaders that boot from FAT, ext2/3/4 and btrfs filesystems, from CDs and via PXE (Parabola rebranded)"
url="http://syslinux.zytor.com/"
@@ -14,7 +14,8 @@ depends=('perl' 'glibc')
optdepends=('perl-passwd-md5: For md5pass'
'perl-digest-sha1: For sha1pass'
'mtools: For mkdiskimage and syslinux support'
- )
+ 'gptfdisk: For GPT support'
+ 'util-linux: For isohybrid')
makedepends=('nasm')
backup=('boot/syslinux/syslinux.cfg'
'boot/syslinux/splash.png')
@@ -23,14 +24,16 @@ source=(http://www.kernel.org/pub/linux/utils/boot/syslinux/$pkgname-${pkgver}.t
syslinux-dont-build-dos-windows-targets.patch
syslinux.cfg
syslinux-install_update
- splash.png
- fix-undefined-type-umode_t.patch)
+ avoid-using-ext2_fs.patch
+ handle-ctors-dtors-via-init_array-and-fini_array.patch
+ splash.png)
md5sums=('82299242418385da1274c9479a778cb2'
'1528c376e43f0eaccaa80d8ad1bc13b4'
'8dc2afca3739667e892faf04eb97e7b1'
'680750f73dc2e587ac567d057d485813'
- '0035b6cac6756a384b861eda8d33e4f7'
- '8674f8a0f480f26b705570d699c78a2c')
+ '2e2c674a71c0c0bf265d96cfc19ce985'
+ 'd016d03f15177b1bb534ce3753b2aa9b'
+ '0035b6cac6756a384b861eda8d33e4f7')
build() {
# Do not try to build syslinux with our default LDFLAGS, it will fail
@@ -38,11 +41,15 @@ build() {
cd "$srcdir"/$pkgname-${pkgver}
# Do not try to build the Windows or DOS installers
patch -p1 -i "$srcdir"/syslinux-dont-build-dos-windows-targets.patch
- # Fix unknown type name 'umode_t' error
- patch -p1 -i "$srcdir"/fix-undefined-type-umode_t.patch
+ # fix #30084
+ patch -Np1 -i "$srcdir"/avoid-using-ext2_fs.patch
+ # fix #31065 (booting breaks with gcc 4.7)
+ patch -Np1 -i "$srcdir"/handle-ctors-dtors-via-init_array-and-fini_array.patch
# Fix FHS manpage path
sed 's|/usr/man|/usr/share/man|g' -i mk/syslinux.mk
- make
+ make installer
+ make -C utils
+ make -C com32
}
package() {
@@ -58,4 +65,5 @@ package() {
install -D -m755 "$srcdir"/syslinux-install_update "$pkgdir"/usr/sbin/syslinux-install_update
# move extlinux binary to /usr/sbin
mv "$pkgdir"/sbin/extlinux "$pkgdir"/usr/sbin/extlinux
+ rmdir "$pkgdir"/sbin
}
diff --git a/libre/syslinux/avoid-using-ext2_fs.patch b/libre/syslinux/avoid-using-ext2_fs.patch
new file mode 100644
index 000000000..9a166eefc
--- /dev/null
+++ b/libre/syslinux/avoid-using-ext2_fs.patch
@@ -0,0 +1,965 @@
+From a1006762fa6f98750bb77d76dd992cb8ea9f9c99 Mon Sep 17 00:00:00 2001
+From: "H. Peter Anvin" <hpa@zytor.com>
+Date: Mon, 26 Mar 2012 22:51:09 -0700
+Subject: [PATCH] libinstaller: Avoid using <linux/ext2_fs.h>
+
+Don't use <linux/ext2_fs.h> if we can avoid it.
+
+The ioctl constants have been globalized and moved to <linux/fs.h>.
+Use a private copy of ext2_fs.h from e2fsprogs with the ioctl
+constants removed for the data structures.
+
+Do at least attempt backward compatibility for old kernel headers, but
+no real hope of proper operation there...
+
+Signed-off-by: H. Peter Anvin <hpa@zytor.com>
+---
+ libinstaller/ext2fs/ext2_fs.h | 856 ++++++++++++++++++++++++++++++++++++++++++
+ libinstaller/linuxioctl.h | 29 +-
+ libinstaller/syslxcom.c | 12 +-
+ 3 files changed, 886 insertions(+), 11 deletions(-)
+ create mode 100644 libinstaller/ext2fs/ext2_fs.h
+
+diff -urpN syslinux-4.05/libinstaller/ext2fs/ext2_fs.h.ext2 syslinux-4.05/libinstaller/ext2fs/ext2_fs.h
+--- syslinux-4.05/libinstaller/ext2fs/ext2_fs.h.ext2 2012-08-06 09:48:43.797645032 -0400
++++ syslinux-4.05/libinstaller/ext2fs/ext2_fs.h 2012-08-06 09:48:43.797645032 -0400
+@@ -0,0 +1,856 @@
++/*
++ * linux/include/linux/ext2_fs.h
++ *
++ * Copyright (C) 1992, 1993, 1994, 1995
++ * Remy Card (card@masi.ibp.fr)
++ * Laboratoire MASI - Institut Blaise Pascal
++ * Universite Pierre et Marie Curie (Paris VI)
++ *
++ * from
++ *
++ * linux/include/linux/minix_fs.h
++ *
++ * Copyright (C) 1991, 1992 Linus Torvalds
++ */
++
++#ifndef _EXT2FS_EXT2_FS_H
++#define _EXT2FS_EXT2_FS_H
++
++#include <linux/types.h>
++
++/*
++ * The second extended filesystem constants/structures
++ */
++
++/*
++ * Define EXT2FS_DEBUG to produce debug messages
++ */
++#undef EXT2FS_DEBUG
++
++/*
++ * Define EXT2_PREALLOCATE to preallocate data blocks for expanding files
++ */
++#define EXT2_PREALLOCATE
++#define EXT2_DEFAULT_PREALLOC_BLOCKS 8
++
++/*
++ * The second extended file system version
++ */
++#define EXT2FS_DATE "95/08/09"
++#define EXT2FS_VERSION "0.5b"
++
++/*
++ * Special inode numbers
++ */
++#define EXT2_BAD_INO 1 /* Bad blocks inode */
++#define EXT2_ROOT_INO 2 /* Root inode */
++#define EXT4_USR_QUOTA_INO 3 /* User quota inode */
++#define EXT4_GRP_QUOTA_INO 4 /* Group quota inode */
++#define EXT2_BOOT_LOADER_INO 5 /* Boot loader inode */
++#define EXT2_UNDEL_DIR_INO 6 /* Undelete directory inode */
++#define EXT2_RESIZE_INO 7 /* Reserved group descriptors inode */
++#define EXT2_JOURNAL_INO 8 /* Journal inode */
++#define EXT2_EXCLUDE_INO 9 /* The "exclude" inode, for snapshots */
++#define EXT4_REPLICA_INO 10 /* Used by non-upstream feature */
++
++/* First non-reserved inode for old ext2 filesystems */
++#define EXT2_GOOD_OLD_FIRST_INO 11
++
++/*
++ * The second extended file system magic number
++ */
++#define EXT2_SUPER_MAGIC 0xEF53
++
++#ifdef __KERNEL__
++#define EXT2_SB(sb) (&((sb)->u.ext2_sb))
++#else
++/* Assume that user mode programs are passing in an ext2fs superblock, not
++ * a kernel struct super_block. This will allow us to call the feature-test
++ * macros from user land. */
++#define EXT2_SB(sb) (sb)
++#endif
++
++/*
++ * Maximal count of links to a file
++ */
++#define EXT2_LINK_MAX 65000
++
++/*
++ * Macro-instructions used to manage several block sizes
++ */
++#define EXT2_MIN_BLOCK_LOG_SIZE 10 /* 1024 */
++#define EXT2_MAX_BLOCK_LOG_SIZE 16 /* 65536 */
++#define EXT2_MIN_BLOCK_SIZE (1 << EXT2_MIN_BLOCK_LOG_SIZE)
++#define EXT2_MAX_BLOCK_SIZE (1 << EXT2_MAX_BLOCK_LOG_SIZE)
++#ifdef __KERNEL__
++#define EXT2_BLOCK_SIZE(s) ((s)->s_blocksize)
++#define EXT2_BLOCK_SIZE_BITS(s) ((s)->s_blocksize_bits)
++#define EXT2_ADDR_PER_BLOCK_BITS(s) (EXT2_SB(s)->addr_per_block_bits)
++#define EXT2_INODE_SIZE(s) (EXT2_SB(s)->s_inode_size)
++#define EXT2_FIRST_INO(s) (EXT2_SB(s)->s_first_ino)
++#else
++#define EXT2_BLOCK_SIZE(s) (EXT2_MIN_BLOCK_SIZE << (s)->s_log_block_size)
++#define EXT2_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10)
++#define EXT2_INODE_SIZE(s) (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
++ EXT2_GOOD_OLD_INODE_SIZE : (s)->s_inode_size)
++#define EXT2_FIRST_INO(s) (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
++ EXT2_GOOD_OLD_FIRST_INO : (s)->s_first_ino)
++#endif
++#define EXT2_ADDR_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof(__u32))
++
++/*
++ * Macro-instructions used to manage allocation clusters
++ */
++#define EXT2_MIN_CLUSTER_LOG_SIZE EXT2_MIN_BLOCK_LOG_SIZE
++#define EXT2_MAX_CLUSTER_LOG_SIZE 29 /* 512MB */
++#define EXT2_MIN_CLUSTER_SIZE EXT2_MIN_BLOCK_SIZE
++#define EXT2_MAX_CLUSTER_SIZE (1 << EXT2_MAX_CLUSTER_LOG_SIZE)
++#define EXT2_CLUSTER_SIZE(s) (EXT2_MIN_BLOCK_SIZE << \
++ (s)->s_log_cluster_size)
++#define EXT2_CLUSTER_SIZE_BITS(s) ((s)->s_log_cluster_size + 10)
++
++/*
++ * Macro-instructions used to manage fragments
++ *
++ * Note: for backwards compatibility only, for the dump program.
++ * Ext2/3/4 will never support fragments....
++ */
++#define EXT2_MIN_FRAG_SIZE EXT2_MIN_BLOCK_SIZE
++#define EXT2_MAX_FRAG_SIZE EXT2_MAX_BLOCK_SIZE
++#define EXT2_MIN_FRAG_LOG_SIZE EXT2_MIN_BLOCK_LOG_SIZE
++#define EXT2_FRAG_SIZE(s) EXT2_BLOCK_SIZE(s)
++#define EXT2_FRAGS_PER_BLOCK(s) 1
++
++/*
++ * ACL structures
++ */
++struct ext2_acl_header /* Header of Access Control Lists */
++{
++ __u32 aclh_size;
++ __u32 aclh_file_count;
++ __u32 aclh_acle_count;
++ __u32 aclh_first_acle;
++};
++
++struct ext2_acl_entry /* Access Control List Entry */
++{
++ __u32 acle_size;
++ __u16 acle_perms; /* Access permissions */
++ __u16 acle_type; /* Type of entry */
++ __u16 acle_tag; /* User or group identity */
++ __u16 acle_pad1;
++ __u32 acle_next; /* Pointer on next entry for the */
++ /* same inode or on next free entry */
++};
++
++/*
++ * Structure of a blocks group descriptor
++ */
++struct ext2_group_desc
++{
++ __u32 bg_block_bitmap; /* Blocks bitmap block */
++ __u32 bg_inode_bitmap; /* Inodes bitmap block */
++ __u32 bg_inode_table; /* Inodes table block */
++ __u16 bg_free_blocks_count; /* Free blocks count */
++ __u16 bg_free_inodes_count; /* Free inodes count */
++ __u16 bg_used_dirs_count; /* Directories count */
++ __u16 bg_flags;
++ __u32 bg_exclude_bitmap_lo; /* Exclude bitmap for snapshots */
++ __u16 bg_block_bitmap_csum_lo;/* crc32c(s_uuid+grp_num+bitmap) LSB */
++ __u16 bg_inode_bitmap_csum_lo;/* crc32c(s_uuid+grp_num+bitmap) LSB */
++ __u16 bg_itable_unused; /* Unused inodes count */
++ __u16 bg_checksum; /* crc16(s_uuid+grouo_num+group_desc)*/
++};
++
++/*
++ * Structure of a blocks group descriptor
++ */
++struct ext4_group_desc
++{
++ __u32 bg_block_bitmap; /* Blocks bitmap block */
++ __u32 bg_inode_bitmap; /* Inodes bitmap block */
++ __u32 bg_inode_table; /* Inodes table block */
++ __u16 bg_free_blocks_count; /* Free blocks count */
++ __u16 bg_free_inodes_count; /* Free inodes count */
++ __u16 bg_used_dirs_count; /* Directories count */
++ __u16 bg_flags; /* EXT4_BG_flags (INODE_UNINIT, etc) */
++ __u32 bg_exclude_bitmap_lo; /* Exclude bitmap for snapshots */
++ __u16 bg_block_bitmap_csum_lo;/* crc32c(s_uuid+grp_num+bitmap) LSB */
++ __u16 bg_inode_bitmap_csum_lo;/* crc32c(s_uuid+grp_num+bitmap) LSB */
++ __u16 bg_itable_unused; /* Unused inodes count */
++ __u16 bg_checksum; /* crc16(sb_uuid+group+desc) */
++ __u32 bg_block_bitmap_hi; /* Blocks bitmap block MSB */
++ __u32 bg_inode_bitmap_hi; /* Inodes bitmap block MSB */
++ __u32 bg_inode_table_hi; /* Inodes table block MSB */
++ __u16 bg_free_blocks_count_hi;/* Free blocks count MSB */
++ __u16 bg_free_inodes_count_hi;/* Free inodes count MSB */
++ __u16 bg_used_dirs_count_hi; /* Directories count MSB */
++ __u16 bg_itable_unused_hi; /* Unused inodes count MSB */
++ __u32 bg_exclude_bitmap_hi; /* Exclude bitmap block MSB */
++ __u16 bg_block_bitmap_csum_hi;/* crc32c(s_uuid+grp_num+bitmap) MSB */
++ __u16 bg_inode_bitmap_csum_hi;/* crc32c(s_uuid+grp_num+bitmap) MSB */
++ __u32 bg_reserved;
++};
++
++#define EXT2_BG_INODE_UNINIT 0x0001 /* Inode table/bitmap not initialized */
++#define EXT2_BG_BLOCK_UNINIT 0x0002 /* Block bitmap not initialized */
++#define EXT2_BG_INODE_ZEROED 0x0004 /* On-disk itable initialized to zero */
++
++/*
++ * Data structures used by the directory indexing feature
++ *
++ * Note: all of the multibyte integer fields are little endian.
++ */
++
++/*
++ * Note: dx_root_info is laid out so that if it should somehow get
++ * overlaid by a dirent the two low bits of the hash version will be
++ * zero. Therefore, the hash version mod 4 should never be 0.
++ * Sincerely, the paranoia department.
++ */
++struct ext2_dx_root_info {
++ __u32 reserved_zero;
++ __u8 hash_version; /* 0 now, 1 at release */
++ __u8 info_length; /* 8 */
++ __u8 indirect_levels;
++ __u8 unused_flags;
++};
++
++#define EXT2_HASH_LEGACY 0
++#define EXT2_HASH_HALF_MD4 1
++#define EXT2_HASH_TEA 2
++#define EXT2_HASH_LEGACY_UNSIGNED 3 /* reserved for userspace lib */
++#define EXT2_HASH_HALF_MD4_UNSIGNED 4 /* reserved for userspace lib */
++#define EXT2_HASH_TEA_UNSIGNED 5 /* reserved for userspace lib */
++
++#define EXT2_HASH_FLAG_INCOMPAT 0x1
++
++struct ext2_dx_entry {
++ __u32 hash;
++ __u32 block;
++};
++
++struct ext2_dx_countlimit {
++ __u16 limit;
++ __u16 count;
++};
++
++
++/*
++ * Macro-instructions used to manage group descriptors
++ */
++#define EXT2_MIN_DESC_SIZE 32
++#define EXT2_MIN_DESC_SIZE_64BIT 64
++#define EXT2_MAX_DESC_SIZE EXT2_MIN_BLOCK_SIZE
++#define EXT2_DESC_SIZE(s) \
++ ((EXT2_SB(s)->s_feature_incompat & EXT4_FEATURE_INCOMPAT_64BIT) ? \
++ (s)->s_desc_size : EXT2_MIN_DESC_SIZE)
++
++#define EXT2_BLOCKS_PER_GROUP(s) (EXT2_SB(s)->s_blocks_per_group)
++#define EXT2_INODES_PER_GROUP(s) (EXT2_SB(s)->s_inodes_per_group)
++#define EXT2_CLUSTERS_PER_GROUP(s) (EXT2_SB(s)->s_clusters_per_group)
++#define EXT2_INODES_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s)/EXT2_INODE_SIZE(s))
++/* limits imposed by 16-bit value gd_free_{blocks,inode}_count */
++#define EXT2_MAX_BLOCKS_PER_GROUP(s) ((((unsigned) 1 << 16) - 8) * \
++ (EXT2_CLUSTER_SIZE(s) / \
++ EXT2_BLOCK_SIZE(s)))
++#define EXT2_MAX_CLUSTERS_PER_GROUP(s) (((unsigned) 1 << 16) - 8)
++#define EXT2_MAX_INODES_PER_GROUP(s) (((unsigned) 1 << 16) - \
++ EXT2_INODES_PER_BLOCK(s))
++#ifdef __KERNEL__
++#define EXT2_DESC_PER_BLOCK(s) (EXT2_SB(s)->s_desc_per_block)
++#define EXT2_DESC_PER_BLOCK_BITS(s) (EXT2_SB(s)->s_desc_per_block_bits)
++#else
++#define EXT2_DESC_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / EXT2_DESC_SIZE(s))
++#endif
++
++/*
++ * Constants relative to the data blocks
++ */
++#define EXT2_NDIR_BLOCKS 12
++#define EXT2_IND_BLOCK EXT2_NDIR_BLOCKS
++#define EXT2_DIND_BLOCK (EXT2_IND_BLOCK + 1)
++#define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK + 1)
++#define EXT2_N_BLOCKS (EXT2_TIND_BLOCK + 1)
++
++/*
++ * Inode flags
++ */
++#define EXT2_SECRM_FL 0x00000001 /* Secure deletion */
++#define EXT2_UNRM_FL 0x00000002 /* Undelete */
++#define EXT2_COMPR_FL 0x00000004 /* Compress file */
++#define EXT2_SYNC_FL 0x00000008 /* Synchronous updates */
++#define EXT2_IMMUTABLE_FL 0x00000010 /* Immutable file */
++#define EXT2_APPEND_FL 0x00000020 /* writes to file may only append */
++#define EXT2_NODUMP_FL 0x00000040 /* do not dump file */
++#define EXT2_NOATIME_FL 0x00000080 /* do not update atime */
++/* Reserved for compression usage... */
++#define EXT2_DIRTY_FL 0x00000100
++#define EXT2_COMPRBLK_FL 0x00000200 /* One or more compressed clusters */
++#define EXT2_NOCOMPR_FL 0x00000400 /* Access raw compressed data */
++#define EXT2_ECOMPR_FL 0x00000800 /* Compression error */
++/* End compression flags --- maybe not all used */
++#define EXT2_BTREE_FL 0x00001000 /* btree format dir */
++#define EXT2_INDEX_FL 0x00001000 /* hash-indexed directory */
++#define EXT2_IMAGIC_FL 0x00002000
++#define EXT3_JOURNAL_DATA_FL 0x00004000 /* file data should be journaled */
++#define EXT2_NOTAIL_FL 0x00008000 /* file tail should not be merged */
++#define EXT2_DIRSYNC_FL 0x00010000 /* Synchronous directory modifications */
++#define EXT2_TOPDIR_FL 0x00020000 /* Top of directory hierarchies*/
++#define EXT4_HUGE_FILE_FL 0x00040000 /* Set to each huge file */
++#define EXT4_EXTENTS_FL 0x00080000 /* Inode uses extents */
++#define EXT4_EA_INODE_FL 0x00200000 /* Inode used for large EA */
++/* EXT4_EOFBLOCKS_FL 0x00400000 was here */
++#define EXT4_SNAPFILE_FL 0x01000000 /* Inode is a snapshot */
++#define EXT4_SNAPFILE_DELETED_FL 0x04000000 /* Snapshot is being deleted */
++#define EXT4_SNAPFILE_SHRUNK_FL 0x08000000 /* Snapshot shrink has completed */
++#define EXT2_RESERVED_FL 0x80000000 /* reserved for ext2 lib */
++
++#define EXT2_FL_USER_VISIBLE 0x004BDFFF /* User visible flags */
++#define EXT2_FL_USER_MODIFIABLE 0x004B80FF /* User modifiable flags */
++
++/*
++ * ioctl commands
++ */
++
++/* Used for online resize */
++struct ext2_new_group_input {
++ __u32 group; /* Group number for this data */
++ __u32 block_bitmap; /* Absolute block number of block bitmap */
++ __u32 inode_bitmap; /* Absolute block number of inode bitmap */
++ __u32 inode_table; /* Absolute block number of inode table start */
++ __u32 blocks_count; /* Total number of blocks in this group */
++ __u16 reserved_blocks; /* Number of reserved blocks in this group */
++ __u16 unused; /* Number of reserved GDT blocks in group */
++};
++
++struct ext4_new_group_input {
++ __u32 group; /* Group number for this data */
++ __u64 block_bitmap; /* Absolute block number of block bitmap */
++ __u64 inode_bitmap; /* Absolute block number of inode bitmap */
++ __u64 inode_table; /* Absolute block number of inode table start */
++ __u32 blocks_count; /* Total number of blocks in this group */
++ __u16 reserved_blocks; /* Number of reserved blocks in this group */
++ __u16 unused;
++};
++
++#ifdef __GNU__ /* Needed for the Hurd */
++#define _IOT_ext2_new_group_input _IOT (_IOTS(__u32), 5, _IOTS(__u16), 2, 0, 0)
++#endif
++
++#define EXT2_IOC_GETFLAGS _IOR('f', 1, long)
++#define EXT2_IOC_SETFLAGS _IOW('f', 2, long)
++#define EXT2_IOC_GETVERSION _IOR('v', 1, long)
++#define EXT2_IOC_SETVERSION _IOW('v', 2, long)
++#define EXT2_IOC_GETVERSION_NEW _IOR('f', 3, long)
++#define EXT2_IOC_SETVERSION_NEW _IOW('f', 4, long)
++#define EXT2_IOC_GROUP_EXTEND _IOW('f', 7, unsigned long)
++#define EXT2_IOC_GROUP_ADD _IOW('f', 8,struct ext2_new_group_input)
++#define EXT4_IOC_GROUP_ADD _IOW('f', 8,struct ext4_new_group_input)
++#define EXT4_IOC_RESIZE_FS _IOW('f', 16, __u64)
++
++/*
++ * Structure of an inode on the disk
++ */
++struct ext2_inode {
++ __u16 i_mode; /* File mode */
++ __u16 i_uid; /* Low 16 bits of Owner Uid */
++ __u32 i_size; /* Size in bytes */
++ __u32 i_atime; /* Access time */
++ __u32 i_ctime; /* Inode change time */
++ __u32 i_mtime; /* Modification time */
++ __u32 i_dtime; /* Deletion Time */
++ __u16 i_gid; /* Low 16 bits of Group Id */
++ __u16 i_links_count; /* Links count */
++ __u32 i_blocks; /* Blocks count */
++ __u32 i_flags; /* File flags */
++ union {
++ struct {
++ __u32 l_i_version; /* was l_i_reserved1 */
++ } linux1;
++ struct {
++ __u32 h_i_translator;
++ } hurd1;
++ } osd1; /* OS dependent 1 */
++ __u32 i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
++ __u32 i_generation; /* File version (for NFS) */
++ __u32 i_file_acl; /* File ACL */
++ __u32 i_size_high; /* Formerly i_dir_acl, directory ACL */
++ __u32 i_faddr; /* Fragment address */
++ union {
++ struct {
++ __u16 l_i_blocks_hi;
++ __u16 l_i_file_acl_high;
++ __u16 l_i_uid_high; /* these 2 fields */
++ __u16 l_i_gid_high; /* were reserved2[0] */
++ __u16 l_i_checksum_lo; /* crc32c(uuid+inum+inode) */
++ __u16 l_i_reserved;
++ } linux2;
++ struct {
++ __u8 h_i_frag; /* Fragment number */
++ __u8 h_i_fsize; /* Fragment size */
++ __u16 h_i_mode_high;
++ __u16 h_i_uid_high;
++ __u16 h_i_gid_high;
++ __u32 h_i_author;
++ } hurd2;
++ } osd2; /* OS dependent 2 */
++};
++
++/*
++ * Permanent part of an large inode on the disk
++ */
++struct ext2_inode_large {
++ __u16 i_mode; /* File mode */
++ __u16 i_uid; /* Low 16 bits of Owner Uid */
++ __u32 i_size; /* Size in bytes */
++ __u32 i_atime; /* Access time */
++ __u32 i_ctime; /* Inode Change time */
++ __u32 i_mtime; /* Modification time */
++ __u32 i_dtime; /* Deletion Time */
++ __u16 i_gid; /* Low 16 bits of Group Id */
++ __u16 i_links_count; /* Links count */
++ __u32 i_blocks; /* Blocks count */
++ __u32 i_flags; /* File flags */
++ union {
++ struct {
++ __u32 l_i_version; /* was l_i_reserved1 */
++ } linux1;
++ struct {
++ __u32 h_i_translator;
++ } hurd1;
++ } osd1; /* OS dependent 1 */
++ __u32 i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
++ __u32 i_generation; /* File version (for NFS) */
++ __u32 i_file_acl; /* File ACL */
++ __u32 i_size_high; /* Formerly i_dir_acl, directory ACL */
++ __u32 i_faddr; /* Fragment address */
++ union {
++ struct {
++ __u16 l_i_blocks_hi;
++ __u16 l_i_file_acl_high;
++ __u16 l_i_uid_high; /* these 2 fields */
++ __u16 l_i_gid_high; /* were reserved2[0] */
++ __u16 l_i_checksum_lo; /* crc32c(uuid+inum+inode) */
++ __u16 l_i_reserved;
++ } linux2;
++ struct {
++ __u8 h_i_frag; /* Fragment number */
++ __u8 h_i_fsize; /* Fragment size */
++ __u16 h_i_mode_high;
++ __u16 h_i_uid_high;
++ __u16 h_i_gid_high;
++ __u32 h_i_author;
++ } hurd2;
++ } osd2; /* OS dependent 2 */
++ __u16 i_extra_isize;
++ __u16 i_checksum_hi; /* crc32c(uuid+inum+inode) */
++ __u32 i_ctime_extra; /* extra Change time (nsec << 2 | epoch) */
++ __u32 i_mtime_extra; /* extra Modification time (nsec << 2 | epoch) */
++ __u32 i_atime_extra; /* extra Access time (nsec << 2 | epoch) */
++ __u32 i_crtime; /* File creation time */
++ __u32 i_crtime_extra; /* extra File creation time (nsec << 2 | epoch)*/
++ __u32 i_version_hi; /* high 32 bits for 64-bit version */
++};
++
++#define i_dir_acl i_size_high
++
++#if defined(__KERNEL__) || defined(__linux__)
++#define i_reserved1 osd1.linux1.l_i_reserved1
++#define i_frag osd2.linux2.l_i_frag
++#define i_fsize osd2.linux2.l_i_fsize
++#define i_uid_low i_uid
++#define i_gid_low i_gid
++#define i_uid_high osd2.linux2.l_i_uid_high
++#define i_gid_high osd2.linux2.l_i_gid_high
++#else
++#if defined(__GNU__)
++
++#define i_translator osd1.hurd1.h_i_translator
++#define i_frag osd2.hurd2.h_i_frag;
++#define i_fsize osd2.hurd2.h_i_fsize;
++#define i_uid_high osd2.hurd2.h_i_uid_high
++#define i_gid_high osd2.hurd2.h_i_gid_high
++#define i_author osd2.hurd2.h_i_author
++
++#endif /* __GNU__ */
++#endif /* defined(__KERNEL__) || defined(__linux__) */
++
++#define inode_uid(inode) ((inode).i_uid | (inode).osd2.linux2.l_i_uid_high << 16)
++#define inode_gid(inode) ((inode).i_gid | (inode).osd2.linux2.l_i_gid_high << 16)
++#define ext2fs_set_i_uid_high(inode,x) ((inode).osd2.linux2.l_i_uid_high = (x))
++#define ext2fs_set_i_gid_high(inode,x) ((inode).osd2.linux2.l_i_gid_high = (x))
++
++/*
++ * File system states
++ */
++#define EXT2_VALID_FS 0x0001 /* Unmounted cleanly */
++#define EXT2_ERROR_FS 0x0002 /* Errors detected */
++#define EXT3_ORPHAN_FS 0x0004 /* Orphans being recovered */
++
++/*
++ * Misc. filesystem flags
++ */
++#define EXT2_FLAGS_SIGNED_HASH 0x0001 /* Signed dirhash in use */
++#define EXT2_FLAGS_UNSIGNED_HASH 0x0002 /* Unsigned dirhash in use */
++#define EXT2_FLAGS_TEST_FILESYS 0x0004 /* OK for use on development code */
++#define EXT2_FLAGS_IS_SNAPSHOT 0x0010 /* This is a snapshot image */
++#define EXT2_FLAGS_FIX_SNAPSHOT 0x0020 /* Snapshot inodes corrupted */
++#define EXT2_FLAGS_FIX_EXCLUDE 0x0040 /* Exclude bitmaps corrupted */
++
++/*
++ * Mount flags
++ */
++#define EXT2_MOUNT_CHECK 0x0001 /* Do mount-time checks */
++#define EXT2_MOUNT_GRPID 0x0004 /* Create files with directory's group */
++#define EXT2_MOUNT_DEBUG 0x0008 /* Some debugging messages */
++#define EXT2_MOUNT_ERRORS_CONT 0x0010 /* Continue on errors */
++#define EXT2_MOUNT_ERRORS_RO 0x0020 /* Remount fs ro on errors */
++#define EXT2_MOUNT_ERRORS_PANIC 0x0040 /* Panic on errors */
++#define EXT2_MOUNT_MINIX_DF 0x0080 /* Mimics the Minix statfs */
++#define EXT2_MOUNT_NO_UID32 0x0200 /* Disable 32-bit UIDs */
++
++#define clear_opt(o, opt) o &= ~EXT2_MOUNT_##opt
++#define set_opt(o, opt) o |= EXT2_MOUNT_##opt
++#define test_opt(sb, opt) (EXT2_SB(sb)->s_mount_opt & \
++ EXT2_MOUNT_##opt)
++/*
++ * Maximal mount counts between two filesystem checks
++ */
++#define EXT2_DFL_MAX_MNT_COUNT 20 /* Allow 20 mounts */
++#define EXT2_DFL_CHECKINTERVAL 0 /* Don't use interval check */
++
++/*
++ * Behaviour when detecting errors
++ */
++#define EXT2_ERRORS_CONTINUE 1 /* Continue execution */
++#define EXT2_ERRORS_RO 2 /* Remount fs read-only */
++#define EXT2_ERRORS_PANIC 3 /* Panic */
++#define EXT2_ERRORS_DEFAULT EXT2_ERRORS_CONTINUE
++
++#if (__GNUC__ >= 4)
++#define ext4_offsetof(TYPE,MEMBER) __builtin_offsetof(TYPE,MEMBER)
++#else
++#define ext4_offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
++#endif
++
++/*
++ * Structure of the super block
++ */
++struct ext2_super_block {
++ __u32 s_inodes_count; /* Inodes count */
++ __u32 s_blocks_count; /* Blocks count */
++ __u32 s_r_blocks_count; /* Reserved blocks count */
++ __u32 s_free_blocks_count; /* Free blocks count */
++ __u32 s_free_inodes_count; /* Free inodes count */
++ __u32 s_first_data_block; /* First Data Block */
++ __u32 s_log_block_size; /* Block size */
++ __u32 s_log_cluster_size; /* Allocation cluster size */
++ __u32 s_blocks_per_group; /* # Blocks per group */
++ __u32 s_clusters_per_group; /* # Fragments per group */
++ __u32 s_inodes_per_group; /* # Inodes per group */
++ __u32 s_mtime; /* Mount time */
++ __u32 s_wtime; /* Write time */
++ __u16 s_mnt_count; /* Mount count */
++ __s16 s_max_mnt_count; /* Maximal mount count */
++ __u16 s_magic; /* Magic signature */
++ __u16 s_state; /* File system state */
++ __u16 s_errors; /* Behaviour when detecting errors */
++ __u16 s_minor_rev_level; /* minor revision level */
++ __u32 s_lastcheck; /* time of last check */
++ __u32 s_checkinterval; /* max. time between checks */
++ __u32 s_creator_os; /* OS */
++ __u32 s_rev_level; /* Revision level */
++ __u16 s_def_resuid; /* Default uid for reserved blocks */
++ __u16 s_def_resgid; /* Default gid for reserved blocks */
++ /*
++ * These fields are for EXT2_DYNAMIC_REV superblocks only.
++ *
++ * Note: the difference between the compatible feature set and
++ * the incompatible feature set is that if there is a bit set
++ * in the incompatible feature set that the kernel doesn't
++ * know about, it should refuse to mount the filesystem.
++ *
++ * e2fsck's requirements are more strict; if it doesn't know
++ * about a feature in either the compatible or incompatible
++ * feature set, it must abort and not try to meddle with
++ * things it doesn't understand...
++ */
++ __u32 s_first_ino; /* First non-reserved inode */
++ __u16 s_inode_size; /* size of inode structure */
++ __u16 s_block_group_nr; /* block group # of this superblock */
++ __u32 s_feature_compat; /* compatible feature set */
++ __u32 s_feature_incompat; /* incompatible feature set */
++ __u32 s_feature_ro_compat; /* readonly-compatible feature set */
++ __u8 s_uuid[16]; /* 128-bit uuid for volume */
++ char s_volume_name[16]; /* volume name */
++ char s_last_mounted[64]; /* directory where last mounted */
++ __u32 s_algorithm_usage_bitmap; /* For compression */
++ /*
++ * Performance hints. Directory preallocation should only
++ * happen if the EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is on.
++ */
++ __u8 s_prealloc_blocks; /* Nr of blocks to try to preallocate*/
++ __u8 s_prealloc_dir_blocks; /* Nr to preallocate for dirs */
++ __u16 s_reserved_gdt_blocks; /* Per group table for online growth */
++ /*
++ * Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set.
++ */
++ __u8 s_journal_uuid[16]; /* uuid of journal superblock */
++ __u32 s_journal_inum; /* inode number of journal file */
++ __u32 s_journal_dev; /* device number of journal file */
++ __u32 s_last_orphan; /* start of list of inodes to delete */
++ __u32 s_hash_seed[4]; /* HTREE hash seed */
++ __u8 s_def_hash_version; /* Default hash version to use */
++ __u8 s_jnl_backup_type; /* Default type of journal backup */
++ __u16 s_desc_size; /* Group desc. size: INCOMPAT_64BIT */
++ __u32 s_default_mount_opts;
++ __u32 s_first_meta_bg; /* First metablock group */
++ __u32 s_mkfs_time; /* When the filesystem was created */
++ __u32 s_jnl_blocks[17]; /* Backup of the journal inode */
++ __u32 s_blocks_count_hi; /* Blocks count high 32bits */
++ __u32 s_r_blocks_count_hi; /* Reserved blocks count high 32 bits*/
++ __u32 s_free_blocks_hi; /* Free blocks count */
++ __u16 s_min_extra_isize; /* All inodes have at least # bytes */
++ __u16 s_want_extra_isize; /* New inodes should reserve # bytes */
++ __u32 s_flags; /* Miscellaneous flags */
++ __u16 s_raid_stride; /* RAID stride */
++ __u16 s_mmp_update_interval; /* # seconds to wait in MMP checking */
++ __u64 s_mmp_block; /* Block for multi-mount protection */
++ __u32 s_raid_stripe_width; /* blocks on all data disks (N*stride)*/
++ __u8 s_log_groups_per_flex; /* FLEX_BG group size */
++ __u8 s_reserved_char_pad;
++ __u16 s_reserved_pad; /* Padding to next 32bits */
++ __u64 s_kbytes_written; /* nr of lifetime kilobytes written */
++ __u32 s_snapshot_inum; /* Inode number of active snapshot */
++ __u32 s_snapshot_id; /* sequential ID of active snapshot */
++ __u64 s_snapshot_r_blocks_count; /* reserved blocks for active
++ snapshot's future use */
++ __u32 s_snapshot_list; /* inode number of the head of the on-disk snapshot list */
++#define EXT4_S_ERR_START ext4_offsetof(struct ext2_super_block, s_error_count)
++ __u32 s_error_count; /* number of fs errors */
++ __u32 s_first_error_time; /* first time an error happened */
++ __u32 s_first_error_ino; /* inode involved in first error */
++ __u64 s_first_error_block; /* block involved of first error */
++ __u8 s_first_error_func[32]; /* function where the error happened */
++ __u32 s_first_error_line; /* line number where error happened */
++ __u32 s_last_error_time; /* most recent time of an error */
++ __u32 s_last_error_ino; /* inode involved in last error */
++ __u32 s_last_error_line; /* line number where error happened */
++ __u64 s_last_error_block; /* block involved of last error */
++ __u8 s_last_error_func[32]; /* function where the error happened */
++#define EXT4_S_ERR_END ext4_offsetof(struct ext2_super_block, s_mount_opts)
++ __u8 s_mount_opts[64];
++ __u32 s_usr_quota_inum; /* inode number of user quota file */
++ __u32 s_grp_quota_inum; /* inode number of group quota file */
++ __u32 s_overhead_blocks; /* overhead blocks/clusters in fs */
++ __u32 s_reserved[108]; /* Padding to the end of the block */
++ __u32 s_checksum; /* crc32c(superblock) */
++};
++
++#define EXT4_S_ERR_LEN (EXT4_S_ERR_END - EXT4_S_ERR_START)
++
++/*
++ * Codes for operating systems
++ */
++#define EXT2_OS_LINUX 0
++#define EXT2_OS_HURD 1
++#define EXT2_OBSO_OS_MASIX 2
++#define EXT2_OS_FREEBSD 3
++#define EXT2_OS_LITES 4
++
++/*
++ * Revision levels
++ */
++#define EXT2_GOOD_OLD_REV 0 /* The good old (original) format */
++#define EXT2_DYNAMIC_REV 1 /* V2 format w/ dynamic inode sizes */
++
++#define EXT2_CURRENT_REV EXT2_GOOD_OLD_REV
++#define EXT2_MAX_SUPP_REV EXT2_DYNAMIC_REV
++
++#define EXT2_GOOD_OLD_INODE_SIZE 128
++
++/*
++ * Journal inode backup types
++ */
++#define EXT3_JNL_BACKUP_BLOCKS 1
++
++/*
++ * Feature set definitions
++ */
++
++#define EXT2_HAS_COMPAT_FEATURE(sb,mask) \
++ ( EXT2_SB(sb)->s_feature_compat & (mask) )
++#define EXT2_HAS_RO_COMPAT_FEATURE(sb,mask) \
++ ( EXT2_SB(sb)->s_feature_ro_compat & (mask) )
++#define EXT2_HAS_INCOMPAT_FEATURE(sb,mask) \
++ ( EXT2_SB(sb)->s_feature_incompat & (mask) )
++
++#define EXT2_FEATURE_COMPAT_DIR_PREALLOC 0x0001
++#define EXT2_FEATURE_COMPAT_IMAGIC_INODES 0x0002
++#define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004
++#define EXT2_FEATURE_COMPAT_EXT_ATTR 0x0008
++#define EXT2_FEATURE_COMPAT_RESIZE_INODE 0x0010
++#define EXT2_FEATURE_COMPAT_DIR_INDEX 0x0020
++#define EXT2_FEATURE_COMPAT_LAZY_BG 0x0040
++/* #define EXT2_FEATURE_COMPAT_EXCLUDE_INODE 0x0080 not used, legacy */
++#define EXT2_FEATURE_COMPAT_EXCLUDE_BITMAP 0x0100
++
++
++#define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001
++#define EXT2_FEATURE_RO_COMPAT_LARGE_FILE 0x0002
++/* #define EXT2_FEATURE_RO_COMPAT_BTREE_DIR 0x0004 not used */
++#define EXT4_FEATURE_RO_COMPAT_HUGE_FILE 0x0008
++#define EXT4_FEATURE_RO_COMPAT_GDT_CSUM 0x0010
++#define EXT4_FEATURE_RO_COMPAT_DIR_NLINK 0x0020
++#define EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE 0x0040
++#define EXT4_FEATURE_RO_COMPAT_HAS_SNAPSHOT 0x0080
++#define EXT4_FEATURE_RO_COMPAT_QUOTA 0x0100
++#define EXT4_FEATURE_RO_COMPAT_BIGALLOC 0x0200
++#define EXT4_FEATURE_RO_COMPAT_METADATA_CSUM 0x0400
++#define EXT4_FEATURE_RO_COMPAT_REPLICA 0x0800
++
++#define EXT2_FEATURE_INCOMPAT_COMPRESSION 0x0001
++#define EXT2_FEATURE_INCOMPAT_FILETYPE 0x0002
++#define EXT3_FEATURE_INCOMPAT_RECOVER 0x0004 /* Needs recovery */
++#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV 0x0008 /* Journal device */
++#define EXT2_FEATURE_INCOMPAT_META_BG 0x0010
++#define EXT3_FEATURE_INCOMPAT_EXTENTS 0x0040
++#define EXT4_FEATURE_INCOMPAT_64BIT 0x0080
++#define EXT4_FEATURE_INCOMPAT_MMP 0x0100
++#define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200
++#define EXT4_FEATURE_INCOMPAT_EA_INODE 0x0400
++#define EXT4_FEATURE_INCOMPAT_DIRDATA 0x1000
++
++#define EXT2_FEATURE_COMPAT_SUPP 0
++#define EXT2_FEATURE_INCOMPAT_SUPP (EXT2_FEATURE_INCOMPAT_FILETYPE| \
++ EXT4_FEATURE_INCOMPAT_MMP)
++#define EXT2_FEATURE_RO_COMPAT_SUPP (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
++ EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
++ EXT4_FEATURE_RO_COMPAT_DIR_NLINK| \
++ EXT2_FEATURE_RO_COMPAT_BTREE_DIR)
++
++/*
++ * Default values for user and/or group using reserved blocks
++ */
++#define EXT2_DEF_RESUID 0
++#define EXT2_DEF_RESGID 0
++
++/*
++ * Default mount options
++ */
++#define EXT2_DEFM_DEBUG 0x0001
++#define EXT2_DEFM_BSDGROUPS 0x0002
++#define EXT2_DEFM_XATTR_USER 0x0004
++#define EXT2_DEFM_ACL 0x0008
++#define EXT2_DEFM_UID16 0x0010
++#define EXT3_DEFM_JMODE 0x0060
++#define EXT3_DEFM_JMODE_DATA 0x0020
++#define EXT3_DEFM_JMODE_ORDERED 0x0040
++#define EXT3_DEFM_JMODE_WBACK 0x0060
++#define EXT4_DEFM_NOBARRIER 0x0100
++#define EXT4_DEFM_BLOCK_VALIDITY 0x0200
++#define EXT4_DEFM_DISCARD 0x0400
++#define EXT4_DEFM_NODELALLOC 0x0800
++
++/*
++ * Structure of a directory entry
++ */
++#define EXT2_NAME_LEN 255
++
++struct ext2_dir_entry {
++ __u32 inode; /* Inode number */
++ __u16 rec_len; /* Directory entry length */
++ __u16 name_len; /* Name length */
++ char name[EXT2_NAME_LEN]; /* File name */
++};
++
++/*
++ * The new version of the directory entry. Since EXT2 structures are
++ * stored in intel byte order, and the name_len field could never be
++ * bigger than 255 chars, it's safe to reclaim the extra byte for the
++ * file_type field.
++ */
++struct ext2_dir_entry_2 {
++ __u32 inode; /* Inode number */
++ __u16 rec_len; /* Directory entry length */
++ __u8 name_len; /* Name length */
++ __u8 file_type;
++ char name[EXT2_NAME_LEN]; /* File name */
++};
++
++/*
++ * Ext2 directory file types. Only the low 3 bits are used. The
++ * other bits are reserved for now.
++ */
++#define EXT2_FT_UNKNOWN 0
++#define EXT2_FT_REG_FILE 1
++#define EXT2_FT_DIR 2
++#define EXT2_FT_CHRDEV 3
++#define EXT2_FT_BLKDEV 4
++#define EXT2_FT_FIFO 5
++#define EXT2_FT_SOCK 6
++#define EXT2_FT_SYMLINK 7
++
++#define EXT2_FT_MAX 8
++
++/*
++ * EXT2_DIR_PAD defines the directory entries boundaries
++ *
++ * NOTE: It must be a multiple of 4
++ */
++#define EXT2_DIR_PAD 4
++#define EXT2_DIR_ROUND (EXT2_DIR_PAD - 1)
++#define EXT2_DIR_REC_LEN(name_len) (((name_len) + 8 + EXT2_DIR_ROUND) & \
++ ~EXT2_DIR_ROUND)
++
++/*
++ * This structure is used for multiple mount protection. It is written
++ * into the block number saved in the s_mmp_block field in the superblock.
++ * Programs that check MMP should assume that if SEQ_FSCK (or any unknown
++ * code above SEQ_MAX) is present then it is NOT safe to use the filesystem,
++ * regardless of how old the timestamp is.
++ *
++ * The timestamp in the MMP structure will be updated by e2fsck at some
++ * arbitary intervals (start of passes, after every few groups of inodes
++ * in pass1 and pass1b). There is no guarantee that e2fsck is updating
++ * the MMP block in a timely manner, and the updates it does are purely
++ * for the convenience of the sysadmin and not for automatic validation.
++ *
++ * Note: Only the mmp_seq value is used to determine whether the MMP block
++ * is being updated. The mmp_time, mmp_nodename, and mmp_bdevname
++ * fields are only for informational purposes for the administrator,
++ * due to clock skew between nodes and hostname HA service takeover.
++ */
++#define EXT4_MMP_MAGIC 0x004D4D50U /* ASCII for MMP */
++#define EXT4_MMP_SEQ_CLEAN 0xFF4D4D50U /* mmp_seq value for clean unmount */
++#define EXT4_MMP_SEQ_FSCK 0xE24D4D50U /* mmp_seq value when being fscked */
++#define EXT4_MMP_SEQ_MAX 0xE24D4D4FU /* maximum valid mmp_seq value */
++
++struct mmp_struct {
++ __u32 mmp_magic; /* Magic number for MMP */
++ __u32 mmp_seq; /* Sequence no. updated periodically */
++ __u64 mmp_time; /* Time last updated */
++ char mmp_nodename[64]; /* Node which last updated MMP block */
++ char mmp_bdevname[32]; /* Bdev which last updated MMP block */
++ __u16 mmp_check_interval; /* Changed mmp_check_interval */
++ __u16 mmp_pad1;
++ __u32 mmp_pad2[227];
++};
++
++/*
++ * Default interval for MMP update in seconds.
++ */
++#define EXT4_MMP_UPDATE_INTERVAL 5
++
++/*
++ * Maximum interval for MMP update in seconds.
++ */
++#define EXT4_MMP_MAX_UPDATE_INTERVAL 300
++
++/*
++ * Minimum interval for MMP checking in seconds.
++ */
++#define EXT4_MMP_MIN_CHECK_INTERVAL 5
++
++#endif /* _EXT2FS_EXT2_FS_H */
+diff -urpN syslinux-4.05/libinstaller/linuxioctl.h.ext2 syslinux-4.05/libinstaller/linuxioctl.h
+--- syslinux-4.05/libinstaller/linuxioctl.h.ext2 2011-12-09 13:28:17.000000000 -0500
++++ syslinux-4.05/libinstaller/linuxioctl.h 2012-08-06 09:52:42.653335110 -0400
+@@ -9,17 +9,33 @@
+
+ #include <sys/ioctl.h>
+
++#ifdef __linux__
++
+ #define statfs _kernel_statfs /* HACK to deal with broken 2.4 distros */
+
+ #include <linux/fd.h> /* Floppy geometry */
+ #include <linux/hdreg.h> /* Hard disk geometry */
+
+-#include <linux/fs.h> /* FIGETBSZ, FIBMAP, FS_IOC_FIEMAP */
++#include <linux/fs.h> /* FIGETBSZ, FIBMAP, FS_IOC_* */
+ #include <linux/msdos_fs.h> /* FAT_IOCTL_SET_ATTRIBUTES */
+
+ #undef SECTOR_SIZE /* Defined in msdos_fs.h for no good reason */
+ #undef SECTOR_BITS
+-#include <linux/ext2_fs.h> /* EXT2_IOC_* */
++
++#ifndef FS_IOC_GETFLAGS
++/* Old kernel headers, these were once ext2-specific... */
++# include <linux/ext2_fs.h> /* EXT2_IOC_* */
++
++# define FS_IOC_GETFLAGS EXT2_IOC_GETFLAGS
++# define FS_IOC_SETFLAGS EXT2_IOC_SETFLAGS
++
++# define FS_IMMUTABLE_FL EXT2_IMMUTABLE_FL
++
++#else
++
++# include <ext2fs/ext2_fs.h>
++
++#endif
+
+ #ifndef FAT_IOCTL_GET_ATTRIBUTES
+ # define FAT_IOCTL_GET_ATTRIBUTES _IOR('r', 0x10, __u32)
+@@ -37,11 +53,13 @@
+
+ #undef statfs
+
+-#if defined(__linux__) && !defined(BLKGETSIZE64)
++#ifndef BLKGETSIZE64
+ /* This takes a u64, but the size field says size_t. Someone screwed big. */
+ # define BLKGETSIZE64 _IOR(0x12,114,size_t)
+ #endif
+
+ #include <linux/loop.h>
+
++#endif /* __linux__ */
++
+ #endif /* LIBINSTALLER_LINUXIOCTL_H */
+diff -urpN syslinux-4.05/libinstaller/syslxcom.c.ext2 syslinux-4.05/libinstaller/syslxcom.c
+--- syslinux-4.05/libinstaller/syslxcom.c.ext2 2011-12-09 13:28:17.000000000 -0500
++++ syslinux-4.05/libinstaller/syslxcom.c 2012-08-06 09:48:43.797645032 -0400
+@@ -121,9 +121,9 @@ void clear_attributes(int fd)
+ {
+ int flags;
+
+- if (!ioctl(fd, EXT2_IOC_GETFLAGS, &flags)) {
+- flags &= ~EXT2_IMMUTABLE_FL;
+- ioctl(fd, EXT2_IOC_SETFLAGS, &flags);
++ if (!ioctl(fd, FS_IOC_GETFLAGS, &flags)) {
++ flags &= ~FS_IMMUTABLE_FL;
++ ioctl(fd, FS_IOC_SETFLAGS, &flags);
+ }
+ break;
+ }
+@@ -151,9 +151,9 @@ void set_attributes(int fd)
+ {
+ int flags;
+
+- if (st.st_uid == 0 && !ioctl(fd, EXT2_IOC_GETFLAGS, &flags)) {
+- flags |= EXT2_IMMUTABLE_FL;
+- ioctl(fd, EXT2_IOC_SETFLAGS, &flags);
++ if (st.st_uid == 0 && !ioctl(fd, FS_IOC_GETFLAGS, &flags)) {
++ flags |= FS_IMMUTABLE_FL;
++ ioctl(fd, FS_IOC_SETFLAGS, &flags);
+ }
+ break;
+ }
diff --git a/libre/syslinux/handle-ctors-dtors-via-init_array-and-fini_array.patch b/libre/syslinux/handle-ctors-dtors-via-init_array-and-fini_array.patch
new file mode 100644
index 000000000..aa513312b
--- /dev/null
+++ b/libre/syslinux/handle-ctors-dtors-via-init_array-and-fini_array.patch
@@ -0,0 +1,67 @@
+From b6be466444740a34bacd140dccbe57f6629b15bc Mon Sep 17 00:00:00 2001
+From: "H. Peter Anvin" <hpa@zytor.com>
+Date: Mon, 28 May 2012 21:28:52 -0700
+Subject: [PATCH 1/1] com32.ld: handle .init_array and .fini_array
+
+Handle constructors/destructors via .init_array and .fini_array, as
+generated by newer gccs.
+
+Signed-off-by: H. Peter Anvin <hpa@zytor.com>
+---
+ com32/lib/com32.ld | 33 ++++++++++-----------------------
+ 1 files changed, 10 insertions(+), 23 deletions(-)
+
+diff --git a/com32/lib/com32.ld b/com32/lib/com32.ld
+index 37ee46c..008e4ce 100644
+--- a/com32/lib/com32.ld
++++ b/com32/lib/com32.ld
+@@ -36,36 +36,23 @@ SECTIONS
+ .rodata1 : { *(.rodata1) }
+ __rodata_end = .;
+
+- /* Ensure the __preinit_array_start label is properly aligned. We
+- could instead move the label definition inside the section, but
+- the linker would then create the section even if it turns out to
+- be empty, which isn't pretty. */
++ /*
++ * The difference betwee .ctors/.dtors and .init_array/.fini_array
++ * is the ordering, but we don't use prioritization for libcom32, so
++ * just lump them all together and hope that's okay.
++ */
+ . = ALIGN(4);
+- .preinit_array : {
+- PROVIDE (__preinit_array_start = .);
+- *(.preinit_array)
+- PROVIDE (__preinit_array_end = .);
+- }
+- .init_array : {
+- PROVIDE (__init_array_start = .);
+- *(.init_array)
+- PROVIDE (__init_array_end = .);
+- }
+- .fini_array : {
+- PROVIDE (__fini_array_start = .);
+- *(.fini_array)
+- PROVIDE (__fini_array_end = .);
+- }
+ .ctors : {
+ PROVIDE (__ctors_start = .);
+- KEEP (*(SORT(.ctors.*)))
+- KEEP (*(.ctors))
++ KEEP (*(SORT(.preinit_array*)))
++ KEEP (*(SORT(.init_array*)))
++ KEEP (*(SORT(.ctors*)))
+ PROVIDE (__ctors_end = .);
+ }
+ .dtors : {
+ PROVIDE (__dtors_start = .);
+- KEEP (*(SORT(.dtors.*)))
+- KEEP (*(.dtors))
++ KEEP (*(SORT(.fini_array*)))
++ KEEP (*(SORT(.dtors*)))
+ PROVIDE (__dtors_end = .);
+ }
+
+--
+1.7.6.5
+
diff --git a/libre/syslinux/rePKGBUILD b/libre/syslinux/rePKGBUILD
index a8eb152d5..33a96d1a1 100644
--- a/libre/syslinux/rePKGBUILD
+++ b/libre/syslinux/rePKGBUILD
@@ -3,23 +3,23 @@
# NOTE: Please fill out the license field for your package! If it is unknown,
# then please put 'unknown'.
-# Maintainer (Parabola): André Silva <andre.paulista@adinet.com.uy>
+# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
source PKGBUILD
unset build package md5sums source check
_repo=core
pkgname='syslinux'
options=(!strip)
source=(PKGBUILD
-# http://mirrors.kernel.org/archlinux/${_repo}/os/$CARCH/${pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}
- http://mirrors.kernel.org/archlinux/${_repo}/os/$CARCH/${pkgname}-${pkgver}-4-${CARCH}${PKGEXT}
+ http://mirrors.kernel.org/archlinux/${_repo}/os/$CARCH/${pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}
+# http://mirrors.kernel.org/archlinux/${_repo}/os/$CARCH/${pkgname}-${pkgver}-4-${CARCH}${PKGEXT}
# files for pkg modifications
syslinux.cfg
splash.png)
build() {
cd "${srcdir}/"
-# rm -v .{INSTALL,PKGINFO} ${pkgname%}-$pkgver-$pkgrel-$CARCH$PKGEXT || true
- rm -v .{INSTALL,PKGINFO} ${pkgname%}-$pkgver-4-$CARCH$PKGEXT || true
+ rm -v .{INSTALL,PKGINFO} ${pkgname%}-$pkgver-$pkgrel-$CARCH$PKGEXT || true
+# rm -v .{INSTALL,PKGINFO} ${pkgname%}-$pkgver-4-$CARCH$PKGEXT || true
# put actions for package modifications below this line
rm -v boot/syslinux/syslinux.cfg
@@ -27,13 +27,8 @@ build() {
package_syslinux() {
pkgdesc="Collection of boot loaders that boot from FAT, ext2/3/4 and btrfs filesystems, from CDs and via PXE (Parabola rebranded)"
- install=syslinux.install
backup=('boot/syslinux/syslinux.cfg'
'boot/syslinux/splash.png')
- optdepends=('perl-passwd-md5: For md5pass'
- 'perl-digest-sha1: For sha1pass'
- 'mtools: For mkdiskimage and syslinux support'
- )
# Install the default configuration
install -D -m644 "$srcdir"/syslinux.cfg "$pkgdir"/boot/syslinux/syslinux.cfg
# Install Parabola splash
diff --git a/libre/texlive-bin-libre/PKGBUILD b/libre/texlive-bin-libre/PKGBUILD
index 76a66f0cf..1f68715c6 100644
--- a/libre/texlive-bin-libre/PKGBUILD
+++ b/libre/texlive-bin-libre/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 162397 2012-06-26 20:13:46Z remy $
+# $Id: PKGBUILD 165207 2012-08-13 08:28:02Z remy $
# Maintainer: Rémy Oudompheng <remy@archlinux.org>
# Contributor: francois <francois.archlinux.org>
# Maintainer (Parabola): Michał Masłowski <mtjm@mtjm.eu>
@@ -6,7 +6,7 @@
pkgname=texlive-bin-libre
pkgver=2012.0
-pkgrel=1
+pkgrel=4
pkgdesc="TeX Live binaries"
license=('GPL')
arch=('i686' 'x86_64' 'mips64el')
@@ -25,19 +25,19 @@ source=('texmf.cnf'
'poppler-0.20.patch'
'http://mirrors.kernel.org/archlinux/other/texlive/texlive-bin-source-20120623.tar.xz'
'http://mirrors.kernel.org/archlinux/other/texlive/texlive-bin-texmf-20120623.tar.xz'
+ 'luatex-r4449-radical-rule-thickness.patch'
)
backup=(etc/texmf/web2c/texmf.cnf \
- etc/texmf/chktex/chktexrc \
- etc/texmf/web2c/mktex.cnf \
- etc/texmf/web2c/updmap.cfg \
- etc/texmf/web2c/fmtutil.cnf \
+ etc/texmf/chktex/chktexrc \
+ etc/texmf/dvipdfm/config/config \
+ etc/texmf/dvipdfmx/dvipdfmx.cfg \
+ etc/texmf/dvips/config/config.ps \
etc/texmf/tex/generic/config/language.dat \
etc/texmf/tex/generic/config/language.def \
etc/texmf/tex/generic/config/pdftexconfig.tex \
etc/texmf/ttf2pk/ttf2pk.cfg \
- etc/texmf/dvips/config/config.ps \
- etc/texmf/dvipdfmx/dvipdfmx.cfg \
- etc/texmf/dvipdfm/config/config \
+ etc/texmf/web2c/fmtutil.cnf \
+ etc/texmf/web2c/mktex.cnf \
etc/texmf/xdvi/XDvi)
md5sums=('220a4f4cc0d915bf8fcbcb553dcee1ae'
@@ -45,7 +45,8 @@ md5sums=('220a4f4cc0d915bf8fcbcb553dcee1ae'
'393a4bf67adc7ca5df2b386759d1a637'
'e3a664d5a7f0923f35060fe9d25d2573'
'ac2c3c3aa765581f8504e21a5edbfb9f'
- 'f315a860158cfc952c82a6d759961024')
+ 'f315a860158cfc952c82a6d759961024'
+ '5190f3295eb9a604c5f17f5bd607299b')
build() {
if [ "${CARCH}" != "i686" ]; then
@@ -58,6 +59,9 @@ build() {
patch -Np0 -i fix-fontforge-encoding.patch
# fix build with poppler >= 0.20
patch -Np0 -i poppler-0.20.patch
+ # fix radical rule thickness regression in Luatex
+ # http://tex.stackexchange.com/q/61952/729
+ patch -Np0 -i luatex-r4449-radical-rule-thickness.patch
# t4ht expects to be un /usr/share/texmf/bin/t4ht (FS#27251)
sed -i s/SELFAUTOPARENT/TEXMFROOT/ source/texk/tex4htk/t4ht.c
#############################################################
@@ -280,7 +284,6 @@ vpl2vpl
_latexextra_scripts="
authorindex
exceltex
-exceltex
makeglossaries
pdfannotextractor
perltex
diff --git a/libre/texlive-bin-libre/luatex-r4449-radical-rule-thickness.patch b/libre/texlive-bin-libre/luatex-r4449-radical-rule-thickness.patch
new file mode 100644
index 000000000..f925a1a93
--- /dev/null
+++ b/libre/texlive-bin-libre/luatex-r4449-radical-rule-thickness.patch
@@ -0,0 +1,23 @@
+Index: source/texk/web2c/luatexdir/tex/mlist.w
+===================================================================
+--- source/texk/web2c/luatexdir/tex/mlist.w (revision 4448)
++++ source/texk/web2c/luatexdir/tex/mlist.w (revision 4449)
+@@ -1798,7 +1798,17 @@
+ theta = fraction_rule(cur_style);
+ y = var_delimiter(left_delimiter(q), cur_size,
+ height(x) + depth(x) + clr + theta, NULL, cur_style);
+- theta = height(y);
++ /* If |y| is a composite then set |theta| to the height of its top
++ character, else set it to the height of |y|. */
++ if (list_ptr(y) != null
++ && type(list_ptr(y)) == hlist_node
++ && list_ptr(list_ptr(y)) != null
++ && type(list_ptr(list_ptr(y))) == glyph_node) { /* and it should be */
++ theta = char_height(font(list_ptr(list_ptr(y))),
++ character(list_ptr(list_ptr(y))));
++ } else {
++ theta = height(y);
++ }
+ } else {
+ y = var_delimiter(left_delimiter(q), cur_size,
+ height(x) + depth(x) + clr + theta, NULL, cur_style);
diff --git a/libre/texlive-bin-libre/texlive.install b/libre/texlive-bin-libre/texlive.install
index b85850123..06a40a3b3 100644
--- a/libre/texlive-bin-libre/texlive.install
+++ b/libre/texlive-bin-libre/texlive.install
@@ -16,13 +16,19 @@ post_install() {
}
post_upgrade() {
+ local corename corever _pacout
echo ">>> texlive: updating the filename database..."
usr/bin/mktexlsr
- echo -n "recreating all formats..."
- usr/bin/fmtutil-sys --all 1>/dev/null
- echo " done."
- echo " (logs are under /var/lib/texmf/web2c/<engine>/<formatname>.log)"
-
+ _pacout=$(pacman -Q texlive-core 2>/dev/null)
+ read corename corever <<< ${_pacout}
+ if [[ ${corever} == 2012* ]]; then
+ echo -n "recreating all formats..."
+ usr/bin/fmtutil-sys --all 1>/dev/null
+ echo " done."
+ echo " (logs are under /var/lib/texmf/web2c/<engine>/<formatname>.log)"
+ else
+ echo "WARNING: not recreating formats since texlive-core has version '$corever'"
+ fi
[[ -x usr/bin/install-info ]] || return 0
for file in "${filelist[@]}"; do
install-info "$infodir/$file.gz" "$infodir/dir" 2> /dev/null
diff --git a/libre/tp_smapi-libre/PKGBUILD b/libre/tp_smapi-libre/PKGBUILD
new file mode 100644
index 000000000..be2b8de26
--- /dev/null
+++ b/libre/tp_smapi-libre/PKGBUILD
@@ -0,0 +1,63 @@
+# Maintainer: Lukas Fleischer <archlinux at cryptocrack dot de>
+# Contributor: xduugu
+# Contributor: nh2
+# Contributor: Steven Davidovitz <steviedizzle ð gmail đ com>
+# Contributor: Nick B <Shirakawasuna ð gmail đ com>
+# Contributor: Christof Musik <christof ð senfdax đ de>
+# Contributor: Stefan Rupp <archlinux ð stefanrupp đ de>
+# Contributor: Ignas Anikevicius <anikevicius ð gmail đ com>
+# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
+
+_pkgname=tp_smapi
+pkgname=tp_smapi-libre
+pkgver=0.41
+pkgrel=5
+pkgdesc="Modules for ThinkPad's SMAPI functionality"
+arch=('i686' 'x86_64')
+url='https://github.com/evgeni/tp_smapi'
+license=('GPL')
+depends=('linux-libre>=3.5' 'linux-libre<3.6')
+makedepends=('linux-libre-headers>=3.5' 'linux-libre-headers<3.6')
+replaces=("${_pkgname}")
+conflicts=("${_pkgname}")
+provides=("${_pkgname}=${pkgver}")
+install="${_pkgname}.install"
+source=("https://github.com/downloads/evgeni/${_pkgname}/${_pkgname}-${pkgver}.tar.gz")
+md5sums=('63c683415c764568f6bf17c7eabe4752')
+
+build() {
+ cd "${srcdir}/${_pkgname}-${pkgver}"
+
+ _kernver=${_kernver:-$(uname -r)}
+ _extramodules=$(readlink -f "/usr/lib/modules/${_kernver}/extramodules" || true)
+ _kernver=$(< "${_extramodules}/version")
+
+ sed -ri -e "s/^(KVER\s*:=).*$/\1 ${_kernver}/" \
+ -e "s#^(KBASE\s*:=).*\$#\1 ${_extramodules%/*}/${_kernver}#" Makefile
+
+ make HDAPS=1
+}
+
+package() {
+ _kernver=${_kernver:-$(uname -r)}
+ _extramodules=$(readlink -f "/usr/lib/modules/${_kernver}/extramodules" || true)
+ _kernver=$(< "${_extramodules}/version")
+
+ make -C "${_extramodules%/*}/${_kernver}/build" \
+ INSTALL_MOD_PATH="${pkgdir}/${_extramodules%%/lib/*}" \
+ M="${srcdir}/${_pkgname}-${pkgver}" modules_install
+
+ cd "${pkgdir}/${_extramodules%/*}"
+ mv "${_kernver}/extra" "${_extramodules##*/}"
+ rmdir "${_kernver}"
+
+ # compress kernel libre modules
+ find "${pkgdir}" -name "*.ko" -exec gzip -9 {} +
+
+ # load module on startup
+ echo tp_smapi > "${srcdir}/${_pkgname}.conf"
+ install -Dm644 "${srcdir}/${_pkgname}.conf" "${pkgdir}/usr/lib/modules-load.d/${_pkgname}.conf"
+
+ # update kernel libre version in install file
+ sed -ri "s#^(extramodules=).*\$#\1${_extramodules}#" "${startdir}/${_pkgname}.install"
+}
diff --git a/libre/tp_smapi-libre/tp_smapi.install b/libre/tp_smapi-libre/tp_smapi.install
new file mode 100644
index 000000000..5fe1bab90
--- /dev/null
+++ b/libre/tp_smapi-libre/tp_smapi.install
@@ -0,0 +1,13 @@
+extramodules=/usr/lib/modules/extramodules-3.5-ARCH
+
+post_install() {
+ depmod -v $(< "$extramodules/version") &>/dev/null
+}
+
+post_upgrade() {
+ post_install
+}
+
+post_remove() {
+ post_install
+}
diff --git a/libre/vhba-module-libre/60-vhba.rules b/libre/vhba-module-libre/60-vhba.rules
new file mode 100644
index 000000000..e4de1dca7
--- /dev/null
+++ b/libre/vhba-module-libre/60-vhba.rules
@@ -0,0 +1,13 @@
+ACTION=="remove", GOTO="vhba_end"
+KERNEL!="vhba_ctl", GOTO="vhba_end"
+
+NAME="vhba_ctl", MODE="0660", OWNER="root", GROUP="cdemu"
+
+TEST=="/sys/fs/cgroup/systemd", GOTO="vhba_uaccess"
+TAG+="udev-acl"
+GOTO="vhba_end"
+
+LABEL="vhba_uaccess"
+TAG+="uaccess"
+
+LABEL="vhba_end"
diff --git a/libre/vhba-module-libre/PKGBUILD b/libre/vhba-module-libre/PKGBUILD
new file mode 100644
index 000000000..51c847e40
--- /dev/null
+++ b/libre/vhba-module-libre/PKGBUILD
@@ -0,0 +1,48 @@
+# $Id$
+# Maintainer: Ray Rashif <schiv@archlinux.org>
+# Contributor: Mateusz Herych <heniekk@gmail.com>
+# Contributor: Charles Lindsay <charles@chaoslizard.org>
+
+_pkgname=vhba-module
+pkgname=vhba-module-libre
+pkgver=20120422
+_extramodules=extramodules-3.5-LIBRE
+pkgrel=8
+pkgdesc="Kernel libre module that emulates SCSI devices"
+arch=('i686' 'x86_64')
+url="http://cdemu.sourceforge.net/"
+license=('GPL')
+depends=('linux-libre>=3.5' 'linux-libre<3.6')
+makedepends=('linux-libre-headers')
+options=(!makeflags)
+install=$_pkgname.install
+replaces=('vhba-module')
+conflicts=('vhba-module')
+provides=("vhba-module=$pkgver")
+source=("http://downloads.sourceforge.net/cdemu/$_pkgname-$pkgver.tar.bz2"
+ '60-vhba.rules')
+md5sums=('d97372da1d270d1605742b2995fb6678'
+ 'b5e82d0160e7a181219b67c1794d5c27')
+
+build() {
+ cd "$srcdir/$_pkgname-$pkgver"
+
+ _kernver="$(cat /usr/lib/modules/$_extramodules/version)"
+
+ make KDIR=/usr/lib/modules/$_kernver/build
+}
+
+package() {
+ cd "$srcdir/$_pkgname-$pkgver"
+
+ install -Dm644 vhba.ko \
+ "$pkgdir/usr/lib/modules/$_extramodules/vhba.ko"
+
+ sed -i -e "s/EXTRAMODULES='.*'/EXTRAMODULES='$_extramodules'/" \
+ "$startdir/vhba-module.install"
+
+ install -Dm644 "$srcdir/60-vhba.rules" \
+ "$pkgdir/usr/lib/udev/rules.d/60-vhba.rules"
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/libre/vhba-module-libre/vhba-module.install b/libre/vhba-module-libre/vhba-module.install
new file mode 100644
index 000000000..b2a49a261
--- /dev/null
+++ b/libre/vhba-module-libre/vhba-module.install
@@ -0,0 +1,21 @@
+_updatemod() {
+ echo " > Updating module dependencies..."
+ EXTRAMODULES='extramodules-3.5-LIBRE'
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
+}
+
+post_install() {
+ post_upgrade
+}
+
+post_upgrade() {
+ getent group cdemu &>/dev/null || groupadd -r cdemu
+ _updatemod
+}
+
+post_remove() {
+ _updatemod
+ groupdel cdemu
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/libre/virtualbox-libre-modules-lts/60-vboxguest.rules b/libre/virtualbox-libre-modules-lts/60-vboxguest.rules
new file mode 100644
index 000000000..6285f7249
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/60-vboxguest.rules
@@ -0,0 +1,2 @@
+ACTION=="add", KERNEL=="vboxguest", SUBSYSTEM=="misc", OWNER="root", MODE="0600"
+ACTION=="add", KERNEL=="vboxuser", SUBSYSTEM=="misc", OWNER="root", MODE="0666"
diff --git a/libre/virtualbox-libre-modules-lts/LocalConfig.kmk b/libre/virtualbox-libre-modules-lts/LocalConfig.kmk
new file mode 100644
index 000000000..af79f90cd
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/LocalConfig.kmk
@@ -0,0 +1,19 @@
+VBOX_WITH_ADDITION_DRIVERS =
+VBOX_WITH_INSTALLER = 1
+VBOX_WITH_LINUX_ADDITIONS = 1
+VBOX_WITH_X11_ADDITIONS =
+VBOX_WITH_TESTCASES =
+VBOX_WITH_TESTSUITE =
+VBOX_WITH_ORIGIN :=
+VBOX_PATH_APP_PRIVATE_ARCH := /usr/lib/virtualbox
+VBOX_PATH_SHARED_LIBS := $(VBOX_PATH_APP_PRIVATE_ARCH)
+VBOX_WITH_RUNPATH := $(VBOX_PATH_APP_PRIVATE_ARCH)
+VBOX_PATH_APP_PRIVATE := /usr/share/virtualbox
+VBOX_PATH_APP_DOCS := /usr/share/virtualbox
+VBOX_WITH_REGISTRATION_REQUEST =
+VBOX_WITH_UPDATE_REQUEST =
+VBOX_WITH_VNC := 1
+VBOX_BLD_PYTHON = python2
+VBOX_JAVA_HOME = /usr/lib/jvm/java-6-openjdk
+VBOX_GCC_WERR =
+VBOX_GCC_WARN =
diff --git a/libre/virtualbox-libre-modules-lts/PKGBUILD b/libre/virtualbox-libre-modules-lts/PKGBUILD
new file mode 100644
index 000000000..a3355d582
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/PKGBUILD
@@ -0,0 +1,153 @@
+# $Id$
+# Maintainer: Bartłomiej Piotrowski <nospam@bpiotrowski.pl>
+# Maintainer (Parabola): Márcio Silva <coadde@lavabit.com>
+# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
+# Maintainer (Parabola): Jorge López <jorginho@lavabit.com>
+
+pkgbase=virtualbox-libre-modules-lts
+pkgname=('virtualbox-libre-modules-lts' 'virtualbox-libre-parabola-modules-lts')
+pkgver=4.1.22
+pkgrel=1
+arch=('i686' 'x86_64')
+url='http://virtualbox.org'
+license=('GPL')
+makedepends=('libstdc++5' 'bin86' 'dev86' 'iasl' 'libxslt' 'libxml2' 'libpng' 'libidl2' 'xalan-c' 'sdl-libre' 'linux-libre-lts' 'linux-libre-lts-headers')
+[[ $CARCH == "x86_64" ]] && makedepends=("${makedepends[@]}" 'gcc-multilib' 'lib32-glibc')
+source=(http://download.virtualbox.org/virtualbox/${pkgver}/VirtualBox-${pkgver}.tar.bz2
+ LocalConfig.kmk 60-vboxguest.rules os_blag_64.png os_blag.png
+ os_dragora_64.png os_dragora.png os_dynebolic.png os_gnewsense_64.png os_gnewsense.png
+ os_gnu_64.png os_gnuhurd.png os_gnulinux_64.png os_gnulinux.png os_gnu.png
+ os_musix_64.png os_musix.png os_parabola_64.png os_parabola.png os_trisquel_64.png
+ os_trisquel.png os_ututo_64.png os_ututo.png os_venenux.png libre.patch
+ free-distros.patch)
+md5sums=('84c5beeead094ce52d098105897aadbb'
+ '4c88bd122677a35f68abd76eb01b378b'
+ 'ed1341881437455d9735875ddf455fbe'
+ '8538dba8686d7449cb481c9bae9d722a'
+ '545c925b46f2ac95e5f8ae407fad101a'
+ 'f6416f509c2e5460e4dc624e0a57f3c1'
+ 'bbfb59dd517c020a23701b480187a355'
+ 'efacfdb61918286ea9bc89866b8fd239'
+ '7c3eb09995e8bafeef414374e44ad4ce'
+ 'a49ed3ab6bd0fb084de0ab3dd97ae93e'
+ '6b432b3305ed446125eef052c38355a6'
+ 'a70022a468bd3e9daf01818d2d74ac3c'
+ '6b432b3305ed446125eef052c38355a6'
+ 'a70022a468bd3e9daf01818d2d74ac3c'
+ 'a70022a468bd3e9daf01818d2d74ac3c'
+ '380eb2ab6cad3da198094585853c129c'
+ 'a60bb9a98abcc3c34156f9051d00df9a'
+ '3a908ef6952bcf987e63ef2fe4e98d24'
+ '02e87c39c353634cecacf98f1707fa15'
+ '0cf41a41e7a415d404d5584e047fd450'
+ '449cde3b58390284b59c5d663de3edc9'
+ 'c7951fe6888d939f3a7d0dafe477e82b'
+ '4da8eeb2ece7e475fc7a0d1003da26c6'
+ '5e4187af59726d71c5be48d0cd816c34'
+ 'a9e4724b56ddf99bb2e9a8fab8ad43ba'
+ '1e47d90affabfbf6dbb07d9d42742d6a')
+
+_extramodules=extramodules-3.0-LIBRE-LTS
+
+build() {
+ _kernver="$(cat /usr/lib/modules/${_extramodules}/version)"
+ export KERN_DIR=/usr/lib/modules/${_kernver}/build/
+ export KERN_INCL=/usr/src/linux-${_kernver}/include/
+
+ cd "$srcdir/VirtualBox-${pkgver}"
+
+ patch -Np1 -i "$srcdir/libre.patch"
+ patch -Np1 -i "$srcdir/free-distros.patch"
+
+ ## Removing Nonfree directories
+ rm -rv "./include/VBox/ExtPack"
+ rm -rv "./src/VBox/ExtPacks"
+ rm -rv "./src/VBox/Main/src-helper-apps"
+
+ ## Removing Oracle VM VirtualBox Extension Pack icons
+ rm -v "./src/VBox/Resources/darwin/virtualbox-vbox-extpack.icns"
+ rm -v "./src/VBox/Resources/other/virtualbox-vbox-extpack-"{16px,20px,24px,32px,40px,48px,64px,72px,80px,96px,128px,256px,512px}.png
+ rm -v "./src/VBox/Resources/win/OSE/virtualbox-vbox-extpack.ico"
+ rm -v "./src/VBox/Frontends/VirtualBox/images/extension_pack_"{16px,32px,disabled{_16px,_32px},install{_16px,_32px},install_disabled{_16px,_32px},uninstall{_16px,_32px},uninstall_disabled{_16px,_32px}}.png
+
+ ## Adding free distros icons
+ for i in {gnuhurd,dynebolic,venenux,{gnu{,linux},parabola,gnewsense,blag,dragora,ututo,musix,trisquel}{,_64}}; do
+ cp -v "$srcdir/os_${i}.png" "./src/VBox/Frontends/VirtualBox/images"
+ done
+
+ ## Removing non-free OS icons
+ rm -v "./src/VBox/Frontends/VirtualBox/images/os_"{{{arch,turbo}linux,debian,fedora,gentoo,linux{24,26},macosx,mandriva,{free,net,open}bsd,redhat,solaris,opensuse,oracle{,solaris},ubuntu,win{2k{3,8},7,8,vista,xp},xandros}{,_64},dos,jrockitve,l4,linux{,22,_other},netware,qnx,os2{_other,ecs,warp{3,4,45}},win{2k,31,95,98,_other,me,nt4}}.png
+
+ cp "$srcdir/LocalConfig.kmk" .
+
+ ./configure \
+ --with-linux=/usr/src/linux-${_kernver} \
+ --disable-java \
+ --disable-docs \
+ --disable-xpcom \
+ --disable-python \
+ --disable-sdl-ttf \
+ --disable-alsa \
+ --disable-pulse \
+ --disable-dbus \
+ --disable-opengl \
+ --build-headless \
+ --nofatal
+ source ./env.sh
+ kmk all
+
+ make -C "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/src"
+ make -C "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/additions/src"
+}
+
+package_virtualbox-libre-parabola-modules-lts(){
+ pkgdesc="Additions only for Parabola guests (long-term supported kernel libre modules)"
+ license=('GPL')
+ install=virtualbox-libre-parabola-modules-lts.install
+ depends=('linux-libre-lts>=3.0' 'linux-libre-lts<3.1')
+ replaces=('virtualbox-archlinux-modules-lts')
+ conflicts=('virtualbox-archlinux-modules-lts')
+ provides=("virtualbox-archlinux-modules-lts=$pkgver" 'virtualbox-libre-parabola-modules')
+
+ source "$srcdir/VirtualBox-${pkgver}/env.sh"
+
+ cd "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/additions/src"
+
+ for module in vboxguest.ko vboxsf.ko vboxvideo.ko; do
+ install -D -m644 ${module} \
+ "$pkgdir/usr/lib/modules/${_extramodules}/${module}"
+ done
+
+ install -D -m 0644 "$srcdir/60-vboxguest.rules" \
+ "$pkgdir/usr/lib/udev/rules.d/60-vboxguest.rules"
+
+ find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \;
+}
+
+package_virtualbox-libre-modules-lts(){
+ pkgdesc="Long-term supported kernel libre modules for VirtualBox"
+ license=('GPL')
+ install=virtualbox-libre-modules-lts.install
+ depends=('linux-libre-lts>=3.0' 'linux-libre-lts<3.1')
+ replaces=('virtualbox-modules-lts')
+ conflicts=('virtualbox-modules-lts')
+ provides=("virtualbox-modules-lts=$pkgver" 'virtualbox-libre-modules')
+
+ source "$srcdir/VirtualBox-${pkgver}/env.sh"
+
+ cd "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/src"
+
+ install -D -m644 vboxdrv.ko \
+ "$pkgdir/usr/lib/modules/${_extramodules}/vboxdrv.ko"
+
+ install -D -m644 vboxnetadp.ko \
+ "$pkgdir/usr/lib/modules/${_extramodules}/vboxnetadp.ko"
+
+ install -D -m644 vboxnetflt.ko \
+ "$pkgdir/usr/lib/modules/${_extramodules}/vboxnetflt.ko"
+
+ install -D -m644 vboxpci.ko \
+ "$pkgdir/usr/lib/modules/${_extramodules}/vboxpci.ko"
+
+ find "${pkgdir}" -name '*.ko' -exec gzip -9 {} +
+}
diff --git a/libre/virtualbox-libre-modules-lts/free-distros.patch b/libre/virtualbox-libre-modules-lts/free-distros.patch
new file mode 100644
index 000000000..47857e05d
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/free-distros.patch
@@ -0,0 +1,1383 @@
+--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UINewVMWzd.cpp 2012-07-25 14:51:03.569003667 -0300
++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UINewVMWzd.cpp 2012-07-25 14:51:03.652333615 -0300
+@@ -44,94 +44,38 @@
+ * first matching string found, will be used. */
+ static const osTypePattern gs_OSTypePattern[] =
+ {
+- { QRegExp("DOS", Qt::CaseInsensitive), "DOS" },
+
+- /* Windows */
+- { QRegExp("Wi.*98", Qt::CaseInsensitive), "Windows98" },
+- { QRegExp("Wi.*95", Qt::CaseInsensitive), "Windows95" },
+- { QRegExp("Wi.*Me", Qt::CaseInsensitive), "WindowsMe" },
+- { QRegExp("(Wi.*NT)|(NT4)", Qt::CaseInsensitive), "WindowsNT4" },
+- { QRegExp("((Wi.*XP)|(\\bXP\\b)).*64", Qt::CaseInsensitive), "WindowsXP_64" },
+- { QRegExp("(Wi.*XP)|(\\bXP\\b)", Qt::CaseInsensitive), "WindowsXP" },
+- { QRegExp("((Wi.*2003)|(W2K3)).*64", Qt::CaseInsensitive), "Windows2003_64" },
+- { QRegExp("(Wi.*2003)|(W2K3)", Qt::CaseInsensitive), "Windows2003" },
+- { QRegExp("((Wi.*V)|(Vista)).*64", Qt::CaseInsensitive), "WindowsVista_64" },
+- { QRegExp("(Wi.*V)|(Vista)", Qt::CaseInsensitive), "WindowsVista" },
+- { QRegExp("((Wi.*2008)|(W2K8)).*64", Qt::CaseInsensitive), "Windows2008_64" },
+- { QRegExp("(Wi.*2008)|(W2K8)", Qt::CaseInsensitive), "Windows2008" },
+- { QRegExp("(Wi.*2000)|(W2K)", Qt::CaseInsensitive), "Windows2000" },
+- { QRegExp("(Wi.*7.*64)|(W7.*64)", Qt::CaseInsensitive), "Windows7_64" },
+- { QRegExp("(Wi.*7)|(W7)", Qt::CaseInsensitive), "Windows7" },
+- { QRegExp("(Wi.*8.*64)|(W8.*64)", Qt::CaseInsensitive), "Windows8_64" },
+- { QRegExp("(Wi.*8)|(W8)", Qt::CaseInsensitive), "Windows8" },
+- { QRegExp("Wi.*3", Qt::CaseInsensitive), "Windows31" },
+- { QRegExp("Wi", Qt::CaseInsensitive), "WindowsXP" },
+-
+- /* Solaris */
+- { QRegExp("((Op.*So)|(os20[01][0-9])|(So.*1[01])|(India)|(Neva)).*64", Qt::CaseInsensitive), "OpenSolaris_64" },
+- { QRegExp("(Op.*So)|(os20[01][0-9])|(So.*1[01])|(India)|(Neva)", Qt::CaseInsensitive), "OpenSolaris" },
+- { QRegExp("So.*64", Qt::CaseInsensitive), "Solaris_64" },
+- { QRegExp("So", Qt::CaseInsensitive), "Solaris" },
+-
+- /* OS/2 */
+- { QRegExp("OS[/|!-]{,1}2.*W.*4.?5", Qt::CaseInsensitive), "OS2Warp45" },
+- { QRegExp("OS[/|!-]{,1}2.*W.*4", Qt::CaseInsensitive), "OS2Warp4" },
+- { QRegExp("OS[/|!-]{,1}2.*W", Qt::CaseInsensitive), "OS2Warp3" },
+- { QRegExp("(OS[/|!-]{,1}2.*e)|(eCS.*)", Qt::CaseInsensitive), "OS2eCS" },
+- { QRegExp("OS[/|!-]{,1}2", Qt::CaseInsensitive), "OS2" },
+-
+- /* Code names for Linux distributions */
+- { QRegExp("((edgy)|(feisty)|(gutsy)|(hardy)|(intrepid)|(jaunty)|(karmic)|(lucid)|(maverick)|(natty)|(oneiric)|(precise)).*64", Qt::CaseInsensitive), "Ubuntu_64" },
+- { QRegExp("(edgy)|(feisty)|(gutsy)|(hardy)|(intrepid)|(jaunty)|(karmic)|(lucid)|(maverick)|(natty)|(oneiric)|(precise)", Qt::CaseInsensitive), "Ubuntu" },
+- { QRegExp("((sarge)|(etch)|(lenny)|(squeeze)|(wheezy)|(sid)).*64", Qt::CaseInsensitive), "Debian_64" },
+- { QRegExp("(sarge)|(etch)|(lenny)|(squeeze)|(wheezy)|(sid)", Qt::CaseInsensitive), "Debian" },
+- { QRegExp("((moonshine)|(werewolf)|(sulphur)|(cambridge)|(leonidas)|(constantine)|(goddard)|(laughlin)|(lovelock)|(verne)).*64", Qt::CaseInsensitive), "Fedora_64" },
+- { QRegExp("(moonshine)|(werewolf)|(sulphur)|(cambridge)|(leonidas)|(constantine)|(goddard)|(laughlin)|(lovelock)|(verne)", Qt::CaseInsensitive), "Fedora" },
+-
+- /* Regular names of Linux distributions */
+- { QRegExp("Arc.*64", Qt::CaseInsensitive), "ArchLinux_64" },
+- { QRegExp("Arc", Qt::CaseInsensitive), "ArchLinux" },
+- { QRegExp("Deb.*64", Qt::CaseInsensitive), "Debian_64" },
+- { QRegExp("Deb", Qt::CaseInsensitive), "Debian" },
+- { QRegExp("((SU)|(Nov)|(SLE)).*64", Qt::CaseInsensitive), "OpenSUSE_64" },
+- { QRegExp("(SU)|(Nov)|(SLE)", Qt::CaseInsensitive), "OpenSUSE" },
+- { QRegExp("Fe.*64", Qt::CaseInsensitive), "Fedora_64" },
+- { QRegExp("Fe", Qt::CaseInsensitive), "Fedora" },
+- { QRegExp("((Gen)|(Sab)).*64", Qt::CaseInsensitive), "Gentoo_64" },
+- { QRegExp("(Gen)|(Sab)", Qt::CaseInsensitive), "Gentoo" },
+- { QRegExp("Man.*64", Qt::CaseInsensitive), "Mandriva_64" },
+- { QRegExp("Man", Qt::CaseInsensitive), "Mandriva" },
+- { QRegExp("((Red)|(rhel)|(cen)).*64", Qt::CaseInsensitive), "RedHat_64" },
+- { QRegExp("(Red)|(rhel)|(cen)", Qt::CaseInsensitive), "RedHat" },
+- { QRegExp("Tur.*64", Qt::CaseInsensitive), "Turbolinux_64" },
+- { QRegExp("Tur", Qt::CaseInsensitive), "Turbolinux" },
+- { QRegExp("Ub.*64", Qt::CaseInsensitive), "Ubuntu_64" },
+- { QRegExp("Ub", Qt::CaseInsensitive), "Ubuntu" },
+- { QRegExp("Xa.*64", Qt::CaseInsensitive), "Xandros_64" },
+- { QRegExp("Xa", Qt::CaseInsensitive), "Xandros" },
+- { QRegExp("((Or)|(oel)).*64", Qt::CaseInsensitive), "Oracle_64" },
+- { QRegExp("(Or)|(oel)", Qt::CaseInsensitive), "Oracle" },
+- { QRegExp("((Li)|(lnx)).*2.?2", Qt::CaseInsensitive), "Linux22" },
+- { QRegExp("((Li)|(lnx)).*2.?4.*64", Qt::CaseInsensitive), "Linux24_64" },
+- { QRegExp("((Li)|(lnx)).*2.?4", Qt::CaseInsensitive), "Linux24" },
+- { QRegExp("((((Li)|(lnx)).*2.?6)|(LFS)).*64", Qt::CaseInsensitive), "Linux26_64" },
+- { QRegExp("(((Li)|(lnx)).*2.?6)|(LFS)", Qt::CaseInsensitive), "Linux26" },
+- { QRegExp("((Li)|(lnx)).*64", Qt::CaseInsensitive), "Linux26_64" },
+- { QRegExp("(Li)|(lnx)", Qt::CaseInsensitive), "Linux26" },
++ /* Code names for GNU/Linux distributions */
++ { QRegExp("((Taranis)|(Dagda)|(Brigantia)).*64", Qt::CaseInsensitive), "Trisquel_64" },
++ { QRegExp("(Taranis)|(Dagda)|(Brigantia)", Qt::CaseInsensitive), "Trisquel" },
++ { QRegExp("((metad)|(parkes)|(three)).*64", Qt::CaseInsensitive), "gNewSense_64" },
++ { QRegExp("(deltah)|(metad)|(parkes)|(three)", Qt::CaseInsensitive), "gNewSense" },
++ { QRegExp("((90k)|(119k)|(140k)|(160k)|(90000)|(119000)|(140000)|(160000)|(Spartakus)).*64", Qt::CaseInsensitive), "Blag_64" },
++ { QRegExp("(90k)|(119k)|(140k)|(160k)|(90000)|(119000)|(140000)|(160000)|(Spartakus)", Qt::CaseInsensitive), "Blag" },
++
++ /* Regular names of GNU/Linux distributions and GNU-Hurd */
++ { QRegExp("Pa.*64", Qt::CaseInsensitive), "Parabola_64" },
++ { QRegExp("Pa", Qt::CaseInsensitive), "Parabola" },
++ { QRegExp("((gNe)|(new)|(Sen)).*64", Qt::CaseInsensitive), "gNewSense_64" },
++ { QRegExp("(gNe)|(new)|(Sen)", Qt::CaseInsensitive), "gNewSense" },
++ { QRegExp("Bla.*64", Qt::CaseInsensitive), "Blag_64" },
++ { QRegExp("Bla", Qt::CaseInsensitive), "Blag" },
++ { QRegExp("Dra.*64", Qt::CaseInsensitive), "Dragora_64" },
++ { QRegExp("Dra", Qt::CaseInsensitive), "Dragora" },
++ { QRegExp("((Utu)|(XS)).*64", Qt::CaseInsensitive), "Ututo_64" },
++ { QRegExp("(Utu)|(XS)", Qt::CaseInsensitive), "Ututo" },
++ { QRegExp("Mus.*64", Qt::CaseInsensitive), "Musix_64" },
++ { QRegExp("Mus", Qt::CaseInsensitive), "Musix" },
++ { QRegExp("Tri.*64", Qt::CaseInsensitive), "Trisquel_64" },
++ { QRegExp("Tri", Qt::CaseInsensitive), "Trisquel" },
++ { QRegExp("Dyn", Qt::CaseInsensitive), "Dynebolic" },
++ { QRegExp("Ven", Qt::CaseInsensitive), "Venenux" },
++ { QRegExp("GNU", Qt::CaseInsensitive), "GNU" },
++ { QRegExp("Hu", Qt::CaseInsensitive), "GNUHurd" },
++ { QRegExp("((Li)|(lnx)).*64", Qt::CaseInsensitive), "GNULinux_64" },
++ { QRegExp("(Li)|(lnx)", Qt::CaseInsensitive), "GNULinux" },
+
+ /* Other */
+- { QRegExp("L4", Qt::CaseInsensitive), "L4" },
+- { QRegExp("((Fr.*B)|(fbsd)).*64", Qt::CaseInsensitive), "FreeBSD_64" },
+- { QRegExp("(Fr.*B)|(fbsd)", Qt::CaseInsensitive), "FreeBSD" },
+- { QRegExp("Op.*B.*64", Qt::CaseInsensitive), "OpenBSD_64" },
+- { QRegExp("Op.*B", Qt::CaseInsensitive), "OpenBSD" },
+- { QRegExp("Ne.*B.*64", Qt::CaseInsensitive), "NetBSD_64" },
+- { QRegExp("Ne.*B", Qt::CaseInsensitive), "NetBSD" },
+- { QRegExp("QN", Qt::CaseInsensitive), "QNX" },
+- { QRegExp("((Mac)|(Tig)|(Leop)|(osx)).*64", Qt::CaseInsensitive), "MacOS_64" },
+- { QRegExp("(Mac)|(Tig)|(Leop)|(osx)", Qt::CaseInsensitive), "MacOS" },
+- { QRegExp("Net", Qt::CaseInsensitive), "Netware" },
+- { QRegExp("Rocki", Qt::CaseInsensitive), "JRockitVE" },
+ { QRegExp("Ot", Qt::CaseInsensitive), "Other" },
+ };
+
+--- VirtualBox-4.1.18.orig/src/VBox/Main/xml/Settings.cpp 2012-07-25 15:14:50.498764160 -0300
++++ VirtualBox-4.1.18/src/VBox/Main/xml/Settings.cpp 2012-07-25 15:14:50.548761649 -0300
+@@ -3227,40 +3227,18 @@
+ } aConvertOSTypes[] =
+ {
+ { "unknown", "Other" },
+- { "dos", "DOS" },
+- { "win31", "Windows31" },
+- { "win95", "Windows95" },
+- { "win98", "Windows98" },
+- { "winme", "WindowsMe" },
+- { "winnt4", "WindowsNT4" },
+- { "win2k", "Windows2000" },
+- { "winxp", "WindowsXP" },
+- { "win2k3", "Windows2003" },
+- { "winvista", "WindowsVista" },
+- { "win2k8", "Windows2008" },
+- { "os2warp3", "OS2Warp3" },
+- { "os2warp4", "OS2Warp4" },
+- { "os2warp45", "OS2Warp45" },
+- { "ecs", "OS2eCS" },
+- { "linux22", "Linux22" },
+- { "linux24", "Linux24" },
+- { "linux26", "Linux26" },
+- { "archlinux", "ArchLinux" },
+- { "debian", "Debian" },
+- { "opensuse", "OpenSUSE" },
+- { "fedoracore", "Fedora" },
+- { "gentoo", "Gentoo" },
+- { "mandriva", "Mandriva" },
+- { "redhat", "RedHat" },
+- { "ubuntu", "Ubuntu" },
+- { "xandros", "Xandros" },
+- { "freebsd", "FreeBSD" },
+- { "openbsd", "OpenBSD" },
+- { "netbsd", "NetBSD" },
+- { "netware", "Netware" },
+- { "solaris", "Solaris" },
+- { "opensolaris", "OpenSolaris" },
+- { "l4", "L4" }
++ { "gnu", "GNU" },
++ { "gnuhurd", "GNUHurd" },
++ { "gnulinux", "GNULinux" },
++ { "parabola", "Parabola" },
++ { "gnewsense", "gNewSense" },
++ { "blag", "Blag" },
++ { "dragora", "Dragora" },
++ { "ututo", "Ututo" },
++ { "musix", "Musix" },
++ { "trisquel", "Trisquel" },
++ { "dynebolic", "Dynebolic" },
++ { "venenux", "Venenux" },
+ };
+
+ void MachineConfigFile::convertOldOSType_pre1_5(Utf8Str &str)
+--- VirtualBox-4.1.18.orig/src/VBox/Main/xml/SettingsConverter.xsl 2012-07-25 15:21:04.553581275 -0300
++++ VirtualBox-4.1.18/src/VBox/Main/xml/SettingsConverter.xsl 2012-07-25 15:21:04.593579427 -0300
+@@ -729,40 +729,18 @@
+ <xsl:attribute name="OSType">
+ <xsl:choose>
+ <xsl:when test="@OSType='unknown'">Other</xsl:when>
+- <xsl:when test="@OSType='dos'">DOS</xsl:when>
+- <xsl:when test="@OSType='win31'">Windows31</xsl:when>
+- <xsl:when test="@OSType='win95'">Windows95</xsl:when>
+- <xsl:when test="@OSType='win98'">Windows98</xsl:when>
+- <xsl:when test="@OSType='winme'">WindowsMe</xsl:when>
+- <xsl:when test="@OSType='winnt4'">WindowsNT4</xsl:when>
+- <xsl:when test="@OSType='win2k'">Windows2000</xsl:when>
+- <xsl:when test="@OSType='winxp'">WindowsXP</xsl:when>
+- <xsl:when test="@OSType='win2k3'">Windows2003</xsl:when>
+- <xsl:when test="@OSType='winvista'">WindowsVista</xsl:when>
+- <xsl:when test="@OSType='win2k8'">Windows2008</xsl:when>
+- <xsl:when test="@OSType='os2warp3'">OS2Warp3</xsl:when>
+- <xsl:when test="@OSType='os2warp4'">OS2Warp4</xsl:when>
+- <xsl:when test="@OSType='os2warp45'">OS2Warp45</xsl:when>
+- <xsl:when test="@OSType='ecs'">OS2eCS</xsl:when>
+- <xsl:when test="@OSType='linux22'">Linux22</xsl:when>
+- <xsl:when test="@OSType='linux24'">Linux24</xsl:when>
+- <xsl:when test="@OSType='linux26'">Linux26</xsl:when>
+- <xsl:when test="@OSType='archlinux'">ArchLinux</xsl:when>
+- <xsl:when test="@OSType='debian'">Debian</xsl:when>
+- <xsl:when test="@OSType='opensuse'">OpenSUSE</xsl:when>
+- <xsl:when test="@OSType='fedoracore'">Fedora</xsl:when>
+- <xsl:when test="@OSType='gentoo'">Gentoo</xsl:when>
+- <xsl:when test="@OSType='mandriva'">Mandriva</xsl:when>
+- <xsl:when test="@OSType='redhat'">RedHat</xsl:when>
+- <xsl:when test="@OSType='ubuntu'">Ubuntu</xsl:when>
+- <xsl:when test="@OSType='xandros'">Xandros</xsl:when>
+- <xsl:when test="@OSType='freebsd'">FreeBSD</xsl:when>
+- <xsl:when test="@OSType='openbsd'">OpenBSD</xsl:when>
+- <xsl:when test="@OSType='netbsd'">NetBSD</xsl:when>
+- <xsl:when test="@OSType='netware'">Netware</xsl:when>
+- <xsl:when test="@OSType='solaris'">Solaris</xsl:when>
+- <xsl:when test="@OSType='opensolaris'">OpenSolaris</xsl:when>
+- <xsl:when test="@OSType='l4'">L4</xsl:when>
++ <xsl:when test="@OSType='gnu'">GNU</xsl:when>
++ <xsl:when test="@OSType='gnuhurd'">GNUHurd</xsl:when>
++ <xsl:when test="@OSType='gnulinux'">GNULinux</xsl:when>
++ <xsl:when test="@OSType='parabola'">Parabola</xsl:when>
++ <xsl:when test="@OSType='gnewsense'">gNewSense</xsl:when>
++ <xsl:when test="@OSType='blag'">Blag</xsl:when>
++ <xsl:when test="@OSType='dragora'">Dragora</xsl:when>
++ <xsl:when test="@OSType='ututo'">Ututo</xsl:when>
++ <xsl:when test="@OSType='musix'">Musix</xsl:when>
++ <xsl:when test="@OSType='trisquel'">Trisquel</xsl:when>
++ <xsl:when test="@OSType='dynebolic'">Dynebolic</xsl:when>
++ <xsl:when test="@OSType='venenux'">Venenux</xsl:when>
+ </xsl:choose>
+ </xsl:attribute>
+ <xsl:apply-templates select="@*[name()!='OSType']" mode="v1.5"/>
+--- VirtualBox-4.1.18.orig/src/VBox/Main/xml/VirtualBox-settings-common.xsd 2012-07-25 15:04:37.856003691 -0300
++++ VirtualBox-4.1.18/src/VBox/Main/xml/VirtualBox-settings-common.xsd 2012-07-25 15:04:37.892668156 -0300
+@@ -137,75 +137,27 @@
+ <xsd:simpleType name="TGuestOSType">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Other"/>
+- <xsd:enumeration value="DOS"/>
+- <xsd:enumeration value="Netware"/>
+- <xsd:enumeration value="L4"/>
+- <xsd:enumeration value="Windows31"/>
+- <xsd:enumeration value="Windows95"/>
+- <xsd:enumeration value="Windows98"/>
+- <xsd:enumeration value="WindowsMe"/>
+- <xsd:enumeration value="WindowsNT4"/>
+- <xsd:enumeration value="Windows2000"/>
+- <xsd:enumeration value="WindowsXP"/>
+- <xsd:enumeration value="WindowsXP_64"/>
+- <xsd:enumeration value="Windows2003"/>
+- <xsd:enumeration value="Windows2003_64"/>
+- <xsd:enumeration value="WindowsVista"/>
+- <xsd:enumeration value="WindowsVista_64"/>
+- <xsd:enumeration value="Windows2008"/>
+- <xsd:enumeration value="Windows2008_64"/>
+- <xsd:enumeration value="Windows7"/>
+- <xsd:enumeration value="Windows7_64"/>
+- <xsd:enumeration value="Windows8"/>
+- <xsd:enumeration value="Windows8_64"/>
+- <xsd:enumeration value="WindowsNT"/>
+- <xsd:enumeration value="OS2Warp3"/>
+- <xsd:enumeration value="OS2Warp4"/>
+- <xsd:enumeration value="OS2Warp45"/>
+- <xsd:enumeration value="OS2eCS"/>
+- <xsd:enumeration value="OS2"/>
+- <xsd:enumeration value="Linux22"/>
+- <xsd:enumeration value="Linux24"/>
+- <xsd:enumeration value="Linux24_64"/>
+- <xsd:enumeration value="Linux26"/>
+- <xsd:enumeration value="Linux26_64"/>
+- <xsd:enumeration value="ArchLinux"/>
+- <xsd:enumeration value="ArchLinux_64"/>
+- <xsd:enumeration value="Debian"/>
+- <xsd:enumeration value="Debian_64"/>
+- <xsd:enumeration value="OpenSUSE"/>
+- <xsd:enumeration value="OpenSUSE_64"/>
+- <xsd:enumeration value="Fedora"/>
+- <xsd:enumeration value="Fedora_64"/>
+- <xsd:enumeration value="Gentoo"/>
+- <xsd:enumeration value="Gentoo_64"/>
+- <xsd:enumeration value="Mandriva"/>
+- <xsd:enumeration value="Mandriva_64"/>
+- <xsd:enumeration value="RedHat"/>
+- <xsd:enumeration value="RedHat_64"/>
+- <xsd:enumeration value="Turbolinux"/>
+- <xsd:enumeration value="Turbolinux_64"/>
+- <xsd:enumeration value="Ubuntu"/>
+- <xsd:enumeration value="Ubuntu_64"/>
+- <xsd:enumeration value="Xandros"/>
+- <xsd:enumeration value="Xandros_64"/>
+- <xsd:enumeration value="Oracle"/>
+- <xsd:enumeration value="Oracle_64"/>
+- <xsd:enumeration value="Linux"/>
+- <xsd:enumeration value="FreeBSD"/>
+- <xsd:enumeration value="FreeBSD_64"/>
+- <xsd:enumeration value="OpenBSD"/>
+- <xsd:enumeration value="OpenBSD_64"/>
+- <xsd:enumeration value="NetBSD"/>
+- <xsd:enumeration value="NetBSD_64"/>
+- <xsd:enumeration value="Solaris"/>
+- <xsd:enumeration value="Solaris_64"/>
+- <xsd:enumeration value="OpenSolaris"/>
+- <xsd:enumeration value="OpenSolaris_64"/>
+- <xsd:enumeration value="QNX"/>
+- <xsd:enumeration value="MacOS"/>
+- <xsd:enumeration value="MacOS_64"/>
+- <xsd:enumeration value="JRockitVE"/>
++ <xsd:enumeration value="GNU"/>
++ <xsd:enumeration value="GNU_64"/>
++ <xsd:enumeration value="GNUHurd"/>
++ <xsd:enumeration value="GNULinux"/>
++ <xsd:enumeration value="GNULinux_64"/>
++ <xsd:enumeration value="Parabola"/>
++ <xsd:enumeration value="Parabola_64"/>
++ <xsd:enumeration value="gNewSense"/>
++ <xsd:enumeration value="gNewSense_64"/>
++ <xsd:enumeration value="Blag"/>
++ <xsd:enumeration value="Blag_64"/>
++ <xsd:enumeration value="Dragora"/>
++ <xsd:enumeration value="Dragora_64"/>
++ <xsd:enumeration value="Ututo"/>
++ <xsd:enumeration value="Ututo_64"/>
++ <xsd:enumeration value="Musix"/>
++ <xsd:enumeration value="Musix_64"/>
++ <xsd:enumeration value="Trisquel"/>
++ <xsd:enumeration value="Trisquel_64"/>
++ <xsd:enumeration value="Dynebolic"/>
++ <xsd:enumeration value="Venenux"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-25 15:40:56.733096866 -0300
++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-25 15:40:56.796426519 -0300
+@@ -1,75 +1,27 @@
+ <!DOCTYPE RCC><RCC version="1.0">
+ <qresource prefix="/">
+- <file alias="os_archlinux.png">images/os_archlinux.png</file>
+- <file alias="os_archlinux_64.png">images/os_archlinux_64.png</file>
+- <file alias="os_debian.png">images/os_debian.png</file>
+- <file alias="os_debian_64.png">images/os_debian_64.png</file>
+- <file alias="os_dos.png">images/os_dos.png</file>
+- <file alias="os_fedora.png">images/os_fedora.png</file>
+- <file alias="os_fedora_64.png">images/os_fedora_64.png</file>
+- <file alias="os_freebsd.png">images/os_freebsd.png</file>
+- <file alias="os_freebsd_64.png">images/os_freebsd_64.png</file>
+- <file alias="os_gentoo.png">images/os_gentoo.png</file>
+- <file alias="os_gentoo_64.png">images/os_gentoo_64.png</file>
+- <file alias="os_jrockitve.png">images/os_jrockitve.png</file>
+- <file alias="os_l4.png">images/os_l4.png</file>
+- <file alias="os_linux_other.png">images/os_linux_other.png</file>
+- <file alias="os_linux22.png">images/os_linux22.png</file>
+- <file alias="os_linux24.png">images/os_linux24.png</file>
+- <file alias="os_linux24_64.png">images/os_linux24_64.png</file>
+- <file alias="os_linux26.png">images/os_linux26.png</file>
+- <file alias="os_linux26_64.png">images/os_linux26_64.png</file>
+- <file alias="os_mandriva.png">images/os_mandriva.png</file>
+- <file alias="os_mandriva_64.png">images/os_mandriva_64.png</file>
+- <file alias="os_netbsd.png">images/os_netbsd.png</file>
+- <file alias="os_netbsd_64.png">images/os_netbsd_64.png</file>
+- <file alias="os_netware.png">images/os_netware.png</file>
+- <file alias="os_openbsd.png">images/os_openbsd.png</file>
+- <file alias="os_openbsd_64.png">images/os_openbsd_64.png</file>
+- <file alias="os_oraclesolaris.png">images/os_oraclesolaris.png</file>
+- <file alias="os_oraclesolaris_64.png">images/os_oraclesolaris_64.png</file>
+- <file alias="os_opensuse.png">images/os_opensuse.png</file>
+- <file alias="os_opensuse_64.png">images/os_opensuse_64.png</file>
+- <file alias="os_os2_other.png">images/os_os2_other.png</file>
+- <file alias="os_os2ecs.png">images/os_os2ecs.png</file>
+- <file alias="os_os2warp3.png">images/os_os2warp3.png</file>
+- <file alias="os_os2warp4.png">images/os_os2warp4.png</file>
+- <file alias="os_os2warp45.png">images/os_os2warp45.png</file>
++ <file alias="os_parabola.png">images/os_parabola.png</file>
++ <file alias="os_parabola_64.png">images/os_parabola_64.png</file>
++ <file alias="os_gnewsense.png">images/os_gnewsense.png</file>
++ <file alias="os_gnewsense_64.png">images/os_gnewsense_64.png</file>
++ <file alias="os_blag.png">images/os_blag.png</file>
++ <file alias="os_blag_64.png">images/os_blag_64.png</file>
++ <file alias="os_ututo.png">images/os_ututo.png</file>
++ <file alias="os_ututo_64.png">images/os_ututo_64.png</file>
++ <file alias="os_gnu.png">images/os_gnu.png</file>
++ <file alias="os_gnu_64.png">images/os_gnu_64.png</file>
++ <file alias="os_gnuhurd.png">images/os_gnuhurd.png</file>
++ <file alias="os_gnulinux.png">images/os_gnulinux.png</file>
++ <file alias="os_gnulinux_64.png">images/os_gnulinux_64.png</file>
++ <file alias="os_musix.png">images/os_musix.png</file>
++ <file alias="os_musix_64.png">images/os_musix_64.png</file>
++ <file alias="os_dragora.png">images/os_dragora.png</file>
++ <file alias="os_dragora_64.png">images/os_dragora_64.png</file>
+ <file alias="os_other.png">images/os_other.png</file>
+- <file alias="os_qnx.png">images/os_qnx.png</file>
+- <file alias="os_redhat.png">images/os_redhat.png</file>
+- <file alias="os_redhat_64.png">images/os_redhat_64.png</file>
+- <file alias="os_turbolinux.png">images/os_turbolinux.png</file>
+- <file alias="os_turbolinux_64.png">images/os_turbolinux_64.png</file>
+- <file alias="os_solaris.png">images/os_solaris.png</file>
+- <file alias="os_solaris_64.png">images/os_solaris_64.png</file>
+- <file alias="os_ubuntu.png">images/os_ubuntu.png</file>
+- <file alias="os_ubuntu_64.png">images/os_ubuntu_64.png</file>
+- <file alias="os_win_other.png">images/os_win_other.png</file>
+- <file alias="os_win2k.png">images/os_win2k.png</file>
+- <file alias="os_win2k3.png">images/os_win2k3.png</file>
+- <file alias="os_win2k3_64.png">images/os_win2k3_64.png</file>
+- <file alias="os_win2k8.png">images/os_win2k8.png</file>
+- <file alias="os_win2k8_64.png">images/os_win2k8_64.png</file>
+- <file alias="os_win31.png">images/os_win31.png</file>
+- <file alias="os_win7.png">images/os_win7.png</file>
+- <file alias="os_win7_64.png">images/os_win7_64.png</file>
+- <file alias="os_win8.png">images/os_win8.png</file>
+- <file alias="os_win8_64.png">images/os_win8_64.png</file>
+- <file alias="os_win95.png">images/os_win95.png</file>
+- <file alias="os_win98.png">images/os_win98.png</file>
+- <file alias="os_winme.png">images/os_winme.png</file>
+- <file alias="os_winnt4.png">images/os_winnt4.png</file>
+- <file alias="os_winvista.png">images/os_winvista.png</file>
+- <file alias="os_winvista_64.png">images/os_winvista_64.png</file>
+- <file alias="os_winxp.png">images/os_winxp.png</file>
+- <file alias="os_winxp_64.png">images/os_winxp_64.png</file>
+- <file alias="os_xandros.png">images/os_xandros.png</file>
+- <file alias="os_xandros_64.png">images/os_xandros_64.png</file>
+- <file alias="os_oracle.png">images/os_oracle.png</file>
+- <file alias="os_oracle_64.png">images/os_oracle_64.png</file>
+- <file alias="os_macosx.png">images/os_macosx.png</file>
+- <file alias="os_macosx_64.png">images/os_macosx_64.png</file>
++ <file alias="os_dynebolic.png">images/os_dynebolic.png</file>
++ <file alias="os_venenux.png">images/os_venenux.png</file>
++ <file alias="os_trisquel.png">images/os_trisquel.png</file>
++ <file alias="os_trisquel_64.png">images/os_trisquel_64.png</file>
+ <file alias="hd_16px.png">images/hd_16px.png</file>
+ <file alias="hd_disabled_16px.png">images/hd_disabled_16px.png</file>
+ <file alias="hd_32px.png">images/hd_32px.png</file>
+--- VirtualBox-4.1.20.orig/src/VBox/Main/src-all/Global.cpp 2012-08-20 11:36:24.000000000 -0300
++++ VirtualBox-4.1.20/src/VBox/Main/src-all/Global.cpp 2012-08-21 14:22:29.148190849 -0300
+@@ -35,284 +35,90 @@
+ VBOXOSTYPE_Unknown, VBOXOSHINT_NONE,
+ 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows31, "Windows 3.1",
+- VBOXOSTYPE_Win31, VBOXOSHINT_NONE,
+- 32, 4, 1 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_SB16 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows95, "Windows 95",
+- VBOXOSTYPE_Win95, VBOXOSHINT_NONE,
+- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows98, "Windows 98",
+- VBOXOSTYPE_Win98, VBOXOSHINT_NONE,
+- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsMe, "Windows Me",
+- VBOXOSTYPE_WinMe, VBOXOSHINT_NONE,
+- 64, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsNT4, "Windows NT 4",
+- VBOXOSTYPE_WinNT4, VBOXOSHINT_NONE,
+- 128, 16, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2000, "Windows 2000",
+- VBOXOSTYPE_Win2k, VBOXOSHINT_USBTABLET,
+- 168, 16, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsXP, "Windows XP",
+- VBOXOSTYPE_WinXP, VBOXOSHINT_USBTABLET,
+- 192, 16, 10 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsXP_64, "Windows XP (64 bit)",
+- VBOXOSTYPE_WinXP_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
+- 192, 16, 10 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2003, "Windows 2003",
+- VBOXOSTYPE_Win2k3, VBOXOSHINT_USBTABLET,
+- 256, 16, 20 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2003_64, "Windows 2003 (64 bit)",
+- VBOXOSTYPE_Win2k3_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
+- 256, 16, 20 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsVista, "Windows Vista",
+- VBOXOSTYPE_WinVista, VBOXOSHINT_USBTABLET,
+- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsVista_64, "Windows Vista (64 bit)",
+- VBOXOSTYPE_WinVista_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
+- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2008, "Windows 2008",
+- VBOXOSTYPE_Win2k8, VBOXOSHINT_USBTABLET,
+- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2008_64, "Windows 2008 (64 bit)",
+- VBOXOSTYPE_Win2k8_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
+- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows7, "Windows 7",
+- VBOXOSTYPE_Win7, VBOXOSHINT_USBTABLET,
+- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows7_64, "Windows 7 (64 bit)",
+- VBOXOSTYPE_Win7_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
+- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows8, "Windows 8",
+- VBOXOSTYPE_Win8, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET | VBOXOSHINT_PAE,
+- 1024,128, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows8_64, "Windows 8 (64 bit)",
+- VBOXOSTYPE_Win8_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
+- 1536,128, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsNT, "Other Windows",
+- VBOXOSTYPE_WinNT, VBOXOSHINT_NONE,
+- 512, 16, 20 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux22, "Linux 2.2",
+- VBOXOSTYPE_Linux22, VBOXOSHINT_RTCUTC,
+- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux24, "Linux 2.4",
+- VBOXOSTYPE_Linux24, VBOXOSHINT_RTCUTC,
+- 128, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux24_64, "Linux 2.4 (64 bit)",
+- VBOXOSTYPE_Linux24_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC,
+- 128, 4, 4 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
++ { "GNU", "GNU", SchemaDefs_OSTypeId_GNU, "GNU",
++ VBOXOSTYPE_GNU, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
++ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
++ { "GNU", "GNU", SchemaDefs_OSTypeId_GNU_64, "GNU (64 bit)",
++ VBOXOSTYPE_GNU_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
++ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
++ { "GNU-Hurd", "GNU-Hurd", SchemaDefs_OSTypeId_GNUHurd, "GNU-Hurd",
++ VBOXOSTYPE_GNUHurd, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux26, "Linux 2.6",
+- VBOXOSTYPE_Linux26, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_GNULinux, "GNU/Linux",
++ VBOXOSTYPE_GNULinux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux26_64, "Linux 2.6 (64 bit)",
+- VBOXOSTYPE_Linux26_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_GNULinux_64, "GNU/Linux (64 bit)",
++ VBOXOSTYPE_GNULinux_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_ArchLinux, "Arch Linux",
+- VBOXOSTYPE_ArchLinux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Parabola, "Parabola GNU/Linux-libre",
++ VBOXOSTYPE_Parabola, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_ArchLinux_64, "Arch Linux (64 bit)",
+- VBOXOSTYPE_ArchLinux_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Parabola_64, "Parabola GNU/Linux-libre (64 bit)",
++ VBOXOSTYPE_Parabola_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Debian, "Debian",
+- VBOXOSTYPE_Debian, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_gNewSense, "gNewSense",
++ VBOXOSTYPE_gNewSense, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Debian_64, "Debian (64 bit)",
+- VBOXOSTYPE_Debian_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_gNewSense_64, "gNewSense (64 bit)",
++ VBOXOSTYPE_gNewSense_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97},
+- { "Linux", "Linux", SchemaDefs_OSTypeId_OpenSUSE, "openSUSE",
+- VBOXOSTYPE_OpenSUSE, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_OpenSUSE_64, "openSUSE (64 bit)",
+- VBOXOSTYPE_OpenSUSE_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Fedora, "Fedora",
+- VBOXOSTYPE_FedoraCore, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Blag, "Blag Linux and GNU",
++ VBOXOSTYPE_Blag, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 768, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Fedora_64, "Fedora (64 bit)",
+- VBOXOSTYPE_FedoraCore_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Blag_64, "Blag Linux and GNU (64 bit)",
++ VBOXOSTYPE_Blag_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 768, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Gentoo, "Gentoo",
+- VBOXOSTYPE_Gentoo, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Dragora, "Dragora",
++ VBOXOSTYPE_Dragora, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Gentoo_64, "Gentoo (64 bit)",
+- VBOXOSTYPE_Gentoo_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Dragora_64, "Dragora (64 bit)",
++ VBOXOSTYPE_Dragora_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Mandriva, "Mandriva",
+- VBOXOSTYPE_Mandriva, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Mandriva_64, "Mandriva (64 bit)",
+- VBOXOSTYPE_Mandriva_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_RedHat, "Red Hat",
+- VBOXOSTYPE_RedHat, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE,
+- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Ututo, "Ututo XS",
++ VBOXOSTYPE_Ututo, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_RedHat_64, "Red Hat (64 bit)",
+- VBOXOSTYPE_RedHat_x64, VBOXOSHINT_64BIT | VBOXOSHINT_PAE | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC,
+- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Ututo_64, "Ututo XS (64 bit)",
++ VBOXOSTYPE_Ututo_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Turbolinux, "Turbolinux",
+- VBOXOSTYPE_Turbolinux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Musix, "Musix",
++ VBOXOSTYPE_Musix, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Turbolinux, "Turbolinux (64 bit)",
+- VBOXOSTYPE_Turbolinux_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Musix_64, "Musix (64 bit)",
++ VBOXOSTYPE_Musix_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Ubuntu, "Ubuntu",
+- VBOXOSTYPE_Ubuntu, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE | VBOXOSHINT_USBTABLET,
++ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97},
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Trisquel, "Trisquel",
++ VBOXOSTYPE_Trisquel, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE | VBOXOSHINT_USBTABLET,
+ 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Ubuntu_64, "Ubuntu (64 bit)",
+- VBOXOSTYPE_Ubuntu_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Trisquel_64, "Trisquel (64 bit)",
++ VBOXOSTYPE_Trisquel_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Xandros, "Xandros",
+- VBOXOSTYPE_Xandros, VBOXOSHINT_RTCUTC,
+- 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Dynebolic, "Dyne:bolic",
++ VBOXOSTYPE_Dynebolic, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Xandros_64, "Xandros (64 bit)",
+- VBOXOSTYPE_Xandros_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC,
+- 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Venenux, "Venenux",
++ VBOXOSTYPE_Venenux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Oracle, "Oracle",
+- VBOXOSTYPE_Oracle, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE,
+- 512, 12, 12 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Oracle_64, "Oracle (64 bit)",
+- VBOXOSTYPE_Oracle_x64, VBOXOSHINT_64BIT | VBOXOSHINT_PAE | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC,
+- 512, 12, 12 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux, "Other Linux",
+- VBOXOSTYPE_Linux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+- 256, 12, 8 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Solaris", "Solaris", SchemaDefs_OSTypeId_Solaris, "Oracle Solaris 10 5/09 and earlier",
+- VBOXOSTYPE_Solaris, VBOXOSHINT_NONE,
+- 768, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Solaris", "Solaris", SchemaDefs_OSTypeId_Solaris_64, "Oracle Solaris 10 5/09 and earlier (64 bit)",
+- VBOXOSTYPE_Solaris_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC,
+- 1536, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Solaris", "Solaris", SchemaDefs_OSTypeId_OpenSolaris, "Oracle Solaris 10 10/09 and later",
+- VBOXOSTYPE_OpenSolaris, VBOXOSHINT_USBTABLET,
+- 768, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Solaris", "Solaris", SchemaDefs_OSTypeId_OpenSolaris_64, "Oracle Solaris 10 10/09 and later (64 bit)",
+- VBOXOSTYPE_OpenSolaris_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
+- 1536, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "BSD", "BSD", SchemaDefs_OSTypeId_FreeBSD, "FreeBSD",
+- VBOXOSTYPE_FreeBSD, VBOXOSHINT_NONE,
+- 128, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "BSD", "BSD", SchemaDefs_OSTypeId_FreeBSD_64, "FreeBSD (64 bit)",
+- VBOXOSTYPE_FreeBSD_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC,
+- 128, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "BSD", "BSD", SchemaDefs_OSTypeId_OpenBSD, "OpenBSD",
+- VBOXOSTYPE_OpenBSD, VBOXOSHINT_HWVIRTEX,
+- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "BSD", "BSD", SchemaDefs_OSTypeId_OpenBSD_64, "OpenBSD (64 bit)",
+- VBOXOSTYPE_OpenBSD_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC,
+- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "BSD", "BSD", SchemaDefs_OSTypeId_NetBSD, "NetBSD",
+- VBOXOSTYPE_NetBSD, VBOXOSHINT_NONE,
+- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "BSD", "BSD", SchemaDefs_OSTypeId_NetBSD_64, "NetBSD (64 bit)",
+- VBOXOSTYPE_NetBSD_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC,
+- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2Warp3, "OS/2 Warp 3",
+- VBOXOSTYPE_OS2Warp3, VBOXOSHINT_HWVIRTEX,
+- 48, 4, 1 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2Warp4, "OS/2 Warp 4",
+- VBOXOSTYPE_OS2Warp4, VBOXOSHINT_HWVIRTEX,
+- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2Warp45, "OS/2 Warp 4.5",
+- VBOXOSTYPE_OS2Warp45, VBOXOSHINT_HWVIRTEX,
+- 96, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2eCS, "eComStation",
+- VBOXOSTYPE_ECS, VBOXOSHINT_HWVIRTEX,
+- 96, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2, "Other OS/2",
+- VBOXOSTYPE_OS2, VBOXOSHINT_HWVIRTEX,
+- 96, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "MacOS", "Mac OS X", SchemaDefs_OSTypeId_MacOS, "Mac OS X Server",
+- VBOXOSTYPE_MacOS, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_EFI | VBOXOSHINT_PAE | VBOXOSHINT_USBHID | VBOXOSHINT_HPET | VBOXOSHINT_USBTABLET,
+- 1024, 4, 20 * _1G64, NetworkAdapterType_I82543GC, 0,
+- StorageControllerType_ICH6, StorageBus_IDE, StorageControllerType_IntelAhci, StorageBus_SATA,
+- ChipsetType_ICH9, AudioControllerType_HDA },
+- { "MacOS", "Mac OS X", SchemaDefs_OSTypeId_MacOS_64, "Mac OS X Server (64 bit)",
+- VBOXOSTYPE_MacOS_x64, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_EFI | VBOXOSHINT_PAE | VBOXOSHINT_64BIT | VBOXOSHINT_USBHID | VBOXOSHINT_HPET | VBOXOSHINT_USBTABLET,
+- 1024, 4, 20 * _1G64, NetworkAdapterType_I82543GC, 0,
+- StorageControllerType_ICH6, StorageBus_IDE, StorageControllerType_IntelAhci, StorageBus_SATA,
+- ChipsetType_ICH9, AudioControllerType_HDA },
+- { "Other", "Other", SchemaDefs_OSTypeId_DOS, "DOS",
+- VBOXOSTYPE_DOS, VBOXOSHINT_NONE,
+- 32, 4, 500 * _1M, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_SB16 },
+- { "Other", "Other", SchemaDefs_OSTypeId_Netware, "Netware",
+- VBOXOSTYPE_Netware, VBOXOSHINT_HWVIRTEX,
+- 512, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Other", "Other", SchemaDefs_OSTypeId_L4, "L4",
+- VBOXOSTYPE_L4, VBOXOSHINT_NONE,
+- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Other", "Other", SchemaDefs_OSTypeId_QNX, "QNX",
+- VBOXOSTYPE_QNX, VBOXOSHINT_HWVIRTEX,
+- 512, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Other", "Other", SchemaDefs_OSTypeId_JRockitVE, "JRockitVE",
+- VBOXOSTYPE_JRockitVE, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_PAE,
+- 1024, 4, 8 * _1G64, NetworkAdapterType_I82545EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_BusLogic, StorageBus_SCSI, ChipsetType_PIIX3, AudioControllerType_AC97 },
+ };
+
+ /**
+--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp 2012-07-25 21:44:01.290876720 -0300
++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp 2012-07-25 22:00:57.819380802 -0300
+@@ -4875,75 +4875,27 @@
+ static const char *kOSTypeIcons [][2] =
+ {
+ {"Other", ":/os_other.png"},
+- {"DOS", ":/os_dos.png"},
+- {"Netware", ":/os_netware.png"},
+- {"L4", ":/os_l4.png"},
+- {"Windows31", ":/os_win31.png"},
+- {"Windows95", ":/os_win95.png"},
+- {"Windows98", ":/os_win98.png"},
+- {"WindowsMe", ":/os_winme.png"},
+- {"WindowsNT4", ":/os_winnt4.png"},
+- {"Windows2000", ":/os_win2k.png"},
+- {"WindowsXP", ":/os_winxp.png"},
+- {"WindowsXP_64", ":/os_winxp_64.png"},
+- {"Windows2003", ":/os_win2k3.png"},
+- {"Windows2003_64", ":/os_win2k3_64.png"},
+- {"WindowsVista", ":/os_winvista.png"},
+- {"WindowsVista_64", ":/os_winvista_64.png"},
+- {"Windows2008", ":/os_win2k8.png"},
+- {"Windows2008_64", ":/os_win2k8_64.png"},
+- {"Windows7", ":/os_win7.png"},
+- {"Windows7_64", ":/os_win7_64.png"},
+- {"Windows8", ":/os_win8.png"},
+- {"Windows8_64", ":/os_win8_64.png"},
+- {"WindowsNT", ":/os_win_other.png"},
+- {"OS2Warp3", ":/os_os2warp3.png"},
+- {"OS2Warp4", ":/os_os2warp4.png"},
+- {"OS2Warp45", ":/os_os2warp45.png"},
+- {"OS2eCS", ":/os_os2ecs.png"},
+- {"OS2", ":/os_os2_other.png"},
+- {"Linux22", ":/os_linux22.png"},
+- {"Linux24", ":/os_linux24.png"},
+- {"Linux24_64", ":/os_linux24_64.png"},
+- {"Linux26", ":/os_linux26.png"},
+- {"Linux26_64", ":/os_linux26_64.png"},
+- {"ArchLinux", ":/os_archlinux.png"},
+- {"ArchLinux_64", ":/os_archlinux_64.png"},
+- {"Debian", ":/os_debian.png"},
+- {"Debian_64", ":/os_debian_64.png"},
+- {"OpenSUSE", ":/os_opensuse.png"},
+- {"OpenSUSE_64", ":/os_opensuse_64.png"},
+- {"Fedora", ":/os_fedora.png"},
+- {"Fedora_64", ":/os_fedora_64.png"},
+- {"Gentoo", ":/os_gentoo.png"},
+- {"Gentoo_64", ":/os_gentoo_64.png"},
+- {"Mandriva", ":/os_mandriva.png"},
+- {"Mandriva_64", ":/os_mandriva_64.png"},
+- {"RedHat", ":/os_redhat.png"},
+- {"RedHat_64", ":/os_redhat_64.png"},
+- {"Turbolinux", ":/os_turbolinux.png"},
+- {"Turbolinux_64", ":/os_turbolinux_64.png"},
+- {"Ubuntu", ":/os_ubuntu.png"},
+- {"Ubuntu_64", ":/os_ubuntu_64.png"},
+- {"Xandros", ":/os_xandros.png"},
+- {"Xandros_64", ":/os_xandros_64.png"},
+- {"Oracle", ":/os_oracle.png"},
+- {"Oracle_64", ":/os_oracle_64.png"},
+- {"Linux", ":/os_linux_other.png"},
+- {"FreeBSD", ":/os_freebsd.png"},
+- {"FreeBSD_64", ":/os_freebsd_64.png"},
+- {"OpenBSD", ":/os_openbsd.png"},
+- {"OpenBSD_64", ":/os_openbsd_64.png"},
+- {"NetBSD", ":/os_netbsd.png"},
+- {"NetBSD_64", ":/os_netbsd_64.png"},
+- {"Solaris", ":/os_solaris.png"},
+- {"Solaris_64", ":/os_solaris_64.png"},
+- {"OpenSolaris", ":/os_oraclesolaris.png"},
+- {"OpenSolaris_64", ":/os_oraclesolaris_64.png"},
+- {"QNX", ":/os_qnx.png"},
+- {"MacOS", ":/os_macosx.png"},
+- {"MacOS_64", ":/os_macosx_64.png"},
+- {"JRockitVE", ":/os_jrockitve.png"},
++ {"GNU", ":/os_gnu.png"},
++ {"GNU_64", ":/os_gnu_64.png"},
++ {"GNUHurd", ":/os_gnuhurd.png"},
++ {"GNULinux", ":/os_gnulinux.png"},
++ {"GNULinux_64", ":/os_gnulinux_64.png"},
++ {"Parabola", ":/os_parabola.png"},
++ {"Parabola_64", ":/os_parabola_64.png"},
++ {"gNewSense", ":/os_gnewsense.png"},
++ {"gNewSense_64", ":/os_gnewsense_64.png"},
++ {"Blag", ":/os_blag.png"},
++ {"Blag_64", ":/os_blag_64.png"},
++ {"Dragora", ":/os_dragora.png"},
++ {"Dragora_64", ":/os_dragora_64.png"},
++ {"Ututo", ":/os_ututo.png"},
++ {"Ututo_64", ":/os_ututo_64.png"},
++ {"Musix", ":/os_musix.png"},
++ {"Musix_64", ":/os_musix_64.png"},
++ {"Trisquel", ":/os_trisquel.png"},
++ {"Trisquel_64", ":/os_trisquel_64.png"},
++ {"Dynebolic", ":/os_dynebolic.png"},
++ {"Venenux", ":/os_venenux.png"},
+ };
+ for (uint n = 0; n < SIZEOF_ARRAY (kOSTypeIcons); ++ n)
+ {
+--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/src/widgets/VBoxOSTypeSelectorWidget.cpp.orig 2012-06-20 10:16:38.000000000 -0300
++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/src/widgets/VBoxOSTypeSelectorWidget.cpp 2012-07-25 22:07:51.232436783 -0300
+@@ -192,17 +192,10 @@
+ if (typeIndex != -1)
+ mCbType->setCurrentIndex (typeIndex);
+ }
+- /* Or select WinXP item for Windows family as default */
+- else if (familyId == "Windows")
++ /* Or select Parabola GNU/Linux-libre item for GNU/Linux family as default */
++ else if (familyId == "GNU/Linux")
+ {
+- int xpIndex = mCbType->findData ("WindowsXP", RoleTypeID);
+- if (xpIndex != -1)
+- mCbType->setCurrentIndex (xpIndex);
+- }
+- /* Or select Ubuntu item for Linux family as default */
+- else if (familyId == "Linux")
+- {
+- int ubIndex = mCbType->findData ("Ubuntu", RoleTypeID);
++ int ubIndex = mCbType->findData ("Parabola", RoleTypeID);
+ if (ubIndex != -1)
+ mCbType->setCurrentIndex (ubIndex);
+ }
+--- VirtualBox-4.1.18.orig/include/VBox/ostypes.h 2012-06-20 10:07:51.000000000 -0300
++++ VirtualBox-4.1.18/include/VBox/ostypes.h 2012-07-25 23:20:57.322757456 -0300
+@@ -43,77 +43,27 @@
+ typedef enum VBOXOSTYPE
+ {
+ VBOXOSTYPE_Unknown = 0,
+- VBOXOSTYPE_DOS = 0x10000,
+- VBOXOSTYPE_Win31 = 0x15000,
+- VBOXOSTYPE_Win9x = 0x20000,
+- VBOXOSTYPE_Win95 = 0x21000,
+- VBOXOSTYPE_Win98 = 0x22000,
+- VBOXOSTYPE_WinMe = 0x23000,
+- VBOXOSTYPE_WinNT = 0x30000,
+- VBOXOSTYPE_WinNT4 = 0x31000,
+- VBOXOSTYPE_Win2k = 0x32000,
+- VBOXOSTYPE_WinXP = 0x33000,
+- VBOXOSTYPE_WinXP_x64 = 0x33100,
+- VBOXOSTYPE_Win2k3 = 0x34000,
+- VBOXOSTYPE_Win2k3_x64 = 0x34100,
+- VBOXOSTYPE_WinVista = 0x35000,
+- VBOXOSTYPE_WinVista_x64 = 0x35100,
+- VBOXOSTYPE_Win2k8 = 0x36000,
+- VBOXOSTYPE_Win2k8_x64 = 0x36100,
+- VBOXOSTYPE_Win7 = 0x37000,
+- VBOXOSTYPE_Win7_x64 = 0x37100,
+- VBOXOSTYPE_Win8 = 0x38000,
+- VBOXOSTYPE_Win8_x64 = 0x38100,
+- VBOXOSTYPE_OS2 = 0x40000,
+- VBOXOSTYPE_OS2Warp3 = 0x41000,
+- VBOXOSTYPE_OS2Warp4 = 0x42000,
+- VBOXOSTYPE_OS2Warp45 = 0x43000,
+- VBOXOSTYPE_ECS = 0x44000,
+- VBOXOSTYPE_Linux = 0x50000,
+- VBOXOSTYPE_Linux_x64 = 0x50100,
+- VBOXOSTYPE_Linux22 = 0x51000,
+- VBOXOSTYPE_Linux24 = 0x52000,
+- VBOXOSTYPE_Linux24_x64 = 0x52100,
+- VBOXOSTYPE_Linux26 = 0x53000,
+- VBOXOSTYPE_Linux26_x64 = 0x53100,
+- VBOXOSTYPE_ArchLinux = 0x54000,
+- VBOXOSTYPE_ArchLinux_x64 = 0x54100,
+- VBOXOSTYPE_Debian = 0x55000,
+- VBOXOSTYPE_Debian_x64 = 0x55100,
+- VBOXOSTYPE_OpenSUSE = 0x56000,
+- VBOXOSTYPE_OpenSUSE_x64 = 0x56100,
+- VBOXOSTYPE_FedoraCore = 0x57000,
+- VBOXOSTYPE_FedoraCore_x64 = 0x57100,
+- VBOXOSTYPE_Gentoo = 0x58000,
+- VBOXOSTYPE_Gentoo_x64 = 0x58100,
+- VBOXOSTYPE_Mandriva = 0x59000,
+- VBOXOSTYPE_Mandriva_x64 = 0x59100,
+- VBOXOSTYPE_RedHat = 0x5A000,
+- VBOXOSTYPE_RedHat_x64 = 0x5A100,
+- VBOXOSTYPE_Turbolinux = 0x5B000,
+- VBOXOSTYPE_Turbolinux_x64 = 0x5B100,
+- VBOXOSTYPE_Ubuntu = 0x5C000,
+- VBOXOSTYPE_Ubuntu_x64 = 0x5C100,
+- VBOXOSTYPE_Xandros = 0x5D000,
+- VBOXOSTYPE_Xandros_x64 = 0x5D100,
+- VBOXOSTYPE_Oracle = 0x5E000,
+- VBOXOSTYPE_Oracle_x64 = 0x5E100,
+- VBOXOSTYPE_FreeBSD = 0x60000,
+- VBOXOSTYPE_FreeBSD_x64 = 0x60100,
+- VBOXOSTYPE_OpenBSD = 0x61000,
+- VBOXOSTYPE_OpenBSD_x64 = 0x61100,
+- VBOXOSTYPE_NetBSD = 0x62000,
+- VBOXOSTYPE_NetBSD_x64 = 0x62100,
+- VBOXOSTYPE_Netware = 0x70000,
+- VBOXOSTYPE_Solaris = 0x80000,
+- VBOXOSTYPE_Solaris_x64 = 0x80100,
+- VBOXOSTYPE_OpenSolaris = 0x81000,
+- VBOXOSTYPE_OpenSolaris_x64 = 0x81100,
+- VBOXOSTYPE_L4 = 0x90000,
+- VBOXOSTYPE_QNX = 0xA0000,
+- VBOXOSTYPE_MacOS = 0xB0000,
+- VBOXOSTYPE_MacOS_x64 = 0xB0100,
+- VBOXOSTYPE_JRockitVE = 0xC0000,
++ VBOXOSTYPE_GNU = 0x10000,
++ VBOXOSTYPE_GNU_x64 = 0x10100,
++ VBOXOSTYPE_GNUHurd = 0x20000,
++ VBOXOSTYPE_GNULinux = 0x30000,
++ VBOXOSTYPE_GNULinux_x64 = 0x30100,
++ VBOXOSTYPE_Parabola = 0x31000,
++ VBOXOSTYPE_Parabola_x64 = 0x31100,
++ VBOXOSTYPE_gNewSense = 0x32000,
++ VBOXOSTYPE_gNewSense_x64 = 0x32100,
++ VBOXOSTYPE_Blag = 0x33000,
++ VBOXOSTYPE_Blag_x64 = 0x33100,
++ VBOXOSTYPE_Dragora = 0x34000,
++ VBOXOSTYPE_Dragora_x64 = 0x34100,
++ VBOXOSTYPE_Ututo = 0x35000,
++ VBOXOSTYPE_Ututo_x64 = 0x35100,
++ VBOXOSTYPE_Musix = 0x36000,
++ VBOXOSTYPE_Musix_x64 = 0x36100,
++ VBOXOSTYPE_Trisquel = 0x37000,
++ VBOXOSTYPE_Trisquel_x64 = 0x37100,
++ VBOXOSTYPE_Dynebolic = 0x38000,
++ VBOXOSTYPE_Venenux = 0x39000,
+ /** The bit number which indicates 64-bit or 32-bit. */
+ #define VBOXOSTYPE_x64_BIT 8
+ /** The mask which indicates 64-bit. */
+@@ -129,16 +79,11 @@
+ typedef enum VBOXOSFAMILY
+ {
+ VBOXOSFAMILY_Unknown = 0,
+- VBOXOSFAMILY_Windows32 = 1,
+- VBOXOSFAMILY_Windows64 = 2,
+- VBOXOSFAMILY_Linux32 = 3,
+- VBOXOSFAMILY_Linux64 = 4,
+- VBOXOSFAMILY_FreeBSD32 = 5,
+- VBOXOSFAMILY_FreeBSD64 = 6,
+- VBOXOSFAMILY_Solaris32 = 7,
+- VBOXOSFAMILY_Solaris64 = 8,
+- VBOXOSFAMILY_MacOSX32 = 9,
+- VBOXOSFAMILY_MacOSX64 = 10,
++ VBOXOSFAMILY_GNU32 = 1,
++ VBOXOSFAMILY_GNU64 = 2,
++ VBOXOSFAMILY_GNUHurd = 3,
++ VBOXOSFAMILY_GNULinux32 = 4,
++ VBOXOSFAMILY_GNULinux64 = 5,
+ /** The usual 32-bit hack. */
+ VBOXOSFAMILY_32BIT_HACK = 0x7fffffff
+ } VBOXOSFAMILY;
+--- VirtualBox-4.1.18.orig/src/VBox/Main/src-server/ApplianceImpl.cpp 2012-06-20 10:17:35.000000000 -0300
++++ VirtualBox-4.1.18/src/VBox/Main/src-server/ApplianceImpl.cpp 2012-07-26 01:28:50.033551279 -0300
+@@ -49,94 +49,33 @@
+ g_osTypes[] =
+ {
+ { ovf::CIMOSType_CIMOS_Unknown, SchemaDefs_OSTypeId_Other },
+- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2 },
+- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2Warp3 },
+- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2Warp4 },
+- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2Warp45 },
+- { ovf::CIMOSType_CIMOS_MSDOS, SchemaDefs_OSTypeId_DOS },
+- { ovf::CIMOSType_CIMOS_WIN3x, SchemaDefs_OSTypeId_Windows31 },
+- { ovf::CIMOSType_CIMOS_WIN95, SchemaDefs_OSTypeId_Windows95 },
+- { ovf::CIMOSType_CIMOS_WIN98, SchemaDefs_OSTypeId_Windows98 },
+- { ovf::CIMOSType_CIMOS_WINNT, SchemaDefs_OSTypeId_WindowsNT },
+- { ovf::CIMOSType_CIMOS_WINNT, SchemaDefs_OSTypeId_WindowsNT4 },
+- { ovf::CIMOSType_CIMOS_NetWare, SchemaDefs_OSTypeId_Netware },
+- { ovf::CIMOSType_CIMOS_NovellOES, SchemaDefs_OSTypeId_Netware },
+- { ovf::CIMOSType_CIMOS_Solaris, SchemaDefs_OSTypeId_Solaris },
+- { ovf::CIMOSType_CIMOS_SunOS, SchemaDefs_OSTypeId_Solaris },
+- { ovf::CIMOSType_CIMOS_FreeBSD, SchemaDefs_OSTypeId_FreeBSD },
+- { ovf::CIMOSType_CIMOS_NetBSD, SchemaDefs_OSTypeId_NetBSD },
+- { ovf::CIMOSType_CIMOS_QNX, SchemaDefs_OSTypeId_QNX },
+- { ovf::CIMOSType_CIMOS_Windows2000, SchemaDefs_OSTypeId_Windows2000 },
+- { ovf::CIMOSType_CIMOS_WindowsMe, SchemaDefs_OSTypeId_WindowsMe },
+- { ovf::CIMOSType_CIMOS_OpenBSD, SchemaDefs_OSTypeId_OpenBSD },
+- { ovf::CIMOSType_CIMOS_WindowsXP, SchemaDefs_OSTypeId_WindowsXP },
+- { ovf::CIMOSType_CIMOS_WindowsXPEmbedded, SchemaDefs_OSTypeId_WindowsXP },
+- { ovf::CIMOSType_CIMOS_WindowsEmbeddedforPointofService, SchemaDefs_OSTypeId_WindowsXP },
+- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2003, SchemaDefs_OSTypeId_Windows2003 },
+- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2003_64, SchemaDefs_OSTypeId_Windows2003_64 },
+- { ovf::CIMOSType_CIMOS_WindowsXP_64, SchemaDefs_OSTypeId_WindowsXP_64 },
+- { ovf::CIMOSType_CIMOS_WindowsVista, SchemaDefs_OSTypeId_WindowsVista },
+- { ovf::CIMOSType_CIMOS_WindowsVista_64, SchemaDefs_OSTypeId_WindowsVista_64 },
+- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2008, SchemaDefs_OSTypeId_Windows2008 },
+- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2008_64, SchemaDefs_OSTypeId_Windows2008_64 },
+- { ovf::CIMOSType_CIMOS_FreeBSD_64, SchemaDefs_OSTypeId_FreeBSD_64 },
+- { ovf::CIMOSType_CIMOS_MACOS, SchemaDefs_OSTypeId_MacOS },
+- { ovf::CIMOSType_CIMOS_MACOS, SchemaDefs_OSTypeId_MacOS_64 }, // there is no CIM 64-bit type for this
+-
+- // Linuxes
+- { ovf::CIMOSType_CIMOS_RedHatEnterpriseLinux, SchemaDefs_OSTypeId_RedHat },
+- { ovf::CIMOSType_CIMOS_RedHatEnterpriseLinux_64, SchemaDefs_OSTypeId_RedHat_64 },
+- { ovf::CIMOSType_CIMOS_Solaris_64, SchemaDefs_OSTypeId_Solaris_64 },
+- { ovf::CIMOSType_CIMOS_SUSE, SchemaDefs_OSTypeId_OpenSUSE },
+- { ovf::CIMOSType_CIMOS_SLES, SchemaDefs_OSTypeId_OpenSUSE },
+- { ovf::CIMOSType_CIMOS_NovellLinuxDesktop, SchemaDefs_OSTypeId_OpenSUSE },
+- { ovf::CIMOSType_CIMOS_SUSE_64, SchemaDefs_OSTypeId_OpenSUSE_64 },
+- { ovf::CIMOSType_CIMOS_SLES_64, SchemaDefs_OSTypeId_OpenSUSE_64 },
+- { ovf::CIMOSType_CIMOS_LINUX, SchemaDefs_OSTypeId_Linux },
+- { ovf::CIMOSType_CIMOS_LINUX, SchemaDefs_OSTypeId_Linux22 },
+- { ovf::CIMOSType_CIMOS_SunJavaDesktopSystem, SchemaDefs_OSTypeId_Linux },
+- { ovf::CIMOSType_CIMOS_TurboLinux, SchemaDefs_OSTypeId_Turbolinux },
+- { ovf::CIMOSType_CIMOS_TurboLinux_64, SchemaDefs_OSTypeId_Turbolinux_64 },
+- { ovf::CIMOSType_CIMOS_Mandriva, SchemaDefs_OSTypeId_Mandriva },
+- { ovf::CIMOSType_CIMOS_Mandriva_64, SchemaDefs_OSTypeId_Mandriva_64 },
+- { ovf::CIMOSType_CIMOS_Ubuntu, SchemaDefs_OSTypeId_Ubuntu },
+- { ovf::CIMOSType_CIMOS_Ubuntu_64, SchemaDefs_OSTypeId_Ubuntu_64 },
+- { ovf::CIMOSType_CIMOS_Debian, SchemaDefs_OSTypeId_Debian },
+- { ovf::CIMOSType_CIMOS_Debian_64, SchemaDefs_OSTypeId_Debian_64 },
+- { ovf::CIMOSType_CIMOS_Linux_2_4_x, SchemaDefs_OSTypeId_Linux24 },
+- { ovf::CIMOSType_CIMOS_Linux_2_4_x_64, SchemaDefs_OSTypeId_Linux24_64 },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Linux26 },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Linux26_64 },
+- { ovf::CIMOSType_CIMOS_Linux_64, SchemaDefs_OSTypeId_Linux26_64 },
+-
+- // types that we have support for but CIM doesn't
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_ArchLinux },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_ArchLinux_64 },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Fedora },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Fedora_64 },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Gentoo },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Gentoo_64 },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Xandros },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Xandros_64 },
+- { ovf::CIMOSType_CIMOS_Solaris, SchemaDefs_OSTypeId_OpenSolaris },
+- { ovf::CIMOSType_CIMOS_Solaris_64, SchemaDefs_OSTypeId_OpenSolaris_64 },
+-
+- // types added with CIM 2.25.0 follow:
+- { ovf::CIMOSType_CIMOS_WindowsServer2008R2, SchemaDefs_OSTypeId_Windows2008 }, // duplicate, see above
+-// { ovf::CIMOSType_CIMOS_VMwareESXi = 104, // we can't run ESX in a VM
+- { ovf::CIMOSType_CIMOS_Windows7, SchemaDefs_OSTypeId_Windows7 },
+- { ovf::CIMOSType_CIMOS_Windows7, SchemaDefs_OSTypeId_Windows7_64 }, // there is no CIM 64-bit type for this
+- { ovf::CIMOSType_CIMOS_CentOS, SchemaDefs_OSTypeId_RedHat },
+- { ovf::CIMOSType_CIMOS_CentOS_64, SchemaDefs_OSTypeId_RedHat_64 },
+- { ovf::CIMOSType_CIMOS_OracleEnterpriseLinux, SchemaDefs_OSTypeId_Oracle },
+- { ovf::CIMOSType_CIMOS_OracleEnterpriseLinux_64, SchemaDefs_OSTypeId_Oracle_64 },
+- { ovf::CIMOSType_CIMOS_eComStation, SchemaDefs_OSTypeId_OS2eCS }
+-
+- // there are no CIM types for these, so these turn to "other" on export:
+- // SchemaDefs_OSTypeId_OpenBSD
+- // SchemaDefs_OSTypeId_OpenBSD_64
+- // SchemaDefs_OSTypeId_NetBSD
+- // SchemaDefs_OSTypeId_NetBSD_64
++
++ // Custom OS
++ { ovf::CIMOSType_CIMOS_GNU, SchemaDefs_OSTypeId_GNU },
++ { ovf::CIMOSType_CIMOS_GNU_64, SchemaDefs_OSTypeId_GNU_64 },
++ { ovf::CIMOSType_CIMOS_GNUHurd, SchemaDefs_OSTypeId_GNUHurd },
++ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_GNULinux },
++ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_GNULinux_64 },
++
++ // GNU/Linux free distros
++ { ovf::CIMOSType_CIMOS_gNewSense, SchemaDefs_OSTypeId_gNewSense },
++ { ovf::CIMOSType_CIMOS_gNewSense_64, SchemaDefs_OSTypeId_gNewSense_64 },
++ { ovf::CIMOSType_CIMOS_Dragora, SchemaDefs_OSTypeId_Dragora },
++ { ovf::CIMOSType_CIMOS_Dragora_64, SchemaDefs_OSTypeId_Dragora_64 },
++ { ovf::CIMOSType_CIMOS_Musix, SchemaDefs_OSTypeId_Musix },
++ { ovf::CIMOSType_CIMOS_Musix_64, SchemaDefs_OSTypeId_Musix_64 },
++ { ovf::CIMOSType_CIMOS_Trisquel, SchemaDefs_OSTypeId_Trisquel },
++ { ovf::CIMOSType_CIMOS_Trisquel_64, SchemaDefs_OSTypeId_Trisquel_64 },
++ { ovf::CIMOSType_CIMOS_Dynebolic, SchemaDefs_OSTypeId_Dynebolic },
++ { ovf::CIMOSType_CIMOS_Venenux, SchemaDefs_OSTypeId_Venenux },
++
++ // GNU/Linux free distros that we have support for but CIM doesn't
++ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_Parabola },
++ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_Parabola_64 },
++ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_Blag },
++ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_Blag_64 },
++ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_Ututo },
++ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_Ututo_64 },
+
+ };
+
+@@ -150,53 +89,34 @@
+ /* These are the 32-Bit ones. They are sorted by priority. */
+ static const osTypePattern g_osTypesPattern[] =
+ {
+- {"Windows NT", SchemaDefs_OSTypeId_WindowsNT4},
+- {"Windows XP", SchemaDefs_OSTypeId_WindowsXP},
+- {"Windows 2000", SchemaDefs_OSTypeId_Windows2000},
+- {"Windows 2003", SchemaDefs_OSTypeId_Windows2003},
+- {"Windows Vista", SchemaDefs_OSTypeId_WindowsVista},
+- {"Windows 2008", SchemaDefs_OSTypeId_Windows2008},
+- {"SUSE", SchemaDefs_OSTypeId_OpenSUSE},
+- {"Novell", SchemaDefs_OSTypeId_OpenSUSE},
+- {"Red Hat", SchemaDefs_OSTypeId_RedHat},
+- {"Mandriva", SchemaDefs_OSTypeId_Mandriva},
+- {"Ubuntu", SchemaDefs_OSTypeId_Ubuntu},
+- {"Debian", SchemaDefs_OSTypeId_Debian},
+- {"QNX", SchemaDefs_OSTypeId_QNX},
+- {"Linux 2.4", SchemaDefs_OSTypeId_Linux24},
+- {"Linux 2.6", SchemaDefs_OSTypeId_Linux26},
+- {"Linux", SchemaDefs_OSTypeId_Linux},
+- {"OpenSolaris", SchemaDefs_OSTypeId_OpenSolaris},
+- {"Solaris", SchemaDefs_OSTypeId_OpenSolaris},
+- {"FreeBSD", SchemaDefs_OSTypeId_FreeBSD},
+- {"NetBSD", SchemaDefs_OSTypeId_NetBSD},
+- {"Windows 95", SchemaDefs_OSTypeId_Windows95},
+- {"Windows 98", SchemaDefs_OSTypeId_Windows98},
+- {"Windows Me", SchemaDefs_OSTypeId_WindowsMe},
+- {"Windows 3.", SchemaDefs_OSTypeId_Windows31},
+- {"DOS", SchemaDefs_OSTypeId_DOS},
+- {"OS2", SchemaDefs_OSTypeId_OS2}
++
++ {"Parabola GNU/Linux-libre", SchemaDefs_OSTypeId_Parabola},
++ {"gNewSense", SchemaDefs_OSTypeId_gNewSense},
++ {"Blag Linux and GNU", SchemaDefs_OSTypeId_Blag},
++ {"Dragora", SchemaDefs_OSTypeId_Dragora},
++ {"Ututo XS", SchemaDefs_OSTypeId_Ututo},
++ {"Musix", SchemaDefs_OSTypeId_Musix},
++ {"Trisquel", SchemaDefs_OSTypeId_Trisquel},
++ {"Dyne:bolic", SchemaDefs_OSTypeId_Dynebolic},
++ {"Venenux", SchemaDefs_OSTypeId_Venenux},
++ {"GNU", SchemaDefs_OSTypeId_GNU},
++ {"GNU-Hurd", SchemaDefs_OSTypeId_GNUHurd},
++ {"GNU/Linux", SchemaDefs_OSTypeId_GNULinux},
++
+ };
+
+ /* These are the 64-Bit ones. They are sorted by priority. */
+ static const osTypePattern g_osTypesPattern64[] =
+ {
+- {"Windows XP", SchemaDefs_OSTypeId_WindowsXP_64},
+- {"Windows 2003", SchemaDefs_OSTypeId_Windows2003_64},
+- {"Windows Vista", SchemaDefs_OSTypeId_WindowsVista_64},
+- {"Windows 2008", SchemaDefs_OSTypeId_Windows2008_64},
+- {"SUSE", SchemaDefs_OSTypeId_OpenSUSE_64},
+- {"Novell", SchemaDefs_OSTypeId_OpenSUSE_64},
+- {"Red Hat", SchemaDefs_OSTypeId_RedHat_64},
+- {"Mandriva", SchemaDefs_OSTypeId_Mandriva_64},
+- {"Ubuntu", SchemaDefs_OSTypeId_Ubuntu_64},
+- {"Debian", SchemaDefs_OSTypeId_Debian_64},
+- {"Linux 2.4", SchemaDefs_OSTypeId_Linux24_64},
+- {"Linux 2.6", SchemaDefs_OSTypeId_Linux26_64},
+- {"Linux", SchemaDefs_OSTypeId_Linux26_64},
+- {"OpenSolaris", SchemaDefs_OSTypeId_OpenSolaris_64},
+- {"Solaris", SchemaDefs_OSTypeId_OpenSolaris_64},
+- {"FreeBSD", SchemaDefs_OSTypeId_FreeBSD_64},
++ {"Parabola GNU/Linux-libre", SchemaDefs_OSTypeId_Parabola_64},
++ {"gNewSense", SchemaDefs_OSTypeId_gNewSense_64},
++ {"Blag Linux and GNU", SchemaDefs_OSTypeId_Blag_64},
++ {"Dragora", SchemaDefs_OSTypeId_Dragora_64},
++ {"Ututo XS", SchemaDefs_OSTypeId_Ututo_64},
++ {"Musix", SchemaDefs_OSTypeId_Musix_64},
++ {"Trisquel", SchemaDefs_OSTypeId_Trisquel_64},
++ {"GNU", SchemaDefs_OSTypeId_GNU_64},
++ {"GNU/Linux", SchemaDefs_OSTypeId_GNULinux_64},
+ };
+
+ /**
+--- VirtualBox-4.1.18.orig/src/VBox/Main/include/ovfreader.h 2012-06-20 10:17:34.000000000 -0300
++++ VirtualBox-4.1.18/src/VBox/Main/include/ovfreader.h 2012-07-26 03:51:21.807619186 -0300
+@@ -34,119 +34,24 @@
+
+ enum CIMOSType_T
+ {
+- CIMOSType_CIMOS_Unknown = 0,
+- CIMOSType_CIMOS_Other = 1,
+- CIMOSType_CIMOS_MACOS = 2,
+- CIMOSType_CIMOS_ATTUNIX = 3,
+- CIMOSType_CIMOS_DGUX = 4,
+- CIMOSType_CIMOS_DECNT = 5,
+- CIMOSType_CIMOS_Tru64UNIX = 6,
+- CIMOSType_CIMOS_OpenVMS = 7,
+- CIMOSType_CIMOS_HPUX = 8,
+- CIMOSType_CIMOS_AIX = 9,
+- CIMOSType_CIMOS_MVS = 10,
+- CIMOSType_CIMOS_OS400 = 11,
+- CIMOSType_CIMOS_OS2 = 12,
+- CIMOSType_CIMOS_JavaVM = 13,
+- CIMOSType_CIMOS_MSDOS = 14,
+- CIMOSType_CIMOS_WIN3x = 15,
+- CIMOSType_CIMOS_WIN95 = 16,
+- CIMOSType_CIMOS_WIN98 = 17,
+- CIMOSType_CIMOS_WINNT = 18,
+- CIMOSType_CIMOS_WINCE = 19,
+- CIMOSType_CIMOS_NCR3000 = 20,
+- CIMOSType_CIMOS_NetWare = 21,
+- CIMOSType_CIMOS_OSF = 22,
+- CIMOSType_CIMOS_DCOS = 23,
+- CIMOSType_CIMOS_ReliantUNIX = 24,
+- CIMOSType_CIMOS_SCOUnixWare = 25,
+- CIMOSType_CIMOS_SCOOpenServer = 26,
+- CIMOSType_CIMOS_Sequent = 27,
+- CIMOSType_CIMOS_IRIX = 28,
+- CIMOSType_CIMOS_Solaris = 29,
+- CIMOSType_CIMOS_SunOS = 30,
+- CIMOSType_CIMOS_U6000 = 31,
+- CIMOSType_CIMOS_ASERIES = 32,
+- CIMOSType_CIMOS_HPNonStopOS = 33,
+- CIMOSType_CIMOS_HPNonStopOSS = 34,
+- CIMOSType_CIMOS_BS2000 = 35,
+- CIMOSType_CIMOS_LINUX = 36,
+- CIMOSType_CIMOS_Lynx = 37,
+- CIMOSType_CIMOS_XENIX = 38,
+- CIMOSType_CIMOS_VM = 39,
+- CIMOSType_CIMOS_InteractiveUNIX = 40,
+- CIMOSType_CIMOS_BSDUNIX = 41,
+- CIMOSType_CIMOS_FreeBSD = 42,
+- CIMOSType_CIMOS_NetBSD = 43,
+- CIMOSType_CIMOS_GNUHurd = 44,
+- CIMOSType_CIMOS_OS9 = 45,
+- CIMOSType_CIMOS_MACHKernel = 46,
+- CIMOSType_CIMOS_Inferno = 47,
+- CIMOSType_CIMOS_QNX = 48,
+- CIMOSType_CIMOS_EPOC = 49,
+- CIMOSType_CIMOS_IxWorks = 50,
+- CIMOSType_CIMOS_VxWorks = 51,
+- CIMOSType_CIMOS_MiNT = 52,
+- CIMOSType_CIMOS_BeOS = 53,
+- CIMOSType_CIMOS_HPMPE = 54,
+- CIMOSType_CIMOS_NextStep = 55,
+- CIMOSType_CIMOS_PalmPilot = 56,
+- CIMOSType_CIMOS_Rhapsody = 57,
+- CIMOSType_CIMOS_Windows2000 = 58,
+- CIMOSType_CIMOS_Dedicated = 59,
+- CIMOSType_CIMOS_OS390 = 60,
+- CIMOSType_CIMOS_VSE = 61,
+- CIMOSType_CIMOS_TPF = 62,
+- CIMOSType_CIMOS_WindowsMe = 63,
+- CIMOSType_CIMOS_CalderaOpenUNIX = 64,
+- CIMOSType_CIMOS_OpenBSD = 65,
+- CIMOSType_CIMOS_NotApplicable = 66,
+- CIMOSType_CIMOS_WindowsXP = 67,
+- CIMOSType_CIMOS_zOS = 68,
+- CIMOSType_CIMOS_MicrosoftWindowsServer2003 = 69,
+- CIMOSType_CIMOS_MicrosoftWindowsServer2003_64 = 70,
+- CIMOSType_CIMOS_WindowsXP_64 = 71,
+- CIMOSType_CIMOS_WindowsXPEmbedded = 72,
+- CIMOSType_CIMOS_WindowsVista = 73,
+- CIMOSType_CIMOS_WindowsVista_64 = 74,
+- CIMOSType_CIMOS_WindowsEmbeddedforPointofService = 75,
+- CIMOSType_CIMOS_MicrosoftWindowsServer2008 = 76,
+- CIMOSType_CIMOS_MicrosoftWindowsServer2008_64 = 77,
+- CIMOSType_CIMOS_FreeBSD_64 = 78,
+- CIMOSType_CIMOS_RedHatEnterpriseLinux = 79,
+- CIMOSType_CIMOS_RedHatEnterpriseLinux_64 = 80,
+- CIMOSType_CIMOS_Solaris_64 = 81,
+- CIMOSType_CIMOS_SUSE = 82,
+- CIMOSType_CIMOS_SUSE_64 = 83,
+- CIMOSType_CIMOS_SLES = 84,
+- CIMOSType_CIMOS_SLES_64 = 85,
+- CIMOSType_CIMOS_NovellOES = 86,
+- CIMOSType_CIMOS_NovellLinuxDesktop = 87,
+- CIMOSType_CIMOS_SunJavaDesktopSystem = 88,
+- CIMOSType_CIMOS_Mandriva = 89,
+- CIMOSType_CIMOS_Mandriva_64 = 90,
+- CIMOSType_CIMOS_TurboLinux = 91,
+- CIMOSType_CIMOS_TurboLinux_64 = 92,
+- CIMOSType_CIMOS_Ubuntu = 93,
+- CIMOSType_CIMOS_Ubuntu_64 = 94,
+- CIMOSType_CIMOS_Debian = 95,
+- CIMOSType_CIMOS_Debian_64 = 96,
+- CIMOSType_CIMOS_Linux_2_4_x = 97,
+- CIMOSType_CIMOS_Linux_2_4_x_64 = 98,
+- CIMOSType_CIMOS_Linux_2_6_x = 99,
+- CIMOSType_CIMOS_Linux_2_6_x_64 = 100,
+- CIMOSType_CIMOS_Linux_64 = 101,
+- CIMOSType_CIMOS_Other_64 = 102,
+- // types added with CIM 2.25.0 follow:
+- CIMOSType_CIMOS_WindowsServer2008R2 = 103,
+- CIMOSType_CIMOS_VMwareESXi = 104,
+- CIMOSType_CIMOS_Windows7 = 105,
+- CIMOSType_CIMOS_CentOS = 106,
+- CIMOSType_CIMOS_CentOS_64 = 107,
+- CIMOSType_CIMOS_OracleEnterpriseLinux = 108,
+- CIMOSType_CIMOS_OracleEnterpriseLinux_64 = 109,
+- CIMOSType_CIMOS_eComStation = 110
+- // no new types added with CIM 2.26.0
++ CIMOSType_CIMOS_Unknown = 0,
++ CIMOSType_CIMOS_Other = 1,
++ CIMOSType_CIMOS_Other_64 = 2,
++ CIMOSType_CIMOS_gNewSense = 3,
++ CIMOSType_CIMOS_gNewSense_64 = 4,
++ CIMOSType_CIMOS_Dragora = 5,
++ CIMOSType_CIMOS_Dragora_64 = 6,
++ CIMOSType_CIMOS_Musix = 7,
++ CIMOSType_CIMOS_Musix_64 = 8,
++ CIMOSType_CIMOS_Trisquel = 9,
++ CIMOSType_CIMOS_Trisquel_64 = 10,
++ CIMOSType_CIMOS_Dynebolic = 11,
++ CIMOSType_CIMOS_Venenux = 12,
++ CIMOSType_CIMOS_GNU = 13,
++ CIMOSType_CIMOS_GNU_64 = 14,
++ CIMOSType_CIMOS_GNUHurd = 15,
++ CIMOSType_CIMOS_GNULinux = 16,
++ CIMOSType_CIMOS_GNULinux_64 = 17
+ };
+
+
+--- VirtualBox-4.1.18.orig/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c 2012-06-20 10:09:01.000000000 -0300
++++ VirtualBox-4.1.18/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c 2012-07-26 15:32:55.309812685 -0300
+@@ -622,16 +622,16 @@
+ * Call the common device extension initializer.
+ */
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) && defined(RT_ARCH_X86)
+- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux26;
++ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux;
+ #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) && defined(RT_ARCH_AMD64)
+- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux26_x64;
++ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux_x64;
+ #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) && defined(RT_ARCH_X86)
+- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux24;
++ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux;
+ #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) && defined(RT_ARCH_AMD64)
+- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux24_x64;
++ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux_x64;
+ #else
+ # warning "huh? which arch + version is this?"
+- VBOXOSTYPE enmOsType = VBOXOSTYPE_Linux;
++ VBOXOSTYPE enmOsType = VBOXOSTYPE_GNULinux;
+ #endif
+ rc = VBoxGuestInitDevExt(&g_DevExt,
+ g_IOPortBase,
diff --git a/libre/virtualbox-libre-modules-lts/libre.patch b/libre/virtualbox-libre-modules-lts/libre.patch
new file mode 100644
index 000000000..e51d0c0a7
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/libre.patch
@@ -0,0 +1,5765 @@
+--- VirtualBox-4.1.18.orig/Config.kmk 2012-07-24 16:38:43.981310996 -0300
++++ VirtualBox-4.1.18/Config.kmk 2012-07-24 16:38:44.001309865 -0300
+@@ -56,9 +56,6 @@
+ PROPS_SYSMODS_ACCUMULATE_L += INTERMEDIATES
+ PROPS_MISCBINS_ACCUMULATE_L += INTERMEDIATES
+
+-# Misc names used bye the install paths below.
+-VBOX_PUEL_MANGLED_NAME := Oracle_VM_VirtualBox_Extension_Pack
+-
+ # Install paths
+ ## @todo This will change after 4.1 is branched off!
+ # What is now 'bin' and 'lib' will be moved down under 'staged/', except on
+@@ -125,9 +122,6 @@
+ endif
+
+ INST_DOC = doc/
+-INST_EXTPACK = $(INST_BIN)ExtensionPacks/
+-INST_EXTPACK_CERTS = $(INST_BIN)ExtPackCertificates/
+-INST_EXTPACK_PUEL = $(INST_EXTPACK)$(VBOX_PUEL_MANGLED_NAME)/
+ INST_PACKAGES = packages/
+
+ VBOX_PATH_SDK = $(patsubst %/,%,$(PATH_STAGE)/$(INST_SDK))
+@@ -136,7 +130,6 @@
+ VBOX_PATH_ADDITIONS = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS))
+ VBOX_PATH_ADDITIONS_ISO = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS_ISO))
+ VBOX_PATH_ADDITIONS_LIB = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS_LIB))
+-VBOX_PATH_EXTPACK_PUEL= $(patsubst %/,%,$(PATH_STAGE)/$(INST_EXTPACK_PUEL))
+ VBOX_PATH_PACKAGES = $(patsubst %/,%,$(PATH_STAGE)/$(INST_PACKAGES))
+
+
+@@ -208,7 +201,6 @@
+ export VBOX_ADDITIONS_SH_MODE = release
+ export VBOX_DOCUMENTATION_SH_MODE = release
+ export VBOX_EFI_SH_MODE = release
+- export VBOX_EXTPACKS_SH_MODE = release
+ endif
+
+ # Some info on the vendor
+@@ -361,8 +353,6 @@
+ VBOX_WITH_USB = 1
+ # Enable the USB 1.1 controller plus virtual USB HID devices.
+ VBOX_WITH_VUSB = 1
+-# Enable the USB 2.0 controller.
+-VBOX_WITH_EHCI = 1
+ # Enable the ISCSI feature.
+ VBOX_WITH_ISCSI = 1
+ # Enable INIP support in the ISCSI feature.
+@@ -430,9 +420,6 @@
+ ifdef VBOX_WITH_USB
+ VBOX_WITH_VUSB = 1
+ endif
+-ifdef VBOX_WITH_EHCI
+- VBOX_WITH_EHCI_IMPL = 1
+-endif
+ ifdef VBOX_WITH_PCI_PASSTHROUGH
+ VBOX_WITH_PCI_PASSTHROUGH_IMPL = 1
+ endif
+@@ -591,15 +578,6 @@
+ ## @}
+
+
+-## @name Extension pack
+-## @{
+-# Enables the extension pack feature.
+-VBOX_WITH_EXTPACK = 1
+-# Enables separating code into the Oracle VM VirtualBox Extension Pack, dubbed PUEL.
+-VBOX_WITH_EXTPACK_PUEL = 1
+-# Enables building+packing the Oracle VM VirtualBox Extension Pack, includes VBOX_WITH_EXTPACK_PUEL
+-VBOX_WITH_EXTPACK_PUEL_BUILD = 1
+-## @}
+
+ ## @name Misc
+ ## @{
+@@ -777,14 +755,6 @@
+ # Skip stuff.
+ #
+
+-ifdef VBOX_ONLY_EXTPACKS
+- # Clear some VBOX_WITH_XXX variables instead of adding ifdefs all over the place.
+- VBOX_WITH_DEBUGGER =
+- VBOX_WITH_ADDITIONS =
+- VBOX_WITH_VBOXDRV =
+- VBOX_WITH_TESTCASES =
+-endif
+-
+ # VBOX_QUICK can be used by core developers to speed to the build
+ ifdef VBOX_QUICK
+ # undefine variables by assigning blank.
+@@ -848,7 +818,6 @@
+ VBOX_WITH_TESTSUITE=
+ VBOX_WITH_QTGUI=
+ VBOX_WITH_USB=
+- VBOX_WITH_EHCI=
+ VBOX_WITH_DOCS=
+ VBOX_WITH_PDM_ASYNC_COMPLETION=
+ VBOX_WITH_KCHMVIEWER=
+@@ -870,7 +839,6 @@
+ VBOX_WITH_CROGL=
+ VBOX_WITH_DEBUGGER=
+ VBOX_WITH_DOCS=
+- VBOX_WITH_EHCI=
+ VBOX_WITH_HARDENING=
+ VBOX_WITH_HEADLESS=
+ VBOX_WITH_HGCM=
+@@ -952,9 +920,6 @@
+ #
+ ifdef VBOX_OSE
+ VBOX_WITH_VRDP=
+- VBOX_WITH_EHCI_IMPL=
+- VBOX_WITH_EXTPACK_PUEL=
+- VBOX_WITH_EXTPACK_PUEL_BUILD=
+ VBOX_WITH_PCI_PASSTHROUGH_IMPL=
+ VBOX_WITH_OS2_ADDITIONS_BIN=
+ VBOX_WITH_SECURELABEL=
+@@ -1082,10 +1047,6 @@
+ VBOX_WITH_KCHMVIEWER=
+ endif
+
+-ifdef VBOX_WITH_EXTPACK_PUEL_BUILD
+- VBOX_WITH_EXTPACK_PUEL = 1
+-endif
+-
+ #
+ # Mark OSE builds clearly, helps figuring out limitations more easily.
+ #
+@@ -1679,9 +1640,6 @@
+ # biossums (set BIOS checksums)
+ VBOX_BIOSSUMS ?= $(PATH_OBJ)/biossums/biossums$(HOSTSUFF_EXE)
+
+-# RTManifest (extension pack manifest utility)
+-VBOX_RTMANIFEST ?= $(PATH_OBJ)/bldRTManifest/bldRTManifest$(HOSTSUFF_EXE)
+-
+ # filesplitter (splits java files)
+ VBOX_FILESPLIT ?= $(PATH_OBJ)/filesplitter/filesplitter$(HOSTSUFF_EXE)
+
+@@ -2461,13 +2419,6 @@
+ SDK_VBOX_OPENSSL2_LIBS = $(NO_SUCH_VARIABLE)
+ endif
+
+-SDK_VBoxOpenSslExtPack = Internal use only.
+-SDK_VBoxOpenSslExtPack_INCS = $(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)
+-SDK_VBoxOpenSslExtPack_ORDERDEPS = $(crypto-headers_1_TARGET)
+-SDK_VBoxOpenSslExtPack_LIBS = \
+- $(PATH_STAGE_LIB)/VBoxExtPack-libssl$(VBOX_SUFF_LIB) \
+- $(PATH_STAGE_LIB)/VBoxExtPack-libcrypto$(VBOX_SUFF_LIB)
+-
+ SDK_VBOX_BLD_OPENSSL = .
+ SDK_VBOX_BLD_OPENSSL_EXTENDS = VBOX_OPENSSL
+ SDK_VBOX_BLD_OPENSSL_LIBS ?= \
+@@ -3817,100 +3768,6 @@
+ endif
+ TEMPLATE_VBOXMAINCLIENTDLL_LDFLAGS.darwin = $(filter-out -bind_at_load,$(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS.darwin))
+
+-
+-
+-#
+-# Templates used for building the extension packs.
+-#
+-ifdef VBOX_WITH_EXTPACK
+- # Base templates (native or portable).
+- TEMPLATE_VBoxR3ExtPack = For the ring-3 context extension pack modules.
+- if 1 # Native for now.
+- TEMPLATE_VBoxR3ExtPack_EXTENDS = VBOXR3DLLNOXCPT
+- TEMPLATE_VBoxR3ExtPack_DEFS = $(TEMPLATE_VBOXR3DLLNOXCPT_DEFS) VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R3
+- else
+- TEMPLATE_VBoxR3ExtPack_EXTENDS = VBOXNOCRTGCC
+- TEMPLATE_VBoxR3ExtPack_DEFS = $(TEMPLATE_VBOXNOCRTGCC_DEFS) VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R3 IPRT_NO_CRT IN_RING3
+- TEMPLATE_VBoxR3ExtPack_INCS = $(PATH_ROOT)/include/iprt/nocrt $(TEMPLATE_VBOXR3DLLNOXCPT_INCS)
+- endif
+- ifneq ($(KBUILD_TARGET),win)
+- TEMPLATE_VBoxR3ExtPack_CXXFLAGS = $(TEMPLATE_VBOXR3DLLNOXCPT_CXXFLAGS) -fno-rtti
+- endif
+- TEMPLATE_VBoxR3ExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
+- ifeq ($(KBUILD_TARGET),linux)
+- TEMPLATE_VBoxR3ExtPack_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)', $(TEMPLATE_VBOXR3DLLNOXCPT_LDFLAGS))
+- else
+- if !defined(VBOX_WITH_RUNPATH) && defined(VBOX_WITH_RELATIVE_RUNPATH)
+- TEMPLATE_VBoxR3ExtPack_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/../../..' $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)', $(TEMPLATE_VBOXR3DLLNOXCPT_LDFLAGS))
+- endif
+- endif
+- ifdef VBOX_ONLY_EXTPACKS_USE_IMPLIBS
+- if1of ($(KBUILD_TARGET), win os2)
+- TEMPLATE_VBoxR3ExtPack_LIBS = \
+- $(TEMPLATE_LIBS_VBOXR3) \
+- $(PATH_STAGE_LIB)/VMMR3Imp$(VBOX_SUFF_LIB) \
+- $(PATH_STAGE_LIB)/VBoxRTImp$(VBOX_SUFF_LIB)
+- else
+- TEMPLATE_VBoxR3ExtPack_LIBS = \
+- $(TEMPLATE_LIBS_VBOXR3) \
+- $(PATH_STAGE_LIB)/VMMR3Imp$(VBOX_SUFF_DLL) \
+- $(PATH_STAGE_LIB)/VBoxRTImp$(VBOX_SUFF_DLL)
+- endif
+- else
+- TEMPLATE_VBoxR3ExtPack_LIBS = \
+- $(TEMPLATE_LIBS_VBOXR3) \
+- $(LIB_RUNTIME) \
+- $(LIB_VMM)
+- endif
+-
+- TEMPLATE_VBoxR0ExtPack = For the ring-0 context extension pack modules.
+- TEMPLATE_VBoxR0ExtPack_EXTENDS = VBoxR0
+- TEMPLATE_VBoxR0ExtPack_EXTENDS_BY = appending
+- TEMPLATE_VBoxR0ExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
+- TEMPLATE_VBoxR0ExtPack_DEFS = VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R0
+- if1of ($(VBOX_LDR_FMT), pe lx)
+- TEMPLATE_VBoxR0ExtPack_LIBS = \
+- $(PATH_STAGE_LIB)/VMMR0Imp$(VBOX_SUFF_LIB) \
+- $(PATH_STAGE_LIB)/SUPR0$(VBOX_SUFF_LIB)
+- endif
+-
+- TEMPLATE_VBoxRcExtPack = For the raw-mode context extension pack modules.
+- TEMPLATE_VBoxRcExtPack_EXTENDS = VBoxRc
+- TEMPLATE_VBoxRcExtPack_EXTENDS_BY = appending
+- TEMPLATE_VBoxRcExtPack_SYSSUFF = .rc
+- TEMPLATE_VBoxRcExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
+- TEMPLATE_VBoxRcExtPack_DEFS = VBOX_IN_EXTPACK VBOX_IN_EXTPACK_RC
+- if1of ($(VBOX_LDR_FMT32), pe lx)
+- TEMPLATE_VBoxRcExtPack_LIBS = \
+- $(PATH_STAGE_LIB)/VMMRCBuiltin$(VBOX_SUFF_LIB) \
+- $(PATH_STAGE_LIB)/VMMRCImp$(VBOX_SUFF_LIB)
+- endif
+-
+- TEMPLATE_VBoxInsExtPack = For the install targets of an extension pack.
+- TEMPLATE_VBoxInsExtPack_MODE = 0644
+- TEMPLATE_VBoxInsExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
+-
+- # For each individual extension pack
+- ifdef VBOX_WITH_EXTPACK_PUEL
+- TEMPLATE_VBoxR3ExtPackPuel = For the ring-3 context modules in the PUEL extension pack.
+- TEMPLATE_VBoxR3ExtPackPuel_EXTENDS = VBoxR3ExtPack
+- TEMPLATE_VBoxR3ExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/
+-
+- TEMPLATE_VBoxR0ExtPackPuel = For the ring-0 context modules in the PUEL extension pack.
+- TEMPLATE_VBoxR0ExtPackPuel_EXTENDS = VBoxR0ExtPack
+- TEMPLATE_VBoxR0ExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/
+-
+- TEMPLATE_VBoxRcExtPackPuel = For the raw-mode context modules in the PUEL extension pack.
+- TEMPLATE_VBoxRcExtPackPuel_EXTENDS = VBoxRcExtPack
+- TEMPLATE_VBoxRcExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/
+-
+- TEMPLATE_VBoxInsExtPackPuel = For the install targets of an extension pack.
+- TEMPLATE_VBoxInsExtPackPuel_EXTENDS = VBoxR0ExtPack
+- TEMPLATE_VBoxInsExtPackPuel_INST = $(INST_EXTPACK_PUEL)
+-endif
+-endif # VBOX_WITH_EXTPACK
+-
+-
+ #
+ # Qt 4
+ # Qt 4
+--- VirtualBox-4.1.18.orig/Makefile.kmk 2012-07-24 17:16:47.078929150 -0300
++++ VirtualBox-4.1.18/Makefile.kmk 2012-07-24 17:16:47.125592981 -0300
+@@ -446,7 +446,6 @@
+ include/VBox \
+ include/VBox/vmm \
+ include/VBox/com \
+- include/VBox/ExtPack \
+ include/VBox/HostServices \
+ include/VBox/GuestHost \
+ include/VBox/HGSMI \
+@@ -862,191 +861,6 @@
+ additions-build-linux.x86.combined \
+ additions-packing
+
+-
+-#
+-# Build the extension packs, all of them.
+-#
+-# This is tailored (hardcoded) for the extension pack build box.
+-#
+-# The fetching must be done in serial fashion, while the building should be
+-# more flexible wrt to -jN.
+-#
+-extpacks-fetch:
+- + $(KMK) -C tools fetch VBOX_ONLY_EXTPACKS=1
+- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=darwin BUILD_TARGET_ARCH=amd64 BUILD_TARGET=darwin VBOX_ONLY_EXTPACKS=1
+- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=darwin BUILD_TARGET_ARCH=x86 BUILD_TARGET=darwin VBOX_ONLY_EXTPACKS=1
+-# + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=freebsd BUILD_TARGET_ARCH=amd64 BUILD_TARGET=freebsd VBOX_ONLY_EXTPACKS=1
+-# + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=freebsd BUILD_TARGET_ARCH=x86 BUILD_TARGET=freebsd VBOX_ONLY_EXTPACKS=1
+- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=linux BUILD_TARGET_ARCH=amd64 BUILD_TARGET=linux VBOX_ONLY_EXTPACKS=1
+- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=linux BUILD_TARGET_ARCH=x86 BUILD_TARGET=linux VBOX_ONLY_EXTPACKS=1
+-# + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=os2 BUILD_TARGET_ARCH=x86 BUILD_TARGET=os2 VBOX_ONLY_EXTPACKS=1
+- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=solaris BUILD_TARGET_ARCH=amd64 BUILD_TARGET=solaris VBOX_ONLY_EXTPACKS=1
+- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=solaris BUILD_TARGET_ARCH=x86 BUILD_TARGET=solaris VBOX_ONLY_EXTPACKS=1
+- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=win BUILD_TARGET_ARCH=amd64 BUILD_TARGET=win VBOX_ONLY_EXTPACKS=1
+- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=win BUILD_TARGET_ARCH=x86 BUILD_TARGET=win VBOX_ONLY_EXTPACKS=1
+-
+-
+-extpacks-build: \
+- extpacks-build-win.amd64 \
+- extpacks-build-win.x86 \
+- extpacks-build-solaris.amd64 \
+- extpacks-build-solaris.x86 \
+- extpacks-build-os2.x86 \
+- extpacks-build-linux.amd64 \
+- extpacks-build-linux.x86 \
+- extpacks-build-darwin.amd64 \
+- extpacks-build-darwin.x86 \
+- extpacks-build-freebsd.amd64 \
+- extpacks-build-freebsd.x86
+-
+-VBOX_EXTPACKS_BUILD.amd64 = VBOX_ONLY_EXTPACKS=1 \
+- KBUILD_TYPE=$(KBUILD_TYPE) BUILD_TYPE=$(KBUILD_TYPE) \
+- KBUILD_TARGET_ARCH=amd64 BUILD_TARGET_ARCH=amd64 \
+- VBOX_SVN_REV=$(VBOX_SVN_REV)
+-
+-VBOX_EXTPACKS_BUILD.x86 = VBOX_ONLY_EXTPACKS=1 \
+- KBUILD_TYPE=$(KBUILD_TYPE) BUILD_TYPE=$(KBUILD_TYPE) \
+- KBUILD_TARGET_ARCH=x86 BUILD_TARGET_ARCH=x86 \
+- VBOX_SVN_REV=$(VBOX_SVN_REV)
+-
+-# Automatically determine the extpack build subdir name. Used for figuring out
+-# directory names inside the extension pack building VMs.
+-VBOX_EXTPACKS_BUILD_SUBDIRNAME := $(lastword $(subst /, ,$(PATH_ROOT)))
+-
+-# When building in parallel on a Windows host, make sure we finish the host
+-# bit before kicking off any UNIX guest or we'll run into file sharing issues.
+-ifeq ($(KBUILD_TARGET),win)
+-VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST = extpacks-build-win.x86 extpacks-build-win.amd64
+-else
+-VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST =
+-endif
+-
+-extpacks-build-win.amd64:
+-ifeq ($(KBUILD_TARGET),win)
+- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-else
+- $(call MSG_L1,Building Windows/amd64 extension packs)
+- $(VBOX_KMK_TIME) ssh vbox@192.168.27.6 " echo $@ && cd e:/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh kmk $(VBOX_EXTPACKS_BUILD.amd64) all"
+-endif
+-
+-extpacks-build-win.x86:
+-ifeq ($(KBUILD_TARGET),win)
+- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-else
+- $(call MSG_L1,Building Windows/x86 extension packs)
+- $(VBOX_KMK_TIME) ssh vbox@192.168.27.16 " echo $@ && cd e:/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh kmk $(VBOX_EXTPACKS_BUILD.x86) all"
+-endif
+-
+-ifeq ($(KBUILD_TARGET),solaris)
+-extpacks-build-solaris.amd64:
+- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-
+-extpacks-build-solaris.x86: extpacks-build-solaris.amd64
+- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) VBOX_WITH_COMBINED_SOLARIS_GUEST_PACKAGE=1 all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-
+-else
+-# Serialize 32-bit and 64-bit ASSUMING the same VM builds both.
+-extpacks-build-solaris.rsync-into-vm: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
+- $(VBOX_KMK_TIME) $(call VBOX_RSYNC_IN_FN,solaris,*) . 192.168.27.4:/mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)
+-
+-extpacks-build-solaris.build-it: extpacks-build-solaris.rsync-into-vm
+- $(call MSG_L1,Building Solaris/amd64 extension packs)
+- $(VBOX_KMK_TIME) ssh vbox@192.168.27.4 " echo $@/amd64 && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all"
+- $(call MSG_L1,Building Solaris/x86 extension packs)
+- $(VBOX_KMK_TIME) ssh vbox@192.168.27.4 " echo $@/x86 && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all"
+-
+-extpacks-build-solaris.rsync-out-of-vm: extpacks-build-solaris.build-it
+- $(VBOX_KMK_TIME) rsync -a --delete 192.168.27.4:/mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/solaris.x86 out/
+- $(VBOX_KMK_TIME) rsync -a --delete 192.168.27.4:/mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/solaris.amd64 out/
+-
+-.NOTPARALLEL: extpacks-build-solaris.rsync-out-of-vm extpacks-build-solaris.rsync-into-vm
+-.PHONY: extpacks-build-solaris.rsync-out-of-vm extpacks-build-solaris.rsync-into-vm extpacks-build-solaris.build-it
+-
+-extpacks-build-solaris.amd64: extpacks-build-solaris.rsync-out-of-vm
+-extpacks-build-solaris.x86: extpacks-build-solaris.rsync-out-of-vm
+-endif
+-
+-extpacks-build-os2.x86:
+-#ifeq ($(KBUILD_TARGET),os2)
+-# + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-#else
+-# $(VBOX_KMK_TIME) ssh vbox@192.168.27.3 " cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) "
+-#endif
+-
+-extpacks-build-linux.amd64: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
+-ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),linux.amd64)
+- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-else
+- $(call MSG_L1,Building Linux/amd64 extension packs)
+- $(VBOX_KMK_TIME) ssh vbox@192.168.27.12 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all"
+-endif
+-
+-extpacks-build-linux.x86: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
+-ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),linux.x86)
+- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-else
+- $(call MSG_L1,Building Linux/x86 extension packs)
+- $(VBOX_KMK_TIME) ssh vbox@192.168.27.11 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all"
+-endif
+-
+-extpacks-build-freebsd.amd64: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
+-#ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),freebsd.amd64)
+-# + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-#else
+-# $(call MSG_L1,Building FreeBSD/amd64 extension packs)
+-# $(VBOX_KMK_TIME) ssh vbox@192.168.27.17 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all"
+-#endif
+-
+-extpacks-build-freebsd.x86: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
+-#ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),freebsd.x86)
+-# + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-#else
+-# $(call MSG_L1,Building FreeBSD/x86 extension packs)
+-# $(VBOX_KMK_TIME) ssh vbox@192.168.27.7 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all"
+-#endif
+-
+-extpacks-build-darwin.amd64: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
+-ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),darwin.amd64)
+- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-else
+- $(call MSG_L1,Building Darwin/amd64 extension packs)
+- $(VBOX_KMK_TIME) $(call VBOX_RSYNC_IN_FN,darwin,amd64) . 192.168.27.15:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)
+- $(VBOX_KMK_TIME) ssh vbox@192.168.27.15 " echo $@ && cd /Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all"
+- $(VBOX_KMK_TIME) rsync -am -v --delete 192.168.27.15:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/darwin.amd64 out/
+-endif
+-
+-extpacks-build-darwin.x86: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
+-ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),darwin.x86)
+- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-else
+- $(call MSG_L1,Building Darwin/x86 extension packs)
+- $(VBOX_KMK_TIME) $(call VBOX_RSYNC_IN_FN,darwin,x86) . 192.168.27.5:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)
+- $(VBOX_KMK_TIME) ssh vbox@192.168.27.5 " echo $@ && cd /Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all"
+- $(VBOX_KMK_TIME) rsync -am -v --delete 192.168.27.5:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/darwin.x86 out/
+-endif
+-
+-
+-extpacks-packing:
+- + $(KMK) VBOX_ONLY_EXTPACKS=1 \
+- VBOX_WITH_EXTPACK_OS_ARCHS="darwin.amd64 darwin.x86 linux.amd64 linux.x86 solaris.amd64 solaris.x86 win.amd64 win.x86" \
+- packing
+-# +++ freebsd.amd64 freebsd.x86 os2.x86 ^^^
+-
+-.PHONY: \
+- extpacks-build-win.x86 \
+- extpacks-build-win.amd64 \
+- extpacks-build-solaris.amd64 \
+- extpacks-build-solaris.x86 \
+- extpacks-build-os2.x86 \
+- extpacks-build-linux.amd64 \
+- extpacks-build-linux.x86 \
+- extpacks-build-freebsd.amd64 \
+- extpacks-build-freebsd.x86 \
+- extpacks-build-darwin.amd64 \
+- extpacks-build-darwin.x86 \
+- extpacks-packing
+-
+-
+ #
+ # Build the test suite, all of it.
+ #
+--- VirtualBox-4.1.18.orig/src/VBox/Devices/build/VBoxDD.cpp 2012-06-20 10:15:51.000000000 -0300
++++ VirtualBox-4.1.18/src/VBox/Devices/build/VBoxDD.cpp 2012-07-24 16:18:03.964493454 -0300
+@@ -132,11 +132,6 @@
+ if (RT_FAILURE(rc))
+ return rc;
+ #endif
+-#ifdef VBOX_WITH_EHCI_IMPL
+- rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceEHCI);
+- if (RT_FAILURE(rc))
+- return rc;
+-#endif
+ #ifdef VBOX_ACPI
+ rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceACPI);
+ if (RT_FAILURE(rc))
+--- VirtualBox-4.1.18.orig/src/VBox/Devices/build/VBoxDD.h 2012-06-20 10:15:51.000000000 -0300
++++ VirtualBox-4.1.18/src/VBox/Devices/build/VBoxDD.h 2012-07-24 16:20:35.939205389 -0300
+@@ -62,7 +62,6 @@
+ extern const PDMDEVREG g_DeviceICH6_HDA;
+ extern const PDMDEVREG g_DeviceAudioSniffer;
+ extern const PDMDEVREG g_DeviceOHCI;
+-extern const PDMDEVREG g_DeviceEHCI;
+ extern const PDMDEVREG g_DeviceACPI;
+ extern const PDMDEVREG g_DeviceDMA;
+ extern const PDMDEVREG g_DeviceFloppyController;
+--- VirtualBox-4.1.18.orig/src/VBox/Main/include/ExtPackManagerImpl.h 2012-06-20 10:17:33.000000000 -0300
++++ /dev/null 2012-07-24 14:48:18.638572110 -0300
+@@ -1,245 +0,0 @@
+-/* $Id: ExtPackManagerImpl.h $ */
+-/** @file
+- * VirtualBox Main - interface for Extension Packs, VBoxSVC & VBoxC.
+- */
+-
+-/*
+- * Copyright (C) 2010 Oracle Corporation
+- *
+- * This file is part of VirtualBox Open Source Edition (OSE), as
+- * available from http://www.virtualbox.org. This file is free software;
+- * you can redistribute it and/or modify it under the terms of the GNU
+- * General Public License (GPL) as published by the Free Software
+- * Foundation, in version 2 as it comes in the "COPYING" file of the
+- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+- */
+-
+-#ifndef ____H_EXTPACKMANAGERIMPL
+-#define ____H_EXTPACKMANAGERIMPL
+-
+-#include "VirtualBoxBase.h"
+-#include <VBox/ExtPack/ExtPack.h>
+-#include <iprt/fs.h>
+-
+-/**
+- * An extension pack file.
+- */
+-class ATL_NO_VTABLE ExtPackFile :
+- public VirtualBoxBase,
+- VBOX_SCRIPTABLE_IMPL(IExtPackFile)
+-{
+-public:
+- /** @name COM and internal init/term/mapping cruft.
+- * @{ */
+- VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(ExtPackFile, IExtPackFile)
+- DECLARE_NOT_AGGREGATABLE(ExtPackFile)
+- DECLARE_PROTECT_FINAL_CONSTRUCT()
+- BEGIN_COM_MAP(ExtPackFile)
+- VBOX_DEFAULT_INTERFACE_ENTRIES(IExtPackFile)
+- COM_INTERFACE_ENTRY(IExtPackBase)
+- END_COM_MAP()
+- DECLARE_EMPTY_CTOR_DTOR(ExtPackFile)
+-
+- HRESULT FinalConstruct();
+- void FinalRelease();
+- HRESULT initWithFile(const char *a_pszFile, const char *a_pszDigest, class ExtPackManager *a_pExtPackMgr, VirtualBox *a_pVirtualBox);
+- void uninit();
+- RTMEMEF_NEW_AND_DELETE_OPERATORS();
+- /** @} */
+-
+- /** @name IExtPackBase interfaces
+- * @{ */
+- STDMETHOD(COMGETTER(Name))(BSTR *a_pbstrName);
+- STDMETHOD(COMGETTER(Description))(BSTR *a_pbstrDescription);
+- STDMETHOD(COMGETTER(Version))(BSTR *a_pbstrVersion);
+- STDMETHOD(COMGETTER(Revision))(ULONG *a_puRevision);
+- STDMETHOD(COMGETTER(VRDEModule))(BSTR *a_pbstrVrdeModule);
+- STDMETHOD(COMGETTER(PlugIns))(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns));
+- STDMETHOD(COMGETTER(Usable))(BOOL *a_pfUsable);
+- STDMETHOD(COMGETTER(WhyUnusable))(BSTR *a_pbstrWhy);
+- STDMETHOD(COMGETTER(ShowLicense))(BOOL *a_pfShowIt);
+- STDMETHOD(COMGETTER(License))(BSTR *a_pbstrHtmlLicense);
+- STDMETHOD(QueryLicense)(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage,
+- IN_BSTR a_bstrFormat, BSTR *a_pbstrLicense);
+- /** @} */
+-
+- /** @name IExtPackFile interfaces
+- * @{ */
+- STDMETHOD(COMGETTER(FilePath))(BSTR *a_pbstrPath);
+- STDMETHOD(Install)(BOOL a_fReplace, IN_BSTR a_bstrDisplayInfo, IProgress **a_ppProgress);
+- /** @} */
+-
+-private:
+- /** @name Misc init helpers
+- * @{ */
+- HRESULT initFailed(const char *a_pszWhyFmt, ...);
+- /** @} */
+-
+-private:
+- struct Data;
+- /** Pointer to the private instance. */
+- Data *m;
+-
+- friend class ExtPackManager;
+-};
+-
+-
+-/**
+- * An installed extension pack.
+- */
+-class ATL_NO_VTABLE ExtPack :
+- public VirtualBoxBase,
+- VBOX_SCRIPTABLE_IMPL(IExtPack)
+-{
+-public:
+- /** @name COM and internal init/term/mapping cruft.
+- * @{ */
+- VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(ExtPack, IExtPack)
+- DECLARE_NOT_AGGREGATABLE(ExtPack)
+- DECLARE_PROTECT_FINAL_CONSTRUCT()
+- BEGIN_COM_MAP(ExtPack)
+- VBOX_DEFAULT_INTERFACE_ENTRIES(IExtPack)
+- COM_INTERFACE_ENTRY(IExtPackBase)
+- END_COM_MAP()
+- DECLARE_EMPTY_CTOR_DTOR(ExtPack)
+-
+- HRESULT FinalConstruct();
+- void FinalRelease();
+- HRESULT initWithDir(VBOXEXTPACKCTX a_enmContext, const char *a_pszName, const char *a_pszDir);
+- void uninit();
+- RTMEMEF_NEW_AND_DELETE_OPERATORS();
+- /** @} */
+-
+- /** @name IExtPackBase interfaces
+- * @{ */
+- STDMETHOD(COMGETTER(Name))(BSTR *a_pbstrName);
+- STDMETHOD(COMGETTER(Description))(BSTR *a_pbstrDescription);
+- STDMETHOD(COMGETTER(Version))(BSTR *a_pbstrVersion);
+- STDMETHOD(COMGETTER(Revision))(ULONG *a_puRevision);
+- STDMETHOD(COMGETTER(VRDEModule))(BSTR *a_pbstrVrdeModule);
+- STDMETHOD(COMGETTER(PlugIns))(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns));
+- STDMETHOD(COMGETTER(Usable))(BOOL *a_pfUsable);
+- STDMETHOD(COMGETTER(WhyUnusable))(BSTR *a_pbstrWhy);
+- STDMETHOD(COMGETTER(ShowLicense))(BOOL *a_pfShowIt);
+- STDMETHOD(COMGETTER(License))(BSTR *a_pbstrHtmlLicense);
+- STDMETHOD(QueryLicense)(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage,
+- IN_BSTR a_bstrFormat, BSTR *a_pbstrLicense);
+- /** @} */
+-
+- /** @name IExtPack interfaces
+- * @{ */
+- STDMETHOD(QueryObject)(IN_BSTR a_bstrObjectId, IUnknown **a_ppUnknown);
+- /** @} */
+-
+- /** @name Internal interfaces used by ExtPackManager.
+- * @{ */
+- bool callInstalledHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock, PRTERRINFO pErrInfo);
+- HRESULT callUninstallHookAndClose(IVirtualBox *a_pVirtualBox, bool a_fForcedRemoval);
+- bool callVirtualBoxReadyHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock);
+- bool callConsoleReadyHook(IConsole *a_pConsole, AutoWriteLock *a_pLock);
+- bool callVmCreatedHook(IVirtualBox *a_pVirtualBox, IMachine *a_pMachine, AutoWriteLock *a_pLock);
+- bool callVmConfigureVmmHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc);
+- bool callVmPowerOnHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc);
+- bool callVmPowerOffHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock);
+- HRESULT checkVrde(void);
+- HRESULT getVrdpLibraryName(Utf8Str *a_pstrVrdeLibrary);
+- bool wantsToBeDefaultVrde(void) const;
+- HRESULT refresh(bool *pfCanDelete);
+- /** @} */
+-
+-protected:
+- /** @name Internal helper methods.
+- * @{ */
+- void probeAndLoad(void);
+- bool findModule(const char *a_pszName, const char *a_pszExt, VBOXEXTPACKMODKIND a_enmKind,
+- Utf8Str *a_ppStrFound, bool *a_pfNative, PRTFSOBJINFO a_pObjInfo) const;
+- static bool objinfoIsEqual(PCRTFSOBJINFO pObjInfo1, PCRTFSOBJINFO pObjInfo2);
+- /** @} */
+-
+- /** @name Extension Pack Helpers
+- * @{ */
+- static DECLCALLBACK(int) hlpFindModule(PCVBOXEXTPACKHLP pHlp, const char *pszName, const char *pszExt,
+- VBOXEXTPACKMODKIND enmKind, char *pszFound, size_t cbFound, bool *pfNative);
+- static DECLCALLBACK(int) hlpGetFilePath(PCVBOXEXTPACKHLP pHlp, const char *pszFilename, char *pszPath, size_t cbPath);
+- static DECLCALLBACK(VBOXEXTPACKCTX) hlpGetContext(PCVBOXEXTPACKHLP pHlp);
+- static DECLCALLBACK(int) hlpReservedN(PCVBOXEXTPACKHLP pHlp);
+- /** @} */
+-
+-private:
+- struct Data;
+- /** Pointer to the private instance. */
+- Data *m;
+-
+- friend class ExtPackManager;
+-};
+-
+-
+-/**
+- * Extension pack manager.
+- */
+-class ATL_NO_VTABLE ExtPackManager :
+- public VirtualBoxBase,
+- VBOX_SCRIPTABLE_IMPL(IExtPackManager)
+-{
+- /** @name COM and internal init/term/mapping cruft.
+- * @{ */
+- VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(ExtPackManager, IExtPackManager)
+- DECLARE_NOT_AGGREGATABLE(ExtPackManager)
+- DECLARE_PROTECT_FINAL_CONSTRUCT()
+- BEGIN_COM_MAP(ExtPackManager)
+- VBOX_DEFAULT_INTERFACE_ENTRIES(IExtPackManager)
+- END_COM_MAP()
+- DECLARE_EMPTY_CTOR_DTOR(ExtPackManager)
+-
+- HRESULT FinalConstruct();
+- void FinalRelease();
+- HRESULT initExtPackManager(VirtualBox *a_pVirtualBox, VBOXEXTPACKCTX a_enmContext);
+- void uninit();
+- RTMEMEF_NEW_AND_DELETE_OPERATORS();
+- /** @} */
+-
+- /** @name IExtPack interfaces
+- * @{ */
+- STDMETHOD(COMGETTER(InstalledExtPacks))(ComSafeArrayOut(IExtPack *, a_paExtPacks));
+- STDMETHOD(Find)(IN_BSTR a_bstrName, IExtPack **a_pExtPack);
+- STDMETHOD(OpenExtPackFile)(IN_BSTR a_bstrTarball, IExtPackFile **a_ppExtPackFile);
+- STDMETHOD(Uninstall)(IN_BSTR a_bstrName, BOOL a_fForcedRemoval, IN_BSTR a_bstrDisplayInfo, IProgress **a_ppProgress);
+- STDMETHOD(Cleanup)(void);
+- STDMETHOD(QueryAllPlugInsForFrontend)(IN_BSTR a_bstrFrontend, ComSafeArrayOut(BSTR, a_pabstrPlugInModules));
+- STDMETHOD(IsExtPackUsable(IN_BSTR a_bstrExtPack, BOOL *aUsable));
+- /** @} */
+-
+- /** @name Internal interfaces used by other Main classes.
+- * @{ */
+- static DECLCALLBACK(int) doInstallThreadProc(RTTHREAD hThread, void *pvJob);
+- HRESULT doInstall(ExtPackFile *a_pExtPackFile, bool a_fReplace, Utf8Str const *a_pstrDisplayInfo);
+- static DECLCALLBACK(int) doUninstallThreadProc(RTTHREAD hThread, void *pvJob);
+- HRESULT doUninstall(const Utf8Str *a_pstrName, bool a_fForcedRemoval, const Utf8Str *a_pstrDisplayInfo);
+- void callAllVirtualBoxReadyHooks(void);
+- void callAllConsoleReadyHooks(IConsole *a_pConsole);
+- void callAllVmCreatedHooks(IMachine *a_pMachine);
+- int callAllVmConfigureVmmHooks(IConsole *a_pConsole, PVM a_pVM);
+- int callAllVmPowerOnHooks(IConsole *a_pConsole, PVM a_pVM);
+- void callAllVmPowerOffHooks(IConsole *a_pConsole, PVM a_pVM);
+- HRESULT checkVrdeExtPack(Utf8Str const *a_pstrExtPack);
+- int getVrdeLibraryPathForExtPack(Utf8Str const *a_pstrExtPack, Utf8Str *a_pstrVrdeLibrary);
+- HRESULT getDefaultVrdeExtPack(Utf8Str *a_pstrExtPack);
+- bool isExtPackUsable(const char *a_pszExtPack);
+- void dumpAllToReleaseLog(void);
+- /** @} */
+-
+-private:
+- HRESULT runSetUidToRootHelper(Utf8Str const *a_pstrDisplayInfo, const char *a_pszCommand, ...);
+- ExtPack *findExtPack(const char *a_pszName);
+- void removeExtPack(const char *a_pszName);
+- HRESULT refreshExtPack(const char *a_pszName, bool a_fUnsuableIsError, ExtPack **a_ppExtPack);
+-
+-private:
+- struct Data;
+- /** Pointer to the private instance. */
+- Data *m;
+-};
+-
+-#endif
+-/* vi: set tabstop=4 shiftwidth=4 expandtab: */
+--- VirtualBox-4.1.18.orig/src/VBox/Main/include/ExtPackUtil.h 2012-06-20 10:17:33.000000000 -0300
++++ /dev/null 2012-07-24 14:48:18.638572110 -0300
+@@ -1,137 +0,0 @@
+-/* $Id: ExtPackUtil.h $ */
+-/** @file
+- * VirtualBox Main - Extension Pack Utilities and definitions, VBoxC, VBoxSVC, ++.
+- */
+-
+-/*
+- * Copyright (C) 2010 Oracle Corporation
+- *
+- * This file is part of VirtualBox Open Source Edition (OSE), as
+- * available from http://www.virtualbox.org. This file is free software;
+- * you can redistribute it and/or modify it under the terms of the GNU
+- * General Public License (GPL) as published by the Free Software
+- * Foundation, in version 2 as it comes in the "COPYING" file of the
+- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+- */
+-
+-#ifndef ____H_EXTPACKUTIL
+-#define ____H_EXTPACKUTIL
+-
+-#include <iprt/cpp/ministring.h>
+-#include <iprt/fs.h>
+-#include <iprt/vfs.h>
+-
+-
+-/** @name VBOX_EXTPACK_DESCRIPTION_NAME
+- * The name of the description file in an extension pack. */
+-#define VBOX_EXTPACK_DESCRIPTION_NAME "ExtPack.xml"
+-/** @name VBOX_EXTPACK_DESCRIPTION_NAME
+- * The name of the manifest file in an extension pack. */
+-#define VBOX_EXTPACK_MANIFEST_NAME "ExtPack.manifest"
+-/** @name VBOX_EXTPACK_SIGNATURE_NAME
+- * The name of the signature file in an extension pack. */
+-#define VBOX_EXTPACK_SIGNATURE_NAME "ExtPack.signature"
+-/** @name VBOX_EXTPACK_LICENSE_NAME_PREFIX
+- * The name prefix of a license file in an extension pack. There can be
+- * several license files in a pack, the variations being on locale, language
+- * and format (HTML, RTF, plain text). All extension packages shall include
+- * a */
+-#define VBOX_EXTPACK_LICENSE_NAME_PREFIX "ExtPack-license"
+-/** @name VBOX_EXTPACK_SUFFIX
+- * The suffix of a extension pack tarball. */
+-#define VBOX_EXTPACK_SUFFIX ".vbox-extpack"
+-
+-/** The minimum length (strlen) of a extension pack name. */
+-#define VBOX_EXTPACK_NAME_MIN_LEN 3
+-/** The max length (strlen) of a extension pack name. */
+-#define VBOX_EXTPACK_NAME_MAX_LEN 64
+-
+-/** The architecture-dependent application data subdirectory where the
+- * extension packs are installed. Relative to RTPathAppPrivateArch. */
+-#define VBOX_EXTPACK_INSTALL_DIR "ExtensionPacks"
+-/** The architecture-independent application data subdirectory where the
+- * certificates are installed. Relative to RTPathAppPrivateNoArch. */
+-#define VBOX_EXTPACK_CERT_DIR "ExtPackCertificates"
+-
+-/** The maximum entry name length.
+- * Play short and safe. */
+-#define VBOX_EXTPACK_MAX_MEMBER_NAME_LENGTH 128
+-
+-
+-/**
+- * Plug-in descriptor.
+- */
+-typedef struct VBOXEXTPACKPLUGINDESC
+-{
+- /** The name. */
+- RTCString strName;
+- /** The module name. */
+- RTCString strModule;
+- /** The description. */
+- RTCString strDescription;
+- /** The frontend or component which it plugs into. */
+- RTCString strFrontend;
+-} VBOXEXTPACKPLUGINDESC;
+-/** Pointer to a plug-in descriptor. */
+-typedef VBOXEXTPACKPLUGINDESC *PVBOXEXTPACKPLUGINDESC;
+-
+-/**
+- * Extension pack descriptor
+- *
+- * This is the internal representation of the ExtPack.xml.
+- */
+-typedef struct VBOXEXTPACKDESC
+-{
+- /** The name. */
+- RTCString strName;
+- /** The description. */
+- RTCString strDescription;
+- /** The version string. */
+- RTCString strVersion;
+- /** The edition string. */
+- RTCString strEdition;
+- /** The internal revision number. */
+- uint32_t uRevision;
+- /** The name of the main module. */
+- RTCString strMainModule;
+- /** The name of the VRDE module, empty if none. */
+- RTCString strVrdeModule;
+- /** The number of plug-in descriptors. */
+- uint32_t cPlugIns;
+- /** Pointer to an array of plug-in descriptors. */
+- PVBOXEXTPACKPLUGINDESC paPlugIns;
+- /** Whether to show the license prior to installation. */
+- bool fShowLicense;
+-} VBOXEXTPACKDESC;
+-
+-/** Pointer to a extension pack descriptor. */
+-typedef VBOXEXTPACKDESC *PVBOXEXTPACKDESC;
+-/** Pointer to a const extension pack descriptor. */
+-typedef VBOXEXTPACKDESC const *PCVBOXEXTPACKDESC;
+-
+-
+-void VBoxExtPackInitDesc(PVBOXEXTPACKDESC a_pExtPackDesc);
+-RTCString *VBoxExtPackLoadDesc(const char *a_pszDir, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo);
+-RTCString *VBoxExtPackLoadDescFromVfsFile(RTVFSFILE hVfsFile, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo);
+-RTCString *VBoxExtPackExtractNameFromTarballPath(const char *pszTarball);
+-void VBoxExtPackFreeDesc(PVBOXEXTPACKDESC a_pExtPackDesc);
+-bool VBoxExtPackIsValidName(const char *pszName);
+-bool VBoxExtPackIsValidMangledName(const char *pszMangledName, size_t cchMax = RTSTR_MAX);
+-RTCString *VBoxExtPackMangleName(const char *pszName);
+-RTCString *VBoxExtPackUnmangleName(const char *pszMangledName, size_t cbMax);
+-int VBoxExtPackCalcDir(char *pszExtPackDir, size_t cbExtPackDir, const char *pszParentDir, const char *pszName);
+-bool VBoxExtPackIsValidVersionString(const char *pszVersion);
+-bool VBoxExtPackIsValidEditionString(const char *pszEdition);
+-bool VBoxExtPackIsValidModuleString(const char *pszModule);
+-
+-int VBoxExtPackValidateMember(const char *pszName, RTVFSOBJTYPE enmType, RTVFSOBJ hVfsObj, char *pszError, size_t cbError);
+-int VBoxExtPackOpenTarFss(RTFILE hTarballFile, char *pszError, size_t cbError, PRTVFSFSSTREAM phTarFss, PRTMANIFEST phFileManifest);
+-int VBoxExtPackValidateTarball(RTFILE hTarballFile, const char *pszExtPackName,
+- const char *pszTarball, const char *pszTarballDigest,
+- char *pszError, size_t cbError,
+- PRTMANIFEST phValidManifest, PRTVFSFILE phXmlFile, RTCString *pStrDigest);
+-
+-
+-#endif
+-
+--- VirtualBox-4.1.18.orig/src/VBox/Main/src-all/ExtPackManagerImpl.cpp 2012-06-20 10:17:34.000000000 -0300
++++ /dev/null 2012-07-24 14:48:18.638572110 -0300
+@@ -1,3126 +0,0 @@
+-/* $Id: ExtPackManagerImpl.cpp $ */
+-/** @file
+- * VirtualBox Main - interface for Extension Packs, VBoxSVC & VBoxC.
+- */
+-
+-/*
+- * Copyright (C) 2010 Oracle Corporation
+- *
+- * This file is part of VirtualBox Open Source Edition (OSE), as
+- * available from http://www.virtualbox.org. This file is free software;
+- * you can redistribute it and/or modify it under the terms of the GNU
+- * General Public License (GPL) as published by the Free Software
+- * Foundation, in version 2 as it comes in the "COPYING" file of the
+- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+- */
+-
+-
+-/*******************************************************************************
+-* Header Files *
+-*******************************************************************************/
+-#include "ExtPackManagerImpl.h"
+-#include "ExtPackUtil.h"
+-
+-#include <iprt/buildconfig.h>
+-#include <iprt/ctype.h>
+-#include <iprt/dir.h>
+-#include <iprt/env.h>
+-#include <iprt/file.h>
+-#include <iprt/ldr.h>
+-#include <iprt/manifest.h>
+-#include <iprt/param.h>
+-#include <iprt/path.h>
+-#include <iprt/pipe.h>
+-#include <iprt/process.h>
+-#include <iprt/string.h>
+-
+-#include <VBox/com/array.h>
+-#include <VBox/com/ErrorInfo.h>
+-#include <VBox/err.h>
+-#include <VBox/log.h>
+-#include <VBox/sup.h>
+-#include <VBox/version.h>
+-#include "AutoCaller.h"
+-#include "Global.h"
+-#include "ProgressImpl.h"
+-#include "SystemPropertiesImpl.h"
+-#include "VirtualBoxImpl.h"
+-
+-
+-/*******************************************************************************
+-* Defined Constants And Macros *
+-*******************************************************************************/
+-/** @name VBOX_EXTPACK_HELPER_NAME
+- * The name of the utility application we employ to install and uninstall the
+- * extension packs. This is a set-uid-to-root binary on unixy platforms, which
+- * is why it has to be a separate application.
+- */
+-#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
+-# define VBOX_EXTPACK_HELPER_NAME "VBoxExtPackHelperApp.exe"
+-#else
+-# define VBOX_EXTPACK_HELPER_NAME "VBoxExtPackHelperApp"
+-#endif
+-
+-
+-/*******************************************************************************
+-* Structures and Typedefs *
+-*******************************************************************************/
+-struct ExtPackBaseData
+-{
+-public:
+- /** The extension pack descriptor (loaded from the XML, mostly). */
+- VBOXEXTPACKDESC Desc;
+- /** The file system object info of the XML file.
+- * This is for detecting changes and save time in refresh(). */
+- RTFSOBJINFO ObjInfoDesc;
+- /** Whether it's usable or not. */
+- bool fUsable;
+- /** Why it is unusable. */
+- Utf8Str strWhyUnusable;
+-};
+-
+-/**
+- * Private extension pack data.
+- */
+-struct ExtPackFile::Data : public ExtPackBaseData
+-{
+-public:
+- /** The path to the tarball. */
+- Utf8Str strExtPackFile;
+- /** The SHA-256 hash of the file (as string). */
+- Utf8Str strDigest;
+- /** The file handle of the extension pack file. */
+- RTFILE hExtPackFile;
+- /** Our manifest for the tarball. */
+- RTMANIFEST hOurManifest;
+- /** Pointer to the extension pack manager. */
+- ComObjPtr<ExtPackManager> ptrExtPackMgr;
+- /** Pointer to the VirtualBox object so we can create a progress object. */
+- VirtualBox *pVirtualBox;
+-
+- RTMEMEF_NEW_AND_DELETE_OPERATORS();
+-};
+-
+-/**
+- * Private extension pack data.
+- */
+-struct ExtPack::Data : public ExtPackBaseData
+-{
+-public:
+- /** Where the extension pack is located. */
+- Utf8Str strExtPackPath;
+- /** The file system object info of the extension pack directory.
+- * This is for detecting changes and save time in refresh(). */
+- RTFSOBJINFO ObjInfoExtPack;
+- /** The full path to the main module. */
+- Utf8Str strMainModPath;
+- /** The file system object info of the main module.
+- * This is used to determin whether to bother try reload it. */
+- RTFSOBJINFO ObjInfoMainMod;
+- /** The module handle of the main extension pack module. */
+- RTLDRMOD hMainMod;
+-
+- /** The helper callbacks for the extension pack. */
+- VBOXEXTPACKHLP Hlp;
+- /** Pointer back to the extension pack object (for Hlp methods). */
+- ExtPack *pThis;
+- /** The extension pack registration structure. */
+- PCVBOXEXTPACKREG pReg;
+- /** The current context. */
+- VBOXEXTPACKCTX enmContext;
+- /** Set if we've made the pfnVirtualBoxReady or pfnConsoleReady call. */
+- bool fMadeReadyCall;
+-
+- RTMEMEF_NEW_AND_DELETE_OPERATORS();
+-};
+-
+-/** List of extension packs. */
+-typedef std::list< ComObjPtr<ExtPack> > ExtPackList;
+-
+-/**
+- * Private extension pack manager data.
+- */
+-struct ExtPackManager::Data
+-{
+- /** The directory where the extension packs are installed. */
+- Utf8Str strBaseDir;
+- /** The directory where the certificates this installation recognizes are
+- * stored. */
+- Utf8Str strCertificatDirPath;
+- /** The list of installed extension packs. */
+- ExtPackList llInstalledExtPacks;
+- /** Pointer to the VirtualBox object, our parent. */
+- VirtualBox *pVirtualBox;
+- /** The current context. */
+- VBOXEXTPACKCTX enmContext;
+-#if !defined(RT_OS_WINDOWS) && !defined(RT_OS_DARWIN)
+- /** File handle for the VBoxVMM libary which we slurp because ExtPacks depend on it. */
+- RTLDRMOD hVBoxVMM;
+-#endif
+-
+- RTMEMEF_NEW_AND_DELETE_OPERATORS();
+-};
+-
+-/**
+- * Extension pack installation job.
+- */
+-typedef struct EXTPACKINSTALLJOB
+-{
+- /** Smart pointer to the extension pack file. */
+- ComPtr<ExtPackFile> ptrExtPackFile;
+- /** The replace argument. */
+- bool fReplace;
+- /** The display info argument. */
+- Utf8Str strDisplayInfo;
+- /** Smart pointer to the extension manager. */
+- ComPtr<ExtPackManager> ptrExtPackMgr;
+- /** Smart pointer to the progress object for this job. */
+- ComObjPtr<Progress> ptrProgress;
+-} EXTPACKINSTALLJOB;
+-/** Pointer to an extension pack installation job. */
+-typedef EXTPACKINSTALLJOB *PEXTPACKINSTALLJOB;
+-
+-/**
+- * Extension pack uninstallation job.
+- */
+-typedef struct EXTPACKUNINSTALLJOB
+-{
+- /** Smart pointer to the extension manager. */
+- ComPtr<ExtPackManager> ptrExtPackMgr;
+- /** The name of the extension pack. */
+- Utf8Str strName;
+- /** The replace argument. */
+- bool fForcedRemoval;
+- /** The display info argument. */
+- Utf8Str strDisplayInfo;
+- /** Smart pointer to the progress object for this job. */
+- ComObjPtr<Progress> ptrProgress;
+-} EXTPACKUNINSTALLJOB;
+-/** Pointer to an extension pack uninstallation job. */
+-typedef EXTPACKUNINSTALLJOB *PEXTPACKUNINSTALLJOB;
+-
+-
+-DEFINE_EMPTY_CTOR_DTOR(ExtPackFile)
+-
+-/**
+- * Called by ComObjPtr::createObject when creating the object.
+- *
+- * Just initialize the basic object state, do the rest in initWithDir().
+- *
+- * @returns S_OK.
+- */
+-HRESULT ExtPackFile::FinalConstruct()
+-{
+- m = NULL;
+- return BaseFinalConstruct();
+-}
+-
+-/**
+- * Initializes the extension pack by reading its file.
+- *
+- * @returns COM status code.
+- * @param a_pszFile The path to the extension pack file.
+- * @param a_pszDigest The SHA-256 digest of the file. Or an empty string.
+- * @param a_pExtPackMgr Pointer to the extension pack manager.
+- * @param a_pVirtualBox Pointer to the VirtualBox object.
+- */
+-HRESULT ExtPackFile::initWithFile(const char *a_pszFile, const char *a_pszDigest, ExtPackManager *a_pExtPackMgr, VirtualBox *a_pVirtualBox)
+-{
+- AutoInitSpan autoInitSpan(this);
+- AssertReturn(autoInitSpan.isOk(), E_FAIL);
+-
+- /*
+- * Allocate + initialize our private data.
+- */
+- m = new ExtPackFile::Data;
+- VBoxExtPackInitDesc(&m->Desc);
+- RT_ZERO(m->ObjInfoDesc);
+- m->fUsable = false;
+- m->strWhyUnusable = tr("ExtPack::init failed");
+- m->strExtPackFile = a_pszFile;
+- m->strDigest = a_pszDigest;
+- m->hExtPackFile = NIL_RTFILE;
+- m->hOurManifest = NIL_RTMANIFEST;
+- m->ptrExtPackMgr = a_pExtPackMgr;
+- m->pVirtualBox = a_pVirtualBox;
+-
+- RTCString *pstrTarName = VBoxExtPackExtractNameFromTarballPath(a_pszFile);
+- if (pstrTarName)
+- {
+- m->Desc.strName = *pstrTarName;
+- delete pstrTarName;
+- pstrTarName = NULL;
+- }
+-
+- autoInitSpan.setSucceeded();
+-
+- /*
+- * Try open the extension pack and check that it is a regular file.
+- */
+- int vrc = RTFileOpen(&m->hExtPackFile, a_pszFile,
+- RTFILE_O_READ | RTFILE_O_DENY_WRITE | RTFILE_O_OPEN);
+- if (RT_FAILURE(vrc))
+- {
+- if (vrc == VERR_FILE_NOT_FOUND || vrc == VERR_PATH_NOT_FOUND)
+- return initFailed(tr("'%s' file not found"), a_pszFile);
+- return initFailed(tr("RTFileOpen('%s',,) failed with %Rrc"), a_pszFile, vrc);
+- }
+-
+- RTFSOBJINFO ObjInfo;
+- vrc = RTFileQueryInfo(m->hExtPackFile, &ObjInfo, RTFSOBJATTRADD_UNIX);
+- if (RT_FAILURE(vrc))
+- return initFailed(tr("RTFileQueryInfo failed with %Rrc on '%s'"), vrc, a_pszFile);
+- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode))
+- return initFailed(tr("Not a regular file: %s"), a_pszFile);
+-
+- /*
+- * Validate the tarball and extract the XML file.
+- */
+- char szError[8192];
+- RTVFSFILE hXmlFile;
+- vrc = VBoxExtPackValidateTarball(m->hExtPackFile, NULL /*pszExtPackName*/, a_pszFile, a_pszDigest,
+- szError, sizeof(szError), &m->hOurManifest, &hXmlFile, &m->strDigest);
+- if (RT_FAILURE(vrc))
+- return initFailed(tr("%s"), szError);
+-
+- /*
+- * Parse the XML.
+- */
+- RTCString strSavedName(m->Desc.strName);
+- RTCString *pStrLoadErr = VBoxExtPackLoadDescFromVfsFile(hXmlFile, &m->Desc, &m->ObjInfoDesc);
+- RTVfsFileRelease(hXmlFile);
+- if (pStrLoadErr != NULL)
+- {
+- m->strWhyUnusable.printf(tr("Failed to the xml file: %s"), pStrLoadErr->c_str());
+- m->Desc.strName = strSavedName;
+- delete pStrLoadErr;
+- return S_OK;
+- }
+-
+- /*
+- * Match the tarball name with the name from the XML.
+- */
+- /** @todo drop this restriction after the old install interface is
+- * dropped. */
+- if (!strSavedName.equalsIgnoreCase(m->Desc.strName))
+- return initFailed(tr("Extension pack name mismatch between the downloaded file and the XML inside it (xml='%s' file='%s')"),
+- m->Desc.strName.c_str(), strSavedName.c_str());
+-
+- m->fUsable = true;
+- m->strWhyUnusable.setNull();
+- return S_OK;
+-}
+-
+-/**
+- * Protected helper that formats the strWhyUnusable value.
+- *
+- * @returns S_OK
+- * @param a_pszWhyFmt Why it failed, format string.
+- * @param ... The format arguments.
+- */
+-HRESULT ExtPackFile::initFailed(const char *a_pszWhyFmt, ...)
+-{
+- va_list va;
+- va_start(va, a_pszWhyFmt);
+- m->strWhyUnusable.printfV(a_pszWhyFmt, va);
+- va_end(va);
+- return S_OK;
+-}
+-
+-/**
+- * COM cruft.
+- */
+-void ExtPackFile::FinalRelease()
+-{
+- uninit();
+- BaseFinalRelease();
+-}
+-
+-/**
+- * Do the actual cleanup.
+- */
+-void ExtPackFile::uninit()
+-{
+- /* Enclose the state transition Ready->InUninit->NotReady */
+- AutoUninitSpan autoUninitSpan(this);
+- if (!autoUninitSpan.uninitDone() && m != NULL)
+- {
+- VBoxExtPackFreeDesc(&m->Desc);
+- RTFileClose(m->hExtPackFile);
+- m->hExtPackFile = NIL_RTFILE;
+- RTManifestRelease(m->hOurManifest);
+- m->hOurManifest = NIL_RTMANIFEST;
+-
+- delete m;
+- m = NULL;
+- }
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(Name)(BSTR *a_pbstrName)
+-{
+- CheckComArgOutPointerValid(a_pbstrName);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- Bstr str(m->Desc.strName);
+- str.cloneTo(a_pbstrName);
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(Description)(BSTR *a_pbstrDescription)
+-{
+- CheckComArgOutPointerValid(a_pbstrDescription);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- Bstr str(m->Desc.strDescription);
+- str.cloneTo(a_pbstrDescription);
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(Version)(BSTR *a_pbstrVersion)
+-{
+- CheckComArgOutPointerValid(a_pbstrVersion);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- /* HACK ALERT: This is for easing backporting to 4.1. The edition stuff
+- will be changed into a separate */
+- if (m->Desc.strEdition.isEmpty())
+- {
+- Bstr str(m->Desc.strVersion);
+- str.cloneTo(a_pbstrVersion);
+- }
+- else
+- {
+- RTCString strHack(m->Desc.strVersion);
+- strHack.append('-');
+- strHack.append(m->Desc.strEdition);
+-
+- Bstr str(strHack);
+- str.cloneTo(a_pbstrVersion);
+- }
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(Revision)(ULONG *a_puRevision)
+-{
+- CheckComArgOutPointerValid(a_puRevision);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- *a_puRevision = m->Desc.uRevision;
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(VRDEModule)(BSTR *a_pbstrVrdeModule)
+-{
+- CheckComArgOutPointerValid(a_pbstrVrdeModule);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- Bstr str(m->Desc.strVrdeModule);
+- str.cloneTo(a_pbstrVrdeModule);
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(PlugIns)(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns))
+-{
+- /** @todo implement plug-ins. */
+-#ifdef VBOX_WITH_XPCOM
+- NOREF(a_paPlugIns);
+- NOREF(a_paPlugInsSize);
+-#endif
+- ReturnComNotImplemented();
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(Usable)(BOOL *a_pfUsable)
+-{
+- CheckComArgOutPointerValid(a_pfUsable);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- *a_pfUsable = m->fUsable;
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(WhyUnusable)(BSTR *a_pbstrWhy)
+-{
+- CheckComArgOutPointerValid(a_pbstrWhy);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- m->strWhyUnusable.cloneTo(a_pbstrWhy);
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(ShowLicense)(BOOL *a_pfShowIt)
+-{
+- CheckComArgOutPointerValid(a_pfShowIt);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- *a_pfShowIt = m->Desc.fShowLicense;
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(License)(BSTR *a_pbstrHtmlLicense)
+-{
+- Bstr bstrHtml("html");
+- return QueryLicense(Bstr::Empty.raw(), Bstr::Empty.raw(), bstrHtml.raw(), a_pbstrHtmlLicense);
+-}
+-
+-/* Same as ExtPack::QueryLicense, should really explore the subject of base classes here... */
+-STDMETHODIMP ExtPackFile::QueryLicense(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage, IN_BSTR a_bstrFormat,
+- BSTR *a_pbstrLicense)
+-{
+- /*
+- * Validate input.
+- */
+- CheckComArgOutPointerValid(a_pbstrLicense);
+- CheckComArgNotNull(a_bstrPreferredLocale);
+- CheckComArgNotNull(a_bstrPreferredLanguage);
+- CheckComArgNotNull(a_bstrFormat);
+-
+- Utf8Str strPreferredLocale(a_bstrPreferredLocale);
+- if (strPreferredLocale.length() != 2 && strPreferredLocale.length() != 0)
+- return setError(E_FAIL, tr("The preferred locale is a two character string or empty."));
+-
+- Utf8Str strPreferredLanguage(a_bstrPreferredLanguage);
+- if (strPreferredLanguage.length() != 2 && strPreferredLanguage.length() != 0)
+- return setError(E_FAIL, tr("The preferred lanuage is a two character string or empty."));
+-
+- Utf8Str strFormat(a_bstrFormat);
+- if ( !strFormat.equals("html")
+- && !strFormat.equals("rtf")
+- && !strFormat.equals("txt"))
+- return setError(E_FAIL, tr("The license format can only have the values 'html', 'rtf' and 'txt'."));
+-
+- /*
+- * Combine the options to form a file name before locking down anything.
+- */
+- char szName[sizeof(VBOX_EXTPACK_LICENSE_NAME_PREFIX "-de_DE.html") + 2];
+- if (strPreferredLocale.isNotEmpty() && strPreferredLanguage.isNotEmpty())
+- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s_%s.%s",
+- strPreferredLocale.c_str(), strPreferredLanguage.c_str(), strFormat.c_str());
+- else if (strPreferredLocale.isNotEmpty())
+- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s.%s", strPreferredLocale.c_str(), strFormat.c_str());
+- else if (strPreferredLanguage.isNotEmpty())
+- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-_%s.%s", strPreferredLocale.c_str(), strFormat.c_str());
+- else
+- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX ".%s", strFormat.c_str());
+-
+- /*
+- * Lock the extension pack. We need a write lock here as there must not be
+- * concurrent accesses to the tar file handle.
+- */
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- /*
+- * Do not permit this query on a pack that isn't considered usable (could
+- * be marked so because of bad license files).
+- */
+- if (!m->fUsable)
+- hrc = setError(E_FAIL, tr("%s"), m->strWhyUnusable.c_str());
+- else
+- {
+- /*
+- * Look it up in the manifest before scanning the tarball for it
+- */
+- if (RTManifestEntryExists(m->hOurManifest, szName))
+- {
+- RTVFSFSSTREAM hTarFss;
+- char szError[8192];
+- int vrc = VBoxExtPackOpenTarFss(m->hExtPackFile, szError, sizeof(szError), &hTarFss, NULL);
+- if (RT_SUCCESS(vrc))
+- {
+- for (;;)
+- {
+- /* Get the first/next. */
+- char *pszName;
+- RTVFSOBJ hVfsObj;
+- RTVFSOBJTYPE enmType;
+- vrc = RTVfsFsStrmNext(hTarFss, &pszName, &enmType, &hVfsObj);
+- if (RT_FAILURE(vrc))
+- {
+- if (vrc != VERR_EOF)
+- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTVfsFsStrmNext failed: %Rrc"), vrc);
+- else
+- hrc = setError(E_UNEXPECTED, tr("'%s' was found in the manifest but not in the tarball"), szName);
+- break;
+- }
+-
+- /* Is this it? */
+- const char *pszAdjName = pszName[0] == '.' && pszName[1] == '/' ? &pszName[2] : pszName;
+- if ( !strcmp(pszAdjName, szName)
+- && ( enmType == RTVFSOBJTYPE_IO_STREAM
+- || enmType == RTVFSOBJTYPE_FILE))
+- {
+- RTVFSIOSTREAM hVfsIos = RTVfsObjToIoStream(hVfsObj);
+- RTVfsObjRelease(hVfsObj);
+- RTStrFree(pszName);
+-
+- /* Load the file into memory. */
+- RTFSOBJINFO ObjInfo;
+- vrc = RTVfsIoStrmQueryInfo(hVfsIos, &ObjInfo, RTFSOBJATTRADD_NOTHING);
+- if (RT_SUCCESS(vrc))
+- {
+- size_t cbFile = (size_t)ObjInfo.cbObject;
+- void *pvFile = RTMemAllocZ(cbFile + 1);
+- if (pvFile)
+- {
+- vrc = RTVfsIoStrmRead(hVfsIos, pvFile, cbFile, true /*fBlocking*/, NULL);
+- if (RT_SUCCESS(vrc))
+- {
+- /* try translate it into a string we can return. */
+- Bstr bstrLicense((const char *)pvFile, cbFile);
+- if (bstrLicense.isNotEmpty())
+- {
+- bstrLicense.detachTo(a_pbstrLicense);
+- hrc = S_OK;
+- }
+- else
+- hrc = setError(VBOX_E_IPRT_ERROR,
+- tr("The license file '%s' is empty or contains invalid UTF-8 encoding"),
+- szName);
+- }
+- else
+- hrc = setError(VBOX_E_IPRT_ERROR, tr("Failed to read '%s': %Rrc"), szName, vrc);
+- RTMemFree(pvFile);
+- }
+- else
+- hrc = setError(E_OUTOFMEMORY, tr("Failed to allocate %zu bytes for '%s'"), cbFile, szName);
+- }
+- else
+- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTVfsIoStrmQueryInfo on '%s': %Rrc"), szName, vrc);
+- RTVfsIoStrmRelease(hVfsIos);
+- break;
+- }
+-
+- /* Release current. */
+- RTVfsObjRelease(hVfsObj);
+- RTStrFree(pszName);
+- }
+- RTVfsFsStrmRelease(hTarFss);
+- }
+- else
+- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("%s"), szError);
+- }
+- else
+- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("The license file '%s' was not found in '%s'"),
+- szName, m->strExtPackFile.c_str());
+- }
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(FilePath)(BSTR *a_pbstrPath)
+-{
+- CheckComArgOutPointerValid(a_pbstrPath);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- m->strExtPackFile.cloneTo(a_pbstrPath);
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::Install(BOOL a_fReplace, IN_BSTR a_bstrDisplayInfo, IProgress **a_ppProgress)
+-{
+- if (a_ppProgress)
+- *a_ppProgress = NULL;
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- if (m->fUsable)
+- {
+- PEXTPACKINSTALLJOB pJob = NULL;
+- try
+- {
+- pJob = new EXTPACKINSTALLJOB;
+- pJob->ptrExtPackFile = this;
+- pJob->fReplace = a_fReplace != FALSE;
+- pJob->strDisplayInfo = a_bstrDisplayInfo;
+- pJob->ptrExtPackMgr = m->ptrExtPackMgr;
+- hrc = pJob->ptrProgress.createObject();
+- if (SUCCEEDED(hrc))
+- {
+- Bstr bstrDescription = tr("Installing extension pack");
+- hrc = pJob->ptrProgress->init(
+-#ifndef VBOX_COM_INPROC
+- m->pVirtualBox,
+-#endif
+- static_cast<IExtPackFile *>(this),
+- bstrDescription.raw(),
+- FALSE /*aCancelable*/,
+- NULL /*aId*/);
+- }
+- if (SUCCEEDED(hrc))
+- {
+- ComPtr<Progress> ptrProgress = pJob->ptrProgress;
+- int vrc = RTThreadCreate(NULL /*phThread*/, ExtPackManager::doInstallThreadProc, pJob, 0,
+- RTTHREADTYPE_DEFAULT, 0 /*fFlags*/, "ExtPackInst");
+- if (RT_SUCCESS(vrc))
+- {
+- pJob = NULL; /* the thread deletes it */
+- ptrProgress.queryInterfaceTo(a_ppProgress);
+- }
+- else
+- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTThreadCreate failed with %Rrc"), vrc);
+- }
+- }
+- catch (std::bad_alloc)
+- {
+- hrc = E_OUTOFMEMORY;
+- }
+- if (pJob)
+- delete pJob;
+- }
+- else
+- hrc = setError(E_FAIL, "%s", m->strWhyUnusable.c_str());
+- }
+- return hrc;
+-}
+-
+-
+-
+-
+-
+-DEFINE_EMPTY_CTOR_DTOR(ExtPack)
+-
+-/**
+- * Called by ComObjPtr::createObject when creating the object.
+- *
+- * Just initialize the basic object state, do the rest in initWithDir().
+- *
+- * @returns S_OK.
+- */
+-HRESULT ExtPack::FinalConstruct()
+-{
+- m = NULL;
+- return S_OK;
+-}
+-
+-/**
+- * Initializes the extension pack by reading its file.
+- *
+- * @returns COM status code.
+- * @param a_enmContext The context we're in.
+- * @param a_pszName The name of the extension pack. This is also the
+- * name of the subdirector under @a a_pszParentDir
+- * where the extension pack is installed.
+- * @param a_pszDir The extension pack directory name.
+- */
+-HRESULT ExtPack::initWithDir(VBOXEXTPACKCTX a_enmContext, const char *a_pszName, const char *a_pszDir)
+-{
+- AutoInitSpan autoInitSpan(this);
+- AssertReturn(autoInitSpan.isOk(), E_FAIL);
+-
+- static const VBOXEXTPACKHLP s_HlpTmpl =
+- {
+- /* u32Version = */ VBOXEXTPACKHLP_VERSION,
+- /* uVBoxFullVersion = */ VBOX_FULL_VERSION,
+- /* uVBoxVersionRevision = */ 0,
+- /* u32Padding = */ 0,
+- /* pszVBoxVersion = */ "",
+- /* pfnFindModule = */ ExtPack::hlpFindModule,
+- /* pfnGetFilePath = */ ExtPack::hlpGetFilePath,
+- /* pfnGetContext = */ ExtPack::hlpGetContext,
+- /* pfnReserved1 = */ ExtPack::hlpReservedN,
+- /* pfnReserved2 = */ ExtPack::hlpReservedN,
+- /* pfnReserved3 = */ ExtPack::hlpReservedN,
+- /* pfnReserved4 = */ ExtPack::hlpReservedN,
+- /* pfnReserved5 = */ ExtPack::hlpReservedN,
+- /* pfnReserved6 = */ ExtPack::hlpReservedN,
+- /* pfnReserved7 = */ ExtPack::hlpReservedN,
+- /* pfnReserved8 = */ ExtPack::hlpReservedN,
+- /* pfnReserved9 = */ ExtPack::hlpReservedN,
+- /* u32EndMarker = */ VBOXEXTPACKHLP_VERSION
+- };
+-
+- /*
+- * Allocate + initialize our private data.
+- */
+- m = new Data;
+- VBoxExtPackInitDesc(&m->Desc);
+- m->Desc.strName = a_pszName;
+- RT_ZERO(m->ObjInfoDesc);
+- m->fUsable = false;
+- m->strWhyUnusable = tr("ExtPack::init failed");
+- m->strExtPackPath = a_pszDir;
+- RT_ZERO(m->ObjInfoExtPack);
+- m->strMainModPath.setNull();
+- RT_ZERO(m->ObjInfoMainMod);
+- m->hMainMod = NIL_RTLDRMOD;
+- m->Hlp = s_HlpTmpl;
+- m->Hlp.pszVBoxVersion = RTBldCfgVersion();
+- m->Hlp.uVBoxInternalRevision = RTBldCfgRevision();
+- m->pThis = this;
+- m->pReg = NULL;
+- m->enmContext = a_enmContext;
+- m->fMadeReadyCall = false;
+-
+- /*
+- * Probe the extension pack (this code is shared with refresh()).
+- */
+- probeAndLoad();
+-
+- autoInitSpan.setSucceeded();
+- return S_OK;
+-}
+-
+-/**
+- * COM cruft.
+- */
+-void ExtPack::FinalRelease()
+-{
+- uninit();
+-}
+-
+-/**
+- * Do the actual cleanup.
+- */
+-void ExtPack::uninit()
+-{
+- /* Enclose the state transition Ready->InUninit->NotReady */
+- AutoUninitSpan autoUninitSpan(this);
+- if (!autoUninitSpan.uninitDone() && m != NULL)
+- {
+- if (m->hMainMod != NIL_RTLDRMOD)
+- {
+- AssertPtr(m->pReg);
+- if (m->pReg->pfnUnload != NULL)
+- m->pReg->pfnUnload(m->pReg);
+-
+- RTLdrClose(m->hMainMod);
+- m->hMainMod = NIL_RTLDRMOD;
+- m->pReg = NULL;
+- }
+-
+- VBoxExtPackFreeDesc(&m->Desc);
+-
+- delete m;
+- m = NULL;
+- }
+-}
+-
+-
+-/**
+- * Calls the installed hook.
+- *
+- * @returns true if we left the lock, false if we didn't.
+- * @param a_pVirtualBox The VirtualBox interface.
+- * @param a_pLock The write lock held by the caller.
+- * @param pErrInfo Where to return error information.
+- */
+-bool ExtPack::callInstalledHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock, PRTERRINFO pErrInfo)
+-{
+- if ( m != NULL
+- && m->hMainMod != NIL_RTLDRMOD)
+- {
+- if (m->pReg->pfnInstalled)
+- {
+- ComPtr<ExtPack> ptrSelfRef = this;
+- a_pLock->release();
+- pErrInfo->rc = m->pReg->pfnInstalled(m->pReg, a_pVirtualBox, pErrInfo);
+- a_pLock->acquire();
+- return true;
+- }
+- }
+- pErrInfo->rc = VINF_SUCCESS;
+- return false;
+-}
+-
+-/**
+- * Calls the uninstall hook and closes the module.
+- *
+- * @returns S_OK or COM error status with error information.
+- * @param a_pVirtualBox The VirtualBox interface.
+- * @param a_fForcedRemoval When set, we'll ignore complaints from the
+- * uninstall hook.
+- * @remarks The caller holds the manager's write lock, not released.
+- */
+-HRESULT ExtPack::callUninstallHookAndClose(IVirtualBox *a_pVirtualBox, bool a_fForcedRemoval)
+-{
+- HRESULT hrc = S_OK;
+-
+- if ( m != NULL
+- && m->hMainMod != NIL_RTLDRMOD)
+- {
+- if (m->pReg->pfnUninstall && !a_fForcedRemoval)
+- {
+- int vrc = m->pReg->pfnUninstall(m->pReg, a_pVirtualBox);
+- if (RT_FAILURE(vrc))
+- {
+- LogRel(("ExtPack pfnUninstall returned %Rrc for %s\n", vrc, m->Desc.strName.c_str()));
+- if (!a_fForcedRemoval)
+- hrc = setError(E_FAIL, tr("pfnUninstall returned %Rrc"), vrc);
+- }
+- }
+- if (SUCCEEDED(hrc))
+- {
+- RTLdrClose(m->hMainMod);
+- m->hMainMod = NIL_RTLDRMOD;
+- m->pReg = NULL;
+- }
+- }
+-
+- return hrc;
+-}
+-
+-/**
+- * Calls the pfnVirtualBoxReady hook.
+- *
+- * @returns true if we left the lock, false if we didn't.
+- * @param a_pVirtualBox The VirtualBox interface.
+- * @param a_pLock The write lock held by the caller.
+- */
+-bool ExtPack::callVirtualBoxReadyHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock)
+-{
+- if ( m != NULL
+- && m->fUsable
+- && !m->fMadeReadyCall)
+- {
+- m->fMadeReadyCall = true;
+- if (m->pReg->pfnVirtualBoxReady)
+- {
+- ComPtr<ExtPack> ptrSelfRef = this;
+- a_pLock->release();
+- m->pReg->pfnVirtualBoxReady(m->pReg, a_pVirtualBox);
+- a_pLock->acquire();
+- return true;
+- }
+- }
+- return false;
+-}
+-
+-/**
+- * Calls the pfnConsoleReady hook.
+- *
+- * @returns true if we left the lock, false if we didn't.
+- * @param a_pConsole The Console interface.
+- * @param a_pLock The write lock held by the caller.
+- */
+-bool ExtPack::callConsoleReadyHook(IConsole *a_pConsole, AutoWriteLock *a_pLock)
+-{
+- if ( m != NULL
+- && m->fUsable
+- && !m->fMadeReadyCall)
+- {
+- m->fMadeReadyCall = true;
+- if (m->pReg->pfnConsoleReady)
+- {
+- ComPtr<ExtPack> ptrSelfRef = this;
+- a_pLock->release();
+- m->pReg->pfnConsoleReady(m->pReg, a_pConsole);
+- a_pLock->acquire();
+- return true;
+- }
+- }
+- return false;
+-}
+-
+-/**
+- * Calls the pfnVMCreate hook.
+- *
+- * @returns true if we left the lock, false if we didn't.
+- * @param a_pVirtualBox The VirtualBox interface.
+- * @param a_pMachine The machine interface of the new VM.
+- * @param a_pLock The write lock held by the caller.
+- */
+-bool ExtPack::callVmCreatedHook(IVirtualBox *a_pVirtualBox, IMachine *a_pMachine, AutoWriteLock *a_pLock)
+-{
+- if ( m != NULL
+- && m->fUsable)
+- {
+- if (m->pReg->pfnVMCreated)
+- {
+- ComPtr<ExtPack> ptrSelfRef = this;
+- a_pLock->release();
+- m->pReg->pfnVMCreated(m->pReg, a_pVirtualBox, a_pMachine);
+- a_pLock->acquire();
+- return true;
+- }
+- }
+- return false;
+-}
+-
+-/**
+- * Calls the pfnVMConfigureVMM hook.
+- *
+- * @returns true if we left the lock, false if we didn't.
+- * @param a_pConsole The console interface.
+- * @param a_pVM The VM handle.
+- * @param a_pLock The write lock held by the caller.
+- * @param a_pvrc Where to return the status code of the
+- * callback. This is always set. LogRel is
+- * called on if a failure status is returned.
+- */
+-bool ExtPack::callVmConfigureVmmHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc)
+-{
+- *a_pvrc = VINF_SUCCESS;
+- if ( m != NULL
+- && m->fUsable)
+- {
+- if (m->pReg->pfnVMConfigureVMM)
+- {
+- ComPtr<ExtPack> ptrSelfRef = this;
+- a_pLock->release();
+- int vrc = m->pReg->pfnVMConfigureVMM(m->pReg, a_pConsole, a_pVM);
+- *a_pvrc = vrc;
+- a_pLock->acquire();
+- if (RT_FAILURE(vrc))
+- LogRel(("ExtPack pfnVMConfigureVMM returned %Rrc for %s\n", vrc, m->Desc.strName.c_str()));
+- return true;
+- }
+- }
+- return false;
+-}
+-
+-/**
+- * Calls the pfnVMPowerOn hook.
+- *
+- * @returns true if we left the lock, false if we didn't.
+- * @param a_pConsole The console interface.
+- * @param a_pVM The VM handle.
+- * @param a_pLock The write lock held by the caller.
+- * @param a_pvrc Where to return the status code of the
+- * callback. This is always set. LogRel is
+- * called on if a failure status is returned.
+- */
+-bool ExtPack::callVmPowerOnHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc)
+-{
+- *a_pvrc = VINF_SUCCESS;
+- if ( m != NULL
+- && m->fUsable)
+- {
+- if (m->pReg->pfnVMPowerOn)
+- {
+- ComPtr<ExtPack> ptrSelfRef = this;
+- a_pLock->release();
+- int vrc = m->pReg->pfnVMPowerOn(m->pReg, a_pConsole, a_pVM);
+- *a_pvrc = vrc;
+- a_pLock->acquire();
+- if (RT_FAILURE(vrc))
+- LogRel(("ExtPack pfnVMPowerOn returned %Rrc for %s\n", vrc, m->Desc.strName.c_str()));
+- return true;
+- }
+- }
+- return false;
+-}
+-
+-/**
+- * Calls the pfnVMPowerOff hook.
+- *
+- * @returns true if we left the lock, false if we didn't.
+- * @param a_pConsole The console interface.
+- * @param a_pVM The VM handle.
+- * @param a_pLock The write lock held by the caller.
+- */
+-bool ExtPack::callVmPowerOffHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock)
+-{
+- if ( m != NULL
+- && m->fUsable)
+- {
+- if (m->pReg->pfnVMPowerOff)
+- {
+- ComPtr<ExtPack> ptrSelfRef = this;
+- a_pLock->release();
+- m->pReg->pfnVMPowerOff(m->pReg, a_pConsole, a_pVM);
+- a_pLock->acquire();
+- return true;
+- }
+- }
+- return false;
+-}
+-
+-/**
+- * Check if the extension pack is usable and has an VRDE module.
+- *
+- * @returns S_OK or COM error status with error information.
+- *
+- * @remarks Caller holds the extension manager lock for reading, no locking
+- * necessary.
+- */
+-HRESULT ExtPack::checkVrde(void)
+-{
+- HRESULT hrc;
+- if ( m != NULL
+- && m->fUsable)
+- {
+- if (m->Desc.strVrdeModule.isNotEmpty())
+- hrc = S_OK;
+- else
+- hrc = setError(E_FAIL, tr("The extension pack '%s' does not include a VRDE module"), m->Desc.strName.c_str());
+- }
+- else
+- hrc = setError(E_FAIL, tr("%s"), m->strWhyUnusable.c_str());
+- return hrc;
+-}
+-
+-/**
+- * Same as checkVrde(), except that it also resolves the path to the module.
+- *
+- * @returns S_OK or COM error status with error information.
+- * @param a_pstrVrdeLibrary Where to return the path on success.
+- *
+- * @remarks Caller holds the extension manager lock for reading, no locking
+- * necessary.
+- */
+-HRESULT ExtPack::getVrdpLibraryName(Utf8Str *a_pstrVrdeLibrary)
+-{
+- HRESULT hrc = checkVrde();
+- if (SUCCEEDED(hrc))
+- {
+- if (findModule(m->Desc.strVrdeModule.c_str(), NULL, VBOXEXTPACKMODKIND_R3,
+- a_pstrVrdeLibrary, NULL /*a_pfNative*/, NULL /*a_pObjInfo*/))
+- hrc = S_OK;
+- else
+- hrc = setError(E_FAIL, tr("Failed to locate the VRDE module '%s' in extension pack '%s'"),
+- m->Desc.strVrdeModule.c_str(), m->Desc.strName.c_str());
+- }
+- return hrc;
+-}
+-
+-/**
+- * Check if this extension pack wishes to be the default VRDE provider.
+- *
+- * @returns @c true if it wants to and it is in a usable state, otherwise
+- * @c false.
+- *
+- * @remarks Caller holds the extension manager lock for reading, no locking
+- * necessary.
+- */
+-bool ExtPack::wantsToBeDefaultVrde(void) const
+-{
+- return m->fUsable
+- && m->Desc.strVrdeModule.isNotEmpty();
+-}
+-
+-/**
+- * Refreshes the extension pack state.
+- *
+- * This is called by the manager so that the on disk changes are picked up.
+- *
+- * @returns S_OK or COM error status with error information.
+- *
+- * @param a_pfCanDelete Optional can-delete-this-object output indicator.
+- *
+- * @remarks Caller holds the extension manager lock for writing.
+- * @remarks Only called in VBoxSVC.
+- */
+-HRESULT ExtPack::refresh(bool *a_pfCanDelete)
+-{
+- if (a_pfCanDelete)
+- *a_pfCanDelete = false;
+-
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); /* for the COMGETTERs */
+-
+- /*
+- * Has the module been deleted?
+- */
+- RTFSOBJINFO ObjInfoExtPack;
+- int vrc = RTPathQueryInfoEx(m->strExtPackPath.c_str(), &ObjInfoExtPack, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK);
+- if ( RT_FAILURE(vrc)
+- || !RTFS_IS_DIRECTORY(ObjInfoExtPack.Attr.fMode))
+- {
+- if (a_pfCanDelete)
+- *a_pfCanDelete = true;
+- return S_OK;
+- }
+-
+- /*
+- * We've got a directory, so try query file system object info for the
+- * files we are interested in as well.
+- */
+- RTFSOBJINFO ObjInfoDesc;
+- char szDescFilePath[RTPATH_MAX];
+- vrc = RTPathJoin(szDescFilePath, sizeof(szDescFilePath), m->strExtPackPath.c_str(), VBOX_EXTPACK_DESCRIPTION_NAME);
+- if (RT_SUCCESS(vrc))
+- vrc = RTPathQueryInfoEx(szDescFilePath, &ObjInfoDesc, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK);
+- if (RT_FAILURE(vrc))
+- RT_ZERO(ObjInfoDesc);
+-
+- RTFSOBJINFO ObjInfoMainMod;
+- if (m->strMainModPath.isNotEmpty())
+- vrc = RTPathQueryInfoEx(m->strMainModPath.c_str(), &ObjInfoMainMod, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK);
+- if (m->strMainModPath.isEmpty() || RT_FAILURE(vrc))
+- RT_ZERO(ObjInfoMainMod);
+-
+- /*
+- * If we have a usable module already, just verify that things haven't
+- * changed since we loaded it.
+- */
+- if (m->fUsable)
+- {
+- if (m->hMainMod == NIL_RTLDRMOD)
+- probeAndLoad();
+- else if ( !objinfoIsEqual(&ObjInfoDesc, &m->ObjInfoDesc)
+- || !objinfoIsEqual(&ObjInfoMainMod, &m->ObjInfoMainMod)
+- || !objinfoIsEqual(&ObjInfoExtPack, &m->ObjInfoExtPack) )
+- {
+- /** @todo not important, so it can wait. */
+- }
+- }
+- /*
+- * Ok, it is currently not usable. If anything has changed since last time
+- * reprobe the extension pack.
+- */
+- else if ( !objinfoIsEqual(&ObjInfoDesc, &m->ObjInfoDesc)
+- || !objinfoIsEqual(&ObjInfoMainMod, &m->ObjInfoMainMod)
+- || !objinfoIsEqual(&ObjInfoExtPack, &m->ObjInfoExtPack) )
+- probeAndLoad();
+-
+- return S_OK;
+-}
+-
+-/**
+- * Probes the extension pack, loading the main dll and calling its registration
+- * entry point.
+- *
+- * This updates the state accordingly, the strWhyUnusable and fUnusable members
+- * being the most important ones.
+- */
+-void ExtPack::probeAndLoad(void)
+-{
+- m->fUsable = false;
+- m->fMadeReadyCall = false;
+-
+- /*
+- * Query the file system info for the extension pack directory. This and
+- * all other file system info we save is for the benefit of refresh().
+- */
+- int vrc = RTPathQueryInfoEx(m->strExtPackPath.c_str(), &m->ObjInfoExtPack, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK);
+- if (RT_FAILURE(vrc))
+- {
+- m->strWhyUnusable.printf(tr("RTPathQueryInfoEx on '%s' failed: %Rrc"), m->strExtPackPath.c_str(), vrc);
+- return;
+- }
+- if (!RTFS_IS_DIRECTORY(m->ObjInfoExtPack.Attr.fMode))
+- {
+- if (RTFS_IS_SYMLINK(m->ObjInfoExtPack.Attr.fMode))
+- m->strWhyUnusable.printf(tr("'%s' is a symbolic link, this is not allowed"), m->strExtPackPath.c_str(), vrc);
+- else if (RTFS_IS_FILE(m->ObjInfoExtPack.Attr.fMode))
+- m->strWhyUnusable.printf(tr("'%s' is a symbolic file, not a directory"), m->strExtPackPath.c_str(), vrc);
+- else
+- m->strWhyUnusable.printf(tr("'%s' is not a directory (fMode=%#x)"), m->strExtPackPath.c_str(), m->ObjInfoExtPack.Attr.fMode);
+- return;
+- }
+-
+- RTERRINFOSTATIC ErrInfo;
+- RTErrInfoInitStatic(&ErrInfo);
+- vrc = SUPR3HardenedVerifyDir(m->strExtPackPath.c_str(), true /*fRecursive*/, true /*fCheckFiles*/, &ErrInfo.Core);
+- if (RT_FAILURE(vrc))
+- {
+- m->strWhyUnusable.printf(tr("%s (rc=%Rrc)"), ErrInfo.Core.pszMsg, vrc);
+- return;
+- }
+-
+- /*
+- * Read the description file.
+- */
+- RTCString strSavedName(m->Desc.strName);
+- RTCString *pStrLoadErr = VBoxExtPackLoadDesc(m->strExtPackPath.c_str(), &m->Desc, &m->ObjInfoDesc);
+- if (pStrLoadErr != NULL)
+- {
+- m->strWhyUnusable.printf(tr("Failed to load '%s/%s': %s"),
+- m->strExtPackPath.c_str(), VBOX_EXTPACK_DESCRIPTION_NAME, pStrLoadErr->c_str());
+- m->Desc.strName = strSavedName;
+- delete pStrLoadErr;
+- return;
+- }
+-
+- /*
+- * Make sure the XML name and directory matches.
+- */
+- if (!m->Desc.strName.equalsIgnoreCase(strSavedName))
+- {
+- m->strWhyUnusable.printf(tr("The description name ('%s') and directory name ('%s') does not match"),
+- m->Desc.strName.c_str(), strSavedName.c_str());
+- m->Desc.strName = strSavedName;
+- return;
+- }
+-
+- /*
+- * Load the main DLL and call the predefined entry point.
+- */
+- bool fIsNative;
+- if (!findModule(m->Desc.strMainModule.c_str(), NULL /* default extension */, VBOXEXTPACKMODKIND_R3,
+- &m->strMainModPath, &fIsNative, &m->ObjInfoMainMod))
+- {
+- m->strWhyUnusable.printf(tr("Failed to locate the main module ('%s')"), m->Desc.strMainModule.c_str());
+- return;
+- }
+-
+- vrc = SUPR3HardenedVerifyPlugIn(m->strMainModPath.c_str(), &ErrInfo.Core);
+- if (RT_FAILURE(vrc))
+- {
+- m->strWhyUnusable.printf(tr("%s"), ErrInfo.Core.pszMsg);
+- return;
+- }
+-
+- if (fIsNative)
+- {
+- vrc = SUPR3HardenedLdrLoadPlugIn(m->strMainModPath.c_str(), &m->hMainMod, &ErrInfo.Core);
+- if (RT_FAILURE(vrc))
+- {
+- m->hMainMod = NIL_RTLDRMOD;
+- m->strWhyUnusable.printf(tr("Failed to load the main module ('%s'): %Rrc - %s"),
+- m->strMainModPath.c_str(), vrc, ErrInfo.Core.pszMsg);
+- return;
+- }
+- }
+- else
+- {
+- m->strWhyUnusable.printf(tr("Only native main modules are currently supported"));
+- return;
+- }
+-
+- /*
+- * Resolve the predefined entry point.
+- */
+- PFNVBOXEXTPACKREGISTER pfnRegistration;
+- vrc = RTLdrGetSymbol(m->hMainMod, VBOX_EXTPACK_MAIN_MOD_ENTRY_POINT, (void **)&pfnRegistration);
+- if (RT_SUCCESS(vrc))
+- {
+- RTErrInfoClear(&ErrInfo.Core);
+- vrc = pfnRegistration(&m->Hlp, &m->pReg, &ErrInfo.Core);
+- if ( RT_SUCCESS(vrc)
+- && !RTErrInfoIsSet(&ErrInfo.Core)
+- && VALID_PTR(m->pReg))
+- {
+- if ( VBOXEXTPACK_IS_MAJOR_VER_EQUAL(m->pReg->u32Version, VBOXEXTPACKREG_VERSION)
+- && m->pReg->u32EndMarker == m->pReg->u32Version)
+- {
+- if ( (!m->pReg->pfnInstalled || RT_VALID_PTR(m->pReg->pfnInstalled))
+- && (!m->pReg->pfnUninstall || RT_VALID_PTR(m->pReg->pfnUninstall))
+- && (!m->pReg->pfnVirtualBoxReady || RT_VALID_PTR(m->pReg->pfnVirtualBoxReady))
+- && (!m->pReg->pfnConsoleReady || RT_VALID_PTR(m->pReg->pfnConsoleReady))
+- && (!m->pReg->pfnUnload || RT_VALID_PTR(m->pReg->pfnUnload))
+- && (!m->pReg->pfnVMCreated || RT_VALID_PTR(m->pReg->pfnVMCreated))
+- && (!m->pReg->pfnVMConfigureVMM || RT_VALID_PTR(m->pReg->pfnVMConfigureVMM))
+- && (!m->pReg->pfnVMPowerOn || RT_VALID_PTR(m->pReg->pfnVMPowerOn))
+- && (!m->pReg->pfnVMPowerOff || RT_VALID_PTR(m->pReg->pfnVMPowerOff))
+- && (!m->pReg->pfnQueryObject || RT_VALID_PTR(m->pReg->pfnQueryObject))
+- )
+- {
+- /*
+- * We're good!
+- */
+- m->fUsable = true;
+- m->strWhyUnusable.setNull();
+- return;
+- }
+-
+- m->strWhyUnusable = tr("The registration structure contains on or more invalid function pointers");
+- }
+- else
+- m->strWhyUnusable.printf(tr("Unsupported registration structure version %u.%u"),
+- RT_HIWORD(m->pReg->u32Version), RT_LOWORD(m->pReg->u32Version));
+- }
+- else
+- m->strWhyUnusable.printf(tr("%s returned %Rrc, pReg=%p ErrInfo='%s'"),
+- VBOX_EXTPACK_MAIN_MOD_ENTRY_POINT, vrc, m->pReg, ErrInfo.Core.pszMsg);
+- m->pReg = NULL;
+- }
+- else
+- m->strWhyUnusable.printf(tr("Failed to resolve exported symbol '%s' in the main module: %Rrc"),
+- VBOX_EXTPACK_MAIN_MOD_ENTRY_POINT, vrc);
+-
+- RTLdrClose(m->hMainMod);
+- m->hMainMod = NIL_RTLDRMOD;
+-}
+-
+-/**
+- * Finds a module.
+- *
+- * @returns true if found, false if not.
+- * @param a_pszName The module base name (no extension).
+- * @param a_pszExt The extension. If NULL we use default
+- * extensions.
+- * @param a_enmKind The kind of module to locate.
+- * @param a_pStrFound Where to return the path to the module we've
+- * found.
+- * @param a_pfNative Where to return whether this is a native module
+- * or an agnostic one. Optional.
+- * @param a_pObjInfo Where to return the file system object info for
+- * the module. Optional.
+- */
+-bool ExtPack::findModule(const char *a_pszName, const char *a_pszExt, VBOXEXTPACKMODKIND a_enmKind,
+- Utf8Str *a_pStrFound, bool *a_pfNative, PRTFSOBJINFO a_pObjInfo) const
+-{
+- /*
+- * Try the native path first.
+- */
+- char szPath[RTPATH_MAX];
+- int vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), RTBldCfgTargetDotArch());
+- AssertLogRelRCReturn(vrc, false);
+- vrc = RTPathAppend(szPath, sizeof(szPath), a_pszName);
+- AssertLogRelRCReturn(vrc, false);
+- if (!a_pszExt)
+- {
+- const char *pszDefExt;
+- switch (a_enmKind)
+- {
+- case VBOXEXTPACKMODKIND_RC: pszDefExt = ".rc"; break;
+- case VBOXEXTPACKMODKIND_R0: pszDefExt = ".r0"; break;
+- case VBOXEXTPACKMODKIND_R3: pszDefExt = RTLdrGetSuff(); break;
+- default:
+- AssertFailedReturn(false);
+- }
+- vrc = RTStrCat(szPath, sizeof(szPath), pszDefExt);
+- AssertLogRelRCReturn(vrc, false);
+- }
+-
+- RTFSOBJINFO ObjInfo;
+- if (!a_pObjInfo)
+- a_pObjInfo = &ObjInfo;
+- vrc = RTPathQueryInfo(szPath, a_pObjInfo, RTFSOBJATTRADD_UNIX);
+- if (RT_SUCCESS(vrc) && RTFS_IS_FILE(a_pObjInfo->Attr.fMode))
+- {
+- if (a_pfNative)
+- *a_pfNative = true;
+- *a_pStrFound = szPath;
+- return true;
+- }
+-
+- /*
+- * Try the platform agnostic modules.
+- */
+- /* gcc.x86/module.rel */
+- char szSubDir[32];
+- RTStrPrintf(szSubDir, sizeof(szSubDir), "%s.%s", RTBldCfgCompiler(), RTBldCfgTargetArch());
+- vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), szSubDir);
+- AssertLogRelRCReturn(vrc, false);
+- vrc = RTPathAppend(szPath, sizeof(szPath), a_pszName);
+- AssertLogRelRCReturn(vrc, false);
+- if (!a_pszExt)
+- {
+- vrc = RTStrCat(szPath, sizeof(szPath), ".rel");
+- AssertLogRelRCReturn(vrc, false);
+- }
+- vrc = RTPathQueryInfo(szPath, a_pObjInfo, RTFSOBJATTRADD_UNIX);
+- if (RT_SUCCESS(vrc) && RTFS_IS_FILE(a_pObjInfo->Attr.fMode))
+- {
+- if (a_pfNative)
+- *a_pfNative = false;
+- *a_pStrFound = szPath;
+- return true;
+- }
+-
+- /* x86/module.rel */
+- vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), RTBldCfgTargetArch());
+- AssertLogRelRCReturn(vrc, false);
+- vrc = RTPathAppend(szPath, sizeof(szPath), a_pszName);
+- AssertLogRelRCReturn(vrc, false);
+- if (!a_pszExt)
+- {
+- vrc = RTStrCat(szPath, sizeof(szPath), ".rel");
+- AssertLogRelRCReturn(vrc, false);
+- }
+- vrc = RTPathQueryInfo(szPath, a_pObjInfo, RTFSOBJATTRADD_UNIX);
+- if (RT_SUCCESS(vrc) && RTFS_IS_FILE(a_pObjInfo->Attr.fMode))
+- {
+- if (a_pfNative)
+- *a_pfNative = false;
+- *a_pStrFound = szPath;
+- return true;
+- }
+-
+- return false;
+-}
+-
+-/**
+- * Compares two file system object info structures.
+- *
+- * @returns true if equal, false if not.
+- * @param pObjInfo1 The first.
+- * @param pObjInfo2 The second.
+- * @todo IPRT should do this, really.
+- */
+-/* static */ bool ExtPack::objinfoIsEqual(PCRTFSOBJINFO pObjInfo1, PCRTFSOBJINFO pObjInfo2)
+-{
+- if (!RTTimeSpecIsEqual(&pObjInfo1->ModificationTime, &pObjInfo2->ModificationTime))
+- return false;
+- if (!RTTimeSpecIsEqual(&pObjInfo1->ChangeTime, &pObjInfo2->ChangeTime))
+- return false;
+- if (!RTTimeSpecIsEqual(&pObjInfo1->BirthTime, &pObjInfo2->BirthTime))
+- return false;
+- if (pObjInfo1->cbObject != pObjInfo2->cbObject)
+- return false;
+- if (pObjInfo1->Attr.fMode != pObjInfo2->Attr.fMode)
+- return false;
+- if (pObjInfo1->Attr.enmAdditional == pObjInfo2->Attr.enmAdditional)
+- {
+- switch (pObjInfo1->Attr.enmAdditional)
+- {
+- case RTFSOBJATTRADD_UNIX:
+- if (pObjInfo1->Attr.u.Unix.uid != pObjInfo2->Attr.u.Unix.uid)
+- return false;
+- if (pObjInfo1->Attr.u.Unix.gid != pObjInfo2->Attr.u.Unix.gid)
+- return false;
+- if (pObjInfo1->Attr.u.Unix.INodeIdDevice != pObjInfo2->Attr.u.Unix.INodeIdDevice)
+- return false;
+- if (pObjInfo1->Attr.u.Unix.INodeId != pObjInfo2->Attr.u.Unix.INodeId)
+- return false;
+- if (pObjInfo1->Attr.u.Unix.GenerationId != pObjInfo2->Attr.u.Unix.GenerationId)
+- return false;
+- break;
+- default:
+- break;
+- }
+- }
+- return true;
+-}
+-
+-
+-/**
+- * @interface_method_impl{VBOXEXTPACKHLP,pfnFindModule}
+- */
+-/*static*/ DECLCALLBACK(int)
+-ExtPack::hlpFindModule(PCVBOXEXTPACKHLP pHlp, const char *pszName, const char *pszExt, VBOXEXTPACKMODKIND enmKind,
+- char *pszFound, size_t cbFound, bool *pfNative)
+-{
+- /*
+- * Validate the input and get our bearings.
+- */
+- AssertPtrReturn(pszName, VERR_INVALID_POINTER);
+- AssertPtrNullReturn(pszExt, VERR_INVALID_POINTER);
+- AssertPtrReturn(pszFound, VERR_INVALID_POINTER);
+- AssertPtrNullReturn(pfNative, VERR_INVALID_POINTER);
+- AssertReturn(enmKind > VBOXEXTPACKMODKIND_INVALID && enmKind < VBOXEXTPACKMODKIND_END, VERR_INVALID_PARAMETER);
+-
+- AssertPtrReturn(pHlp, VERR_INVALID_POINTER);
+- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VERR_INVALID_POINTER);
+- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp);
+- AssertPtrReturn(m, VERR_INVALID_POINTER);
+- ExtPack *pThis = m->pThis;
+- AssertPtrReturn(pThis, VERR_INVALID_POINTER);
+-
+- /*
+- * This is just a wrapper around findModule.
+- */
+- Utf8Str strFound;
+- if (pThis->findModule(pszName, pszExt, enmKind, &strFound, pfNative, NULL))
+- return RTStrCopy(pszFound, cbFound, strFound.c_str());
+- return VERR_FILE_NOT_FOUND;
+-}
+-
+-/*static*/ DECLCALLBACK(int)
+-ExtPack::hlpGetFilePath(PCVBOXEXTPACKHLP pHlp, const char *pszFilename, char *pszPath, size_t cbPath)
+-{
+- /*
+- * Validate the input and get our bearings.
+- */
+- AssertPtrReturn(pszFilename, VERR_INVALID_POINTER);
+- AssertPtrReturn(pszPath, VERR_INVALID_POINTER);
+- AssertReturn(cbPath > 0, VERR_BUFFER_OVERFLOW);
+-
+- AssertPtrReturn(pHlp, VERR_INVALID_POINTER);
+- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VERR_INVALID_POINTER);
+- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp);
+- AssertPtrReturn(m, VERR_INVALID_POINTER);
+- ExtPack *pThis = m->pThis;
+- AssertPtrReturn(pThis, VERR_INVALID_POINTER);
+-
+- /*
+- * This is a simple RTPathJoin, no checking if things exists or anything.
+- */
+- int vrc = RTPathJoin(pszPath, cbPath, pThis->m->strExtPackPath.c_str(), pszFilename);
+- if (RT_FAILURE(vrc))
+- RT_BZERO(pszPath, cbPath);
+- return vrc;
+-}
+-
+-/*static*/ DECLCALLBACK(VBOXEXTPACKCTX)
+-ExtPack::hlpGetContext(PCVBOXEXTPACKHLP pHlp)
+-{
+- /*
+- * Validate the input and get our bearings.
+- */
+- AssertPtrReturn(pHlp, VBOXEXTPACKCTX_INVALID);
+- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VBOXEXTPACKCTX_INVALID);
+- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp);
+- AssertPtrReturn(m, VBOXEXTPACKCTX_INVALID);
+- ExtPack *pThis = m->pThis;
+- AssertPtrReturn(pThis, VBOXEXTPACKCTX_INVALID);
+-
+- return pThis->m->enmContext;
+-}
+-
+-/*static*/ DECLCALLBACK(int)
+-ExtPack::hlpReservedN(PCVBOXEXTPACKHLP pHlp)
+-{
+- /*
+- * Validate the input and get our bearings.
+- */
+- AssertPtrReturn(pHlp, VERR_INVALID_POINTER);
+- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VERR_INVALID_POINTER);
+- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp);
+- AssertPtrReturn(m, VERR_INVALID_POINTER);
+- ExtPack *pThis = m->pThis;
+- AssertPtrReturn(pThis, VERR_INVALID_POINTER);
+-
+- return VERR_NOT_IMPLEMENTED;
+-}
+-
+-
+-
+-
+-
+-STDMETHODIMP ExtPack::COMGETTER(Name)(BSTR *a_pbstrName)
+-{
+- CheckComArgOutPointerValid(a_pbstrName);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- Bstr str(m->Desc.strName);
+- str.cloneTo(a_pbstrName);
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(Description)(BSTR *a_pbstrDescription)
+-{
+- CheckComArgOutPointerValid(a_pbstrDescription);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- Bstr str(m->Desc.strDescription);
+- str.cloneTo(a_pbstrDescription);
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(Version)(BSTR *a_pbstrVersion)
+-{
+- CheckComArgOutPointerValid(a_pbstrVersion);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- /* HACK ALERT: This is for easing backporting to 4.1. The edition stuff
+- will be changed into a separate */
+- if (m->Desc.strEdition.isEmpty())
+- {
+- Bstr str(m->Desc.strVersion);
+- str.cloneTo(a_pbstrVersion);
+- }
+- else
+- {
+- RTCString strHack(m->Desc.strVersion);
+- strHack.append('-');
+- strHack.append(m->Desc.strEdition);
+-
+- Bstr str(strHack);
+- str.cloneTo(a_pbstrVersion);
+- }
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(Revision)(ULONG *a_puRevision)
+-{
+- CheckComArgOutPointerValid(a_puRevision);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- *a_puRevision = m->Desc.uRevision;
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(VRDEModule)(BSTR *a_pbstrVrdeModule)
+-{
+- CheckComArgOutPointerValid(a_pbstrVrdeModule);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- Bstr str(m->Desc.strVrdeModule);
+- str.cloneTo(a_pbstrVrdeModule);
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(PlugIns)(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns))
+-{
+- /** @todo implement plug-ins. */
+-#ifdef VBOX_WITH_XPCOM
+- NOREF(a_paPlugIns);
+- NOREF(a_paPlugInsSize);
+-#endif
+- ReturnComNotImplemented();
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(Usable)(BOOL *a_pfUsable)
+-{
+- CheckComArgOutPointerValid(a_pfUsable);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- *a_pfUsable = m->fUsable;
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(WhyUnusable)(BSTR *a_pbstrWhy)
+-{
+- CheckComArgOutPointerValid(a_pbstrWhy);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- m->strWhyUnusable.cloneTo(a_pbstrWhy);
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(ShowLicense)(BOOL *a_pfShowIt)
+-{
+- CheckComArgOutPointerValid(a_pfShowIt);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- *a_pfShowIt = m->Desc.fShowLicense;
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(License)(BSTR *a_pbstrHtmlLicense)
+-{
+- Bstr bstrHtml("html");
+- return QueryLicense(Bstr::Empty.raw(), Bstr::Empty.raw(), bstrHtml.raw(), a_pbstrHtmlLicense);
+-}
+-
+-STDMETHODIMP ExtPack::QueryLicense(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage, IN_BSTR a_bstrFormat,
+- BSTR *a_pbstrLicense)
+-{
+- /*
+- * Validate input.
+- */
+- CheckComArgOutPointerValid(a_pbstrLicense);
+- CheckComArgNotNull(a_bstrPreferredLocale);
+- CheckComArgNotNull(a_bstrPreferredLanguage);
+- CheckComArgNotNull(a_bstrFormat);
+-
+- Utf8Str strPreferredLocale(a_bstrPreferredLocale);
+- if (strPreferredLocale.length() != 2 && strPreferredLocale.length() != 0)
+- return setError(E_FAIL, tr("The preferred locale is a two character string or empty."));
+-
+- Utf8Str strPreferredLanguage(a_bstrPreferredLanguage);
+- if (strPreferredLanguage.length() != 2 && strPreferredLanguage.length() != 0)
+- return setError(E_FAIL, tr("The preferred lanuage is a two character string or empty."));
+-
+- Utf8Str strFormat(a_bstrFormat);
+- if ( !strFormat.equals("html")
+- && !strFormat.equals("rtf")
+- && !strFormat.equals("txt"))
+- return setError(E_FAIL, tr("The license format can only have the values 'html', 'rtf' and 'txt'."));
+-
+- /*
+- * Combine the options to form a file name before locking down anything.
+- */
+- char szName[sizeof(VBOX_EXTPACK_LICENSE_NAME_PREFIX "-de_DE.html") + 2];
+- if (strPreferredLocale.isNotEmpty() && strPreferredLanguage.isNotEmpty())
+- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s_%s.%s",
+- strPreferredLocale.c_str(), strPreferredLanguage.c_str(), strFormat.c_str());
+- else if (strPreferredLocale.isNotEmpty())
+- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s.%s", strPreferredLocale.c_str(), strFormat.c_str());
+- else if (strPreferredLanguage.isNotEmpty())
+- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-_%s.%s", strPreferredLocale.c_str(), strFormat.c_str());
+- else
+- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX ".%s", strFormat.c_str());
+-
+- /*
+- * Effectuate the query.
+- */
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); /* paranoia */
+-
+- if (!m->fUsable)
+- hrc = setError(E_FAIL, tr("%s"), m->strWhyUnusable.c_str());
+- else
+- {
+- char szPath[RTPATH_MAX];
+- int vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), szName);
+- if (RT_SUCCESS(vrc))
+- {
+- void *pvFile;
+- size_t cbFile;
+- vrc = RTFileReadAllEx(szPath, 0, RTFOFF_MAX, RTFILE_RDALL_O_DENY_READ, &pvFile, &cbFile);
+- if (RT_SUCCESS(vrc))
+- {
+- Bstr bstrLicense((const char *)pvFile, cbFile);
+- if (bstrLicense.isNotEmpty())
+- {
+- bstrLicense.detachTo(a_pbstrLicense);
+- hrc = S_OK;
+- }
+- else
+- hrc = setError(VBOX_E_IPRT_ERROR, tr("The license file '%s' is empty or contains invalid UTF-8 encoding"),
+- szPath);
+- RTFileReadAllFree(pvFile, cbFile);
+- }
+- else if (vrc == VERR_FILE_NOT_FOUND || vrc == VERR_PATH_NOT_FOUND)
+- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("The license file '%s' was not found in extension pack '%s'"),
+- szName, m->Desc.strName.c_str());
+- else
+- hrc = setError(VBOX_E_FILE_ERROR, tr("Failed to open the license file '%s': %Rrc"), szPath, vrc);
+- }
+- else
+- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTPathJoin failed: %Rrc"), vrc);
+- }
+- }
+- return hrc;
+-}
+-
+-
+-STDMETHODIMP ExtPack::QueryObject(IN_BSTR a_bstrObjectId, IUnknown **a_ppUnknown)
+-{
+- com::Guid ObjectId;
+- CheckComArgGuid(a_bstrObjectId, ObjectId);
+- CheckComArgOutPointerValid(a_ppUnknown);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- if ( m->pReg
+- && m->pReg->pfnQueryObject)
+- {
+- void *pvUnknown = m->pReg->pfnQueryObject(m->pReg, ObjectId.raw());
+- if (pvUnknown)
+- *a_ppUnknown = (IUnknown *)pvUnknown;
+- else
+- hrc = E_NOINTERFACE;
+- }
+- else
+- hrc = E_NOINTERFACE;
+- }
+- return hrc;
+-}
+-
+-
+-
+-
+-DEFINE_EMPTY_CTOR_DTOR(ExtPackManager)
+-
+-/**
+- * Called by ComObjPtr::createObject when creating the object.
+- *
+- * Just initialize the basic object state, do the rest in init().
+- *
+- * @returns S_OK.
+- */
+-HRESULT ExtPackManager::FinalConstruct()
+-{
+- m = NULL;
+- return S_OK;
+-}
+-
+-/**
+- * Initializes the extension pack manager.
+- *
+- * @returns COM status code.
+- * @param a_pVirtualBox Pointer to the VirtualBox object.
+- * @param a_enmContext The context we're in.
+- */
+-HRESULT ExtPackManager::initExtPackManager(VirtualBox *a_pVirtualBox, VBOXEXTPACKCTX a_enmContext)
+-{
+- AutoInitSpan autoInitSpan(this);
+- AssertReturn(autoInitSpan.isOk(), E_FAIL);
+-
+- /*
+- * Figure some stuff out before creating the instance data.
+- */
+- char szBaseDir[RTPATH_MAX];
+- int rc = RTPathAppPrivateArchTop(szBaseDir, sizeof(szBaseDir));
+- AssertLogRelRCReturn(rc, E_FAIL);
+- rc = RTPathAppend(szBaseDir, sizeof(szBaseDir), VBOX_EXTPACK_INSTALL_DIR);
+- AssertLogRelRCReturn(rc, E_FAIL);
+-
+- char szCertificatDir[RTPATH_MAX];
+- rc = RTPathAppPrivateNoArch(szCertificatDir, sizeof(szCertificatDir));
+- AssertLogRelRCReturn(rc, E_FAIL);
+- rc = RTPathAppend(szCertificatDir, sizeof(szCertificatDir), VBOX_EXTPACK_CERT_DIR);
+- AssertLogRelRCReturn(rc, E_FAIL);
+-
+- /*
+- * Allocate and initialize the instance data.
+- */
+- m = new Data;
+- m->strBaseDir = szBaseDir;
+- m->strCertificatDirPath = szCertificatDir;
+- m->pVirtualBox = a_pVirtualBox;
+- m->enmContext = a_enmContext;
+-
+- /*
+- * Slurp in VBoxVMM which is used by VBoxPuelMain.
+- */
+-#if !defined(RT_OS_WINDOWS) && !defined(RT_OS_DARWIN)
+- if (a_enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON)
+- {
+- int vrc = SUPR3HardenedLdrLoadAppPriv("VBoxVMM", &m->hVBoxVMM, RTLDRLOAD_FLAGS_GLOBAL, NULL);
+- if (RT_FAILURE(vrc))
+- m->hVBoxVMM = NIL_RTLDRMOD;
+- /* cleanup in ::uninit()? */
+- }
+-#endif
+-
+- /*
+- * Go looking for extensions. The RTDirOpen may fail if nothing has been
+- * installed yet, or if root is paranoid and has revoked our access to them.
+- *
+- * We ASSUME that there are no files, directories or stuff in the directory
+- * that exceed the max name length in RTDIRENTRYEX.
+- */
+- HRESULT hrc = S_OK;
+- PRTDIR pDir;
+- int vrc = RTDirOpen(&pDir, szBaseDir);
+- if (RT_SUCCESS(vrc))
+- {
+- for (;;)
+- {
+- RTDIRENTRYEX Entry;
+- vrc = RTDirReadEx(pDir, &Entry, NULL /*pcbDirEntry*/, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
+- if (RT_FAILURE(vrc))
+- {
+- AssertLogRelMsg(vrc == VERR_NO_MORE_FILES, ("%Rrc\n", vrc));
+- break;
+- }
+- if ( RTFS_IS_DIRECTORY(Entry.Info.Attr.fMode)
+- && strcmp(Entry.szName, ".") != 0
+- && strcmp(Entry.szName, "..") != 0
+- && VBoxExtPackIsValidMangledName(Entry.szName) )
+- {
+- /*
+- * All directories are extensions, the shall be nothing but
+- * extensions in this subdirectory.
+- */
+- char szExtPackDir[RTPATH_MAX];
+- vrc = RTPathJoin(szExtPackDir, sizeof(szExtPackDir), m->strBaseDir.c_str(), Entry.szName);
+- AssertLogRelRC(vrc);
+- if (RT_SUCCESS(vrc))
+- {
+- RTCString *pstrName = VBoxExtPackUnmangleName(Entry.szName, RTSTR_MAX);
+- AssertLogRel(pstrName);
+- if (pstrName)
+- {
+- ComObjPtr<ExtPack> NewExtPack;
+- HRESULT hrc2 = NewExtPack.createObject();
+- if (SUCCEEDED(hrc2))
+- hrc2 = NewExtPack->initWithDir(a_enmContext, pstrName->c_str(), szExtPackDir);
+- delete pstrName;
+- if (SUCCEEDED(hrc2))
+- m->llInstalledExtPacks.push_back(NewExtPack);
+- else if (SUCCEEDED(rc))
+- hrc = hrc2;
+- }
+- else
+- hrc = E_UNEXPECTED;
+- }
+- else
+- hrc = E_UNEXPECTED;
+- }
+- }
+- RTDirClose(pDir);
+- }
+- /* else: ignore, the directory probably does not exist or something. */
+-
+- if (SUCCEEDED(hrc))
+- autoInitSpan.setSucceeded();
+- return hrc;
+-}
+-
+-/**
+- * COM cruft.
+- */
+-void ExtPackManager::FinalRelease()
+-{
+- uninit();
+-}
+-
+-/**
+- * Do the actual cleanup.
+- */
+-void ExtPackManager::uninit()
+-{
+- /* Enclose the state transition Ready->InUninit->NotReady */
+- AutoUninitSpan autoUninitSpan(this);
+- if (!autoUninitSpan.uninitDone() && m != NULL)
+- {
+- delete m;
+- m = NULL;
+- }
+-}
+-
+-
+-STDMETHODIMP ExtPackManager::COMGETTER(InstalledExtPacks)(ComSafeArrayOut(IExtPack *, a_paExtPacks))
+-{
+- CheckComArgOutSafeArrayPointerValid(a_paExtPacks);
+- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- SafeIfaceArray<IExtPack> SaExtPacks(m->llInstalledExtPacks);
+- SaExtPacks.detachTo(ComSafeArrayOutArg(a_paExtPacks));
+- }
+-
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackManager::Find(IN_BSTR a_bstrName, IExtPack **a_pExtPack)
+-{
+- CheckComArgNotNull(a_bstrName);
+- CheckComArgOutPointerValid(a_pExtPack);
+- Utf8Str strName(a_bstrName);
+- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- ComPtr<ExtPack> ptrExtPack = findExtPack(strName.c_str());
+- if (!ptrExtPack.isNull())
+- ptrExtPack.queryInterfaceTo(a_pExtPack);
+- else
+- hrc = VBOX_E_OBJECT_NOT_FOUND;
+- }
+-
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackManager::OpenExtPackFile(IN_BSTR a_bstrTarballAndDigest, IExtPackFile **a_ppExtPackFile)
+-{
+- CheckComArgNotNull(a_bstrTarballAndDigest);
+- CheckComArgOutPointerValid(a_ppExtPackFile);
+- AssertReturn(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON, E_UNEXPECTED);
+-
+- /* The API can optionally take a ::SHA-256=<hex-digest> attribute at the
+- end of the file name. This is just a temporary measure for
+- backporting, in 4.2 we'll add another parameter to the method. */
+- Utf8Str strTarball;
+- Utf8Str strDigest;
+- Utf8Str strTarballAndDigest(a_bstrTarballAndDigest);
+- size_t offSha256 = strTarballAndDigest.find("::SHA-256=");
+- if (offSha256 == Utf8Str::npos)
+- strTarball = strTarballAndDigest;
+- else
+- {
+- strTarball = strTarballAndDigest.substr(0, offSha256);
+- strDigest = strTarballAndDigest.substr(offSha256 + sizeof("::SHA-256=") - 1);
+- }
+-
+- ComObjPtr<ExtPackFile> NewExtPackFile;
+- HRESULT hrc = NewExtPackFile.createObject();
+- if (SUCCEEDED(hrc))
+- hrc = NewExtPackFile->initWithFile(strTarball.c_str(), strDigest.c_str(), this, m->pVirtualBox);
+- if (SUCCEEDED(hrc))
+- NewExtPackFile.queryInterfaceTo(a_ppExtPackFile);
+-
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackManager::Uninstall(IN_BSTR a_bstrName, BOOL a_fForcedRemoval, IN_BSTR a_bstrDisplayInfo,
+- IProgress **a_ppProgress)
+-{
+- CheckComArgNotNull(a_bstrName);
+- if (a_ppProgress)
+- *a_ppProgress = NULL;
+- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- PEXTPACKUNINSTALLJOB pJob = NULL;
+- try
+- {
+- pJob = new EXTPACKUNINSTALLJOB;
+- pJob->ptrExtPackMgr = this;
+- pJob->strName = a_bstrName;
+- pJob->fForcedRemoval = a_fForcedRemoval != FALSE;
+- pJob->strDisplayInfo = a_bstrDisplayInfo;
+- hrc = pJob->ptrProgress.createObject();
+- if (SUCCEEDED(hrc))
+- {
+- Bstr bstrDescription = tr("Uninstalling extension pack");
+- hrc = pJob->ptrProgress->init(
+-#ifndef VBOX_COM_INPROC
+- m->pVirtualBox,
+-#endif
+- static_cast<IExtPackManager *>(this),
+- bstrDescription.raw(),
+- FALSE /*aCancelable*/,
+- NULL /*aId*/);
+- }
+- if (SUCCEEDED(hrc))
+- {
+- ComPtr<Progress> ptrProgress = pJob->ptrProgress;
+- int vrc = RTThreadCreate(NULL /*phThread*/, ExtPackManager::doUninstallThreadProc, pJob, 0,
+- RTTHREADTYPE_DEFAULT, 0 /*fFlags*/, "ExtPackUninst");
+- if (RT_SUCCESS(vrc))
+- {
+- pJob = NULL; /* the thread deletes it */
+- ptrProgress.queryInterfaceTo(a_ppProgress);
+- }
+- else
+- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTThreadCreate failed with %Rrc"), vrc);
+- }
+- }
+- catch (std::bad_alloc)
+- {
+- hrc = E_OUTOFMEMORY;
+- }
+- if (pJob)
+- delete pJob;
+- }
+-
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackManager::Cleanup(void)
+-{
+- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- /*
+- * Run the set-uid-to-root binary that performs the cleanup.
+- *
+- * Take the write lock to prevent conflicts with other calls to this
+- * VBoxSVC instance.
+- */
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+- hrc = runSetUidToRootHelper(NULL,
+- "cleanup",
+- "--base-dir", m->strBaseDir.c_str(),
+- (const char *)NULL);
+- }
+-
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackManager::QueryAllPlugInsForFrontend(IN_BSTR a_bstrFrontend, ComSafeArrayOut(BSTR, a_pabstrPlugInModules))
+-{
+- CheckComArgNotNull(a_bstrFrontend);
+- Utf8Str strName(a_bstrFrontend);
+- CheckComArgOutSafeArrayPointerValid(a_pabstrPlugInModules);
+- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- com::SafeArray<BSTR> saPaths((size_t)0);
+- /** @todo implement plug-ins */
+- saPaths.detachTo(ComSafeArrayOutArg(a_pabstrPlugInModules));
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackManager::IsExtPackUsable(IN_BSTR a_bstrExtPack, BOOL *aUsable)
+-{
+- CheckComArgNotNull(a_bstrExtPack);
+- Utf8Str strExtPack(a_bstrExtPack);
+- *aUsable = isExtPackUsable(strExtPack.c_str());
+- return S_OK;
+-}
+-
+-/**
+- * Finds the success indicator string in the stderr output ofr hte helper app.
+- *
+- * @returns Pointer to the indicator.
+- * @param psz The stderr output string. Can be NULL.
+- * @param cch The size of the string.
+- */
+-static char *findSuccessIndicator(char *psz, size_t cch)
+-{
+- static const char s_szSuccessInd[] = "rcExit=RTEXITCODE_SUCCESS";
+- Assert(!cch || strlen(psz) == cch);
+- if (cch < sizeof(s_szSuccessInd) - 1)
+- return NULL;
+- char *pszInd = &psz[cch - sizeof(s_szSuccessInd) + 1];
+- if (strcmp(s_szSuccessInd, pszInd))
+- return NULL;
+- return pszInd;
+-}
+-
+-/**
+- * Runs the helper application that does the privileged operations.
+- *
+- * @returns S_OK or a failure status with error information set.
+- * @param a_pstrDisplayInfo Platform specific display info hacks.
+- * @param a_pszCommand The command to execute.
+- * @param ... The argument strings that goes along with the
+- * command. Maximum is about 16. Terminated by a
+- * NULL.
+- */
+-HRESULT ExtPackManager::runSetUidToRootHelper(Utf8Str const *a_pstrDisplayInfo, const char *a_pszCommand, ...)
+-{
+- /*
+- * Calculate the path to the helper application.
+- */
+- char szExecName[RTPATH_MAX];
+- int vrc = RTPathAppPrivateArch(szExecName, sizeof(szExecName));
+- AssertLogRelRCReturn(vrc, E_UNEXPECTED);
+-
+- vrc = RTPathAppend(szExecName, sizeof(szExecName), VBOX_EXTPACK_HELPER_NAME);
+- AssertLogRelRCReturn(vrc, E_UNEXPECTED);
+-
+- /*
+- * Convert the variable argument list to a RTProcCreate argument vector.
+- */
+- const char *apszArgs[20];
+- unsigned cArgs = 0;
+-
+- LogRel(("ExtPack: Executing '%s'", szExecName));
+- apszArgs[cArgs++] = &szExecName[0];
+-
+- if ( a_pstrDisplayInfo
+- && a_pstrDisplayInfo->isNotEmpty())
+- {
+- LogRel((" '--display-info-hack' '%s'", a_pstrDisplayInfo->c_str()));
+- apszArgs[cArgs++] = "--display-info-hack";
+- apszArgs[cArgs++] = a_pstrDisplayInfo->c_str();
+- }
+-
+- LogRel(("'%s'", a_pszCommand));
+- apszArgs[cArgs++] = a_pszCommand;
+-
+- va_list va;
+- va_start(va, a_pszCommand);
+- const char *pszLastArg;
+- for (;;)
+- {
+- AssertReturn(cArgs < RT_ELEMENTS(apszArgs) - 1, E_UNEXPECTED);
+- pszLastArg = va_arg(va, const char *);
+- if (!pszLastArg)
+- break;
+- LogRel((" '%s'", pszLastArg));
+- apszArgs[cArgs++] = pszLastArg;
+- };
+- va_end(va);
+-
+- LogRel(("\n"));
+- apszArgs[cArgs] = NULL;
+-
+- /*
+- * Create a PIPE which we attach to stderr so that we can read the error
+- * message on failure and report it back to the caller.
+- */
+- RTPIPE hPipeR;
+- RTHANDLE hStdErrPipe;
+- hStdErrPipe.enmType = RTHANDLETYPE_PIPE;
+- vrc = RTPipeCreate(&hPipeR, &hStdErrPipe.u.hPipe, RTPIPE_C_INHERIT_WRITE);
+- AssertLogRelRCReturn(vrc, E_UNEXPECTED);
+-
+- /*
+- * Spawn the process.
+- */
+- HRESULT hrc;
+- RTPROCESS hProcess;
+- vrc = RTProcCreateEx(szExecName,
+- apszArgs,
+- RTENV_DEFAULT,
+- 0 /*fFlags*/,
+- NULL /*phStdIn*/,
+- NULL /*phStdOut*/,
+- &hStdErrPipe,
+- NULL /*pszAsUser*/,
+- NULL /*pszPassword*/,
+- &hProcess);
+- if (RT_SUCCESS(vrc))
+- {
+- vrc = RTPipeClose(hStdErrPipe.u.hPipe);
+- hStdErrPipe.u.hPipe = NIL_RTPIPE;
+-
+- /*
+- * Read the pipe output until the process completes.
+- */
+- RTPROCSTATUS ProcStatus = { -42, RTPROCEXITREASON_ABEND };
+- size_t cbStdErrBuf = 0;
+- size_t offStdErrBuf = 0;
+- char *pszStdErrBuf = NULL;
+- do
+- {
+- /*
+- * Service the pipe. Block waiting for output or the pipe breaking
+- * when the process terminates.
+- */
+- if (hPipeR != NIL_RTPIPE)
+- {
+- char achBuf[1024];
+- size_t cbRead;
+- vrc = RTPipeReadBlocking(hPipeR, achBuf, sizeof(achBuf), &cbRead);
+- if (RT_SUCCESS(vrc))
+- {
+- /* grow the buffer? */
+- size_t cbBufReq = offStdErrBuf + cbRead + 1;
+- if ( cbBufReq > cbStdErrBuf
+- && cbBufReq < _256K)
+- {
+- size_t cbNew = RT_ALIGN_Z(cbBufReq, 16); // 1024
+- void *pvNew = RTMemRealloc(pszStdErrBuf, cbNew);
+- if (pvNew)
+- {
+- pszStdErrBuf = (char *)pvNew;
+- cbStdErrBuf = cbNew;
+- }
+- }
+-
+- /* append if we've got room. */
+- if (cbBufReq <= cbStdErrBuf)
+- {
+- memcpy(&pszStdErrBuf[offStdErrBuf], achBuf, cbRead);
+- offStdErrBuf = offStdErrBuf + cbRead;
+- pszStdErrBuf[offStdErrBuf] = '\0';
+- }
+- }
+- else
+- {
+- AssertLogRelMsg(vrc == VERR_BROKEN_PIPE, ("%Rrc\n", vrc));
+- RTPipeClose(hPipeR);
+- hPipeR = NIL_RTPIPE;
+- }
+- }
+-
+- /*
+- * Service the process. Block if we have no pipe.
+- */
+- if (hProcess != NIL_RTPROCESS)
+- {
+- vrc = RTProcWait(hProcess,
+- hPipeR == NIL_RTPIPE ? RTPROCWAIT_FLAGS_BLOCK : RTPROCWAIT_FLAGS_NOBLOCK,
+- &ProcStatus);
+- if (RT_SUCCESS(vrc))
+- hProcess = NIL_RTPROCESS;
+- else
+- AssertLogRelMsgStmt(vrc == VERR_PROCESS_RUNNING, ("%Rrc\n", vrc), hProcess = NIL_RTPROCESS);
+- }
+- } while ( hPipeR != NIL_RTPIPE
+- || hProcess != NIL_RTPROCESS);
+-
+- LogRel(("ExtPack: enmReason=%d iStatus=%d stderr='%s'\n",
+- ProcStatus.enmReason, ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : ""));
+-
+- /*
+- * Look for rcExit=RTEXITCODE_SUCCESS at the end of the error output,
+- * cut it as it is only there to attest the success.
+- */
+- if (offStdErrBuf > 0)
+- {
+- RTStrStripR(pszStdErrBuf);
+- offStdErrBuf = strlen(pszStdErrBuf);
+- }
+-
+- char *pszSuccessInd = findSuccessIndicator(pszStdErrBuf, offStdErrBuf);
+- if (pszSuccessInd)
+- {
+- *pszSuccessInd = '\0';
+- offStdErrBuf = pszSuccessInd - pszStdErrBuf;
+- }
+- else if ( ProcStatus.enmReason == RTPROCEXITREASON_NORMAL
+- && ProcStatus.iStatus == 0)
+- ProcStatus.iStatus = offStdErrBuf ? 667 : 666;
+-
+- /*
+- * Compose the status code and, on failure, error message.
+- */
+- if ( ProcStatus.enmReason == RTPROCEXITREASON_NORMAL
+- && ProcStatus.iStatus == 0)
+- hrc = S_OK;
+- else if (ProcStatus.enmReason == RTPROCEXITREASON_NORMAL)
+- {
+- AssertMsg(ProcStatus.iStatus != 0, ("%s\n", pszStdErrBuf));
+- hrc = setError(E_FAIL, tr("The installer failed with exit code %d: %s"),
+- ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : "");
+- }
+- else if (ProcStatus.enmReason == RTPROCEXITREASON_SIGNAL)
+- hrc = setError(E_UNEXPECTED, tr("The installer was killed by signal #d (stderr: %s)"),
+- ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : "");
+- else if (ProcStatus.enmReason == RTPROCEXITREASON_ABEND)
+- hrc = setError(E_UNEXPECTED, tr("The installer aborted abnormally (stderr: %s)"),
+- offStdErrBuf ? pszStdErrBuf : "");
+- else
+- hrc = setError(E_UNEXPECTED, tr("internal error: enmReason=%d iStatus=%d stderr='%s'"),
+- ProcStatus.enmReason, ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : "");
+-
+- RTMemFree(pszStdErrBuf);
+- }
+- else
+- hrc = setError(VBOX_E_IPRT_ERROR, tr("Failed to launch the helper application '%s' (%Rrc)"), szExecName, vrc);
+-
+- RTPipeClose(hPipeR);
+- RTPipeClose(hStdErrPipe.u.hPipe);
+-
+- return hrc;
+-}
+-
+-/**
+- * Finds an installed extension pack.
+- *
+- * @returns Pointer to the extension pack if found, NULL if not. (No reference
+- * counting problem here since the caller must be holding the lock.)
+- * @param a_pszName The name of the extension pack.
+- */
+-ExtPack *ExtPackManager::findExtPack(const char *a_pszName)
+-{
+- size_t cchName = strlen(a_pszName);
+-
+- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin();
+- it != m->llInstalledExtPacks.end();
+- it++)
+- {
+- ExtPack::Data *pExtPackData = (*it)->m;
+- if ( pExtPackData
+- && pExtPackData->Desc.strName.length() == cchName
+- && pExtPackData->Desc.strName.equalsIgnoreCase(a_pszName))
+- return (*it);
+- }
+- return NULL;
+-}
+-
+-/**
+- * Removes an installed extension pack from the internal list.
+- *
+- * The package is expected to exist!
+- *
+- * @param a_pszName The name of the extension pack.
+- */
+-void ExtPackManager::removeExtPack(const char *a_pszName)
+-{
+- size_t cchName = strlen(a_pszName);
+-
+- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin();
+- it != m->llInstalledExtPacks.end();
+- it++)
+- {
+- ExtPack::Data *pExtPackData = (*it)->m;
+- if ( pExtPackData
+- && pExtPackData->Desc.strName.length() == cchName
+- && pExtPackData->Desc.strName.equalsIgnoreCase(a_pszName))
+- {
+- m->llInstalledExtPacks.erase(it);
+- return;
+- }
+- }
+- AssertMsgFailed(("%s\n", a_pszName));
+-}
+-
+-/**
+- * Refreshes the specified extension pack.
+- *
+- * This may remove the extension pack from the list, so any non-smart pointers
+- * to the extension pack object may become invalid.
+- *
+- * @returns S_OK and *a_ppExtPack on success, COM status code and error
+- * message on failure. Note that *a_ppExtPack can be NULL.
+- *
+- * @param a_pszName The extension to update..
+- * @param a_fUnusableIsError If @c true, report an unusable extension pack
+- * as an error.
+- * @param a_ppExtPack Where to store the pointer to the extension
+- * pack of it is still around after the refresh.
+- * This is optional.
+- *
+- * @remarks Caller holds the extension manager lock.
+- * @remarks Only called in VBoxSVC.
+- */
+-HRESULT ExtPackManager::refreshExtPack(const char *a_pszName, bool a_fUnusableIsError, ExtPack **a_ppExtPack)
+-{
+- Assert(m->pVirtualBox != NULL); /* Only called from VBoxSVC. */
+-
+- HRESULT hrc;
+- ExtPack *pExtPack = findExtPack(a_pszName);
+- if (pExtPack)
+- {
+- /*
+- * Refresh existing object.
+- */
+- bool fCanDelete;
+- hrc = pExtPack->refresh(&fCanDelete);
+- if (SUCCEEDED(hrc))
+- {
+- if (fCanDelete)
+- {
+- removeExtPack(a_pszName);
+- pExtPack = NULL;
+- }
+- }
+- }
+- else
+- {
+- /*
+- * Do this check here, otherwise VBoxExtPackCalcDir() will fail with a strange
+- * error.
+- */
+- bool fValid = VBoxExtPackIsValidName(a_pszName);
+- if (!fValid)
+- return setError(E_FAIL, "Invalid extension pack name specified");
+-
+- /*
+- * Does the dir exist? Make some special effort to deal with case
+- * sensitivie file systems (a_pszName is case insensitive and mangled).
+- */
+- char szDir[RTPATH_MAX];
+- int vrc = VBoxExtPackCalcDir(szDir, sizeof(szDir), m->strBaseDir.c_str(), a_pszName);
+- AssertLogRelRCReturn(vrc, E_FAIL);
+-
+- RTDIRENTRYEX Entry;
+- RTFSOBJINFO ObjInfo;
+- vrc = RTPathQueryInfoEx(szDir, &ObjInfo, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
+- bool fExists = RT_SUCCESS(vrc) && RTFS_IS_DIRECTORY(ObjInfo.Attr.fMode);
+- if (!fExists)
+- {
+- PRTDIR pDir;
+- vrc = RTDirOpen(&pDir, m->strBaseDir.c_str());
+- if (RT_SUCCESS(vrc))
+- {
+- const char *pszMangledName = RTPathFilename(szDir);
+- for (;;)
+- {
+- vrc = RTDirReadEx(pDir, &Entry, NULL /*pcbDirEntry*/, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
+- if (RT_FAILURE(vrc))
+- {
+- AssertLogRelMsg(vrc == VERR_NO_MORE_FILES, ("%Rrc\n", vrc));
+- break;
+- }
+- if ( RTFS_IS_DIRECTORY(Entry.Info.Attr.fMode)
+- && !RTStrICmp(Entry.szName, pszMangledName))
+- {
+- /*
+- * The installed extension pack has a uses different case.
+- * Update the name and directory variables.
+- */
+- vrc = RTPathJoin(szDir, sizeof(szDir), m->strBaseDir.c_str(), Entry.szName); /* not really necessary */
+- AssertLogRelRCReturnStmt(vrc, RTDirClose(pDir), E_UNEXPECTED);
+- a_pszName = Entry.szName;
+- fExists = true;
+- break;
+- }
+- }
+- RTDirClose(pDir);
+- }
+- }
+- if (fExists)
+- {
+- /*
+- * We've got something, create a new extension pack object for it.
+- */
+- ComObjPtr<ExtPack> ptrNewExtPack;
+- hrc = ptrNewExtPack.createObject();
+- if (SUCCEEDED(hrc))
+- hrc = ptrNewExtPack->initWithDir(m->enmContext, a_pszName, szDir);
+- if (SUCCEEDED(hrc))
+- {
+- m->llInstalledExtPacks.push_back(ptrNewExtPack);
+- if (ptrNewExtPack->m->fUsable)
+- LogRel(("ExtPackManager: Found extension pack '%s'.\n", a_pszName));
+- else
+- LogRel(("ExtPackManager: Found bad extension pack '%s': %s\n",
+- a_pszName, ptrNewExtPack->m->strWhyUnusable.c_str() ));
+- pExtPack = ptrNewExtPack;
+- }
+- }
+- else
+- hrc = S_OK;
+- }
+-
+- /*
+- * Report error if not usable, if that is desired.
+- */
+- if ( SUCCEEDED(hrc)
+- && pExtPack
+- && a_fUnusableIsError
+- && !pExtPack->m->fUsable)
+- hrc = setError(E_FAIL, "%s", pExtPack->m->strWhyUnusable.c_str());
+-
+- if (a_ppExtPack)
+- *a_ppExtPack = pExtPack;
+- return hrc;
+-}
+-
+-/**
+- * Thread wrapper around doInstall.
+- *
+- * @returns VINF_SUCCESS (ignored)
+- * @param hThread The thread handle (ignored).
+- * @param pvJob The job structure.
+- */
+-/*static*/ DECLCALLBACK(int) ExtPackManager::doInstallThreadProc(RTTHREAD hThread, void *pvJob)
+-{
+- PEXTPACKINSTALLJOB pJob = (PEXTPACKINSTALLJOB)pvJob;
+- HRESULT hrc = pJob->ptrExtPackMgr->doInstall(pJob->ptrExtPackFile, pJob->fReplace, &pJob->strDisplayInfo);
+- pJob->ptrProgress->notifyComplete(hrc);
+- delete pJob;
+-
+- NOREF(hThread);
+- return VINF_SUCCESS;
+-}
+-
+-/**
+- * Worker for IExtPackFile::Install.
+- *
+- * Called on a worker thread via doInstallThreadProc.
+- *
+- * @returns COM status code.
+- * @param a_pExtPackFile The extension pack file, caller checks that
+- * it's usable.
+- * @param a_fReplace Whether to replace any existing extpack or just
+- * fail.
+- * @param a_pstrDisplayInfo Host specific display information hacks.
+- * @param a_ppProgress Where to return a progress object some day. Can
+- * be NULL.
+- */
+-HRESULT ExtPackManager::doInstall(ExtPackFile *a_pExtPackFile, bool a_fReplace, Utf8Str const *a_pstrDisplayInfo)
+-{
+- AssertReturn(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON, E_UNEXPECTED);
+- RTCString const * const pStrName = &a_pExtPackFile->m->Desc.strName;
+- RTCString const * const pStrTarball = &a_pExtPackFile->m->strExtPackFile;
+- RTCString const * const pStrTarballDigest = &a_pExtPackFile->m->strDigest;
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- /*
+- * Refresh the data we have on the extension pack as it
+- * may be made stale by direct meddling or some other user.
+- */
+- ExtPack *pExtPack;
+- hrc = refreshExtPack(pStrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack);
+- if (SUCCEEDED(hrc))
+- {
+- if (pExtPack && a_fReplace)
+- hrc = pExtPack->callUninstallHookAndClose(m->pVirtualBox, false /*a_ForcedRemoval*/);
+- else if (pExtPack)
+- hrc = setError(E_FAIL,
+- tr("Extension pack '%s' is already installed."
+- " In case of a reinstallation, please uninstall it first"),
+- pStrName->c_str());
+- }
+- if (SUCCEEDED(hrc))
+- {
+- /*
+- * Run the privileged helper binary that performs the actual
+- * installation. Then create an object for the packet (we do this
+- * even on failure, to be on the safe side).
+- */
+- hrc = runSetUidToRootHelper(a_pstrDisplayInfo,
+- "install",
+- "--base-dir", m->strBaseDir.c_str(),
+- "--cert-dir", m->strCertificatDirPath.c_str(),
+- "--name", pStrName->c_str(),
+- "--tarball", pStrTarball->c_str(),
+- "--sha-256", pStrTarballDigest->c_str(),
+- pExtPack ? "--replace" : (const char *)NULL,
+- (const char *)NULL);
+- if (SUCCEEDED(hrc))
+- {
+- hrc = refreshExtPack(pStrName->c_str(), true /*a_fUnusableIsError*/, &pExtPack);
+- if (SUCCEEDED(hrc) && pExtPack)
+- {
+- RTERRINFOSTATIC ErrInfo;
+- RTErrInfoInitStatic(&ErrInfo);
+- pExtPack->callInstalledHook(m->pVirtualBox, &autoLock, &ErrInfo.Core);
+- if (RT_SUCCESS(ErrInfo.Core.rc))
+- LogRel(("ExtPackManager: Successfully installed extension pack '%s'.\n", pStrName->c_str()));
+- else
+- {
+- LogRel(("ExtPackManager: Installated hook for '%s' failed: %Rrc - %s\n",
+- pStrName->c_str(), ErrInfo.Core.rc, ErrInfo.Core.pszMsg));
+-
+- /*
+- * Uninstall the extpack if the error indicates that.
+- */
+- if (ErrInfo.Core.rc == VERR_EXTPACK_UNSUPPORTED_HOST_UNINSTALL)
+- runSetUidToRootHelper(a_pstrDisplayInfo,
+- "uninstall",
+- "--base-dir", m->strBaseDir.c_str(),
+- "--name", pStrName->c_str(),
+- "--forced",
+- (const char *)NULL);
+- hrc = setError(E_FAIL, tr("The installation hook failed: %Rrc - %s"),
+- ErrInfo.Core.rc, ErrInfo.Core.pszMsg);
+- }
+- }
+- else if (SUCCEEDED(hrc))
+- hrc = setError(E_FAIL, tr("Installing extension pack '%s' failed under mysterious circumstances"),
+- pStrName->c_str());
+- }
+- else
+- {
+- ErrorInfoKeeper Eik;
+- refreshExtPack(pStrName->c_str(), false /*a_fUnusableIsError*/, NULL);
+- }
+- }
+-
+- /*
+- * Do VirtualBoxReady callbacks now for any freshly installed
+- * extension pack (old ones will not be called).
+- */
+- if (m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON)
+- {
+- autoLock.release();
+- callAllVirtualBoxReadyHooks();
+- }
+- }
+-
+- return hrc;
+-}
+-
+-/**
+- * Thread wrapper around doUninstall.
+- *
+- * @returns VINF_SUCCESS (ignored)
+- * @param hThread The thread handle (ignored).
+- * @param pvJob The job structure.
+- */
+-/*static*/ DECLCALLBACK(int) ExtPackManager::doUninstallThreadProc(RTTHREAD hThread, void *pvJob)
+-{
+- PEXTPACKUNINSTALLJOB pJob = (PEXTPACKUNINSTALLJOB)pvJob;
+- HRESULT hrc = pJob->ptrExtPackMgr->doUninstall(&pJob->strName, pJob->fForcedRemoval, &pJob->strDisplayInfo);
+- pJob->ptrProgress->notifyComplete(hrc);
+- delete pJob;
+-
+- NOREF(hThread);
+- return VINF_SUCCESS;
+-}
+-
+-/**
+- * Worker for IExtPackManager::Uninstall.
+- *
+- * Called on a worker thread via doUninstallThreadProc.
+- *
+- * @returns COM status code.
+- * @param a_pstrName The name of the extension pack to uninstall.
+- * @param a_fForcedRemoval Whether to be skip and ignore certain bits of
+- * the extpack feedback. To deal with misbehaving
+- * extension pack hooks.
+- * @param a_pstrDisplayInfo Host specific display information hacks.
+- */
+-HRESULT ExtPackManager::doUninstall(Utf8Str const *a_pstrName, bool a_fForcedRemoval, Utf8Str const *a_pstrDisplayInfo)
+-{
+- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- /*
+- * Refresh the data we have on the extension pack as it may be made
+- * stale by direct meddling or some other user.
+- */
+- ExtPack *pExtPack;
+- hrc = refreshExtPack(a_pstrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack);
+- if (SUCCEEDED(hrc))
+- {
+- if (!pExtPack)
+- {
+- LogRel(("ExtPackManager: Extension pack '%s' is not installed, so nothing to uninstall.\n", a_pstrName->c_str()));
+- hrc = S_OK; /* nothing to uninstall */
+- }
+- else
+- {
+- /*
+- * Call the uninstall hook and unload the main dll.
+- */
+- hrc = pExtPack->callUninstallHookAndClose(m->pVirtualBox, a_fForcedRemoval);
+- if (SUCCEEDED(hrc))
+- {
+- /*
+- * Run the set-uid-to-root binary that performs the
+- * uninstallation. Then refresh the object.
+- *
+- * This refresh is theorically subject to races, but it's of
+- * the don't-do-that variety.
+- */
+- const char *pszForcedOpt = a_fForcedRemoval ? "--forced" : NULL;
+- hrc = runSetUidToRootHelper(a_pstrDisplayInfo,
+- "uninstall",
+- "--base-dir", m->strBaseDir.c_str(),
+- "--name", a_pstrName->c_str(),
+- pszForcedOpt, /* Last as it may be NULL. */
+- (const char *)NULL);
+- if (SUCCEEDED(hrc))
+- {
+- hrc = refreshExtPack(a_pstrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack);
+- if (SUCCEEDED(hrc))
+- {
+- if (!pExtPack)
+- LogRel(("ExtPackManager: Successfully uninstalled extension pack '%s'.\n", a_pstrName->c_str()));
+- else
+- hrc = setError(E_FAIL,
+- tr("Uninstall extension pack '%s' failed under mysterious circumstances"),
+- a_pstrName->c_str());
+- }
+- }
+- else
+- {
+- ErrorInfoKeeper Eik;
+- refreshExtPack(a_pstrName->c_str(), false /*a_fUnusableIsError*/, NULL);
+- }
+- }
+- }
+- }
+-
+- /*
+- * Do VirtualBoxReady callbacks now for any freshly installed
+- * extension pack (old ones will not be called).
+- */
+- if (m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON)
+- {
+- autoLock.release();
+- callAllVirtualBoxReadyHooks();
+- }
+- }
+-
+- return hrc;
+-}
+-
+-
+-/**
+- * Calls the pfnVirtualBoxReady hook for all working extension packs.
+- *
+- * @remarks The caller must not hold any locks.
+- */
+-void ExtPackManager::callAllVirtualBoxReadyHooks(void)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (FAILED(hrc))
+- return;
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+- ComPtr<ExtPackManager> ptrSelfRef = this;
+-
+- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin();
+- it != m->llInstalledExtPacks.end();
+- /* advancing below */)
+- {
+- if ((*it)->callVirtualBoxReadyHook(m->pVirtualBox, &autoLock))
+- it = m->llInstalledExtPacks.begin();
+- else
+- it++;
+- }
+-}
+-
+-/**
+- * Calls the pfnConsoleReady hook for all working extension packs.
+- *
+- * @param a_pConsole The console interface.
+- * @remarks The caller must not hold any locks.
+- */
+-void ExtPackManager::callAllConsoleReadyHooks(IConsole *a_pConsole)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (FAILED(hrc))
+- return;
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+- ComPtr<ExtPackManager> ptrSelfRef = this;
+-
+- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin();
+- it != m->llInstalledExtPacks.end();
+- /* advancing below */)
+- {
+- if ((*it)->callConsoleReadyHook(a_pConsole, &autoLock))
+- it = m->llInstalledExtPacks.begin();
+- else
+- it++;
+- }
+-}
+-
+-/**
+- * Calls the pfnVMCreated hook for all working extension packs.
+- *
+- * @param a_pMachine The machine interface of the new VM.
+- */
+-void ExtPackManager::callAllVmCreatedHooks(IMachine *a_pMachine)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (FAILED(hrc))
+- return;
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */
+- ExtPackList llExtPacks = m->llInstalledExtPacks;
+-
+- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++)
+- (*it)->callVmCreatedHook(m->pVirtualBox, a_pMachine, &autoLock);
+-}
+-
+-/**
+- * Calls the pfnVMConfigureVMM hook for all working extension packs.
+- *
+- * @returns VBox status code. Stops on the first failure, expecting the caller
+- * to signal this to the caller of the CFGM constructor.
+- * @param a_pConsole The console interface for the VM.
+- * @param a_pVM The VM handle.
+- */
+-int ExtPackManager::callAllVmConfigureVmmHooks(IConsole *a_pConsole, PVM a_pVM)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (FAILED(hrc))
+- return Global::vboxStatusCodeFromCOM(hrc);
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */
+- ExtPackList llExtPacks = m->llInstalledExtPacks;
+-
+- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++)
+- {
+- int vrc;
+- (*it)->callVmConfigureVmmHook(a_pConsole, a_pVM, &autoLock, &vrc);
+- if (RT_FAILURE(vrc))
+- return vrc;
+- }
+-
+- return VINF_SUCCESS;
+-}
+-
+-/**
+- * Calls the pfnVMPowerOn hook for all working extension packs.
+- *
+- * @returns VBox status code. Stops on the first failure, expecting the caller
+- * to not power on the VM.
+- * @param a_pConsole The console interface for the VM.
+- * @param a_pVM The VM handle.
+- */
+-int ExtPackManager::callAllVmPowerOnHooks(IConsole *a_pConsole, PVM a_pVM)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (FAILED(hrc))
+- return Global::vboxStatusCodeFromCOM(hrc);
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */
+- ExtPackList llExtPacks = m->llInstalledExtPacks;
+-
+- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++)
+- {
+- int vrc;
+- (*it)->callVmPowerOnHook(a_pConsole, a_pVM, &autoLock, &vrc);
+- if (RT_FAILURE(vrc))
+- return vrc;
+- }
+-
+- return VINF_SUCCESS;
+-}
+-
+-/**
+- * Calls the pfnVMPowerOff hook for all working extension packs.
+- *
+- * @param a_pConsole The console interface for the VM.
+- * @param a_pVM The VM handle. Can be NULL.
+- */
+-void ExtPackManager::callAllVmPowerOffHooks(IConsole *a_pConsole, PVM a_pVM)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (FAILED(hrc))
+- return;
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */
+- ExtPackList llExtPacks = m->llInstalledExtPacks;
+-
+- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++)
+- (*it)->callVmPowerOffHook(a_pConsole, a_pVM, &autoLock);
+-}
+-
+-
+-/**
+- * Checks that the specified extension pack contains a VRDE module and that it
+- * is shipshape.
+- *
+- * @returns S_OK if ok, appropriate failure status code with details.
+- * @param a_pstrExtPack The name of the extension pack.
+- */
+-HRESULT ExtPackManager::checkVrdeExtPack(Utf8Str const *a_pstrExtPack)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- ExtPack *pExtPack = findExtPack(a_pstrExtPack->c_str());
+- if (pExtPack)
+- hrc = pExtPack->checkVrde();
+- else
+- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("No extension pack by the name '%s' was found"), a_pstrExtPack->c_str());
+- }
+-
+- return hrc;
+-}
+-
+-/**
+- * Gets the full path to the VRDE library of the specified extension pack.
+- *
+- * This will do extacly the same as checkVrdeExtPack and then resolve the
+- * library path.
+- *
+- * @returns S_OK if a path is returned, COM error status and message return if
+- * not.
+- * @param a_pstrExtPack The extension pack.
+- * @param a_pstrVrdeLibrary Where to return the path.
+- */
+-int ExtPackManager::getVrdeLibraryPathForExtPack(Utf8Str const *a_pstrExtPack, Utf8Str *a_pstrVrdeLibrary)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- ExtPack *pExtPack = findExtPack(a_pstrExtPack->c_str());
+- if (pExtPack)
+- hrc = pExtPack->getVrdpLibraryName(a_pstrVrdeLibrary);
+- else
+- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("No extension pack by the name '%s' was found"), a_pstrExtPack->c_str());
+- }
+-
+- return hrc;
+-}
+-
+-/**
+- * Gets the name of the default VRDE extension pack.
+- *
+- * @returns S_OK or some COM error status on red tape failure.
+- * @param a_pstrExtPack Where to return the extension pack name. Returns
+- * empty if no extension pack wishes to be the default
+- * VRDP provider.
+- */
+-HRESULT ExtPackManager::getDefaultVrdeExtPack(Utf8Str *a_pstrExtPack)
+-{
+- a_pstrExtPack->setNull();
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin();
+- it != m->llInstalledExtPacks.end();
+- it++)
+- {
+- if ((*it)->wantsToBeDefaultVrde())
+- {
+- *a_pstrExtPack = (*it)->m->Desc.strName;
+- break;
+- }
+- }
+- }
+- return hrc;
+-}
+-
+-/**
+- * Checks if an extension pack is (present and) usable.
+- *
+- * @returns @c true if it is, otherwise @c false.
+- * @param a_pszExtPack The name of the extension pack.
+- */
+-bool ExtPackManager::isExtPackUsable(const char *a_pszExtPack)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (FAILED(hrc))
+- return false;
+- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- ExtPack *pExtPack = findExtPack(a_pszExtPack);
+- return pExtPack != NULL
+- && pExtPack->m->fUsable;
+-}
+-
+-/**
+- * Dumps all extension packs to the release log.
+- */
+-void ExtPackManager::dumpAllToReleaseLog(void)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (FAILED(hrc))
+- return;
+- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- LogRel(("Installed Extension Packs:\n"));
+- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin();
+- it != m->llInstalledExtPacks.end();
+- it++)
+- {
+- ExtPack::Data *pExtPackData = (*it)->m;
+- if (pExtPackData)
+- {
+- if (pExtPackData->fUsable)
+- LogRel((" %s (Version: %s r%u%s%s; VRDE Module: %s)\n",
+- pExtPackData->Desc.strName.c_str(),
+- pExtPackData->Desc.strVersion.c_str(),
+- pExtPackData->Desc.uRevision,
+- pExtPackData->Desc.strEdition.isEmpty() ? "" : " ",
+- pExtPackData->Desc.strEdition.c_str(),
+- pExtPackData->Desc.strVrdeModule.c_str() ));
+- else
+- LogRel((" %s (Version: %s r%u%s%s; VRDE Module: %s unusable because of '%s')\n",
+- pExtPackData->Desc.strName.c_str(),
+- pExtPackData->Desc.strVersion.c_str(),
+- pExtPackData->Desc.uRevision,
+- pExtPackData->Desc.strEdition.isEmpty() ? "" : " ",
+- pExtPackData->Desc.strEdition.c_str(),
+- pExtPackData->Desc.strVrdeModule.c_str(),
+- pExtPackData->strWhyUnusable.c_str() ));
+- }
+- else
+- LogRel((" pExtPackData is NULL\n"));
+- }
+-
+- if (!m->llInstalledExtPacks.size())
+- LogRel((" None installed!\n"));
+-}
+-
+-/* vi: set tabstop=4 shiftwidth=4 expandtab: */
+--- VirtualBox-4.1.18.orig/src/VBox/Main/src-all/ExtPackUtil.cpp 2012-06-20 10:17:34.000000000 -0300
++++ /dev/null 2012-07-24 14:48:18.638572110 -0300
+@@ -1,1385 +0,0 @@
+-/* $Id: ExtPackUtil.cpp $ */
+-/** @file
+- * VirtualBox Main - Extension Pack Utilities and definitions, VBoxC, VBoxSVC, ++.
+- */
+-
+-/*
+- * Copyright (C) 2010-2012 Oracle Corporation
+- *
+- * This file is part of VirtualBox Open Source Edition (OSE), as
+- * available from http://www.virtualbox.org. This file is free software;
+- * you can redistribute it and/or modify it under the terms of the GNU
+- * General Public License (GPL) as published by the Free Software
+- * Foundation, in version 2 as it comes in the "COPYING" file of the
+- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+- */
+-
+-
+-/*******************************************************************************
+-* Header Files *
+-*******************************************************************************/
+-#include "../include/ExtPackUtil.h"
+-
+-#include <iprt/ctype.h>
+-#include <iprt/dir.h>
+-#include <iprt/file.h>
+-#include <iprt/manifest.h>
+-#include <iprt/param.h>
+-#include <iprt/path.h>
+-#include <iprt/sha.h>
+-#include <iprt/string.h>
+-#include <iprt/vfs.h>
+-#include <iprt/tar.h>
+-#include <iprt/zip.h>
+-#include <iprt/cpp/xml.h>
+-
+-#include <VBox/log.h>
+-
+-
+-/**
+- * Worker for VBoxExtPackLoadDesc that loads the plug-in descriptors.
+- *
+- * @returns Same as VBoxExtPackLoadDesc.
+- * @param pVBoxExtPackElm
+- * @param pcPlugIns Where to return the number of plug-ins in the
+- * array.
+- * @param paPlugIns Where to return the plug-in descriptor array.
+- * (RTMemFree it even on failure)
+- */
+-static RTCString *
+-vboxExtPackLoadPlugInDescs(const xml::ElementNode *pVBoxExtPackElm,
+- uint32_t *pcPlugIns, PVBOXEXTPACKPLUGINDESC *paPlugIns)
+-{
+- *pcPlugIns = 0;
+- *paPlugIns = NULL;
+-
+- /** @todo plug-ins */
+- NOREF(pVBoxExtPackElm);
+-
+- return NULL;
+-}
+-
+-/**
+- * Clears the extension pack descriptor.
+- *
+- * @param a_pExtPackDesc The descriptor to clear.
+- */
+-static void vboxExtPackClearDesc(PVBOXEXTPACKDESC a_pExtPackDesc)
+-{
+- a_pExtPackDesc->strName.setNull();
+- a_pExtPackDesc->strDescription.setNull();
+- a_pExtPackDesc->strVersion.setNull();
+- a_pExtPackDesc->strEdition.setNull();
+- a_pExtPackDesc->uRevision = 0;
+- a_pExtPackDesc->strMainModule.setNull();
+- a_pExtPackDesc->strVrdeModule.setNull();
+- a_pExtPackDesc->cPlugIns = 0;
+- a_pExtPackDesc->paPlugIns = NULL;
+- a_pExtPackDesc->fShowLicense = false;
+-}
+-
+-/**
+- * Initializes an extension pack descriptor so that it's safe to call free on
+- * it whatever happens later on.
+- *
+- * @param a_pExtPackDesc The descirptor to initialize.
+- */
+-void VBoxExtPackInitDesc(PVBOXEXTPACKDESC a_pExtPackDesc)
+-{
+- vboxExtPackClearDesc(a_pExtPackDesc);
+-}
+-
+-
+-/**
+- * Load the extension pack descriptor from an XML document.
+- *
+- * @returns NULL on success, pointer to an error message on failure (caller
+- * deletes it).
+- * @param a_pDoc Pointer to the the XML document.
+- * @param a_pExtPackDesc Where to store the extension pack descriptor.
+- */
+-static RTCString *vboxExtPackLoadDescFromDoc(xml::Document *a_pDoc, PVBOXEXTPACKDESC a_pExtPackDesc)
+-{
+- /*
+- * Get the main element and check its version.
+- */
+- const xml::ElementNode *pVBoxExtPackElm = a_pDoc->getRootElement();
+- if ( !pVBoxExtPackElm
+- || strcmp(pVBoxExtPackElm->getName(), "VirtualBoxExtensionPack") != 0)
+- return new RTCString("No VirtualBoxExtensionPack element");
+-
+- RTCString strFormatVersion;
+- if (!pVBoxExtPackElm->getAttributeValue("version", strFormatVersion))
+- return new RTCString("Missing format version");
+- if (!strFormatVersion.equals("1.0"))
+- return &(new RTCString("Unsupported format version: "))->append(strFormatVersion);
+-
+- /*
+- * Read and validate mandatory bits.
+- */
+- const xml::ElementNode *pNameElm = pVBoxExtPackElm->findChildElement("Name");
+- if (!pNameElm)
+- return new RTCString("The 'Name' element is missing");
+- const char *pszName = pNameElm->getValue();
+- if (!VBoxExtPackIsValidName(pszName))
+- return &(new RTCString("Invalid name: "))->append(pszName);
+-
+- const xml::ElementNode *pDescElm = pVBoxExtPackElm->findChildElement("Description");
+- if (!pDescElm)
+- return new RTCString("The 'Description' element is missing");
+- const char *pszDesc = pDescElm->getValue();
+- if (!pszDesc || *pszDesc == '\0')
+- return new RTCString("The 'Description' element is empty");
+- if (strpbrk(pszDesc, "\n\r\t\v\b") != NULL)
+- return new RTCString("The 'Description' must not contain control characters");
+-
+- const xml::ElementNode *pVersionElm = pVBoxExtPackElm->findChildElement("Version");
+- if (!pVersionElm)
+- return new RTCString("The 'Version' element is missing");
+- const char *pszVersion = pVersionElm->getValue();
+- if (!pszVersion || *pszVersion == '\0')
+- return new RTCString("The 'Version' element is empty");
+- if (!VBoxExtPackIsValidVersionString(pszVersion))
+- return &(new RTCString("Invalid version string: "))->append(pszVersion);
+-
+- uint32_t uRevision;
+- if (!pVersionElm->getAttributeValue("revision", uRevision))
+- uRevision = 0;
+-
+- const char *pszEdition;
+- if (!pVersionElm->getAttributeValue("edition", pszEdition))
+- pszEdition = "";
+- if (!VBoxExtPackIsValidEditionString(pszEdition))
+- return &(new RTCString("Invalid edition string: "))->append(pszEdition);
+-
+- const xml::ElementNode *pMainModuleElm = pVBoxExtPackElm->findChildElement("MainModule");
+- if (!pMainModuleElm)
+- return new RTCString("The 'MainModule' element is missing");
+- const char *pszMainModule = pMainModuleElm->getValue();
+- if (!pszMainModule || *pszMainModule == '\0')
+- return new RTCString("The 'MainModule' element is empty");
+- if (!VBoxExtPackIsValidModuleString(pszMainModule))
+- return &(new RTCString("Invalid main module string: "))->append(pszMainModule);
+-
+- /*
+- * The VRDE module, optional.
+- * Accept both none and empty as tokens of no VRDE module.
+- */
+- const char *pszVrdeModule = NULL;
+- const xml::ElementNode *pVrdeModuleElm = pVBoxExtPackElm->findChildElement("VRDEModule");
+- if (pVrdeModuleElm)
+- {
+- pszVrdeModule = pVrdeModuleElm->getValue();
+- if (!pszVrdeModule || *pszVrdeModule == '\0')
+- pszVrdeModule = NULL;
+- else if (!VBoxExtPackIsValidModuleString(pszVrdeModule))
+- return &(new RTCString("Invalid VRDE module string: "))->append(pszVrdeModule);
+- }
+-
+- /*
+- * Whether to show the license, optional. (presense is enough here)
+- */
+- const xml::ElementNode *pShowLicenseElm = pVBoxExtPackElm->findChildElement("ShowLicense");
+- bool fShowLicense = pShowLicenseElm != NULL;
+-
+- /*
+- * Parse plug-in descriptions (last because of the manual memory management).
+- */
+- uint32_t cPlugIns = 0;
+- PVBOXEXTPACKPLUGINDESC paPlugIns = NULL;
+- RTCString *pstrRet = vboxExtPackLoadPlugInDescs(pVBoxExtPackElm, &cPlugIns, &paPlugIns);
+- if (pstrRet)
+- {
+- RTMemFree(paPlugIns);
+- return pstrRet;
+- }
+-
+- /*
+- * Everything seems fine, fill in the return values and return successfully.
+- */
+- a_pExtPackDesc->strName = pszName;
+- a_pExtPackDesc->strDescription = pszDesc;
+- a_pExtPackDesc->strVersion = pszVersion;
+- a_pExtPackDesc->strEdition = pszEdition;
+- a_pExtPackDesc->uRevision = uRevision;
+- a_pExtPackDesc->strMainModule = pszMainModule;
+- a_pExtPackDesc->strVrdeModule = pszVrdeModule;
+- a_pExtPackDesc->cPlugIns = cPlugIns;
+- a_pExtPackDesc->paPlugIns = paPlugIns;
+- a_pExtPackDesc->fShowLicense = fShowLicense;
+-
+- return NULL;
+-}
+-
+-/**
+- * Reads the extension pack descriptor.
+- *
+- * @returns NULL on success, pointer to an error message on failure (caller
+- * deletes it).
+- * @param a_pszDir The directory containing the description file.
+- * @param a_pExtPackDesc Where to store the extension pack descriptor.
+- * @param a_pObjInfo Where to store the object info for the file (unix
+- * attribs). Optional.
+- */
+-RTCString *VBoxExtPackLoadDesc(const char *a_pszDir, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo)
+-{
+- vboxExtPackClearDesc(a_pExtPackDesc);
+-
+- /*
+- * Validate, open and parse the XML file.
+- */
+- char szFilePath[RTPATH_MAX];
+- int vrc = RTPathJoin(szFilePath, sizeof(szFilePath), a_pszDir, VBOX_EXTPACK_DESCRIPTION_NAME);
+- if (RT_FAILURE(vrc))
+- return new RTCString("RTPathJoin failed with %Rrc", vrc);
+-
+- RTFSOBJINFO ObjInfo;
+- vrc = RTPathQueryInfoEx(szFilePath, &ObjInfo, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK);
+- if (RT_FAILURE(vrc))
+- return &(new RTCString())->printf("RTPathQueryInfoEx failed with %Rrc", vrc);
+- if (a_pObjInfo)
+- *a_pObjInfo = ObjInfo;
+- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode))
+- {
+- if (RTFS_IS_SYMLINK(ObjInfo.Attr.fMode))
+- return new RTCString("The XML file is symlinked, that is not allowed");
+- return &(new RTCString)->printf("The XML file is not a file (fMode=%#x)", ObjInfo.Attr.fMode);
+- }
+-
+- xml::Document Doc;
+- {
+- xml::XmlFileParser Parser;
+- try
+- {
+- Parser.read(szFilePath, Doc);
+- }
+- catch (xml::XmlError Err)
+- {
+- return new RTCString(Err.what());
+- }
+- }
+-
+- /*
+- * Hand the xml doc over to the common code.
+- */
+- return vboxExtPackLoadDescFromDoc(&Doc, a_pExtPackDesc);
+-}
+-
+-/**
+- * Reads the extension pack descriptor.
+- *
+- * @returns NULL on success, pointer to an error message on failure (caller
+- * deletes it).
+- * @param a_pszDir The directory containing the description file.
+- * @param a_pExtPackDesc Where to store the extension pack descriptor.
+- * @param a_pObjInfo Where to store the object info for the file (unix
+- * attribs). Optional.
+- */
+-RTCString *VBoxExtPackLoadDescFromVfsFile(RTVFSFILE hVfsFile, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo)
+-{
+- vboxExtPackClearDesc(a_pExtPackDesc);
+-
+- /*
+- * Query the object info.
+- */
+- RTFSOBJINFO ObjInfo;
+- int rc = RTVfsFileQueryInfo(hVfsFile, &ObjInfo, RTFSOBJATTRADD_UNIX);
+- if (RT_FAILURE(rc))
+- return &(new RTCString)->printf("RTVfsFileQueryInfo failed: %Rrc", rc);
+- if (a_pObjInfo)
+- *a_pObjInfo = ObjInfo;
+-
+- /*
+- * The simple approach, read the whole thing into memory and pass this to
+- * the XML parser.
+- */
+-
+- /* Check the file size. */
+- if (ObjInfo.cbObject > _1M || ObjInfo.cbObject < 0)
+- return &(new RTCString)->printf("The XML file is too large (%'RU64 bytes)", ObjInfo.cbObject);
+- size_t const cbFile = (size_t)ObjInfo.cbObject;
+-
+- /* Rewind to the start of the file. */
+- rc = RTVfsFileSeek(hVfsFile, 0, RTFILE_SEEK_BEGIN, NULL);
+- if (RT_FAILURE(rc))
+- return &(new RTCString)->printf("RTVfsFileSeek(,0,BEGIN) failed: %Rrc", rc);
+-
+- /* Allocate memory and read the file content into it. */
+- void *pvFile = RTMemTmpAlloc(cbFile);
+- if (!pvFile)
+- return &(new RTCString)->printf("RTMemTmpAlloc(%zu) failed", cbFile);
+-
+- RTCString *pstrErr = NULL;
+- rc = RTVfsFileRead(hVfsFile, pvFile, cbFile, NULL);
+- if (RT_FAILURE(rc))
+- pstrErr = &(new RTCString)->printf("RTVfsFileRead failed: %Rrc", rc);
+-
+- /*
+- * Parse the file.
+- */
+- xml::Document Doc;
+- if (RT_SUCCESS(rc))
+- {
+- xml::XmlMemParser Parser;
+- RTCString strFileName = VBOX_EXTPACK_DESCRIPTION_NAME;
+- try
+- {
+- Parser.read(pvFile, cbFile, strFileName, Doc);
+- }
+- catch (xml::XmlError Err)
+- {
+- pstrErr = new RTCString(Err.what());
+- rc = VERR_PARSE_ERROR;
+- }
+- }
+- RTMemTmpFree(pvFile);
+-
+- /*
+- * Hand the xml doc over to the common code.
+- */
+- if (RT_SUCCESS(rc))
+- pstrErr = vboxExtPackLoadDescFromDoc(&Doc, a_pExtPackDesc);
+-
+- return pstrErr;
+-}
+-
+-/**
+- * Frees all resources associated with a extension pack descriptor.
+- *
+- * @param a_pExtPackDesc The extension pack descriptor which members
+- * should be freed.
+- */
+-void VBoxExtPackFreeDesc(PVBOXEXTPACKDESC a_pExtPackDesc)
+-{
+- if (!a_pExtPackDesc)
+- return;
+-
+- a_pExtPackDesc->strName.setNull();
+- a_pExtPackDesc->strDescription.setNull();
+- a_pExtPackDesc->strVersion.setNull();
+- a_pExtPackDesc->strEdition.setNull();
+- a_pExtPackDesc->uRevision = 0;
+- a_pExtPackDesc->strMainModule.setNull();
+- a_pExtPackDesc->strVrdeModule.setNull();
+- a_pExtPackDesc->cPlugIns = 0;
+- RTMemFree(a_pExtPackDesc->paPlugIns);
+- a_pExtPackDesc->paPlugIns = NULL;
+- a_pExtPackDesc->fShowLicense = false;
+-}
+-
+-/**
+- * Extract the extension pack name from the tarball path.
+- *
+- * @returns String containing the name on success, the caller must delete it.
+- * NULL if no valid name was found or if we ran out of memory.
+- * @param pszTarball The path to the tarball.
+- */
+-RTCString *VBoxExtPackExtractNameFromTarballPath(const char *pszTarball)
+-{
+- /*
+- * Skip ahead to the filename part and count the number of characters
+- * that matches the criteria for a mangled extension pack name.
+- */
+- const char *pszSrc = RTPathFilename(pszTarball);
+- if (!pszSrc)
+- return NULL;
+-
+- size_t off = 0;
+- while (RT_C_IS_ALNUM(pszSrc[off]) || pszSrc[off] == '_')
+- off++;
+-
+- /*
+- * Check min and max name limits.
+- */
+- if ( off > VBOX_EXTPACK_NAME_MAX_LEN
+- || off < VBOX_EXTPACK_NAME_MIN_LEN)
+- return NULL;
+-
+- /*
+- * Return the unmangled name.
+- */
+- return VBoxExtPackUnmangleName(pszSrc, off);
+-}
+-
+-/**
+- * Validates the extension pack name.
+- *
+- * @returns true if valid, false if not.
+- * @param pszName The name to validate.
+- * @sa VBoxExtPackExtractNameFromTarballPath
+- */
+-bool VBoxExtPackIsValidName(const char *pszName)
+-{
+- if (!pszName)
+- return false;
+-
+- /*
+- * Check the characters making up the name, only english alphabet
+- * characters, decimal digits and spaces are allowed.
+- */
+- size_t off = 0;
+- while (pszName[off])
+- {
+- if (!RT_C_IS_ALNUM(pszName[off]) && pszName[off] != ' ')
+- return false;
+- off++;
+- }
+-
+- /*
+- * Check min and max name limits.
+- */
+- if ( off > VBOX_EXTPACK_NAME_MAX_LEN
+- || off < VBOX_EXTPACK_NAME_MIN_LEN)
+- return false;
+-
+- return true;
+-}
+-
+-/**
+- * Checks if an alledged manged extension pack name.
+- *
+- * @returns true if valid, false if not.
+- * @param pszMangledName The mangled name to validate.
+- * @param cchMax The max number of chars to test.
+- * @sa VBoxExtPackMangleName
+- */
+-bool VBoxExtPackIsValidMangledName(const char *pszMangledName, size_t cchMax /*= RTSTR_MAX*/)
+-{
+- if (!pszMangledName)
+- return false;
+-
+- /*
+- * Check the characters making up the name, only english alphabet
+- * characters, decimal digits and underscores (=space) are allowed.
+- */
+- size_t off = 0;
+- while (off < cchMax && pszMangledName[off])
+- {
+- if (!RT_C_IS_ALNUM(pszMangledName[off]) && pszMangledName[off] != '_')
+- return false;
+- off++;
+- }
+-
+- /*
+- * Check min and max name limits.
+- */
+- if ( off > VBOX_EXTPACK_NAME_MAX_LEN
+- || off < VBOX_EXTPACK_NAME_MIN_LEN)
+- return false;
+-
+- return true;
+-}
+-
+-/**
+- * Mangle an extension pack name so it can be used by a directory or file name.
+- *
+- * @returns String containing the mangled name on success, the caller must
+- * delete it. NULL on failure.
+- * @param pszName The unmangled name.
+- * @sa VBoxExtPackUnmangleName, VBoxExtPackIsValidMangledName
+- */
+-RTCString *VBoxExtPackMangleName(const char *pszName)
+-{
+- AssertReturn(VBoxExtPackIsValidName(pszName), NULL);
+-
+- char szTmp[VBOX_EXTPACK_NAME_MAX_LEN + 1];
+- size_t off = 0;
+- char ch;
+- while ((ch = pszName[off]) != '\0')
+- {
+- if (ch == ' ')
+- ch = '_';
+- szTmp[off++] = ch;
+- }
+- szTmp[off] = '\0';
+- Assert(VBoxExtPackIsValidMangledName(szTmp));
+-
+- return new RTCString(szTmp, off);
+-}
+-
+-/**
+- * Unmangle an extension pack name (reverses VBoxExtPackMangleName).
+- *
+- * @returns String containing the mangled name on success, the caller must
+- * delete it. NULL on failure.
+- * @param pszMangledName The mangled name.
+- * @param cchMax The max name length. RTSTR_MAX is fine.
+- * @sa VBoxExtPackMangleName, VBoxExtPackIsValidMangledName
+- */
+-RTCString *VBoxExtPackUnmangleName(const char *pszMangledName, size_t cchMax)
+-{
+- AssertReturn(VBoxExtPackIsValidMangledName(pszMangledName, cchMax), NULL);
+-
+- char szTmp[VBOX_EXTPACK_NAME_MAX_LEN + 1];
+- size_t off = 0;
+- char ch;
+- while ( off < cchMax
+- && (ch = pszMangledName[off]) != '\0')
+- {
+- if (ch == '_')
+- ch = ' ';
+- else
+- AssertReturn(RT_C_IS_ALNUM(ch) || ch == ' ', NULL);
+- szTmp[off++] = ch;
+- }
+- szTmp[off] = '\0';
+- AssertReturn(VBoxExtPackIsValidName(szTmp), NULL);
+-
+- return new RTCString(szTmp, off);
+-}
+-
+-/**
+- * Constructs the extension pack directory path.
+- *
+- * A combination of RTPathJoin and VBoxExtPackMangleName.
+- *
+- * @returns IPRT status code like RTPathJoin.
+- * @param pszExtPackDir Where to return the directory path.
+- * @param cbExtPackDir The size of the return buffer.
+- * @param pszParentDir The parent directory (".../Extensions").
+- * @param pszName The extension pack name, unmangled.
+- */
+-int VBoxExtPackCalcDir(char *pszExtPackDir, size_t cbExtPackDir, const char *pszParentDir, const char *pszName)
+-{
+- AssertReturn(VBoxExtPackIsValidName(pszName), VERR_INTERNAL_ERROR_5);
+-
+- RTCString *pstrMangledName = VBoxExtPackMangleName(pszName);
+- if (!pstrMangledName)
+- return VERR_INTERNAL_ERROR_4;
+-
+- int vrc = RTPathJoin(pszExtPackDir, cbExtPackDir, pszParentDir, pstrMangledName->c_str());
+- delete pstrMangledName;
+-
+- return vrc;
+-}
+-
+-
+-/**
+- * Validates the extension pack version string.
+- *
+- * @returns true if valid, false if not.
+- * @param pszVersion The version string to validate.
+- */
+-bool VBoxExtPackIsValidVersionString(const char *pszVersion)
+-{
+- if (!pszVersion || *pszVersion == '\0')
+- return false;
+-
+- /* 1.x.y.z... */
+- for (;;)
+- {
+- if (!RT_C_IS_DIGIT(*pszVersion))
+- return false;
+- do
+- pszVersion++;
+- while (RT_C_IS_DIGIT(*pszVersion));
+- if (*pszVersion != '.')
+- break;
+- pszVersion++;
+- }
+-
+- /* upper case string + numbers indicating the build type */
+- if (*pszVersion == '-' || *pszVersion == '_')
+- {
+- /** @todo Should probably restrict this to known build types (alpha,
+- * beta, rc, ++). */
+- do
+- pszVersion++;
+- while ( RT_C_IS_DIGIT(*pszVersion)
+- || RT_C_IS_UPPER(*pszVersion)
+- || *pszVersion == '-'
+- || *pszVersion == '_');
+- }
+-
+- return *pszVersion == '\0';
+-}
+-
+-/**
+- * Validates the extension pack edition string.
+- *
+- * @returns true if valid, false if not.
+- * @param pszEdition The edition string to validate.
+- */
+-bool VBoxExtPackIsValidEditionString(const char *pszEdition)
+-{
+- if (*pszEdition)
+- {
+- if (!RT_C_IS_UPPER(*pszEdition))
+- return false;
+-
+- do
+- pszEdition++;
+- while ( RT_C_IS_UPPER(*pszEdition)
+- || RT_C_IS_DIGIT(*pszEdition)
+- || *pszEdition == '-'
+- || *pszEdition == '_');
+- }
+- return *pszEdition == '\0';
+-}
+-
+-/**
+- * Validates an extension pack module string.
+- *
+- * @returns true if valid, false if not.
+- * @param pszModule The module string to validate.
+- */
+-bool VBoxExtPackIsValidModuleString(const char *pszModule)
+-{
+- if (!pszModule || *pszModule == '\0')
+- return false;
+-
+- /* Restricted charset, no extensions (dots). */
+- while ( RT_C_IS_ALNUM(*pszModule)
+- || *pszModule == '-'
+- || *pszModule == '_')
+- pszModule++;
+-
+- return *pszModule == '\0';
+-}
+-
+-/**
+- * RTStrPrintfv wrapper.
+- *
+- * @returns @a rc
+- * @param rc The status code to return.
+- * @param pszError The error buffer.
+- * @param cbError The size of the buffer.
+- * @param pszFormat The error message format string.
+- * @param ... Format arguments.
+- */
+-static int vboxExtPackReturnError(int rc, char *pszError, size_t cbError, const char *pszFormat, ...)
+-{
+- va_list va;
+- va_start(va, pszFormat);
+- RTStrPrintfV(pszError, cbError, pszFormat, va);
+- va_end(va);
+- return rc;
+-}
+-
+-/**
+- * RTStrPrintfv wrapper.
+- *
+- * @param pszError The error buffer.
+- * @param cbError The size of the buffer.
+- * @param pszFormat The error message format string.
+- * @param ... Format arguments.
+- */
+-static void vboxExtPackSetError(char *pszError, size_t cbError, const char *pszFormat, ...)
+-{
+- va_list va;
+- va_start(va, pszFormat);
+- RTStrPrintfV(pszError, cbError, pszFormat, va);
+- va_end(va);
+-}
+-
+-/**
+- * Verifies the manifest and its signature.
+- *
+- * @returns VBox status code, failures with message.
+- * @param hManifestFile The xml from the extension pack.
+- * @param pszExtPackName The expected extension pack name. This can be
+- * NULL, in which we don't have any expectations.
+- * @param pszError Where to store an error message on failure.
+- * @param cbError The size of the buffer @a pszError points to.
+- */
+-static int vboxExtPackVerifyXml(RTVFSFILE hXmlFile, const char *pszExtPackName, char *pszError, size_t cbError)
+-{
+- /*
+- * Load the XML.
+- */
+- VBOXEXTPACKDESC ExtPackDesc;
+- RTCString *pstrErr = VBoxExtPackLoadDescFromVfsFile(hXmlFile, &ExtPackDesc, NULL);
+- if (pstrErr)
+- {
+- RTStrCopy(pszError, cbError, pstrErr->c_str());
+- delete pstrErr;
+- return VERR_PARSE_ERROR;
+- }
+-
+- /*
+- * Check the name.
+- */
+- /** @todo drop this restriction after the old install interface is
+- * dropped. */
+- int rc = VINF_SUCCESS;
+- if ( pszExtPackName
+- && !ExtPackDesc.strName.equalsIgnoreCase(pszExtPackName))
+- rc = vboxExtPackReturnError(VERR_NOT_EQUAL, pszError, cbError,
+- "The name of the downloaded file and the name stored inside the extension pack does not match"
+- " (xml='%s' file='%s')", ExtPackDesc.strName.c_str(), pszExtPackName);
+- return rc;
+-}
+-
+-/**
+- * Verifies the manifest and its signature.
+- *
+- * @returns VBox status code, failures with message.
+- * @param hOurManifest The manifest we compiled.
+- * @param hManifestFile The manifest file in the extension pack.
+- * @param hSignatureFile The manifest signature file.
+- * @param pszError Where to store an error message on failure.
+- * @param cbError The size of the buffer @a pszError points to.
+- */
+-static int vboxExtPackVerifyManifestAndSignature(RTMANIFEST hOurManifest, RTVFSFILE hManifestFile, RTVFSFILE hSignatureFile,
+- char *pszError, size_t cbError)
+-{
+- /*
+- * Read the manifest from the extension pack.
+- */
+- int rc = RTVfsFileSeek(hManifestFile, 0, RTFILE_SEEK_BEGIN, NULL);
+- if (RT_FAILURE(rc))
+- return vboxExtPackReturnError(rc, pszError, cbError, "RTVfsFileSeek failed: %Rrc", rc);
+-
+- RTMANIFEST hTheirManifest;
+- rc = RTManifestCreate(0 /*fFlags*/, &hTheirManifest);
+- if (RT_FAILURE(rc))
+- return vboxExtPackReturnError(rc, pszError, cbError, "RTManifestCreate failed: %Rrc", rc);
+-
+- RTVFSIOSTREAM hVfsIos = RTVfsFileToIoStream(hManifestFile);
+- rc = RTManifestReadStandard(hTheirManifest, hVfsIos);
+- RTVfsIoStrmRelease(hVfsIos);
+- if (RT_SUCCESS(rc))
+- {
+- /*
+- * Compare the manifests.
+- */
+- static const char *s_apszIgnoreEntries[] =
+- {
+- VBOX_EXTPACK_MANIFEST_NAME,
+- VBOX_EXTPACK_SIGNATURE_NAME,
+- "./" VBOX_EXTPACK_MANIFEST_NAME,
+- "./" VBOX_EXTPACK_SIGNATURE_NAME,
+- NULL
+- };
+- char szError[RTPATH_MAX];
+- rc = RTManifestEqualsEx(hOurManifest, hTheirManifest, &s_apszIgnoreEntries[0], NULL,
+- RTMANIFEST_EQUALS_IGN_MISSING_ATTRS /*fFlags*/,
+- szError, sizeof(szError));
+- if (RT_SUCCESS(rc))
+- {
+- /*
+- * Validate the manifest file signature.
+- */
+- /** @todo implement signature stuff */
+- NOREF(hSignatureFile);
+-
+- }
+- else if (rc == VERR_NOT_EQUAL && szError[0])
+- vboxExtPackSetError(pszError, cbError, "Manifest mismatch: %s", szError);
+- else
+- vboxExtPackSetError(pszError, cbError, "RTManifestEqualsEx failed: %Rrc", rc);
+-#if 0
+- RTVFSIOSTREAM hVfsIosStdOut = NIL_RTVFSIOSTREAM;
+- RTVfsIoStrmFromStdHandle(RTHANDLESTD_OUTPUT, RTFILE_O_WRITE, true, &hVfsIosStdOut);
+- RTVfsIoStrmWrite(hVfsIosStdOut, "Our:\n", sizeof("Our:\n") - 1, true, NULL);
+- RTManifestWriteStandard(hOurManifest, hVfsIosStdOut);
+- RTVfsIoStrmWrite(hVfsIosStdOut, "Their:\n", sizeof("Their:\n") - 1, true, NULL);
+- RTManifestWriteStandard(hTheirManifest, hVfsIosStdOut);
+-#endif
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "Error parsing '%s': %Rrc", VBOX_EXTPACK_MANIFEST_NAME, rc);
+-
+- RTManifestRelease(hTheirManifest);
+- return rc;
+-}
+-
+-
+-/**
+- * Verifies the file digest (if specified) and returns the SHA-256 of the file.
+- *
+- * @returns
+- * @param hFileManifest Manifest containing a SHA-256 digest of the file
+- * that was calculated as the file was processed.
+- * @param pszFileDigest SHA-256 digest of the file.
+- * @param pStrDigest Where to return the SHA-256 digest. Optional.
+- * @param pszError Where to write an error message on failure.
+- * @param cbError The size of the @a pszError buffer.
+- */
+-static int vboxExtPackVerifyFileDigest(RTMANIFEST hFileManifest, const char *pszFileDigest,
+- RTCString *pStrDigest, char *pszError, size_t cbError)
+-{
+- /*
+- * Extract the SHA-256 entry for the extpack file.
+- */
+- char szCalculatedDigest[RTSHA256_DIGEST_LEN + 1];
+- int rc = RTManifestEntryQueryAttr(hFileManifest, "extpack", NULL /*no name*/, RTMANIFEST_ATTR_SHA256,
+- szCalculatedDigest, sizeof(szCalculatedDigest), NULL);
+- if (RT_SUCCESS(rc))
+- {
+- /*
+- * Convert the two strings to binary form before comparing.
+- * We convert the calculated hash even if we don't have anything to
+- * compare with, just to validate it.
+- */
+- uint8_t abCalculatedHash[RTSHA256_HASH_SIZE];
+- rc = RTSha256FromString(szCalculatedDigest, abCalculatedHash);
+- if (RT_SUCCESS(rc))
+- {
+- if ( pszFileDigest
+- && *pszFileDigest != '\0')
+- {
+- uint8_t abFileHash[RTSHA256_HASH_SIZE];
+- rc = RTSha256FromString(pszFileDigest, abFileHash);
+- if (RT_SUCCESS(rc))
+- {
+- if (memcmp(abFileHash, abCalculatedHash, sizeof(abFileHash)))
+- {
+- vboxExtPackSetError(pszError, cbError, "The extension pack file has changed (SHA-256 mismatch)");
+- rc = VERR_NOT_EQUAL;
+- }
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "Bad SHA-256 '%s': %Rrc", szCalculatedDigest, rc);
+- }
+-
+- /*
+- * Set the output hash on success.
+- */
+- if (pStrDigest && RT_SUCCESS(rc))
+- {
+- try
+- {
+- *pStrDigest = szCalculatedDigest;
+- }
+- catch (std::bad_alloc)
+- {
+- rc = VERR_NO_MEMORY;
+- }
+- }
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "Bad SHA-256 '%s': %Rrc", szCalculatedDigest, rc);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTManifestEntryGetAttr: %Rrc", rc);
+- return rc;
+-}
+-
+-
+-
+-/**
+- * Validates a standard file.
+- *
+- * Generally all files are
+- *
+- * @returns VBox status code, failure message in @a pszError.
+- * @param pszAdjName The adjusted member name.
+- * @param enmType The VFS object type.
+- * @param phVfsObj The pointer to the VFS object handle variable.
+- * This is both input and output.
+- * @param phVfsFile Where to store the handle to the memorized
+- * file. This is NULL for license files.
+- * @param pszError Where to write an error message on failure.
+- * @param cbError The size of the @a pszError buffer.
+- */
+-static int VBoxExtPackValidateStandardFile(const char *pszAdjName, RTVFSOBJTYPE enmType,
+- PRTVFSOBJ phVfsObj, PRTVFSFILE phVfsFile, char *pszError, size_t cbError)
+-{
+- int rc;
+-
+- /*
+- * Make sure it's a file and that it isn't too large.
+- */
+- if (phVfsFile && *phVfsFile != NIL_RTVFSFILE)
+- rc = vboxExtPackReturnError(VERR_DUPLICATE, pszError, cbError,
+- "There can only be one '%s'", pszAdjName);
+- else if (enmType != RTVFSOBJTYPE_IO_STREAM && enmType != RTVFSOBJTYPE_FILE)
+- rc = vboxExtPackReturnError(VERR_NOT_A_FILE, pszError, cbError,
+- "Standard member '%s' is not a file", pszAdjName);
+- else
+- {
+- RTFSOBJINFO ObjInfo;
+- rc = RTVfsObjQueryInfo(*phVfsObj, &ObjInfo, RTFSOBJATTRADD_NOTHING);
+- if (RT_SUCCESS(rc))
+- {
+- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode))
+- rc = vboxExtPackReturnError(VERR_NOT_A_FILE, pszError, cbError,
+- "Standard member '%s' is not a file", pszAdjName);
+- else if (ObjInfo.cbObject >= _1M)
+- rc = vboxExtPackReturnError(VERR_OUT_OF_RANGE, pszError, cbError,
+- "Standard member '%s' is too large: %'RU64 bytes (max 1 MB)",
+- pszAdjName, (uint64_t)ObjInfo.cbObject);
+- else
+- {
+- /*
+- * Make an in memory copy of the stream and check that the file
+- * is UTF-8 clean.
+- */
+- RTVFSIOSTREAM hVfsIos = RTVfsObjToIoStream(*phVfsObj);
+- RTVFSFILE hVfsFile;
+- rc = RTVfsMemorizeIoStreamAsFile(hVfsIos, RTFILE_O_READ, &hVfsFile);
+- if (RT_SUCCESS(rc))
+- {
+- rc = RTVfsIoStrmValidateUtf8Encoding(hVfsIos,
+- RTVFS_VALIDATE_UTF8_BY_RTC_3629 | RTVFS_VALIDATE_UTF8_NO_NULL,
+- NULL);
+- if (RT_SUCCESS(rc))
+- {
+- /*
+- * Replace *phVfsObj with the memorized file.
+- */
+- rc = RTVfsFileSeek(hVfsFile, 0, RTFILE_SEEK_BEGIN, NULL);
+- if (RT_SUCCESS(rc))
+- {
+- RTVfsObjRelease(*phVfsObj);
+- *phVfsObj = RTVfsObjFromFile(hVfsFile);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTVfsFileSeek failed on '%s': %Rrc", pszAdjName, rc);
+- }
+-
+- if (phVfsFile && RT_SUCCESS(rc))
+- *phVfsFile = hVfsFile;
+- else
+- RTVfsFileRelease(hVfsFile);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTVfsMemorizeIoStreamAsFile failed on '%s': %Rrc", pszAdjName, rc);
+- RTVfsIoStrmRelease(hVfsIos);
+- }
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTVfsObjQueryInfo failed on '%s': %Rrc", pszAdjName, rc);
+- }
+- return rc;
+-}
+-
+-
+-/**
+- * Validates a name in an extension pack.
+- *
+- * We restrict the charset to try make sure the extension pack can be unpacked
+- * on all file systems.
+- *
+- * @returns VBox status code, failures with message.
+- * @param pszName The name to validate.
+- * @param pszError Where to store an error message on failure.
+- * @param cbError The size of the buffer @a pszError points to.
+- */
+-static int vboxExtPackValidateMemberName(const char *pszName, char *pszError, size_t cbError)
+-{
+- if (RTPathStartsWithRoot(pszName))
+- return vboxExtPackReturnError(VERR_PATH_IS_NOT_RELATIVE, pszError, cbError, "'%s': starts with root spec", pszName);
+-
+- const char *pszErr = NULL;
+- const char *psz = pszName;
+- int ch;
+- while ((ch = *psz) != '\0')
+- {
+- /* Character set restrictions. */
+- if (ch < 0 || ch >= 128)
+- {
+- pszErr = "Only 7-bit ASCII allowed";
+- break;
+- }
+- if (ch <= 31 || ch == 127)
+- {
+- pszErr = "No control characters are not allowed";
+- break;
+- }
+- if (ch == '\\')
+- {
+- pszErr = "Only backward slashes are not allowed";
+- break;
+- }
+- if (strchr("'\":;*?|[]<>(){}", ch))
+- {
+- pszErr = "The characters ', \", :, ;, *, ?, |, [, ], <, >, (, ), { and } are not allowed";
+- break;
+- }
+-
+- /* Take the simple way out and ban all ".." sequences. */
+- if ( ch == '.'
+- && psz[1] == '.')
+- {
+- pszErr = "Double dot sequence are not allowed";
+- break;
+- }
+-
+- /* Keep the tree shallow or the hardening checks will fail. */
+- if (psz - pszName > VBOX_EXTPACK_MAX_MEMBER_NAME_LENGTH)
+- {
+- pszErr = "Too long";
+- break;
+- }
+-
+- /* advance */
+- psz++;
+- }
+-
+- if (pszErr)
+- return vboxExtPackReturnError(VERR_INVALID_NAME, pszError, cbError,
+- "Bad member name '%s' (pos %zu): %s", pszName, (size_t)(psz - pszName), pszErr);
+- return RTEXITCODE_SUCCESS;
+-}
+-
+-
+-/**
+- * Validates a file in an extension pack.
+- *
+- * @returns VBox status code, failures with message.
+- * @param pszName The name of the file.
+- * @param hVfsObj The VFS object.
+- * @param pszError Where to store an error message on failure.
+- * @param cbError The size of the buffer @a pszError points to.
+- */
+-static int vboxExtPackValidateMemberFile(const char *pszName, RTVFSOBJ hVfsObj, char *pszError, size_t cbError)
+-{
+- int rc = vboxExtPackValidateMemberName(pszName, pszError, cbError);
+- if (RT_SUCCESS(rc))
+- {
+- RTFSOBJINFO ObjInfo;
+- rc = RTVfsObjQueryInfo(hVfsObj, &ObjInfo, RTFSOBJATTRADD_NOTHING);
+- if (RT_SUCCESS(rc))
+- {
+- if (ObjInfo.cbObject >= 9*_1G64)
+- rc = vboxExtPackReturnError(VERR_OUT_OF_RANGE, pszError, cbError,
+- "'%s': too large (%'RU64 bytes)",
+- pszName, (uint64_t)ObjInfo.cbObject);
+- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode))
+- rc = vboxExtPackReturnError(VERR_NOT_A_FILE, pszError, cbError,
+- "The alleged file '%s' has a mode mask stating otherwise (%RTfmode)",
+- pszName, ObjInfo.Attr.fMode);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTVfsObjQueryInfo failed on '%s': %Rrc", pszName, rc);
+- }
+- return rc;
+-}
+-
+-
+-/**
+- * Validates a directory in an extension pack.
+- *
+- * @returns VBox status code, failures with message.
+- * @param pszName The name of the directory.
+- * @param hVfsObj The VFS object.
+- * @param pszError Where to store an error message on failure.
+- * @param cbError The size of the buffer @a pszError points to.
+- */
+-static int vboxExtPackValidateMemberDir(const char *pszName, RTVFSOBJ hVfsObj, char *pszError, size_t cbError)
+-{
+- int rc = vboxExtPackValidateMemberName(pszName, pszError, cbError);
+- if (RT_SUCCESS(rc))
+- {
+- RTFSOBJINFO ObjInfo;
+- rc = RTVfsObjQueryInfo(hVfsObj, &ObjInfo, RTFSOBJATTRADD_NOTHING);
+- if (RT_SUCCESS(rc))
+- {
+- if (!RTFS_IS_DIRECTORY(ObjInfo.Attr.fMode))
+- rc = vboxExtPackReturnError(VERR_NOT_A_DIRECTORY, pszError, cbError,
+- "The alleged directory '%s' has a mode mask saying differently (%RTfmode)",
+- pszName, ObjInfo.Attr.fMode);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTVfsObjQueryInfo failed on '%s': %Rrc", pszName, rc);
+- }
+- return rc;
+-}
+-
+-/**
+- * Validates a member of an extension pack.
+- *
+- * @returns VBox status code, failures with message.
+- * @param pszName The name of the directory.
+- * @param enmType The object type.
+- * @param hVfsObj The VFS object.
+- * @param pszError Where to store an error message on failure.
+- * @param cbError The size of the buffer @a pszError points to.
+- */
+-int VBoxExtPackValidateMember(const char *pszName, RTVFSOBJTYPE enmType, RTVFSOBJ hVfsObj, char *pszError, size_t cbError)
+-{
+- Assert(cbError > 0);
+- *pszError = '\0';
+-
+- int rc;
+- if ( enmType == RTVFSOBJTYPE_FILE
+- || enmType == RTVFSOBJTYPE_IO_STREAM)
+- rc = vboxExtPackValidateMemberFile(pszName, hVfsObj, pszError, cbError);
+- else if ( enmType == RTVFSOBJTYPE_DIR
+- || enmType == RTVFSOBJTYPE_BASE)
+- rc = vboxExtPackValidateMemberDir(pszName, hVfsObj, pszError, cbError);
+- else
+- rc = vboxExtPackReturnError(VERR_UNEXPECTED_FS_OBJ_TYPE, pszError, cbError,
+- "'%s' is not a file or directory (enmType=%d)", pszName, enmType);
+- return rc;
+-}
+-
+-
+-/**
+- * Rewinds the tarball file handle and creates a gunzip | tar chain that
+- * results in a filesystem stream.
+- *
+- * @returns VBox status code, failures with message.
+- * @param hTarballFile The handle to the tarball file.
+- * @param pszError Where to store an error message on failure.
+- * @param cbError The size of the buffer @a pszError points to.
+- * @param phTarFss Where to return the filesystem stream handle.
+- * @param phFileManifest Where to return a manifest where the tarball is
+- * gettting hashed. The entry will be called
+- * "extpack" and be ready when the file system
+- * stream is at an end. Optional.
+- */
+-int VBoxExtPackOpenTarFss(RTFILE hTarballFile, char *pszError, size_t cbError, PRTVFSFSSTREAM phTarFss, PRTMANIFEST phFileManifest)
+-{
+- Assert(cbError > 0);
+- *pszError = '\0';
+- *phTarFss = NIL_RTVFSFSSTREAM;
+-
+- /*
+- * Rewind the file and set up a VFS chain for it.
+- */
+- int rc = RTFileSeek(hTarballFile, 0, RTFILE_SEEK_BEGIN, NULL);
+- if (RT_FAILURE(rc))
+- return vboxExtPackReturnError(rc, pszError, cbError, "Failed seeking to the start of the tarball: %Rrc", rc);
+-
+- RTVFSIOSTREAM hTarballIos;
+- rc = RTVfsIoStrmFromRTFile(hTarballFile, RTFILE_O_READ | RTFILE_O_DENY_WRITE | RTFILE_O_OPEN, true /*fLeaveOpen*/,
+- &hTarballIos);
+- if (RT_FAILURE(rc))
+- return vboxExtPackReturnError(rc, pszError, cbError, "RTVfsIoStrmFromRTFile failed: %Rrc", rc);
+-
+- RTMANIFEST hFileManifest = NIL_RTMANIFEST;
+- rc = RTManifestCreate(0 /*fFlags*/, &hFileManifest);
+- if (RT_SUCCESS(rc))
+- {
+- RTVFSIOSTREAM hPtIos;
+- rc = RTManifestEntryAddPassthruIoStream(hFileManifest, hTarballIos, "extpack", RTMANIFEST_ATTR_SHA256, true /*read*/, &hPtIos);
+- if (RT_SUCCESS(rc))
+- {
+- RTVFSIOSTREAM hGunzipIos;
+- rc = RTZipGzipDecompressIoStream(hPtIos, 0 /*fFlags*/, &hGunzipIos);
+- if (RT_SUCCESS(rc))
+- {
+- RTVFSFSSTREAM hTarFss;
+- rc = RTZipTarFsStreamFromIoStream(hGunzipIos, 0 /*fFlags*/, &hTarFss);
+- if (RT_SUCCESS(rc))
+- {
+- RTVfsIoStrmRelease(hPtIos);
+- RTVfsIoStrmRelease(hGunzipIos);
+- RTVfsIoStrmRelease(hTarballIos);
+- *phTarFss = hTarFss;
+- if (phFileManifest)
+- *phFileManifest = hFileManifest;
+- else
+- RTManifestRelease(hFileManifest);
+- return VINF_SUCCESS;
+- }
+-
+- vboxExtPackSetError(pszError, cbError, "RTZipTarFsStreamFromIoStream failed: %Rrc", rc);
+- RTVfsIoStrmRelease(hGunzipIos);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTZipGzipDecompressIoStream failed: %Rrc", rc);
+- RTVfsIoStrmRelease(hPtIos);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTManifestEntryAddPassthruIoStream failed: %Rrc", rc);
+- RTManifestRelease(hFileManifest);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTManifestCreate failed: %Rrc", rc);
+-
+- RTVfsIoStrmRelease(hTarballIos);
+- return rc;
+-}
+-
+-
+-/**
+- * Validates the extension pack tarball prior to unpacking.
+- *
+- * Operations performed:
+- * - Mandatory files.
+- * - Manifest check.
+- * - Manifest seal check.
+- * - XML check, match name.
+- *
+- * @returns VBox status code, failures with message.
+- * @param hTarballFile The handle to open the @a pszTarball file.
+- * @param pszExtPackName The name of the extension pack name. NULL if
+- * the name is not fixed.
+- * @param pszTarball The name of the tarball in case we have to
+- * complain about something.
+- * @param pszTarballDigest The SHA-256 digest of the tarball. Empty string
+- * if no digest available.
+- * @param pszError Where to store an error message on failure.
+- * @param cbError The size of the buffer @a pszError points to.
+- * @param phValidManifest Where to optionally return the handle to fully
+- * validated the manifest for the extension pack.
+- * This includes all files.
+- * @param phXmlFile Where to optionally return the memorized XML
+- * file.
+- * @param pStrDigest Where to return the digest of the file.
+- * Optional.
+- */
+-int VBoxExtPackValidateTarball(RTFILE hTarballFile, const char *pszExtPackName,
+- const char *pszTarball, const char *pszTarballDigest,
+- char *pszError, size_t cbError,
+- PRTMANIFEST phValidManifest, PRTVFSFILE phXmlFile, RTCString *pStrDigest)
+-{
+- /*
+- * Clear return values.
+- */
+- if (phValidManifest)
+- *phValidManifest = NIL_RTMANIFEST;
+- if (phXmlFile)
+- *phXmlFile = NIL_RTVFSFILE;
+- Assert(cbError > 1);
+- *pszError = '\0';
+- NOREF(pszTarball);
+-
+- /*
+- * Open the tar.gz filesystem stream and set up an manifest in-memory file.
+- */
+- RTMANIFEST hFileManifest;
+- RTVFSFSSTREAM hTarFss;
+- int rc = VBoxExtPackOpenTarFss(hTarballFile, pszError, cbError, &hTarFss, &hFileManifest);
+- if (RT_FAILURE(rc))
+- return rc;
+-
+- RTMANIFEST hOurManifest;
+- rc = RTManifestCreate(0 /*fFlags*/, &hOurManifest);
+- if (RT_SUCCESS(rc))
+- {
+- /*
+- * Process the tarball (would be nice to move this to a function).
+- */
+- RTVFSFILE hXmlFile = NIL_RTVFSFILE;
+- RTVFSFILE hManifestFile = NIL_RTVFSFILE;
+- RTVFSFILE hSignatureFile = NIL_RTVFSFILE;
+- for (;;)
+- {
+- /*
+- * Get the next stream object.
+- */
+- char *pszName;
+- RTVFSOBJ hVfsObj;
+- RTVFSOBJTYPE enmType;
+- rc = RTVfsFsStrmNext(hTarFss, &pszName, &enmType, &hVfsObj);
+- if (RT_FAILURE(rc))
+- {
+- if (rc != VERR_EOF)
+- vboxExtPackSetError(pszError, cbError, "RTVfsFsStrmNext failed: %Rrc", rc);
+- else
+- rc = VINF_SUCCESS;
+- break;
+- }
+- const char *pszAdjName = pszName[0] == '.' && pszName[1] == '/' ? &pszName[2] : pszName;
+-
+- /*
+- * Check the type & name validity, performing special tests on
+- * standard extension pack member files.
+- *
+- * N.B. We will always reach the end of the loop before breaking on
+- * failure - cleanup reasons.
+- */
+- rc = VBoxExtPackValidateMember(pszName, enmType, hVfsObj, pszError, cbError);
+- if (RT_SUCCESS(rc))
+- {
+- PRTVFSFILE phVfsFile = NULL;
+- if (!strcmp(pszAdjName, VBOX_EXTPACK_DESCRIPTION_NAME))
+- phVfsFile = &hXmlFile;
+- else if (!strcmp(pszAdjName, VBOX_EXTPACK_MANIFEST_NAME))
+- phVfsFile = &hManifestFile;
+- else if (!strcmp(pszAdjName, VBOX_EXTPACK_SIGNATURE_NAME))
+- phVfsFile = &hSignatureFile;
+- else if (!strncmp(pszAdjName, VBOX_EXTPACK_LICENSE_NAME_PREFIX, sizeof(VBOX_EXTPACK_LICENSE_NAME_PREFIX) - 1))
+- rc = VBoxExtPackValidateStandardFile(pszAdjName, enmType, &hVfsObj, NULL, pszError, cbError);
+- if (phVfsFile)
+- rc = VBoxExtPackValidateStandardFile(pszAdjName, enmType, &hVfsObj, phVfsFile, pszError, cbError);
+- }
+-
+- /*
+- * Add any I/O stream to the manifest
+- */
+- if ( RT_SUCCESS(rc)
+- && ( enmType == RTVFSOBJTYPE_FILE
+- || enmType == RTVFSOBJTYPE_IO_STREAM))
+- {
+- RTVFSIOSTREAM hVfsIos = RTVfsObjToIoStream(hVfsObj);
+- rc = RTManifestEntryAddIoStream(hOurManifest, hVfsIos, pszAdjName, RTMANIFEST_ATTR_SIZE | RTMANIFEST_ATTR_SHA256);
+- if (RT_FAILURE(rc))
+- vboxExtPackSetError(pszError, cbError, "RTManifestEntryAddIoStream failed on '%s': %Rrc", pszAdjName, rc);
+- RTVfsIoStrmRelease(hVfsIos);
+- }
+-
+- /*
+- * Clean up and break out on failure.
+- */
+- RTVfsObjRelease(hVfsObj);
+- RTStrFree(pszName);
+- if (RT_FAILURE(rc))
+- break;
+- }
+-
+- /*
+- * Check the integrity of the tarball file.
+- */
+- if (RT_SUCCESS(rc))
+- {
+- RTVfsFsStrmRelease(hTarFss);
+- hTarFss = NIL_RTVFSFSSTREAM;
+- rc = vboxExtPackVerifyFileDigest(hFileManifest, pszTarballDigest, pStrDigest, pszError, cbError);
+- }
+-
+- /*
+- * If we've successfully processed the tarball, verify that the
+- * mandatory files are present.
+- */
+- if (RT_SUCCESS(rc))
+- {
+- if (hXmlFile == NIL_RTVFSFILE)
+- rc = vboxExtPackReturnError(VERR_MISSING, pszError, cbError, "Mandator file '%s' is missing", VBOX_EXTPACK_DESCRIPTION_NAME);
+- if (hManifestFile == NIL_RTVFSFILE)
+- rc = vboxExtPackReturnError(VERR_MISSING, pszError, cbError, "Mandator file '%s' is missing", VBOX_EXTPACK_MANIFEST_NAME);
+- if (hSignatureFile == NIL_RTVFSFILE)
+- rc = vboxExtPackReturnError(VERR_MISSING, pszError, cbError, "Mandator file '%s' is missing", VBOX_EXTPACK_SIGNATURE_NAME);
+- }
+-
+- /*
+- * Check the manifest and it's signature.
+- */
+- if (RT_SUCCESS(rc))
+- rc = vboxExtPackVerifyManifestAndSignature(hOurManifest, hManifestFile, hSignatureFile, pszError, cbError);
+-
+- /*
+- * Check the XML.
+- */
+- if (RT_SUCCESS(rc))
+- rc = vboxExtPackVerifyXml(hXmlFile, pszExtPackName, pszError, cbError);
+-
+- /*
+- * Returns objects.
+- */
+- if (RT_SUCCESS(rc))
+- {
+- if (phValidManifest)
+- {
+- RTManifestRetain(hOurManifest);
+- *phValidManifest = hOurManifest;
+- }
+- if (phXmlFile)
+- {
+- RTVfsFileRetain(hXmlFile);
+- *phXmlFile = hXmlFile;
+- }
+- }
+-
+- /*
+- * Release our object references.
+- */
+- RTManifestRelease(hOurManifest);
+- RTVfsFileRelease(hXmlFile);
+- RTVfsFileRelease(hManifestFile);
+- RTVfsFileRelease(hSignatureFile);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTManifestCreate failed: %Rrc", rc);
+- RTVfsFsStrmRelease(hTarFss);
+- RTManifestRelease(hFileManifest);
+-
+- return rc;
+-}
+-
+--- VirtualBox-4.1.18.orig/include/Makefile.kmk 2012-06-20 10:07:49.000000000 -0300
++++ VirtualBox-4.1.18/include/Makefile.kmk 2012-07-24 21:11:57.007068865 -0300
+@@ -51,7 +51,6 @@
+ VBox/vd-cache-plugin.h \
+ VBox/vmm/uvm.h \
+ VBox/vscsi.h \
+- $(wildcard VBox/ExtPack/*.h ) \
+ iprt/alloca.h \
+ iprt/tcp.h \
+ iprt/localipc.h \
+--- VirtualBox-4.1.18.orig/src/Makefile.kmk 2012-06-20 10:07:57.000000000 -0300
++++ VirtualBox-4.1.18/src/Makefile.kmk 2012-07-24 22:51:10.206996034 -0300
+@@ -26,14 +26,6 @@
+ include $(PATH_SUB_CURRENT)/VBox/Makefile.kmk
+ include $(PATH_SUB_CURRENT)/libs/Makefile.kmk
+
+-else if defined(VBOX_ONLY_EXTPACKS)
+- include $(PATH_SUB_CURRENT)/bldprogs/Makefile.kmk
+- include $(PATH_SUB_CURRENT)/VBox/Makefile.kmk
+- include $(PATH_SUB_CURRENT)/libs/Makefile.kmk
+- ifndef VBOX_ONLY_EXTPACKS_USE_IMPLIBS
+- include $(PATH_SUB_CURRENT)/recompiler/Makefile.kmk
+- endif
+-
+ else if defined(VBOX_ONLY_TESTSUITE)
+ include $(PATH_SUB_CURRENT)/libs/Makefile.kmk
+ include $(PATH_SUB_CURRENT)/VBox/Makefile.kmk
+--- VirtualBox-4.1.18.orig/src/VBox/Makefile.kmk 2012-07-24 21:19:55.565641784 -0300
++++ VirtualBox-4.1.18/src/VBox/Makefile.kmk 2012-07-24 22:12:55.429156962 -0300
+@@ -33,19 +33,6 @@
+ include $(PATH_SUB_CURRENT)/HostDrivers/Makefile.kmk
+ include $(PATH_SUB_CURRENT)/Frontends/Makefile.kmk
+
+-else ifdef VBOX_ONLY_EXTPACKS
+- include $(PATH_SUB_CURRENT)/Runtime/Makefile.kmk
+- include $(PATH_SUB_CURRENT)/Devices/Makefile.kmk
+- include $(PATH_SUB_CURRENT)/HostDrivers/Makefile.kmk
+- include $(PATH_SUB_CURRENT)/ExtPacks/Makefile.kmk
+- ifdef VBOX_WITH_VRDP
+- include $(PATH_SUB_CURRENT)/RDP/Makefile.kmk
+- endif
+- include $(PATH_SUB_CURRENT)/VMM/Makefile.kmk
+- ifndef VBOX_ONLY_EXTPACKS_USE_IMPLIBS
+- include $(PATH_SUB_CURRENT)/Disassembler/Makefile.kmk
+- endif
+-
+ else ifdef VBOX_ONLY_SDK
+ include $(PATH_SUB_CURRENT)/Main/Makefile.kmk
+ ifdef VBOX_WITH_VRDP
+@@ -92,9 +79,6 @@
+ if1of ($(KBUILD_TARGET_ARCH), amd64 x86)
+ include $(PATH_SUB_CURRENT)/NetworkServices/Makefile.kmk
+ endif
+- ifndef VBOX_OSE
+- include $(PATH_SUB_CURRENT)/ExtPacks/Makefile.kmk
+- endif
+ ifdef VBOX_WITH_INSTALLER
+ include $(PATH_SUB_CURRENT)/Installer/Makefile.kmk # Keep this last.
+ endif
+--- VirtualBox-4.1.18/src/libs/Makefile.kmk.orig 2012-07-24 21:23:26.938013023 -0300
++++ VirtualBox-4.1.18/src/libs/Makefile.kmk 2012-07-24 21:43:42.557911752 -0300
+@@ -48,13 +48,6 @@
+ include $(PATH_SUB_CURRENT)/kStuff/Makefile.kmk
+ endif
+
+-# OpenSSL.
+-if !defined(VBOX_ONLY_SDK) \
+- && ( "$(SDK_VBOX_OPENSSL_INCS)" == "$(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)" \
+- || defined(VBOX_WITH_EXTPACK_PUEL_BUILD))
+- include $(PATH_SUB_CURRENT)/openssl-0.9.8t/Makefile.kmk
+-endif
+-
+ # libjpeg for VRDP video redirection
+ if defined(VBOX_WITH_VRDP) && defined(VBOX_WITH_VRDP_VIDEO_CHANNEL)
+ include $(PATH_SUB_CURRENT)/jpeg-8a/Makefile.kmk
+--- VirtualBox-4.1.18.orig/src/VBox/Devices/Makefile.kmk 2012-07-24 23:06:45.916276235 -0300
++++ VirtualBox-4.1.18/src/VBox/Devices/Makefile.kmk 2012-07-24 23:17:00.202963228 -0300
+@@ -21,9 +21,7 @@
+
+ # Include sub-makefiles.
+ include $(PATH_SUB_CURRENT)/testcase/Makefile.kmk
+-if defined(VBOX_WITH_INTEL_PXE) || defined(VBOX_ONLY_EXTPACKS)
+- include $(PATH_SUB_CURRENT)/PC/PXE/Makefile.kmk
+-else if defined(VBOX_WITH_PXE_ROM) && !defined(VBOX_WITHOUT_ETHERBOOT)
++if defined(VBOX_WITH_PXE_ROM) && !defined(VBOX_WITHOUT_ETHERBOOT)
+ include $(PATH_SUB_CURRENT)/PC/Etherboot-src/Makefile.kmk
+ endif
+ if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file.
+@@ -57,9 +55,6 @@
+ ifdef VBOX_WITH_USB
+ VBoxDDU_DEFS += VBOX_WITH_USB IN_USBLIB
+ VBoxDDU_SDKS.win = WINPSDK W2K3DDK
+- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
+- VBoxDDU_DEFS += VBOX_WITH_EHCI_IMPL
+- endif
+ ifdef VBOX_WITH_NEW_USB_CODE_ON_DARWIN
+ VBoxDDU_DEFS.darwin += VBOX_WITH_NEW_USB_CODE_ON_DARWIN
+ endif
+@@ -122,9 +117,6 @@
+ VBoxDD_DEFS = VBOX_ACPI
+ ifdef VBOX_WITH_USB
+ VBoxDD_DEFS += VBOX_WITH_USB
+- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
+- VBoxDD_DEFS += VBOX_WITH_EHCI_IMPL
+- endif
+ endif
+ ifdef VBOX_WITH_VUSB
+ VBoxDD_DEFS += VBOX_WITH_VUSB
+@@ -446,11 +438,6 @@
+ endif
+ ifdef VBOX_WITH_USB
+ DevicesR3_DEFS += VBOX_WITH_USB
+- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
+- DevicesR3_DEFS += VBOX_WITH_EHCI_IMPL
+- DevicesR3_SOURCES += \
+- USB/DevEHCI.cpp
+- endif
+ endif
+ if defined(VBOX_WITH_PCI_PASSTHROUGH_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
+ DevicesR3_DEFS += VBOX_WITH_PCI_PASSTHROUGH_IMPL
+@@ -607,11 +594,6 @@
+
+ ifdef VBOX_WITH_USB
+ VBoxDDGC_DEFS += VBOX_WITH_USB
+- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
+- VBoxDDGC_DEFS += VBOX_WITH_EHCI_IMPL
+- VBoxDDGC_SOURCES += \
+- USB/DevEHCI.cpp
+- endif
+ endif
+
+ ifdef VBOX_WITH_VIDEOHWACCEL
+@@ -711,11 +693,6 @@
+ endif
+ ifdef VBOX_WITH_USB
+ VBoxDDR0_DEFS += VBOX_WITH_USB
+- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
+- VBoxDDR0_DEFS += VBOX_WITH_EHCI_IMPL
+- VBoxDDR0_SOURCES += \
+- USB/DevEHCI.cpp
+- endif
+ endif
+
+ if defined(VBOX_WITH_PCI_PASSTHROUGH_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
+@@ -1204,49 +1181,5 @@
+
+ endif # !VBOX_ONLY_EXTPACKS
+
+-if defined(VBOX_WITH_EXTPACK_PUEL) && defined(VBOX_WITH_EXTPACK_PUEL_BUILD)
+- #
+- # The EHCI (USB 2.0) Extension Pack Modules.
+- #
+- if defined(VBOX_WITH_USB)
+- DLLS += VBoxEhciR3
+- VBoxEhciR3_TEMPLATE = VBoxR3ExtPackPuel
+- VBoxEhciR3_SOURCES = USB/DevEHCI.cpp
+-
+- SYSMODS += VBoxEhciR0
+- VBoxEhciR0_TEMPLATE = VBoxR0ExtPackPuel
+- VBoxEhciR0_SOURCES = USB/DevEHCI.cpp
+-
+- ifdef VBOX_WITH_RAW_MODE
+- SYSMODS += VBoxEhciRC
+- VBoxEhciRC_TEMPLATE = VBoxRcExtPackPuel
+- VBoxEhciRC_SOURCES = USB/DevEHCI.cpp
+- endif
+- endif
+-
+- if defined(VBOX_WITH_PCI_PASSTHROUGH)
+- DLLS += VBoxPciRawR3
+- VBoxPciRawR3_TEMPLATE = VBoxR3ExtPackPuel
+- VBoxPciRawR3_SOURCES = Bus/DevPciRaw.cpp
+-
+- DLLS += VBoxPciRawDrv
+- VBoxPciRawDrv_TEMPLATE = VBoxR3ExtPackPuel
+- VBoxPciRawDrv_SOURCES = Bus/DrvPciRaw.cpp
+-
+- SYSMODS += VBoxPciRawR0
+- VBoxPciRawR0_TEMPLATE = VBoxR0ExtPackPuel
+- VBoxPciRawR0_SOURCES = Bus/DevPciRaw.cpp
+-
+- Bus/DevPciRaw.cpp_INCS = Bus
+- endif
+-
+- #
+- # The Intel PXE rom.
+- #
+- INSTALLS += VBoxExtPackPuelInsRoms
+- VBoxExtPackPuelInsRoms_TEMPLATE = VBoxInsExtPackPuel
+- VBoxExtPackPuelInsRoms_SOURCES = PC/PXE/PXE-Intel.rom=>PXE-Intel.rom
+-endif # VBOX_WITH_EXTPACK_PUEL
+-
+ include $(KBUILD_PATH)/subfooter.kmk
+
+--- VirtualBox-4.1.18.orig/src/VBox/Main/Makefile.kmk 2012-07-24 23:38:25.304126039 -0300
++++ VirtualBox-4.1.18/src/VBox/Main/Makefile.kmk 2012-07-24 23:38:25.350789964 -0300
+@@ -230,14 +230,12 @@
+ $(if $(VBOX_USB_WITH_SYSFS),VBOX_USB_WITH_SYSFS,) \
+ $(if $(VBOX_USB_WITH_INOTIFY),VBOX_USB_WITH_INOTIFY,) \
+ $(if $(VBOX_WITH_LIVE_MIGRATION),VBOX_WITH_LIVE_MIGRATION,) \
+- $(if $(VBOX_WITH_EXTPACK),VBOX_WITH_EXTPACK,) \
+ $(if $(VBOX_WITH_VUSB),VBOX_WITH_VUSB,) \
+ $(if $(VBOX_WITH_S3),VBOX_WITH_S3,) \
+ $(if $(VBOX_WITH_PCI_PASSTHROUGH),VBOX_WITH_PCI_PASSTHROUGH,)
+ ifdef VBOX_WITH_USB
+ VBoxSVC_DEFS += \
+ VBOX_WITH_USB \
+- $(if $(VBOX_WITH_EHCI),VBOX_WITH_EHCI,) \
+ $(if $(VBOX_WITH_NEW_USB_CODE_ON_DARWIN),VBOX_WITH_NEW_USB_CODE_ON_DARWIN,)
+ endif
+ VBoxSVC_DEFS.win += VBOX_COM_OUTOFPROC_MODULE
+@@ -290,7 +288,6 @@
+ src-all/SharedFolderImpl.cpp \
+ src-all/VirtualBoxBase.cpp \
+ src-all/VirtualBoxErrorInfoImpl.cpp \
+- $(if $(VBOX_WITH_EXTPACK),src-all/ExtPackManagerImpl.cpp src-all/ExtPackUtil.cpp,) \
+ src-server/ApplianceImpl.cpp \
+ src-server/ApplianceImplExport.cpp \
+ src-server/ApplianceImplImport.cpp \
+@@ -543,8 +540,6 @@
+ $(if $(VBOX_WITH_HGSMI),VBOX_WITH_HGSMI,) \
+ $(if $(VBOX_WITH_VIDEOHWACCEL),VBOX_WITH_VIDEOHWACCEL,) \
+ $(if $(VBOX_WITH_USB),VBOX_WITH_USB,) \
+- $(if-expr defined(VBOX_WITH_EHCI) && defined(VBOX_WITH_USB),VBOX_WITH_EHCI,) \
+- $(if $(VBOX_WITH_EXTPACK),VBOX_WITH_EXTPACK,) \
+ $(if $(VBOX_WITH_PCI_PASSTHROUGH),VBOX_WITH_PCI_PASSTHROUGH,)
+
+ VBoxC_DEFS.darwin.x86 = VBOX_WITH_2X_4GB_ADDR_SPACE
+@@ -602,7 +597,6 @@
+ src-all/SharedFolderImpl.cpp \
+ src-all/VirtualBoxBase.cpp \
+ src-all/VirtualBoxErrorInfoImpl.cpp \
+- $(if $(VBOX_WITH_EXTPACK),src-all/ExtPackManagerImpl.cpp src-all/ExtPackUtil.cpp,) \
+ $(if $(VBOX_WITH_USB_VIDEO),src-client/UsbWebcamInterface.cpp,) \
+ $(if $(VBOX_WITH_USB_CARDREADER),src-client/UsbCardReader.cpp,) \
+ src-client/AdditionsFacilityImpl.cpp \
+@@ -711,22 +705,6 @@
+ endif # !win
+
+
+-#
+-# The VBoxExtPackHelperApp.
+-#
+-ifdef VBOX_WITH_EXTPACK
+- PROGRAMS += VBoxExtPackHelperApp
+- VBoxExtPackHelperApp_TEMPLATE = VBoxR3SetUidToRoot
+- VBoxExtPackHelperApp_LDFLAGS.darwin = -framework Security
+- VBoxExtPackHelperApp_LDFLAGS.win = /SUBSYSTEM:windows
+- VBoxExtPackHelperApp_SOURCES = \
+- src-helper-apps/VBoxExtPackHelperApp.cpp \
+- src-all/ExtPackUtil.cpp
+- VBoxExtPackHelperApp_LIBS = \
+- $(LIB_RUNTIME)
+-endif # VBOX_WITH_EXTPACK
+-
+-
+ endif # !VBOX_ONLY_SDK (the ifndef is far above)
+
+
+--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/Makefile.kmk 2012-07-24 23:25:04.575825175 -0300
++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/Makefile.kmk 2012-07-24 23:25:04.619156084 -0300
+@@ -888,7 +888,6 @@
+ $(VBOX_MACOSX_ICON_FILE)=>Resources/virtualbox.icns \
+ $(VBOX_BRAND_GUI_VBOX_64PX_PNG)=>Resources/virtualbox.png \
+ $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-vbox.icns=>Resources/virtualbox-vbox.icns \
+- $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-vbox-extpack.icns=>Resources/virtualbox-vbox-extpack.icns \
+ $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-ovf.icns=>Resources/virtualbox-ovf.icns \
+ $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-ova.icns=>Resources/virtualbox-ova.icns \
+ $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-vdi.icns=>Resources/virtualbox-vdi.icns \
+--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-24 23:28:17.985011038 -0300
++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-24 23:28:18.051673913 -0300
+@@ -167,18 +167,6 @@
+ <file alias="status_check_32px.png">images/status_check_32px.png</file>
+ <file alias="status_error_16px.png">images/status_error_16px.png</file>
+ <file alias="status_error_32px.png">images/status_error_32px.png</file>
+- <file alias="extension_pack_16px.png">images/extension_pack_16px.png</file>
+- <file alias="extension_pack_disabled_16px.png">images/extension_pack_disabled_16px.png</file>
+- <file alias="extension_pack_32px.png">images/extension_pack_32px.png</file>
+- <file alias="extension_pack_disabled_32px.png">images/extension_pack_disabled_32px.png</file>
+- <file alias="extension_pack_install_16px.png">images/extension_pack_install_16px.png</file>
+- <file alias="extension_pack_install_disabled_16px.png">images/extension_pack_install_disabled_16px.png</file>
+- <file alias="extension_pack_install_32px.png">images/extension_pack_install_32px.png</file>
+- <file alias="extension_pack_install_disabled_32px.png">images/extension_pack_install_disabled_32px.png</file>
+- <file alias="extension_pack_uninstall_16px.png">images/extension_pack_uninstall_16px.png</file>
+- <file alias="extension_pack_uninstall_disabled_16px.png">images/extension_pack_uninstall_disabled_16px.png</file>
+- <file alias="extension_pack_uninstall_32px.png">images/extension_pack_uninstall_32px.png</file>
+- <file alias="extension_pack_uninstall_disabled_32px.png">images/extension_pack_uninstall_disabled_32px.png</file>
+ <file alias="proxy_16px.png">images/proxy_16px.png</file>
+ <file alias="proxy_disabled_16px.png">images/proxy_disabled_16px.png</file>
+ <file alias="proxy_32px.png">images/proxy_32px.png</file>
+--- VirtualBox-4.1.18.orig/src/VBox/Installer/linux/Makefile.kmk 2012-07-25 00:32:00.780012664 -0300
++++ VirtualBox-4.1.18/src/VBox/Installer/linux/Makefile.kmk 2012-07-25 00:32:00.806677728 -0300
+@@ -170,11 +170,6 @@
+ VBox.sh \
+ VBox.png
+
+-ifdef VBOX_WITH_EXTPACK
+- VBOX_LNX_STRIP_BIN += \
+- VBoxExtPackHelperApp
+-endif
+-
+ # Qt4 GUI
+ ifdef VBOX_WITH_QTGUI
+ include $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/nls/ApprovedLanguages.kmk
+@@ -286,7 +281,7 @@
+
+ VBOX_MIME_ICONS = \
+ $(addprefix $(PATH_ROOT)/src/VBox/Resources/other/,\
+- $(foreach f,ova ovf vbox vbox-extpack vdi vmdk vhd hdd, \
++ $(foreach f,ova ovf vbox vdi vmdk vhd hdd, \
+ $(foreach s,16 20 24 32 48 64 72 96 128 256,\
+ virtualbox-$(f)-$(s)px.png=>$(s)x$(s)/virtualbox-$(f).png)))
+
+--- VirtualBox-4.1.18.orig/src/VBox/Installer/win/Makefile.kmk 2012-07-25 00:34:52.253398525 -0300
++++ VirtualBox-4.1.18/src/VBox/Installer/win/Makefile.kmk 2012-07-25 00:34:52.300062531 -0300
+@@ -435,7 +435,6 @@
+ -E 'VBOX_WITH_DEBUGGER_GUI=$(if-expr defined(VBOX_WITH_DEBUGGER_GUI) && defined(VBOX_WITH_QTGUI),yes,no)' \
+ -E 'VBOX_WITH_DOCS_PACKING=$(if $(VBOX_WITH_DOCS_PACKING),yes,no)' \
+ -E 'VBOX_WITH_EFIFW_PACKING=$(if $(VBOX_WITH_EFIFW_PACKING),yes,no)' \
+- -E 'VBOX_WITH_EXTPACK=$(if $(VBOX_WITH_EXTPACK),yes,no)' \
+ -E 'VBOX_WITH_GUEST_CONTROL=$(if $(VBOX_WITH_GUEST_CONTROL),yes,no)' \
+ -E 'VBOX_WITH_GUEST_PROPS=$(if $(VBOX_WITH_GUEST_PROPS),yes,no)' \
+ -E 'VBOX_WITH_NETFLT=$(if $(VBOX_WITH_NETFLT),yes,no)' \
+--- VirtualBox-4.1.18.orig/src/VBox/Installer/darwin/Makefile.kmk 2012-07-25 00:36:55.929571374 -0300
++++ VirtualBox-4.1.18/src/VBox/Installer/darwin/Makefile.kmk 2012-07-25 00:36:55.959569630 -0300
+@@ -629,7 +629,6 @@
+ MacOS/VirtualBoxVM \
+ MacOS/VBoxNetAdpCtl \
+ MacOS/VBoxNetDHCP \
+- MacOS/VBoxExtPackHelperApp \
+ MacOS/VBoxBalloonCtrl
+ ifdef VBOX_WITH_WEBSERVICES
+ VBOX_DI_VBAPP_PROGS += \
+@@ -659,7 +658,6 @@
+ Resources/virtualbox.icns \
+ Resources/virtualbox.png \
+ Resources/virtualbox-vbox.icns \
+- Resources/virtualbox-vbox-extpack.icns \
+ Resources/virtualbox-ovf.icns \
+ Resources/virtualbox-ova.icns \
+ Resources/virtualbox-vdi.icns \
+--- VirtualBox-4.1.18/src/VBox/Installer/solaris/Makefile.kmk.orig 2012-07-25 00:38:48.476398293 -0300
++++ VirtualBox-4.1.18/src/VBox/Installer/solaris/Makefile.kmk 2012-07-25 00:38:48.516396159 -0300
+@@ -185,12 +185,12 @@
+
+ VBOX_MIME_ICONS = \
+ $(addprefix $(PATH_ROOT)/src/VBox/Resources/other/,\
+- $(foreach f,ova ovf vbox vbox-extpack vdi vmdk vhd hdd, \
++ $(foreach f,ova ovf vbox vdi vmdk vhd hdd, \
+ $(foreach s,16 20 24 32 48 64 72 96 128 256,\
+ virtualbox-$(f)-$(s)px.png=>$(s)x$(s)/mimetypes/virtualbox-$(f).png)))
+
+ SOLARIS_COMMON_ICONS = \
+- $(foreach f,ova ovf vbox vbox-extpack vdi vmdk vhd hdd, \
++ $(foreach f,ova ovf vbox vdi vmdk vhd hdd, \
+ $(foreach s,16 20 24 32 48 64 72 96 128 256,\
+ $(s)x$(s)/mimetypes/virtualbox-$(f).png))
+
+@@ -210,7 +210,6 @@
+ $(if $(VBOX_WITH_VBOXSDL),VBoxSDL,) \
+ $(if $(VBOX_WITH_NETADP),VBoxNetAdpCtl,) \
+ VBoxNetDHCP \
+- $(if $(VBOX_WITH_EXTPACK),VBoxExtPackHelperApp,) \
+ VBoxSVC \
+ $(if $(VBOX_WITH_CROGL),VBoxTestOGL,) \
+ VBoxXPCOMIPCD \
+--- VirtualBox-4.1.18.orig/src/VBox/Runtime/Makefile.kmk 2012-07-25 00:40:58.745522450 -0300
++++ VirtualBox-4.1.18/src/VBox/Runtime/Makefile.kmk 2012-07-25 00:40:58.782186960 -0300
+@@ -53,15 +53,6 @@
+ #
+ LIBRARIES += RuntimeR3 RuntimeBldProg
+
+-else ifdef VBOX_ONLY_EXTPACKS_USE_IMPLIBS
+- #
+- # Build docs only - need just regular R3 runtime.
+- #
+- LIBRARIES += RuntimeBldProg
+- LIBRARIES.solaris += RuntimeR0Stub
+- LIBRARIES.win += RuntimeR0Stub RuntimeRCStub
+- include $(PATH_SUB_CURRENT)/tools/Makefile.kmk
+-
+ else # !VBOX_ONLY_ADDITIONS && !VBOX_ONLY_TESTSUITE && !VBOX_ONLY_DOCS
+
+ #
diff --git a/libre/virtualbox-libre-modules-lts/os_blag.png b/libre/virtualbox-libre-modules-lts/os_blag.png
new file mode 100644
index 000000000..61995ca10
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/os_blag.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_blag_64.png b/libre/virtualbox-libre-modules-lts/os_blag_64.png
new file mode 100644
index 000000000..aa4463a97
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/os_blag_64.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_dragora.png b/libre/virtualbox-libre-modules-lts/os_dragora.png
new file mode 100644
index 000000000..d1df45880
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/os_dragora.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_dragora_64.png b/libre/virtualbox-libre-modules-lts/os_dragora_64.png
new file mode 100644
index 000000000..64bcecf20
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/os_dragora_64.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_dynebolic.png b/libre/virtualbox-libre-modules-lts/os_dynebolic.png
new file mode 100644
index 000000000..67b07d4c0
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/os_dynebolic.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_gnewsense.png b/libre/virtualbox-libre-modules-lts/os_gnewsense.png
new file mode 100644
index 000000000..76d9e38b3
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/os_gnewsense.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_gnewsense_64.png b/libre/virtualbox-libre-modules-lts/os_gnewsense_64.png
new file mode 100644
index 000000000..8859c34e8
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/os_gnewsense_64.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_gnu.png b/libre/virtualbox-libre-modules-lts/os_gnu.png
new file mode 100644
index 000000000..26c4550f9
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/os_gnu.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_gnu_64.png b/libre/virtualbox-libre-modules-lts/os_gnu_64.png
new file mode 100644
index 000000000..4161634e9
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/os_gnu_64.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_gnuhurd.png b/libre/virtualbox-libre-modules-lts/os_gnuhurd.png
new file mode 100644
index 000000000..26c4550f9
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/os_gnuhurd.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_gnulinux.png b/libre/virtualbox-libre-modules-lts/os_gnulinux.png
new file mode 100644
index 000000000..26c4550f9
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/os_gnulinux.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_gnulinux_64.png b/libre/virtualbox-libre-modules-lts/os_gnulinux_64.png
new file mode 100644
index 000000000..4161634e9
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/os_gnulinux_64.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_musix.png b/libre/virtualbox-libre-modules-lts/os_musix.png
new file mode 100644
index 000000000..fb7b94577
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/os_musix.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_musix_64.png b/libre/virtualbox-libre-modules-lts/os_musix_64.png
new file mode 100644
index 000000000..a1bbbbf3a
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/os_musix_64.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_os64base.png b/libre/virtualbox-libre-modules-lts/os_os64base.png
new file mode 100644
index 000000000..7aec20314
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/os_os64base.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_os64base.xcf b/libre/virtualbox-libre-modules-lts/os_os64base.xcf
new file mode 100644
index 000000000..d8e28e35e
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/os_os64base.xcf
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_osbase.png b/libre/virtualbox-libre-modules-lts/os_osbase.png
new file mode 100644
index 000000000..00f197fca
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/os_osbase.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_osbase.xcf b/libre/virtualbox-libre-modules-lts/os_osbase.xcf
new file mode 100644
index 000000000..c4463c857
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/os_osbase.xcf
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_parabola.png b/libre/virtualbox-libre-modules-lts/os_parabola.png
new file mode 100644
index 000000000..757abc484
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/os_parabola.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_parabola_64.png b/libre/virtualbox-libre-modules-lts/os_parabola_64.png
new file mode 100644
index 000000000..5ac7c2767
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/os_parabola_64.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_trisquel.png b/libre/virtualbox-libre-modules-lts/os_trisquel.png
new file mode 100644
index 000000000..c6f0d3d7a
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/os_trisquel.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_trisquel_64.png b/libre/virtualbox-libre-modules-lts/os_trisquel_64.png
new file mode 100644
index 000000000..ebca3dd43
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/os_trisquel_64.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_ututo.png b/libre/virtualbox-libre-modules-lts/os_ututo.png
new file mode 100644
index 000000000..e1dffb575
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/os_ututo.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_ututo_64.png b/libre/virtualbox-libre-modules-lts/os_ututo_64.png
new file mode 100644
index 000000000..158468e0a
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/os_ututo_64.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_venenux.png b/libre/virtualbox-libre-modules-lts/os_venenux.png
new file mode 100644
index 000000000..5e0c1585d
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/os_venenux.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/virtualbox-libre-modules-lts.install b/libre/virtualbox-libre-modules-lts/virtualbox-libre-modules-lts.install
new file mode 100644
index 000000000..5387563a6
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/virtualbox-libre-modules-lts.install
@@ -0,0 +1,18 @@
+EXTRAMODULES='extramodules-3.0-LIBRE-LTS'
+
+post_install() {
+/bin/cat << EOF
+===> You must load vboxdrv module before starting VirtualBox:
+===> # modprobe vboxdrv
+EOF
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
+}
+
+post_upgrade() {
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
+ echo 'In order to use the new version, reload all virtualbox modules manually.'
+}
+
+post_remove() {
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
+}
diff --git a/libre/virtualbox-libre-modules-lts/virtualbox-libre-parabola-modules-lts.install b/libre/virtualbox-libre-modules-lts/virtualbox-libre-parabola-modules-lts.install
new file mode 100644
index 000000000..54a052390
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/virtualbox-libre-parabola-modules-lts.install
@@ -0,0 +1,16 @@
+EXTRAMODULES='extramodules-3.0-LIBRE-LTS'
+
+post_install() {
+cat << EOF
+===> You may want to load vboxguest, vboxsf and vboxvideo
+EOF
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
+}
+
+post_upgrade() {
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
+}
+
+post_remove() {
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
+}
diff --git a/libre/virtualbox-libre-modules/.directory b/libre/virtualbox-libre-modules/.directory
new file mode 100644
index 000000000..9f6471595
--- /dev/null
+++ b/libre/virtualbox-libre-modules/.directory
@@ -0,0 +1,3 @@
+[Dolphin]
+Timestamp=2012,8,16,6,34,39
+Version=3
diff --git a/libre/virtualbox-libre-modules/60-vboxguest.rules b/libre/virtualbox-libre-modules/60-vboxguest.rules
new file mode 100644
index 000000000..6285f7249
--- /dev/null
+++ b/libre/virtualbox-libre-modules/60-vboxguest.rules
@@ -0,0 +1,2 @@
+ACTION=="add", KERNEL=="vboxguest", SUBSYSTEM=="misc", OWNER="root", MODE="0600"
+ACTION=="add", KERNEL=="vboxuser", SUBSYSTEM=="misc", OWNER="root", MODE="0666"
diff --git a/libre/virtualbox-libre-modules/LocalConfig.kmk b/libre/virtualbox-libre-modules/LocalConfig.kmk
new file mode 100644
index 000000000..af79f90cd
--- /dev/null
+++ b/libre/virtualbox-libre-modules/LocalConfig.kmk
@@ -0,0 +1,19 @@
+VBOX_WITH_ADDITION_DRIVERS =
+VBOX_WITH_INSTALLER = 1
+VBOX_WITH_LINUX_ADDITIONS = 1
+VBOX_WITH_X11_ADDITIONS =
+VBOX_WITH_TESTCASES =
+VBOX_WITH_TESTSUITE =
+VBOX_WITH_ORIGIN :=
+VBOX_PATH_APP_PRIVATE_ARCH := /usr/lib/virtualbox
+VBOX_PATH_SHARED_LIBS := $(VBOX_PATH_APP_PRIVATE_ARCH)
+VBOX_WITH_RUNPATH := $(VBOX_PATH_APP_PRIVATE_ARCH)
+VBOX_PATH_APP_PRIVATE := /usr/share/virtualbox
+VBOX_PATH_APP_DOCS := /usr/share/virtualbox
+VBOX_WITH_REGISTRATION_REQUEST =
+VBOX_WITH_UPDATE_REQUEST =
+VBOX_WITH_VNC := 1
+VBOX_BLD_PYTHON = python2
+VBOX_JAVA_HOME = /usr/lib/jvm/java-6-openjdk
+VBOX_GCC_WERR =
+VBOX_GCC_WARN =
diff --git a/libre/virtualbox-libre-modules/PKGBUILD b/libre/virtualbox-libre-modules/PKGBUILD
new file mode 100644
index 000000000..917a14f0c
--- /dev/null
+++ b/libre/virtualbox-libre-modules/PKGBUILD
@@ -0,0 +1,161 @@
+# $Id$
+#Maintainer: Ionut Biru <ibiru@archlinux.org>
+#Maintainer (Parabola): Jorge López <jorginho@lavabit.com>
+#Contributor (Parabola): André Silva <emulatorman@lavabit.com>
+
+pkgbase=virtualbox-libre-modules
+pkgname=('virtualbox-libre-modules' 'virtualbox-libre-parabola-modules')
+pkgver=4.1.22
+pkgrel=1
+arch=('i686' 'x86_64')
+url='http://virtualbox.org'
+license=('GPL')
+makedepends=('libstdc++5' 'bin86' 'dev86' 'iasl' 'libxslt' 'libxml2' 'libpng' 'libidl2' 'xalan-c' 'sdl-libre' 'linux-libre-headers')
+[[ $CARCH == "x86_64" ]] && makedepends=("${makedepends[@]}" 'gcc-multilib' 'lib32-glibc')
+source=(http://download.virtualbox.org/virtualbox/${pkgver}/VirtualBox-${pkgver}.tar.bz2
+ LocalConfig.kmk 60-vboxguest.rules os_blag_64.png os_blag.png
+ os_dragora_64.png os_dragora.png os_dynebolic.png os_gnewsense_64.png os_gnewsense.png
+ os_gnu_64.png os_gnuhurd.png os_gnulinux_64.png os_gnulinux.png os_gnu.png
+ os_musix_64.png os_musix.png os_parabola_64.png os_parabola.png os_trisquel_64.png
+ os_trisquel.png os_ututo_64.png os_ututo.png os_venenux.png libre.patch
+ free-distros.patch)
+md5sums=('84c5beeead094ce52d098105897aadbb'
+ '4c88bd122677a35f68abd76eb01b378b'
+ 'ed1341881437455d9735875ddf455fbe'
+ '8538dba8686d7449cb481c9bae9d722a'
+ '545c925b46f2ac95e5f8ae407fad101a'
+ 'f6416f509c2e5460e4dc624e0a57f3c1'
+ 'bbfb59dd517c020a23701b480187a355'
+ 'efacfdb61918286ea9bc89866b8fd239'
+ '7c3eb09995e8bafeef414374e44ad4ce'
+ 'a49ed3ab6bd0fb084de0ab3dd97ae93e'
+ '6b432b3305ed446125eef052c38355a6'
+ 'a70022a468bd3e9daf01818d2d74ac3c'
+ '6b432b3305ed446125eef052c38355a6'
+ 'a70022a468bd3e9daf01818d2d74ac3c'
+ 'a70022a468bd3e9daf01818d2d74ac3c'
+ '380eb2ab6cad3da198094585853c129c'
+ 'a60bb9a98abcc3c34156f9051d00df9a'
+ '3a908ef6952bcf987e63ef2fe4e98d24'
+ '02e87c39c353634cecacf98f1707fa15'
+ '0cf41a41e7a415d404d5584e047fd450'
+ '449cde3b58390284b59c5d663de3edc9'
+ 'c7951fe6888d939f3a7d0dafe477e82b'
+ '4da8eeb2ece7e475fc7a0d1003da26c6'
+ '5e4187af59726d71c5be48d0cd816c34'
+ 'a9e4724b56ddf99bb2e9a8fab8ad43ba'
+ '1e47d90affabfbf6dbb07d9d42742d6a')
+
+_extramodules=extramodules-3.5-LIBRE
+
+
+
+
+build() {
+ _kernver="$(cat /usr/lib/modules/${_extramodules}/version || true)"
+
+ export KERN_DIR=/usr/lib/modules/${_kernver}/build
+ export KERN_INCL=/usr/src/linux-${_kernver}/include/
+
+ cd "$srcdir/VirtualBox-${pkgver}"
+
+ patch -Np1 -i "$srcdir/libre.patch"
+ patch -Np1 -i "$srcdir/free-distros.patch"
+
+ ## Removing Nonfree directories
+ rm -rv "./include/VBox/ExtPack"
+ rm -rv "./src/VBox/ExtPacks"
+ rm -rv "./src/VBox/Main/src-helper-apps"
+
+ ## Removing Oracle VM VirtualBox Extension Pack icons
+ rm -v "./src/VBox/Resources/darwin/virtualbox-vbox-extpack.icns"
+ rm -v "./src/VBox/Resources/other/virtualbox-vbox-extpack-"{16px,20px,24px,32px,40px,48px,64px,72px,80px,96px,128px,256px,512px}.png
+ rm -v "./src/VBox/Resources/win/OSE/virtualbox-vbox-extpack.ico"
+ rm -v "./src/VBox/Frontends/VirtualBox/images/extension_pack_"{16px,32px,disabled{_16px,_32px},install{_16px,_32px},install_disabled{_16px,_32px},uninstall{_16px,_32px},uninstall_disabled{_16px,_32px}}.png
+
+ ## Adding free distros icons
+ for i in {gnuhurd,dynebolic,venenux,{gnu{,linux},parabola,gnewsense,blag,dragora,ututo,musix,trisquel}{,_64}}; do
+ cp -v "$srcdir/os_${i}.png" "./src/VBox/Frontends/VirtualBox/images"
+ done
+
+ ## Removing non-free OS icons
+ rm -v "./src/VBox/Frontends/VirtualBox/images/os_"{{{arch,turbo}linux,debian,fedora,gentoo,linux{24,26},macosx,mandriva,{free,net,open}bsd,redhat,solaris,opensuse,oracle{,solaris},ubuntu,win{2k{3,8},7,8,vista,xp},xandros}{,_64},dos,jrockitve,l4,linux{,22,_other},netware,qnx,os2{_other,ecs,warp{3,4,45}},win{2k,31,95,98,_other,me,nt4}}.png
+
+ cp "$srcdir/LocalConfig.kmk" .
+
+ ./configure \
+ --with-linux=/usr/src/linux-${_kernver} \
+ --disable-java \
+ --disable-docs \
+ --disable-xpcom \
+ --disable-python \
+ --disable-sdl-ttf \
+ --disable-alsa \
+ --disable-pulse \
+ --disable-dbus \
+ --disable-opengl \
+ --build-headless \
+ --nofatal
+ source ./env.sh
+ kmk all
+
+ make -C "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/src"
+ make -C "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/additions/src"
+}
+
+package_virtualbox-libre-parabola-modules(){
+ pkgdesc="Additions only for Parabola guests (kernel libre modules)"
+ license=('GPL')
+ install=virtualbox-libre-parabola-modules.install
+ depends=('linux-libre>=3.5' 'linux-libre<3.6')
+ replaces=('virtualbox-archlinux-modules')
+ conflicts=('virtualbox-archlinux-modules')
+ provides=("virtualbox-archlinux-modules=$pkgver")
+
+ source "$srcdir/VirtualBox-${pkgver}/env.sh"
+
+ cd "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/additions/src"
+
+ for module in vboxguest.ko vboxsf.ko vboxvideo.ko; do
+ install -D -m644 ${module} \
+ "$pkgdir/usr/lib/modules/${_extramodules}/${module}"
+ done
+
+ install -D -m 0644 "$srcdir/60-vboxguest.rules" \
+ "$pkgdir/usr/lib/udev/rules.d/60-vboxguest.rules"
+
+ find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \;
+
+ sed -i -e "s/EXTRAMODULES='.*'/EXTRAMODULES='${_extramodules}'/" "$startdir/virtualbox-libre-parabola-modules.install"
+}
+
+package_virtualbox-libre-modules(){
+ pkgdesc="Kernel libre modules for VirtualBox"
+ license=('GPL')
+ install=virtualbox-libre-modules.install
+ depends=('linux-libre>=3.5' 'linux-libre<3.6')
+ replaces=('virtualbox-modules')
+ conflicts=('virtualbox-modules')
+ provides=("virtualbox-modules=$pkgver")
+
+ source "$srcdir/VirtualBox-${pkgver}/env.sh"
+
+
+ cd "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/src"
+
+ install -D -m644 vboxdrv.ko \
+ "$pkgdir/usr/lib/modules/${_extramodules}/vboxdrv.ko"
+
+ install -D -m644 vboxnetadp.ko \
+ "$pkgdir/usr/lib/modules/${_extramodules}/vboxnetadp.ko"
+
+ install -D -m644 vboxnetflt.ko \
+ "$pkgdir/usr/lib/modules/${_extramodules}/vboxnetflt.ko"
+
+ install -D -m644 vboxpci.ko \
+ "$pkgdir/usr/lib/modules/${_extramodules}/vboxpci.ko"
+
+ find "${pkgdir}" -name '*.ko' -exec gzip -9 {} +
+
+ sed -i -e "s/EXTRAMODULES='.*'/EXTRAMODULES='${_extramodules}'/" "$startdir/virtualbox-libre-modules.install"
+}
diff --git a/libre/virtualbox-libre-modules/free-distros.patch b/libre/virtualbox-libre-modules/free-distros.patch
new file mode 100644
index 000000000..47857e05d
--- /dev/null
+++ b/libre/virtualbox-libre-modules/free-distros.patch
@@ -0,0 +1,1383 @@
+--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UINewVMWzd.cpp 2012-07-25 14:51:03.569003667 -0300
++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UINewVMWzd.cpp 2012-07-25 14:51:03.652333615 -0300
+@@ -44,94 +44,38 @@
+ * first matching string found, will be used. */
+ static const osTypePattern gs_OSTypePattern[] =
+ {
+- { QRegExp("DOS", Qt::CaseInsensitive), "DOS" },
+
+- /* Windows */
+- { QRegExp("Wi.*98", Qt::CaseInsensitive), "Windows98" },
+- { QRegExp("Wi.*95", Qt::CaseInsensitive), "Windows95" },
+- { QRegExp("Wi.*Me", Qt::CaseInsensitive), "WindowsMe" },
+- { QRegExp("(Wi.*NT)|(NT4)", Qt::CaseInsensitive), "WindowsNT4" },
+- { QRegExp("((Wi.*XP)|(\\bXP\\b)).*64", Qt::CaseInsensitive), "WindowsXP_64" },
+- { QRegExp("(Wi.*XP)|(\\bXP\\b)", Qt::CaseInsensitive), "WindowsXP" },
+- { QRegExp("((Wi.*2003)|(W2K3)).*64", Qt::CaseInsensitive), "Windows2003_64" },
+- { QRegExp("(Wi.*2003)|(W2K3)", Qt::CaseInsensitive), "Windows2003" },
+- { QRegExp("((Wi.*V)|(Vista)).*64", Qt::CaseInsensitive), "WindowsVista_64" },
+- { QRegExp("(Wi.*V)|(Vista)", Qt::CaseInsensitive), "WindowsVista" },
+- { QRegExp("((Wi.*2008)|(W2K8)).*64", Qt::CaseInsensitive), "Windows2008_64" },
+- { QRegExp("(Wi.*2008)|(W2K8)", Qt::CaseInsensitive), "Windows2008" },
+- { QRegExp("(Wi.*2000)|(W2K)", Qt::CaseInsensitive), "Windows2000" },
+- { QRegExp("(Wi.*7.*64)|(W7.*64)", Qt::CaseInsensitive), "Windows7_64" },
+- { QRegExp("(Wi.*7)|(W7)", Qt::CaseInsensitive), "Windows7" },
+- { QRegExp("(Wi.*8.*64)|(W8.*64)", Qt::CaseInsensitive), "Windows8_64" },
+- { QRegExp("(Wi.*8)|(W8)", Qt::CaseInsensitive), "Windows8" },
+- { QRegExp("Wi.*3", Qt::CaseInsensitive), "Windows31" },
+- { QRegExp("Wi", Qt::CaseInsensitive), "WindowsXP" },
+-
+- /* Solaris */
+- { QRegExp("((Op.*So)|(os20[01][0-9])|(So.*1[01])|(India)|(Neva)).*64", Qt::CaseInsensitive), "OpenSolaris_64" },
+- { QRegExp("(Op.*So)|(os20[01][0-9])|(So.*1[01])|(India)|(Neva)", Qt::CaseInsensitive), "OpenSolaris" },
+- { QRegExp("So.*64", Qt::CaseInsensitive), "Solaris_64" },
+- { QRegExp("So", Qt::CaseInsensitive), "Solaris" },
+-
+- /* OS/2 */
+- { QRegExp("OS[/|!-]{,1}2.*W.*4.?5", Qt::CaseInsensitive), "OS2Warp45" },
+- { QRegExp("OS[/|!-]{,1}2.*W.*4", Qt::CaseInsensitive), "OS2Warp4" },
+- { QRegExp("OS[/|!-]{,1}2.*W", Qt::CaseInsensitive), "OS2Warp3" },
+- { QRegExp("(OS[/|!-]{,1}2.*e)|(eCS.*)", Qt::CaseInsensitive), "OS2eCS" },
+- { QRegExp("OS[/|!-]{,1}2", Qt::CaseInsensitive), "OS2" },
+-
+- /* Code names for Linux distributions */
+- { QRegExp("((edgy)|(feisty)|(gutsy)|(hardy)|(intrepid)|(jaunty)|(karmic)|(lucid)|(maverick)|(natty)|(oneiric)|(precise)).*64", Qt::CaseInsensitive), "Ubuntu_64" },
+- { QRegExp("(edgy)|(feisty)|(gutsy)|(hardy)|(intrepid)|(jaunty)|(karmic)|(lucid)|(maverick)|(natty)|(oneiric)|(precise)", Qt::CaseInsensitive), "Ubuntu" },
+- { QRegExp("((sarge)|(etch)|(lenny)|(squeeze)|(wheezy)|(sid)).*64", Qt::CaseInsensitive), "Debian_64" },
+- { QRegExp("(sarge)|(etch)|(lenny)|(squeeze)|(wheezy)|(sid)", Qt::CaseInsensitive), "Debian" },
+- { QRegExp("((moonshine)|(werewolf)|(sulphur)|(cambridge)|(leonidas)|(constantine)|(goddard)|(laughlin)|(lovelock)|(verne)).*64", Qt::CaseInsensitive), "Fedora_64" },
+- { QRegExp("(moonshine)|(werewolf)|(sulphur)|(cambridge)|(leonidas)|(constantine)|(goddard)|(laughlin)|(lovelock)|(verne)", Qt::CaseInsensitive), "Fedora" },
+-
+- /* Regular names of Linux distributions */
+- { QRegExp("Arc.*64", Qt::CaseInsensitive), "ArchLinux_64" },
+- { QRegExp("Arc", Qt::CaseInsensitive), "ArchLinux" },
+- { QRegExp("Deb.*64", Qt::CaseInsensitive), "Debian_64" },
+- { QRegExp("Deb", Qt::CaseInsensitive), "Debian" },
+- { QRegExp("((SU)|(Nov)|(SLE)).*64", Qt::CaseInsensitive), "OpenSUSE_64" },
+- { QRegExp("(SU)|(Nov)|(SLE)", Qt::CaseInsensitive), "OpenSUSE" },
+- { QRegExp("Fe.*64", Qt::CaseInsensitive), "Fedora_64" },
+- { QRegExp("Fe", Qt::CaseInsensitive), "Fedora" },
+- { QRegExp("((Gen)|(Sab)).*64", Qt::CaseInsensitive), "Gentoo_64" },
+- { QRegExp("(Gen)|(Sab)", Qt::CaseInsensitive), "Gentoo" },
+- { QRegExp("Man.*64", Qt::CaseInsensitive), "Mandriva_64" },
+- { QRegExp("Man", Qt::CaseInsensitive), "Mandriva" },
+- { QRegExp("((Red)|(rhel)|(cen)).*64", Qt::CaseInsensitive), "RedHat_64" },
+- { QRegExp("(Red)|(rhel)|(cen)", Qt::CaseInsensitive), "RedHat" },
+- { QRegExp("Tur.*64", Qt::CaseInsensitive), "Turbolinux_64" },
+- { QRegExp("Tur", Qt::CaseInsensitive), "Turbolinux" },
+- { QRegExp("Ub.*64", Qt::CaseInsensitive), "Ubuntu_64" },
+- { QRegExp("Ub", Qt::CaseInsensitive), "Ubuntu" },
+- { QRegExp("Xa.*64", Qt::CaseInsensitive), "Xandros_64" },
+- { QRegExp("Xa", Qt::CaseInsensitive), "Xandros" },
+- { QRegExp("((Or)|(oel)).*64", Qt::CaseInsensitive), "Oracle_64" },
+- { QRegExp("(Or)|(oel)", Qt::CaseInsensitive), "Oracle" },
+- { QRegExp("((Li)|(lnx)).*2.?2", Qt::CaseInsensitive), "Linux22" },
+- { QRegExp("((Li)|(lnx)).*2.?4.*64", Qt::CaseInsensitive), "Linux24_64" },
+- { QRegExp("((Li)|(lnx)).*2.?4", Qt::CaseInsensitive), "Linux24" },
+- { QRegExp("((((Li)|(lnx)).*2.?6)|(LFS)).*64", Qt::CaseInsensitive), "Linux26_64" },
+- { QRegExp("(((Li)|(lnx)).*2.?6)|(LFS)", Qt::CaseInsensitive), "Linux26" },
+- { QRegExp("((Li)|(lnx)).*64", Qt::CaseInsensitive), "Linux26_64" },
+- { QRegExp("(Li)|(lnx)", Qt::CaseInsensitive), "Linux26" },
++ /* Code names for GNU/Linux distributions */
++ { QRegExp("((Taranis)|(Dagda)|(Brigantia)).*64", Qt::CaseInsensitive), "Trisquel_64" },
++ { QRegExp("(Taranis)|(Dagda)|(Brigantia)", Qt::CaseInsensitive), "Trisquel" },
++ { QRegExp("((metad)|(parkes)|(three)).*64", Qt::CaseInsensitive), "gNewSense_64" },
++ { QRegExp("(deltah)|(metad)|(parkes)|(three)", Qt::CaseInsensitive), "gNewSense" },
++ { QRegExp("((90k)|(119k)|(140k)|(160k)|(90000)|(119000)|(140000)|(160000)|(Spartakus)).*64", Qt::CaseInsensitive), "Blag_64" },
++ { QRegExp("(90k)|(119k)|(140k)|(160k)|(90000)|(119000)|(140000)|(160000)|(Spartakus)", Qt::CaseInsensitive), "Blag" },
++
++ /* Regular names of GNU/Linux distributions and GNU-Hurd */
++ { QRegExp("Pa.*64", Qt::CaseInsensitive), "Parabola_64" },
++ { QRegExp("Pa", Qt::CaseInsensitive), "Parabola" },
++ { QRegExp("((gNe)|(new)|(Sen)).*64", Qt::CaseInsensitive), "gNewSense_64" },
++ { QRegExp("(gNe)|(new)|(Sen)", Qt::CaseInsensitive), "gNewSense" },
++ { QRegExp("Bla.*64", Qt::CaseInsensitive), "Blag_64" },
++ { QRegExp("Bla", Qt::CaseInsensitive), "Blag" },
++ { QRegExp("Dra.*64", Qt::CaseInsensitive), "Dragora_64" },
++ { QRegExp("Dra", Qt::CaseInsensitive), "Dragora" },
++ { QRegExp("((Utu)|(XS)).*64", Qt::CaseInsensitive), "Ututo_64" },
++ { QRegExp("(Utu)|(XS)", Qt::CaseInsensitive), "Ututo" },
++ { QRegExp("Mus.*64", Qt::CaseInsensitive), "Musix_64" },
++ { QRegExp("Mus", Qt::CaseInsensitive), "Musix" },
++ { QRegExp("Tri.*64", Qt::CaseInsensitive), "Trisquel_64" },
++ { QRegExp("Tri", Qt::CaseInsensitive), "Trisquel" },
++ { QRegExp("Dyn", Qt::CaseInsensitive), "Dynebolic" },
++ { QRegExp("Ven", Qt::CaseInsensitive), "Venenux" },
++ { QRegExp("GNU", Qt::CaseInsensitive), "GNU" },
++ { QRegExp("Hu", Qt::CaseInsensitive), "GNUHurd" },
++ { QRegExp("((Li)|(lnx)).*64", Qt::CaseInsensitive), "GNULinux_64" },
++ { QRegExp("(Li)|(lnx)", Qt::CaseInsensitive), "GNULinux" },
+
+ /* Other */
+- { QRegExp("L4", Qt::CaseInsensitive), "L4" },
+- { QRegExp("((Fr.*B)|(fbsd)).*64", Qt::CaseInsensitive), "FreeBSD_64" },
+- { QRegExp("(Fr.*B)|(fbsd)", Qt::CaseInsensitive), "FreeBSD" },
+- { QRegExp("Op.*B.*64", Qt::CaseInsensitive), "OpenBSD_64" },
+- { QRegExp("Op.*B", Qt::CaseInsensitive), "OpenBSD" },
+- { QRegExp("Ne.*B.*64", Qt::CaseInsensitive), "NetBSD_64" },
+- { QRegExp("Ne.*B", Qt::CaseInsensitive), "NetBSD" },
+- { QRegExp("QN", Qt::CaseInsensitive), "QNX" },
+- { QRegExp("((Mac)|(Tig)|(Leop)|(osx)).*64", Qt::CaseInsensitive), "MacOS_64" },
+- { QRegExp("(Mac)|(Tig)|(Leop)|(osx)", Qt::CaseInsensitive), "MacOS" },
+- { QRegExp("Net", Qt::CaseInsensitive), "Netware" },
+- { QRegExp("Rocki", Qt::CaseInsensitive), "JRockitVE" },
+ { QRegExp("Ot", Qt::CaseInsensitive), "Other" },
+ };
+
+--- VirtualBox-4.1.18.orig/src/VBox/Main/xml/Settings.cpp 2012-07-25 15:14:50.498764160 -0300
++++ VirtualBox-4.1.18/src/VBox/Main/xml/Settings.cpp 2012-07-25 15:14:50.548761649 -0300
+@@ -3227,40 +3227,18 @@
+ } aConvertOSTypes[] =
+ {
+ { "unknown", "Other" },
+- { "dos", "DOS" },
+- { "win31", "Windows31" },
+- { "win95", "Windows95" },
+- { "win98", "Windows98" },
+- { "winme", "WindowsMe" },
+- { "winnt4", "WindowsNT4" },
+- { "win2k", "Windows2000" },
+- { "winxp", "WindowsXP" },
+- { "win2k3", "Windows2003" },
+- { "winvista", "WindowsVista" },
+- { "win2k8", "Windows2008" },
+- { "os2warp3", "OS2Warp3" },
+- { "os2warp4", "OS2Warp4" },
+- { "os2warp45", "OS2Warp45" },
+- { "ecs", "OS2eCS" },
+- { "linux22", "Linux22" },
+- { "linux24", "Linux24" },
+- { "linux26", "Linux26" },
+- { "archlinux", "ArchLinux" },
+- { "debian", "Debian" },
+- { "opensuse", "OpenSUSE" },
+- { "fedoracore", "Fedora" },
+- { "gentoo", "Gentoo" },
+- { "mandriva", "Mandriva" },
+- { "redhat", "RedHat" },
+- { "ubuntu", "Ubuntu" },
+- { "xandros", "Xandros" },
+- { "freebsd", "FreeBSD" },
+- { "openbsd", "OpenBSD" },
+- { "netbsd", "NetBSD" },
+- { "netware", "Netware" },
+- { "solaris", "Solaris" },
+- { "opensolaris", "OpenSolaris" },
+- { "l4", "L4" }
++ { "gnu", "GNU" },
++ { "gnuhurd", "GNUHurd" },
++ { "gnulinux", "GNULinux" },
++ { "parabola", "Parabola" },
++ { "gnewsense", "gNewSense" },
++ { "blag", "Blag" },
++ { "dragora", "Dragora" },
++ { "ututo", "Ututo" },
++ { "musix", "Musix" },
++ { "trisquel", "Trisquel" },
++ { "dynebolic", "Dynebolic" },
++ { "venenux", "Venenux" },
+ };
+
+ void MachineConfigFile::convertOldOSType_pre1_5(Utf8Str &str)
+--- VirtualBox-4.1.18.orig/src/VBox/Main/xml/SettingsConverter.xsl 2012-07-25 15:21:04.553581275 -0300
++++ VirtualBox-4.1.18/src/VBox/Main/xml/SettingsConverter.xsl 2012-07-25 15:21:04.593579427 -0300
+@@ -729,40 +729,18 @@
+ <xsl:attribute name="OSType">
+ <xsl:choose>
+ <xsl:when test="@OSType='unknown'">Other</xsl:when>
+- <xsl:when test="@OSType='dos'">DOS</xsl:when>
+- <xsl:when test="@OSType='win31'">Windows31</xsl:when>
+- <xsl:when test="@OSType='win95'">Windows95</xsl:when>
+- <xsl:when test="@OSType='win98'">Windows98</xsl:when>
+- <xsl:when test="@OSType='winme'">WindowsMe</xsl:when>
+- <xsl:when test="@OSType='winnt4'">WindowsNT4</xsl:when>
+- <xsl:when test="@OSType='win2k'">Windows2000</xsl:when>
+- <xsl:when test="@OSType='winxp'">WindowsXP</xsl:when>
+- <xsl:when test="@OSType='win2k3'">Windows2003</xsl:when>
+- <xsl:when test="@OSType='winvista'">WindowsVista</xsl:when>
+- <xsl:when test="@OSType='win2k8'">Windows2008</xsl:when>
+- <xsl:when test="@OSType='os2warp3'">OS2Warp3</xsl:when>
+- <xsl:when test="@OSType='os2warp4'">OS2Warp4</xsl:when>
+- <xsl:when test="@OSType='os2warp45'">OS2Warp45</xsl:when>
+- <xsl:when test="@OSType='ecs'">OS2eCS</xsl:when>
+- <xsl:when test="@OSType='linux22'">Linux22</xsl:when>
+- <xsl:when test="@OSType='linux24'">Linux24</xsl:when>
+- <xsl:when test="@OSType='linux26'">Linux26</xsl:when>
+- <xsl:when test="@OSType='archlinux'">ArchLinux</xsl:when>
+- <xsl:when test="@OSType='debian'">Debian</xsl:when>
+- <xsl:when test="@OSType='opensuse'">OpenSUSE</xsl:when>
+- <xsl:when test="@OSType='fedoracore'">Fedora</xsl:when>
+- <xsl:when test="@OSType='gentoo'">Gentoo</xsl:when>
+- <xsl:when test="@OSType='mandriva'">Mandriva</xsl:when>
+- <xsl:when test="@OSType='redhat'">RedHat</xsl:when>
+- <xsl:when test="@OSType='ubuntu'">Ubuntu</xsl:when>
+- <xsl:when test="@OSType='xandros'">Xandros</xsl:when>
+- <xsl:when test="@OSType='freebsd'">FreeBSD</xsl:when>
+- <xsl:when test="@OSType='openbsd'">OpenBSD</xsl:when>
+- <xsl:when test="@OSType='netbsd'">NetBSD</xsl:when>
+- <xsl:when test="@OSType='netware'">Netware</xsl:when>
+- <xsl:when test="@OSType='solaris'">Solaris</xsl:when>
+- <xsl:when test="@OSType='opensolaris'">OpenSolaris</xsl:when>
+- <xsl:when test="@OSType='l4'">L4</xsl:when>
++ <xsl:when test="@OSType='gnu'">GNU</xsl:when>
++ <xsl:when test="@OSType='gnuhurd'">GNUHurd</xsl:when>
++ <xsl:when test="@OSType='gnulinux'">GNULinux</xsl:when>
++ <xsl:when test="@OSType='parabola'">Parabola</xsl:when>
++ <xsl:when test="@OSType='gnewsense'">gNewSense</xsl:when>
++ <xsl:when test="@OSType='blag'">Blag</xsl:when>
++ <xsl:when test="@OSType='dragora'">Dragora</xsl:when>
++ <xsl:when test="@OSType='ututo'">Ututo</xsl:when>
++ <xsl:when test="@OSType='musix'">Musix</xsl:when>
++ <xsl:when test="@OSType='trisquel'">Trisquel</xsl:when>
++ <xsl:when test="@OSType='dynebolic'">Dynebolic</xsl:when>
++ <xsl:when test="@OSType='venenux'">Venenux</xsl:when>
+ </xsl:choose>
+ </xsl:attribute>
+ <xsl:apply-templates select="@*[name()!='OSType']" mode="v1.5"/>
+--- VirtualBox-4.1.18.orig/src/VBox/Main/xml/VirtualBox-settings-common.xsd 2012-07-25 15:04:37.856003691 -0300
++++ VirtualBox-4.1.18/src/VBox/Main/xml/VirtualBox-settings-common.xsd 2012-07-25 15:04:37.892668156 -0300
+@@ -137,75 +137,27 @@
+ <xsd:simpleType name="TGuestOSType">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Other"/>
+- <xsd:enumeration value="DOS"/>
+- <xsd:enumeration value="Netware"/>
+- <xsd:enumeration value="L4"/>
+- <xsd:enumeration value="Windows31"/>
+- <xsd:enumeration value="Windows95"/>
+- <xsd:enumeration value="Windows98"/>
+- <xsd:enumeration value="WindowsMe"/>
+- <xsd:enumeration value="WindowsNT4"/>
+- <xsd:enumeration value="Windows2000"/>
+- <xsd:enumeration value="WindowsXP"/>
+- <xsd:enumeration value="WindowsXP_64"/>
+- <xsd:enumeration value="Windows2003"/>
+- <xsd:enumeration value="Windows2003_64"/>
+- <xsd:enumeration value="WindowsVista"/>
+- <xsd:enumeration value="WindowsVista_64"/>
+- <xsd:enumeration value="Windows2008"/>
+- <xsd:enumeration value="Windows2008_64"/>
+- <xsd:enumeration value="Windows7"/>
+- <xsd:enumeration value="Windows7_64"/>
+- <xsd:enumeration value="Windows8"/>
+- <xsd:enumeration value="Windows8_64"/>
+- <xsd:enumeration value="WindowsNT"/>
+- <xsd:enumeration value="OS2Warp3"/>
+- <xsd:enumeration value="OS2Warp4"/>
+- <xsd:enumeration value="OS2Warp45"/>
+- <xsd:enumeration value="OS2eCS"/>
+- <xsd:enumeration value="OS2"/>
+- <xsd:enumeration value="Linux22"/>
+- <xsd:enumeration value="Linux24"/>
+- <xsd:enumeration value="Linux24_64"/>
+- <xsd:enumeration value="Linux26"/>
+- <xsd:enumeration value="Linux26_64"/>
+- <xsd:enumeration value="ArchLinux"/>
+- <xsd:enumeration value="ArchLinux_64"/>
+- <xsd:enumeration value="Debian"/>
+- <xsd:enumeration value="Debian_64"/>
+- <xsd:enumeration value="OpenSUSE"/>
+- <xsd:enumeration value="OpenSUSE_64"/>
+- <xsd:enumeration value="Fedora"/>
+- <xsd:enumeration value="Fedora_64"/>
+- <xsd:enumeration value="Gentoo"/>
+- <xsd:enumeration value="Gentoo_64"/>
+- <xsd:enumeration value="Mandriva"/>
+- <xsd:enumeration value="Mandriva_64"/>
+- <xsd:enumeration value="RedHat"/>
+- <xsd:enumeration value="RedHat_64"/>
+- <xsd:enumeration value="Turbolinux"/>
+- <xsd:enumeration value="Turbolinux_64"/>
+- <xsd:enumeration value="Ubuntu"/>
+- <xsd:enumeration value="Ubuntu_64"/>
+- <xsd:enumeration value="Xandros"/>
+- <xsd:enumeration value="Xandros_64"/>
+- <xsd:enumeration value="Oracle"/>
+- <xsd:enumeration value="Oracle_64"/>
+- <xsd:enumeration value="Linux"/>
+- <xsd:enumeration value="FreeBSD"/>
+- <xsd:enumeration value="FreeBSD_64"/>
+- <xsd:enumeration value="OpenBSD"/>
+- <xsd:enumeration value="OpenBSD_64"/>
+- <xsd:enumeration value="NetBSD"/>
+- <xsd:enumeration value="NetBSD_64"/>
+- <xsd:enumeration value="Solaris"/>
+- <xsd:enumeration value="Solaris_64"/>
+- <xsd:enumeration value="OpenSolaris"/>
+- <xsd:enumeration value="OpenSolaris_64"/>
+- <xsd:enumeration value="QNX"/>
+- <xsd:enumeration value="MacOS"/>
+- <xsd:enumeration value="MacOS_64"/>
+- <xsd:enumeration value="JRockitVE"/>
++ <xsd:enumeration value="GNU"/>
++ <xsd:enumeration value="GNU_64"/>
++ <xsd:enumeration value="GNUHurd"/>
++ <xsd:enumeration value="GNULinux"/>
++ <xsd:enumeration value="GNULinux_64"/>
++ <xsd:enumeration value="Parabola"/>
++ <xsd:enumeration value="Parabola_64"/>
++ <xsd:enumeration value="gNewSense"/>
++ <xsd:enumeration value="gNewSense_64"/>
++ <xsd:enumeration value="Blag"/>
++ <xsd:enumeration value="Blag_64"/>
++ <xsd:enumeration value="Dragora"/>
++ <xsd:enumeration value="Dragora_64"/>
++ <xsd:enumeration value="Ututo"/>
++ <xsd:enumeration value="Ututo_64"/>
++ <xsd:enumeration value="Musix"/>
++ <xsd:enumeration value="Musix_64"/>
++ <xsd:enumeration value="Trisquel"/>
++ <xsd:enumeration value="Trisquel_64"/>
++ <xsd:enumeration value="Dynebolic"/>
++ <xsd:enumeration value="Venenux"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-25 15:40:56.733096866 -0300
++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-25 15:40:56.796426519 -0300
+@@ -1,75 +1,27 @@
+ <!DOCTYPE RCC><RCC version="1.0">
+ <qresource prefix="/">
+- <file alias="os_archlinux.png">images/os_archlinux.png</file>
+- <file alias="os_archlinux_64.png">images/os_archlinux_64.png</file>
+- <file alias="os_debian.png">images/os_debian.png</file>
+- <file alias="os_debian_64.png">images/os_debian_64.png</file>
+- <file alias="os_dos.png">images/os_dos.png</file>
+- <file alias="os_fedora.png">images/os_fedora.png</file>
+- <file alias="os_fedora_64.png">images/os_fedora_64.png</file>
+- <file alias="os_freebsd.png">images/os_freebsd.png</file>
+- <file alias="os_freebsd_64.png">images/os_freebsd_64.png</file>
+- <file alias="os_gentoo.png">images/os_gentoo.png</file>
+- <file alias="os_gentoo_64.png">images/os_gentoo_64.png</file>
+- <file alias="os_jrockitve.png">images/os_jrockitve.png</file>
+- <file alias="os_l4.png">images/os_l4.png</file>
+- <file alias="os_linux_other.png">images/os_linux_other.png</file>
+- <file alias="os_linux22.png">images/os_linux22.png</file>
+- <file alias="os_linux24.png">images/os_linux24.png</file>
+- <file alias="os_linux24_64.png">images/os_linux24_64.png</file>
+- <file alias="os_linux26.png">images/os_linux26.png</file>
+- <file alias="os_linux26_64.png">images/os_linux26_64.png</file>
+- <file alias="os_mandriva.png">images/os_mandriva.png</file>
+- <file alias="os_mandriva_64.png">images/os_mandriva_64.png</file>
+- <file alias="os_netbsd.png">images/os_netbsd.png</file>
+- <file alias="os_netbsd_64.png">images/os_netbsd_64.png</file>
+- <file alias="os_netware.png">images/os_netware.png</file>
+- <file alias="os_openbsd.png">images/os_openbsd.png</file>
+- <file alias="os_openbsd_64.png">images/os_openbsd_64.png</file>
+- <file alias="os_oraclesolaris.png">images/os_oraclesolaris.png</file>
+- <file alias="os_oraclesolaris_64.png">images/os_oraclesolaris_64.png</file>
+- <file alias="os_opensuse.png">images/os_opensuse.png</file>
+- <file alias="os_opensuse_64.png">images/os_opensuse_64.png</file>
+- <file alias="os_os2_other.png">images/os_os2_other.png</file>
+- <file alias="os_os2ecs.png">images/os_os2ecs.png</file>
+- <file alias="os_os2warp3.png">images/os_os2warp3.png</file>
+- <file alias="os_os2warp4.png">images/os_os2warp4.png</file>
+- <file alias="os_os2warp45.png">images/os_os2warp45.png</file>
++ <file alias="os_parabola.png">images/os_parabola.png</file>
++ <file alias="os_parabola_64.png">images/os_parabola_64.png</file>
++ <file alias="os_gnewsense.png">images/os_gnewsense.png</file>
++ <file alias="os_gnewsense_64.png">images/os_gnewsense_64.png</file>
++ <file alias="os_blag.png">images/os_blag.png</file>
++ <file alias="os_blag_64.png">images/os_blag_64.png</file>
++ <file alias="os_ututo.png">images/os_ututo.png</file>
++ <file alias="os_ututo_64.png">images/os_ututo_64.png</file>
++ <file alias="os_gnu.png">images/os_gnu.png</file>
++ <file alias="os_gnu_64.png">images/os_gnu_64.png</file>
++ <file alias="os_gnuhurd.png">images/os_gnuhurd.png</file>
++ <file alias="os_gnulinux.png">images/os_gnulinux.png</file>
++ <file alias="os_gnulinux_64.png">images/os_gnulinux_64.png</file>
++ <file alias="os_musix.png">images/os_musix.png</file>
++ <file alias="os_musix_64.png">images/os_musix_64.png</file>
++ <file alias="os_dragora.png">images/os_dragora.png</file>
++ <file alias="os_dragora_64.png">images/os_dragora_64.png</file>
+ <file alias="os_other.png">images/os_other.png</file>
+- <file alias="os_qnx.png">images/os_qnx.png</file>
+- <file alias="os_redhat.png">images/os_redhat.png</file>
+- <file alias="os_redhat_64.png">images/os_redhat_64.png</file>
+- <file alias="os_turbolinux.png">images/os_turbolinux.png</file>
+- <file alias="os_turbolinux_64.png">images/os_turbolinux_64.png</file>
+- <file alias="os_solaris.png">images/os_solaris.png</file>
+- <file alias="os_solaris_64.png">images/os_solaris_64.png</file>
+- <file alias="os_ubuntu.png">images/os_ubuntu.png</file>
+- <file alias="os_ubuntu_64.png">images/os_ubuntu_64.png</file>
+- <file alias="os_win_other.png">images/os_win_other.png</file>
+- <file alias="os_win2k.png">images/os_win2k.png</file>
+- <file alias="os_win2k3.png">images/os_win2k3.png</file>
+- <file alias="os_win2k3_64.png">images/os_win2k3_64.png</file>
+- <file alias="os_win2k8.png">images/os_win2k8.png</file>
+- <file alias="os_win2k8_64.png">images/os_win2k8_64.png</file>
+- <file alias="os_win31.png">images/os_win31.png</file>
+- <file alias="os_win7.png">images/os_win7.png</file>
+- <file alias="os_win7_64.png">images/os_win7_64.png</file>
+- <file alias="os_win8.png">images/os_win8.png</file>
+- <file alias="os_win8_64.png">images/os_win8_64.png</file>
+- <file alias="os_win95.png">images/os_win95.png</file>
+- <file alias="os_win98.png">images/os_win98.png</file>
+- <file alias="os_winme.png">images/os_winme.png</file>
+- <file alias="os_winnt4.png">images/os_winnt4.png</file>
+- <file alias="os_winvista.png">images/os_winvista.png</file>
+- <file alias="os_winvista_64.png">images/os_winvista_64.png</file>
+- <file alias="os_winxp.png">images/os_winxp.png</file>
+- <file alias="os_winxp_64.png">images/os_winxp_64.png</file>
+- <file alias="os_xandros.png">images/os_xandros.png</file>
+- <file alias="os_xandros_64.png">images/os_xandros_64.png</file>
+- <file alias="os_oracle.png">images/os_oracle.png</file>
+- <file alias="os_oracle_64.png">images/os_oracle_64.png</file>
+- <file alias="os_macosx.png">images/os_macosx.png</file>
+- <file alias="os_macosx_64.png">images/os_macosx_64.png</file>
++ <file alias="os_dynebolic.png">images/os_dynebolic.png</file>
++ <file alias="os_venenux.png">images/os_venenux.png</file>
++ <file alias="os_trisquel.png">images/os_trisquel.png</file>
++ <file alias="os_trisquel_64.png">images/os_trisquel_64.png</file>
+ <file alias="hd_16px.png">images/hd_16px.png</file>
+ <file alias="hd_disabled_16px.png">images/hd_disabled_16px.png</file>
+ <file alias="hd_32px.png">images/hd_32px.png</file>
+--- VirtualBox-4.1.20.orig/src/VBox/Main/src-all/Global.cpp 2012-08-20 11:36:24.000000000 -0300
++++ VirtualBox-4.1.20/src/VBox/Main/src-all/Global.cpp 2012-08-21 14:22:29.148190849 -0300
+@@ -35,284 +35,90 @@
+ VBOXOSTYPE_Unknown, VBOXOSHINT_NONE,
+ 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows31, "Windows 3.1",
+- VBOXOSTYPE_Win31, VBOXOSHINT_NONE,
+- 32, 4, 1 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_SB16 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows95, "Windows 95",
+- VBOXOSTYPE_Win95, VBOXOSHINT_NONE,
+- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows98, "Windows 98",
+- VBOXOSTYPE_Win98, VBOXOSHINT_NONE,
+- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsMe, "Windows Me",
+- VBOXOSTYPE_WinMe, VBOXOSHINT_NONE,
+- 64, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsNT4, "Windows NT 4",
+- VBOXOSTYPE_WinNT4, VBOXOSHINT_NONE,
+- 128, 16, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2000, "Windows 2000",
+- VBOXOSTYPE_Win2k, VBOXOSHINT_USBTABLET,
+- 168, 16, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsXP, "Windows XP",
+- VBOXOSTYPE_WinXP, VBOXOSHINT_USBTABLET,
+- 192, 16, 10 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsXP_64, "Windows XP (64 bit)",
+- VBOXOSTYPE_WinXP_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
+- 192, 16, 10 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2003, "Windows 2003",
+- VBOXOSTYPE_Win2k3, VBOXOSHINT_USBTABLET,
+- 256, 16, 20 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2003_64, "Windows 2003 (64 bit)",
+- VBOXOSTYPE_Win2k3_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
+- 256, 16, 20 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsVista, "Windows Vista",
+- VBOXOSTYPE_WinVista, VBOXOSHINT_USBTABLET,
+- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsVista_64, "Windows Vista (64 bit)",
+- VBOXOSTYPE_WinVista_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
+- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2008, "Windows 2008",
+- VBOXOSTYPE_Win2k8, VBOXOSHINT_USBTABLET,
+- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2008_64, "Windows 2008 (64 bit)",
+- VBOXOSTYPE_Win2k8_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
+- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows7, "Windows 7",
+- VBOXOSTYPE_Win7, VBOXOSHINT_USBTABLET,
+- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows7_64, "Windows 7 (64 bit)",
+- VBOXOSTYPE_Win7_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
+- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows8, "Windows 8",
+- VBOXOSTYPE_Win8, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET | VBOXOSHINT_PAE,
+- 1024,128, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows8_64, "Windows 8 (64 bit)",
+- VBOXOSTYPE_Win8_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
+- 1536,128, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsNT, "Other Windows",
+- VBOXOSTYPE_WinNT, VBOXOSHINT_NONE,
+- 512, 16, 20 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux22, "Linux 2.2",
+- VBOXOSTYPE_Linux22, VBOXOSHINT_RTCUTC,
+- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux24, "Linux 2.4",
+- VBOXOSTYPE_Linux24, VBOXOSHINT_RTCUTC,
+- 128, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux24_64, "Linux 2.4 (64 bit)",
+- VBOXOSTYPE_Linux24_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC,
+- 128, 4, 4 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
++ { "GNU", "GNU", SchemaDefs_OSTypeId_GNU, "GNU",
++ VBOXOSTYPE_GNU, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
++ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
++ { "GNU", "GNU", SchemaDefs_OSTypeId_GNU_64, "GNU (64 bit)",
++ VBOXOSTYPE_GNU_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
++ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
++ { "GNU-Hurd", "GNU-Hurd", SchemaDefs_OSTypeId_GNUHurd, "GNU-Hurd",
++ VBOXOSTYPE_GNUHurd, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux26, "Linux 2.6",
+- VBOXOSTYPE_Linux26, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_GNULinux, "GNU/Linux",
++ VBOXOSTYPE_GNULinux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux26_64, "Linux 2.6 (64 bit)",
+- VBOXOSTYPE_Linux26_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_GNULinux_64, "GNU/Linux (64 bit)",
++ VBOXOSTYPE_GNULinux_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_ArchLinux, "Arch Linux",
+- VBOXOSTYPE_ArchLinux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Parabola, "Parabola GNU/Linux-libre",
++ VBOXOSTYPE_Parabola, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_ArchLinux_64, "Arch Linux (64 bit)",
+- VBOXOSTYPE_ArchLinux_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Parabola_64, "Parabola GNU/Linux-libre (64 bit)",
++ VBOXOSTYPE_Parabola_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Debian, "Debian",
+- VBOXOSTYPE_Debian, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_gNewSense, "gNewSense",
++ VBOXOSTYPE_gNewSense, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Debian_64, "Debian (64 bit)",
+- VBOXOSTYPE_Debian_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_gNewSense_64, "gNewSense (64 bit)",
++ VBOXOSTYPE_gNewSense_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97},
+- { "Linux", "Linux", SchemaDefs_OSTypeId_OpenSUSE, "openSUSE",
+- VBOXOSTYPE_OpenSUSE, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_OpenSUSE_64, "openSUSE (64 bit)",
+- VBOXOSTYPE_OpenSUSE_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Fedora, "Fedora",
+- VBOXOSTYPE_FedoraCore, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Blag, "Blag Linux and GNU",
++ VBOXOSTYPE_Blag, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 768, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Fedora_64, "Fedora (64 bit)",
+- VBOXOSTYPE_FedoraCore_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Blag_64, "Blag Linux and GNU (64 bit)",
++ VBOXOSTYPE_Blag_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 768, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Gentoo, "Gentoo",
+- VBOXOSTYPE_Gentoo, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Dragora, "Dragora",
++ VBOXOSTYPE_Dragora, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Gentoo_64, "Gentoo (64 bit)",
+- VBOXOSTYPE_Gentoo_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Dragora_64, "Dragora (64 bit)",
++ VBOXOSTYPE_Dragora_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Mandriva, "Mandriva",
+- VBOXOSTYPE_Mandriva, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Mandriva_64, "Mandriva (64 bit)",
+- VBOXOSTYPE_Mandriva_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_RedHat, "Red Hat",
+- VBOXOSTYPE_RedHat, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE,
+- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Ututo, "Ututo XS",
++ VBOXOSTYPE_Ututo, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_RedHat_64, "Red Hat (64 bit)",
+- VBOXOSTYPE_RedHat_x64, VBOXOSHINT_64BIT | VBOXOSHINT_PAE | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC,
+- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Ututo_64, "Ututo XS (64 bit)",
++ VBOXOSTYPE_Ututo_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Turbolinux, "Turbolinux",
+- VBOXOSTYPE_Turbolinux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Musix, "Musix",
++ VBOXOSTYPE_Musix, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Turbolinux, "Turbolinux (64 bit)",
+- VBOXOSTYPE_Turbolinux_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Musix_64, "Musix (64 bit)",
++ VBOXOSTYPE_Musix_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Ubuntu, "Ubuntu",
+- VBOXOSTYPE_Ubuntu, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE | VBOXOSHINT_USBTABLET,
++ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97},
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Trisquel, "Trisquel",
++ VBOXOSTYPE_Trisquel, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE | VBOXOSHINT_USBTABLET,
+ 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Ubuntu_64, "Ubuntu (64 bit)",
+- VBOXOSTYPE_Ubuntu_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Trisquel_64, "Trisquel (64 bit)",
++ VBOXOSTYPE_Trisquel_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Xandros, "Xandros",
+- VBOXOSTYPE_Xandros, VBOXOSHINT_RTCUTC,
+- 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Dynebolic, "Dyne:bolic",
++ VBOXOSTYPE_Dynebolic, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Xandros_64, "Xandros (64 bit)",
+- VBOXOSTYPE_Xandros_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC,
+- 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Venenux, "Venenux",
++ VBOXOSTYPE_Venenux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Oracle, "Oracle",
+- VBOXOSTYPE_Oracle, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE,
+- 512, 12, 12 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Oracle_64, "Oracle (64 bit)",
+- VBOXOSTYPE_Oracle_x64, VBOXOSHINT_64BIT | VBOXOSHINT_PAE | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC,
+- 512, 12, 12 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux, "Other Linux",
+- VBOXOSTYPE_Linux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+- 256, 12, 8 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Solaris", "Solaris", SchemaDefs_OSTypeId_Solaris, "Oracle Solaris 10 5/09 and earlier",
+- VBOXOSTYPE_Solaris, VBOXOSHINT_NONE,
+- 768, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Solaris", "Solaris", SchemaDefs_OSTypeId_Solaris_64, "Oracle Solaris 10 5/09 and earlier (64 bit)",
+- VBOXOSTYPE_Solaris_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC,
+- 1536, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Solaris", "Solaris", SchemaDefs_OSTypeId_OpenSolaris, "Oracle Solaris 10 10/09 and later",
+- VBOXOSTYPE_OpenSolaris, VBOXOSHINT_USBTABLET,
+- 768, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Solaris", "Solaris", SchemaDefs_OSTypeId_OpenSolaris_64, "Oracle Solaris 10 10/09 and later (64 bit)",
+- VBOXOSTYPE_OpenSolaris_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
+- 1536, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "BSD", "BSD", SchemaDefs_OSTypeId_FreeBSD, "FreeBSD",
+- VBOXOSTYPE_FreeBSD, VBOXOSHINT_NONE,
+- 128, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "BSD", "BSD", SchemaDefs_OSTypeId_FreeBSD_64, "FreeBSD (64 bit)",
+- VBOXOSTYPE_FreeBSD_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC,
+- 128, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "BSD", "BSD", SchemaDefs_OSTypeId_OpenBSD, "OpenBSD",
+- VBOXOSTYPE_OpenBSD, VBOXOSHINT_HWVIRTEX,
+- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "BSD", "BSD", SchemaDefs_OSTypeId_OpenBSD_64, "OpenBSD (64 bit)",
+- VBOXOSTYPE_OpenBSD_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC,
+- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "BSD", "BSD", SchemaDefs_OSTypeId_NetBSD, "NetBSD",
+- VBOXOSTYPE_NetBSD, VBOXOSHINT_NONE,
+- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "BSD", "BSD", SchemaDefs_OSTypeId_NetBSD_64, "NetBSD (64 bit)",
+- VBOXOSTYPE_NetBSD_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC,
+- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2Warp3, "OS/2 Warp 3",
+- VBOXOSTYPE_OS2Warp3, VBOXOSHINT_HWVIRTEX,
+- 48, 4, 1 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2Warp4, "OS/2 Warp 4",
+- VBOXOSTYPE_OS2Warp4, VBOXOSHINT_HWVIRTEX,
+- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2Warp45, "OS/2 Warp 4.5",
+- VBOXOSTYPE_OS2Warp45, VBOXOSHINT_HWVIRTEX,
+- 96, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2eCS, "eComStation",
+- VBOXOSTYPE_ECS, VBOXOSHINT_HWVIRTEX,
+- 96, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2, "Other OS/2",
+- VBOXOSTYPE_OS2, VBOXOSHINT_HWVIRTEX,
+- 96, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "MacOS", "Mac OS X", SchemaDefs_OSTypeId_MacOS, "Mac OS X Server",
+- VBOXOSTYPE_MacOS, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_EFI | VBOXOSHINT_PAE | VBOXOSHINT_USBHID | VBOXOSHINT_HPET | VBOXOSHINT_USBTABLET,
+- 1024, 4, 20 * _1G64, NetworkAdapterType_I82543GC, 0,
+- StorageControllerType_ICH6, StorageBus_IDE, StorageControllerType_IntelAhci, StorageBus_SATA,
+- ChipsetType_ICH9, AudioControllerType_HDA },
+- { "MacOS", "Mac OS X", SchemaDefs_OSTypeId_MacOS_64, "Mac OS X Server (64 bit)",
+- VBOXOSTYPE_MacOS_x64, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_EFI | VBOXOSHINT_PAE | VBOXOSHINT_64BIT | VBOXOSHINT_USBHID | VBOXOSHINT_HPET | VBOXOSHINT_USBTABLET,
+- 1024, 4, 20 * _1G64, NetworkAdapterType_I82543GC, 0,
+- StorageControllerType_ICH6, StorageBus_IDE, StorageControllerType_IntelAhci, StorageBus_SATA,
+- ChipsetType_ICH9, AudioControllerType_HDA },
+- { "Other", "Other", SchemaDefs_OSTypeId_DOS, "DOS",
+- VBOXOSTYPE_DOS, VBOXOSHINT_NONE,
+- 32, 4, 500 * _1M, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_SB16 },
+- { "Other", "Other", SchemaDefs_OSTypeId_Netware, "Netware",
+- VBOXOSTYPE_Netware, VBOXOSHINT_HWVIRTEX,
+- 512, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Other", "Other", SchemaDefs_OSTypeId_L4, "L4",
+- VBOXOSTYPE_L4, VBOXOSHINT_NONE,
+- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Other", "Other", SchemaDefs_OSTypeId_QNX, "QNX",
+- VBOXOSTYPE_QNX, VBOXOSHINT_HWVIRTEX,
+- 512, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Other", "Other", SchemaDefs_OSTypeId_JRockitVE, "JRockitVE",
+- VBOXOSTYPE_JRockitVE, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_PAE,
+- 1024, 4, 8 * _1G64, NetworkAdapterType_I82545EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_BusLogic, StorageBus_SCSI, ChipsetType_PIIX3, AudioControllerType_AC97 },
+ };
+
+ /**
+--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp 2012-07-25 21:44:01.290876720 -0300
++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp 2012-07-25 22:00:57.819380802 -0300
+@@ -4875,75 +4875,27 @@
+ static const char *kOSTypeIcons [][2] =
+ {
+ {"Other", ":/os_other.png"},
+- {"DOS", ":/os_dos.png"},
+- {"Netware", ":/os_netware.png"},
+- {"L4", ":/os_l4.png"},
+- {"Windows31", ":/os_win31.png"},
+- {"Windows95", ":/os_win95.png"},
+- {"Windows98", ":/os_win98.png"},
+- {"WindowsMe", ":/os_winme.png"},
+- {"WindowsNT4", ":/os_winnt4.png"},
+- {"Windows2000", ":/os_win2k.png"},
+- {"WindowsXP", ":/os_winxp.png"},
+- {"WindowsXP_64", ":/os_winxp_64.png"},
+- {"Windows2003", ":/os_win2k3.png"},
+- {"Windows2003_64", ":/os_win2k3_64.png"},
+- {"WindowsVista", ":/os_winvista.png"},
+- {"WindowsVista_64", ":/os_winvista_64.png"},
+- {"Windows2008", ":/os_win2k8.png"},
+- {"Windows2008_64", ":/os_win2k8_64.png"},
+- {"Windows7", ":/os_win7.png"},
+- {"Windows7_64", ":/os_win7_64.png"},
+- {"Windows8", ":/os_win8.png"},
+- {"Windows8_64", ":/os_win8_64.png"},
+- {"WindowsNT", ":/os_win_other.png"},
+- {"OS2Warp3", ":/os_os2warp3.png"},
+- {"OS2Warp4", ":/os_os2warp4.png"},
+- {"OS2Warp45", ":/os_os2warp45.png"},
+- {"OS2eCS", ":/os_os2ecs.png"},
+- {"OS2", ":/os_os2_other.png"},
+- {"Linux22", ":/os_linux22.png"},
+- {"Linux24", ":/os_linux24.png"},
+- {"Linux24_64", ":/os_linux24_64.png"},
+- {"Linux26", ":/os_linux26.png"},
+- {"Linux26_64", ":/os_linux26_64.png"},
+- {"ArchLinux", ":/os_archlinux.png"},
+- {"ArchLinux_64", ":/os_archlinux_64.png"},
+- {"Debian", ":/os_debian.png"},
+- {"Debian_64", ":/os_debian_64.png"},
+- {"OpenSUSE", ":/os_opensuse.png"},
+- {"OpenSUSE_64", ":/os_opensuse_64.png"},
+- {"Fedora", ":/os_fedora.png"},
+- {"Fedora_64", ":/os_fedora_64.png"},
+- {"Gentoo", ":/os_gentoo.png"},
+- {"Gentoo_64", ":/os_gentoo_64.png"},
+- {"Mandriva", ":/os_mandriva.png"},
+- {"Mandriva_64", ":/os_mandriva_64.png"},
+- {"RedHat", ":/os_redhat.png"},
+- {"RedHat_64", ":/os_redhat_64.png"},
+- {"Turbolinux", ":/os_turbolinux.png"},
+- {"Turbolinux_64", ":/os_turbolinux_64.png"},
+- {"Ubuntu", ":/os_ubuntu.png"},
+- {"Ubuntu_64", ":/os_ubuntu_64.png"},
+- {"Xandros", ":/os_xandros.png"},
+- {"Xandros_64", ":/os_xandros_64.png"},
+- {"Oracle", ":/os_oracle.png"},
+- {"Oracle_64", ":/os_oracle_64.png"},
+- {"Linux", ":/os_linux_other.png"},
+- {"FreeBSD", ":/os_freebsd.png"},
+- {"FreeBSD_64", ":/os_freebsd_64.png"},
+- {"OpenBSD", ":/os_openbsd.png"},
+- {"OpenBSD_64", ":/os_openbsd_64.png"},
+- {"NetBSD", ":/os_netbsd.png"},
+- {"NetBSD_64", ":/os_netbsd_64.png"},
+- {"Solaris", ":/os_solaris.png"},
+- {"Solaris_64", ":/os_solaris_64.png"},
+- {"OpenSolaris", ":/os_oraclesolaris.png"},
+- {"OpenSolaris_64", ":/os_oraclesolaris_64.png"},
+- {"QNX", ":/os_qnx.png"},
+- {"MacOS", ":/os_macosx.png"},
+- {"MacOS_64", ":/os_macosx_64.png"},
+- {"JRockitVE", ":/os_jrockitve.png"},
++ {"GNU", ":/os_gnu.png"},
++ {"GNU_64", ":/os_gnu_64.png"},
++ {"GNUHurd", ":/os_gnuhurd.png"},
++ {"GNULinux", ":/os_gnulinux.png"},
++ {"GNULinux_64", ":/os_gnulinux_64.png"},
++ {"Parabola", ":/os_parabola.png"},
++ {"Parabola_64", ":/os_parabola_64.png"},
++ {"gNewSense", ":/os_gnewsense.png"},
++ {"gNewSense_64", ":/os_gnewsense_64.png"},
++ {"Blag", ":/os_blag.png"},
++ {"Blag_64", ":/os_blag_64.png"},
++ {"Dragora", ":/os_dragora.png"},
++ {"Dragora_64", ":/os_dragora_64.png"},
++ {"Ututo", ":/os_ututo.png"},
++ {"Ututo_64", ":/os_ututo_64.png"},
++ {"Musix", ":/os_musix.png"},
++ {"Musix_64", ":/os_musix_64.png"},
++ {"Trisquel", ":/os_trisquel.png"},
++ {"Trisquel_64", ":/os_trisquel_64.png"},
++ {"Dynebolic", ":/os_dynebolic.png"},
++ {"Venenux", ":/os_venenux.png"},
+ };
+ for (uint n = 0; n < SIZEOF_ARRAY (kOSTypeIcons); ++ n)
+ {
+--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/src/widgets/VBoxOSTypeSelectorWidget.cpp.orig 2012-06-20 10:16:38.000000000 -0300
++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/src/widgets/VBoxOSTypeSelectorWidget.cpp 2012-07-25 22:07:51.232436783 -0300
+@@ -192,17 +192,10 @@
+ if (typeIndex != -1)
+ mCbType->setCurrentIndex (typeIndex);
+ }
+- /* Or select WinXP item for Windows family as default */
+- else if (familyId == "Windows")
++ /* Or select Parabola GNU/Linux-libre item for GNU/Linux family as default */
++ else if (familyId == "GNU/Linux")
+ {
+- int xpIndex = mCbType->findData ("WindowsXP", RoleTypeID);
+- if (xpIndex != -1)
+- mCbType->setCurrentIndex (xpIndex);
+- }
+- /* Or select Ubuntu item for Linux family as default */
+- else if (familyId == "Linux")
+- {
+- int ubIndex = mCbType->findData ("Ubuntu", RoleTypeID);
++ int ubIndex = mCbType->findData ("Parabola", RoleTypeID);
+ if (ubIndex != -1)
+ mCbType->setCurrentIndex (ubIndex);
+ }
+--- VirtualBox-4.1.18.orig/include/VBox/ostypes.h 2012-06-20 10:07:51.000000000 -0300
++++ VirtualBox-4.1.18/include/VBox/ostypes.h 2012-07-25 23:20:57.322757456 -0300
+@@ -43,77 +43,27 @@
+ typedef enum VBOXOSTYPE
+ {
+ VBOXOSTYPE_Unknown = 0,
+- VBOXOSTYPE_DOS = 0x10000,
+- VBOXOSTYPE_Win31 = 0x15000,
+- VBOXOSTYPE_Win9x = 0x20000,
+- VBOXOSTYPE_Win95 = 0x21000,
+- VBOXOSTYPE_Win98 = 0x22000,
+- VBOXOSTYPE_WinMe = 0x23000,
+- VBOXOSTYPE_WinNT = 0x30000,
+- VBOXOSTYPE_WinNT4 = 0x31000,
+- VBOXOSTYPE_Win2k = 0x32000,
+- VBOXOSTYPE_WinXP = 0x33000,
+- VBOXOSTYPE_WinXP_x64 = 0x33100,
+- VBOXOSTYPE_Win2k3 = 0x34000,
+- VBOXOSTYPE_Win2k3_x64 = 0x34100,
+- VBOXOSTYPE_WinVista = 0x35000,
+- VBOXOSTYPE_WinVista_x64 = 0x35100,
+- VBOXOSTYPE_Win2k8 = 0x36000,
+- VBOXOSTYPE_Win2k8_x64 = 0x36100,
+- VBOXOSTYPE_Win7 = 0x37000,
+- VBOXOSTYPE_Win7_x64 = 0x37100,
+- VBOXOSTYPE_Win8 = 0x38000,
+- VBOXOSTYPE_Win8_x64 = 0x38100,
+- VBOXOSTYPE_OS2 = 0x40000,
+- VBOXOSTYPE_OS2Warp3 = 0x41000,
+- VBOXOSTYPE_OS2Warp4 = 0x42000,
+- VBOXOSTYPE_OS2Warp45 = 0x43000,
+- VBOXOSTYPE_ECS = 0x44000,
+- VBOXOSTYPE_Linux = 0x50000,
+- VBOXOSTYPE_Linux_x64 = 0x50100,
+- VBOXOSTYPE_Linux22 = 0x51000,
+- VBOXOSTYPE_Linux24 = 0x52000,
+- VBOXOSTYPE_Linux24_x64 = 0x52100,
+- VBOXOSTYPE_Linux26 = 0x53000,
+- VBOXOSTYPE_Linux26_x64 = 0x53100,
+- VBOXOSTYPE_ArchLinux = 0x54000,
+- VBOXOSTYPE_ArchLinux_x64 = 0x54100,
+- VBOXOSTYPE_Debian = 0x55000,
+- VBOXOSTYPE_Debian_x64 = 0x55100,
+- VBOXOSTYPE_OpenSUSE = 0x56000,
+- VBOXOSTYPE_OpenSUSE_x64 = 0x56100,
+- VBOXOSTYPE_FedoraCore = 0x57000,
+- VBOXOSTYPE_FedoraCore_x64 = 0x57100,
+- VBOXOSTYPE_Gentoo = 0x58000,
+- VBOXOSTYPE_Gentoo_x64 = 0x58100,
+- VBOXOSTYPE_Mandriva = 0x59000,
+- VBOXOSTYPE_Mandriva_x64 = 0x59100,
+- VBOXOSTYPE_RedHat = 0x5A000,
+- VBOXOSTYPE_RedHat_x64 = 0x5A100,
+- VBOXOSTYPE_Turbolinux = 0x5B000,
+- VBOXOSTYPE_Turbolinux_x64 = 0x5B100,
+- VBOXOSTYPE_Ubuntu = 0x5C000,
+- VBOXOSTYPE_Ubuntu_x64 = 0x5C100,
+- VBOXOSTYPE_Xandros = 0x5D000,
+- VBOXOSTYPE_Xandros_x64 = 0x5D100,
+- VBOXOSTYPE_Oracle = 0x5E000,
+- VBOXOSTYPE_Oracle_x64 = 0x5E100,
+- VBOXOSTYPE_FreeBSD = 0x60000,
+- VBOXOSTYPE_FreeBSD_x64 = 0x60100,
+- VBOXOSTYPE_OpenBSD = 0x61000,
+- VBOXOSTYPE_OpenBSD_x64 = 0x61100,
+- VBOXOSTYPE_NetBSD = 0x62000,
+- VBOXOSTYPE_NetBSD_x64 = 0x62100,
+- VBOXOSTYPE_Netware = 0x70000,
+- VBOXOSTYPE_Solaris = 0x80000,
+- VBOXOSTYPE_Solaris_x64 = 0x80100,
+- VBOXOSTYPE_OpenSolaris = 0x81000,
+- VBOXOSTYPE_OpenSolaris_x64 = 0x81100,
+- VBOXOSTYPE_L4 = 0x90000,
+- VBOXOSTYPE_QNX = 0xA0000,
+- VBOXOSTYPE_MacOS = 0xB0000,
+- VBOXOSTYPE_MacOS_x64 = 0xB0100,
+- VBOXOSTYPE_JRockitVE = 0xC0000,
++ VBOXOSTYPE_GNU = 0x10000,
++ VBOXOSTYPE_GNU_x64 = 0x10100,
++ VBOXOSTYPE_GNUHurd = 0x20000,
++ VBOXOSTYPE_GNULinux = 0x30000,
++ VBOXOSTYPE_GNULinux_x64 = 0x30100,
++ VBOXOSTYPE_Parabola = 0x31000,
++ VBOXOSTYPE_Parabola_x64 = 0x31100,
++ VBOXOSTYPE_gNewSense = 0x32000,
++ VBOXOSTYPE_gNewSense_x64 = 0x32100,
++ VBOXOSTYPE_Blag = 0x33000,
++ VBOXOSTYPE_Blag_x64 = 0x33100,
++ VBOXOSTYPE_Dragora = 0x34000,
++ VBOXOSTYPE_Dragora_x64 = 0x34100,
++ VBOXOSTYPE_Ututo = 0x35000,
++ VBOXOSTYPE_Ututo_x64 = 0x35100,
++ VBOXOSTYPE_Musix = 0x36000,
++ VBOXOSTYPE_Musix_x64 = 0x36100,
++ VBOXOSTYPE_Trisquel = 0x37000,
++ VBOXOSTYPE_Trisquel_x64 = 0x37100,
++ VBOXOSTYPE_Dynebolic = 0x38000,
++ VBOXOSTYPE_Venenux = 0x39000,
+ /** The bit number which indicates 64-bit or 32-bit. */
+ #define VBOXOSTYPE_x64_BIT 8
+ /** The mask which indicates 64-bit. */
+@@ -129,16 +79,11 @@
+ typedef enum VBOXOSFAMILY
+ {
+ VBOXOSFAMILY_Unknown = 0,
+- VBOXOSFAMILY_Windows32 = 1,
+- VBOXOSFAMILY_Windows64 = 2,
+- VBOXOSFAMILY_Linux32 = 3,
+- VBOXOSFAMILY_Linux64 = 4,
+- VBOXOSFAMILY_FreeBSD32 = 5,
+- VBOXOSFAMILY_FreeBSD64 = 6,
+- VBOXOSFAMILY_Solaris32 = 7,
+- VBOXOSFAMILY_Solaris64 = 8,
+- VBOXOSFAMILY_MacOSX32 = 9,
+- VBOXOSFAMILY_MacOSX64 = 10,
++ VBOXOSFAMILY_GNU32 = 1,
++ VBOXOSFAMILY_GNU64 = 2,
++ VBOXOSFAMILY_GNUHurd = 3,
++ VBOXOSFAMILY_GNULinux32 = 4,
++ VBOXOSFAMILY_GNULinux64 = 5,
+ /** The usual 32-bit hack. */
+ VBOXOSFAMILY_32BIT_HACK = 0x7fffffff
+ } VBOXOSFAMILY;
+--- VirtualBox-4.1.18.orig/src/VBox/Main/src-server/ApplianceImpl.cpp 2012-06-20 10:17:35.000000000 -0300
++++ VirtualBox-4.1.18/src/VBox/Main/src-server/ApplianceImpl.cpp 2012-07-26 01:28:50.033551279 -0300
+@@ -49,94 +49,33 @@
+ g_osTypes[] =
+ {
+ { ovf::CIMOSType_CIMOS_Unknown, SchemaDefs_OSTypeId_Other },
+- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2 },
+- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2Warp3 },
+- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2Warp4 },
+- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2Warp45 },
+- { ovf::CIMOSType_CIMOS_MSDOS, SchemaDefs_OSTypeId_DOS },
+- { ovf::CIMOSType_CIMOS_WIN3x, SchemaDefs_OSTypeId_Windows31 },
+- { ovf::CIMOSType_CIMOS_WIN95, SchemaDefs_OSTypeId_Windows95 },
+- { ovf::CIMOSType_CIMOS_WIN98, SchemaDefs_OSTypeId_Windows98 },
+- { ovf::CIMOSType_CIMOS_WINNT, SchemaDefs_OSTypeId_WindowsNT },
+- { ovf::CIMOSType_CIMOS_WINNT, SchemaDefs_OSTypeId_WindowsNT4 },
+- { ovf::CIMOSType_CIMOS_NetWare, SchemaDefs_OSTypeId_Netware },
+- { ovf::CIMOSType_CIMOS_NovellOES, SchemaDefs_OSTypeId_Netware },
+- { ovf::CIMOSType_CIMOS_Solaris, SchemaDefs_OSTypeId_Solaris },
+- { ovf::CIMOSType_CIMOS_SunOS, SchemaDefs_OSTypeId_Solaris },
+- { ovf::CIMOSType_CIMOS_FreeBSD, SchemaDefs_OSTypeId_FreeBSD },
+- { ovf::CIMOSType_CIMOS_NetBSD, SchemaDefs_OSTypeId_NetBSD },
+- { ovf::CIMOSType_CIMOS_QNX, SchemaDefs_OSTypeId_QNX },
+- { ovf::CIMOSType_CIMOS_Windows2000, SchemaDefs_OSTypeId_Windows2000 },
+- { ovf::CIMOSType_CIMOS_WindowsMe, SchemaDefs_OSTypeId_WindowsMe },
+- { ovf::CIMOSType_CIMOS_OpenBSD, SchemaDefs_OSTypeId_OpenBSD },
+- { ovf::CIMOSType_CIMOS_WindowsXP, SchemaDefs_OSTypeId_WindowsXP },
+- { ovf::CIMOSType_CIMOS_WindowsXPEmbedded, SchemaDefs_OSTypeId_WindowsXP },
+- { ovf::CIMOSType_CIMOS_WindowsEmbeddedforPointofService, SchemaDefs_OSTypeId_WindowsXP },
+- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2003, SchemaDefs_OSTypeId_Windows2003 },
+- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2003_64, SchemaDefs_OSTypeId_Windows2003_64 },
+- { ovf::CIMOSType_CIMOS_WindowsXP_64, SchemaDefs_OSTypeId_WindowsXP_64 },
+- { ovf::CIMOSType_CIMOS_WindowsVista, SchemaDefs_OSTypeId_WindowsVista },
+- { ovf::CIMOSType_CIMOS_WindowsVista_64, SchemaDefs_OSTypeId_WindowsVista_64 },
+- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2008, SchemaDefs_OSTypeId_Windows2008 },
+- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2008_64, SchemaDefs_OSTypeId_Windows2008_64 },
+- { ovf::CIMOSType_CIMOS_FreeBSD_64, SchemaDefs_OSTypeId_FreeBSD_64 },
+- { ovf::CIMOSType_CIMOS_MACOS, SchemaDefs_OSTypeId_MacOS },
+- { ovf::CIMOSType_CIMOS_MACOS, SchemaDefs_OSTypeId_MacOS_64 }, // there is no CIM 64-bit type for this
+-
+- // Linuxes
+- { ovf::CIMOSType_CIMOS_RedHatEnterpriseLinux, SchemaDefs_OSTypeId_RedHat },
+- { ovf::CIMOSType_CIMOS_RedHatEnterpriseLinux_64, SchemaDefs_OSTypeId_RedHat_64 },
+- { ovf::CIMOSType_CIMOS_Solaris_64, SchemaDefs_OSTypeId_Solaris_64 },
+- { ovf::CIMOSType_CIMOS_SUSE, SchemaDefs_OSTypeId_OpenSUSE },
+- { ovf::CIMOSType_CIMOS_SLES, SchemaDefs_OSTypeId_OpenSUSE },
+- { ovf::CIMOSType_CIMOS_NovellLinuxDesktop, SchemaDefs_OSTypeId_OpenSUSE },
+- { ovf::CIMOSType_CIMOS_SUSE_64, SchemaDefs_OSTypeId_OpenSUSE_64 },
+- { ovf::CIMOSType_CIMOS_SLES_64, SchemaDefs_OSTypeId_OpenSUSE_64 },
+- { ovf::CIMOSType_CIMOS_LINUX, SchemaDefs_OSTypeId_Linux },
+- { ovf::CIMOSType_CIMOS_LINUX, SchemaDefs_OSTypeId_Linux22 },
+- { ovf::CIMOSType_CIMOS_SunJavaDesktopSystem, SchemaDefs_OSTypeId_Linux },
+- { ovf::CIMOSType_CIMOS_TurboLinux, SchemaDefs_OSTypeId_Turbolinux },
+- { ovf::CIMOSType_CIMOS_TurboLinux_64, SchemaDefs_OSTypeId_Turbolinux_64 },
+- { ovf::CIMOSType_CIMOS_Mandriva, SchemaDefs_OSTypeId_Mandriva },
+- { ovf::CIMOSType_CIMOS_Mandriva_64, SchemaDefs_OSTypeId_Mandriva_64 },
+- { ovf::CIMOSType_CIMOS_Ubuntu, SchemaDefs_OSTypeId_Ubuntu },
+- { ovf::CIMOSType_CIMOS_Ubuntu_64, SchemaDefs_OSTypeId_Ubuntu_64 },
+- { ovf::CIMOSType_CIMOS_Debian, SchemaDefs_OSTypeId_Debian },
+- { ovf::CIMOSType_CIMOS_Debian_64, SchemaDefs_OSTypeId_Debian_64 },
+- { ovf::CIMOSType_CIMOS_Linux_2_4_x, SchemaDefs_OSTypeId_Linux24 },
+- { ovf::CIMOSType_CIMOS_Linux_2_4_x_64, SchemaDefs_OSTypeId_Linux24_64 },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Linux26 },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Linux26_64 },
+- { ovf::CIMOSType_CIMOS_Linux_64, SchemaDefs_OSTypeId_Linux26_64 },
+-
+- // types that we have support for but CIM doesn't
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_ArchLinux },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_ArchLinux_64 },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Fedora },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Fedora_64 },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Gentoo },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Gentoo_64 },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Xandros },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Xandros_64 },
+- { ovf::CIMOSType_CIMOS_Solaris, SchemaDefs_OSTypeId_OpenSolaris },
+- { ovf::CIMOSType_CIMOS_Solaris_64, SchemaDefs_OSTypeId_OpenSolaris_64 },
+-
+- // types added with CIM 2.25.0 follow:
+- { ovf::CIMOSType_CIMOS_WindowsServer2008R2, SchemaDefs_OSTypeId_Windows2008 }, // duplicate, see above
+-// { ovf::CIMOSType_CIMOS_VMwareESXi = 104, // we can't run ESX in a VM
+- { ovf::CIMOSType_CIMOS_Windows7, SchemaDefs_OSTypeId_Windows7 },
+- { ovf::CIMOSType_CIMOS_Windows7, SchemaDefs_OSTypeId_Windows7_64 }, // there is no CIM 64-bit type for this
+- { ovf::CIMOSType_CIMOS_CentOS, SchemaDefs_OSTypeId_RedHat },
+- { ovf::CIMOSType_CIMOS_CentOS_64, SchemaDefs_OSTypeId_RedHat_64 },
+- { ovf::CIMOSType_CIMOS_OracleEnterpriseLinux, SchemaDefs_OSTypeId_Oracle },
+- { ovf::CIMOSType_CIMOS_OracleEnterpriseLinux_64, SchemaDefs_OSTypeId_Oracle_64 },
+- { ovf::CIMOSType_CIMOS_eComStation, SchemaDefs_OSTypeId_OS2eCS }
+-
+- // there are no CIM types for these, so these turn to "other" on export:
+- // SchemaDefs_OSTypeId_OpenBSD
+- // SchemaDefs_OSTypeId_OpenBSD_64
+- // SchemaDefs_OSTypeId_NetBSD
+- // SchemaDefs_OSTypeId_NetBSD_64
++
++ // Custom OS
++ { ovf::CIMOSType_CIMOS_GNU, SchemaDefs_OSTypeId_GNU },
++ { ovf::CIMOSType_CIMOS_GNU_64, SchemaDefs_OSTypeId_GNU_64 },
++ { ovf::CIMOSType_CIMOS_GNUHurd, SchemaDefs_OSTypeId_GNUHurd },
++ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_GNULinux },
++ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_GNULinux_64 },
++
++ // GNU/Linux free distros
++ { ovf::CIMOSType_CIMOS_gNewSense, SchemaDefs_OSTypeId_gNewSense },
++ { ovf::CIMOSType_CIMOS_gNewSense_64, SchemaDefs_OSTypeId_gNewSense_64 },
++ { ovf::CIMOSType_CIMOS_Dragora, SchemaDefs_OSTypeId_Dragora },
++ { ovf::CIMOSType_CIMOS_Dragora_64, SchemaDefs_OSTypeId_Dragora_64 },
++ { ovf::CIMOSType_CIMOS_Musix, SchemaDefs_OSTypeId_Musix },
++ { ovf::CIMOSType_CIMOS_Musix_64, SchemaDefs_OSTypeId_Musix_64 },
++ { ovf::CIMOSType_CIMOS_Trisquel, SchemaDefs_OSTypeId_Trisquel },
++ { ovf::CIMOSType_CIMOS_Trisquel_64, SchemaDefs_OSTypeId_Trisquel_64 },
++ { ovf::CIMOSType_CIMOS_Dynebolic, SchemaDefs_OSTypeId_Dynebolic },
++ { ovf::CIMOSType_CIMOS_Venenux, SchemaDefs_OSTypeId_Venenux },
++
++ // GNU/Linux free distros that we have support for but CIM doesn't
++ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_Parabola },
++ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_Parabola_64 },
++ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_Blag },
++ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_Blag_64 },
++ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_Ututo },
++ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_Ututo_64 },
+
+ };
+
+@@ -150,53 +89,34 @@
+ /* These are the 32-Bit ones. They are sorted by priority. */
+ static const osTypePattern g_osTypesPattern[] =
+ {
+- {"Windows NT", SchemaDefs_OSTypeId_WindowsNT4},
+- {"Windows XP", SchemaDefs_OSTypeId_WindowsXP},
+- {"Windows 2000", SchemaDefs_OSTypeId_Windows2000},
+- {"Windows 2003", SchemaDefs_OSTypeId_Windows2003},
+- {"Windows Vista", SchemaDefs_OSTypeId_WindowsVista},
+- {"Windows 2008", SchemaDefs_OSTypeId_Windows2008},
+- {"SUSE", SchemaDefs_OSTypeId_OpenSUSE},
+- {"Novell", SchemaDefs_OSTypeId_OpenSUSE},
+- {"Red Hat", SchemaDefs_OSTypeId_RedHat},
+- {"Mandriva", SchemaDefs_OSTypeId_Mandriva},
+- {"Ubuntu", SchemaDefs_OSTypeId_Ubuntu},
+- {"Debian", SchemaDefs_OSTypeId_Debian},
+- {"QNX", SchemaDefs_OSTypeId_QNX},
+- {"Linux 2.4", SchemaDefs_OSTypeId_Linux24},
+- {"Linux 2.6", SchemaDefs_OSTypeId_Linux26},
+- {"Linux", SchemaDefs_OSTypeId_Linux},
+- {"OpenSolaris", SchemaDefs_OSTypeId_OpenSolaris},
+- {"Solaris", SchemaDefs_OSTypeId_OpenSolaris},
+- {"FreeBSD", SchemaDefs_OSTypeId_FreeBSD},
+- {"NetBSD", SchemaDefs_OSTypeId_NetBSD},
+- {"Windows 95", SchemaDefs_OSTypeId_Windows95},
+- {"Windows 98", SchemaDefs_OSTypeId_Windows98},
+- {"Windows Me", SchemaDefs_OSTypeId_WindowsMe},
+- {"Windows 3.", SchemaDefs_OSTypeId_Windows31},
+- {"DOS", SchemaDefs_OSTypeId_DOS},
+- {"OS2", SchemaDefs_OSTypeId_OS2}
++
++ {"Parabola GNU/Linux-libre", SchemaDefs_OSTypeId_Parabola},
++ {"gNewSense", SchemaDefs_OSTypeId_gNewSense},
++ {"Blag Linux and GNU", SchemaDefs_OSTypeId_Blag},
++ {"Dragora", SchemaDefs_OSTypeId_Dragora},
++ {"Ututo XS", SchemaDefs_OSTypeId_Ututo},
++ {"Musix", SchemaDefs_OSTypeId_Musix},
++ {"Trisquel", SchemaDefs_OSTypeId_Trisquel},
++ {"Dyne:bolic", SchemaDefs_OSTypeId_Dynebolic},
++ {"Venenux", SchemaDefs_OSTypeId_Venenux},
++ {"GNU", SchemaDefs_OSTypeId_GNU},
++ {"GNU-Hurd", SchemaDefs_OSTypeId_GNUHurd},
++ {"GNU/Linux", SchemaDefs_OSTypeId_GNULinux},
++
+ };
+
+ /* These are the 64-Bit ones. They are sorted by priority. */
+ static const osTypePattern g_osTypesPattern64[] =
+ {
+- {"Windows XP", SchemaDefs_OSTypeId_WindowsXP_64},
+- {"Windows 2003", SchemaDefs_OSTypeId_Windows2003_64},
+- {"Windows Vista", SchemaDefs_OSTypeId_WindowsVista_64},
+- {"Windows 2008", SchemaDefs_OSTypeId_Windows2008_64},
+- {"SUSE", SchemaDefs_OSTypeId_OpenSUSE_64},
+- {"Novell", SchemaDefs_OSTypeId_OpenSUSE_64},
+- {"Red Hat", SchemaDefs_OSTypeId_RedHat_64},
+- {"Mandriva", SchemaDefs_OSTypeId_Mandriva_64},
+- {"Ubuntu", SchemaDefs_OSTypeId_Ubuntu_64},
+- {"Debian", SchemaDefs_OSTypeId_Debian_64},
+- {"Linux 2.4", SchemaDefs_OSTypeId_Linux24_64},
+- {"Linux 2.6", SchemaDefs_OSTypeId_Linux26_64},
+- {"Linux", SchemaDefs_OSTypeId_Linux26_64},
+- {"OpenSolaris", SchemaDefs_OSTypeId_OpenSolaris_64},
+- {"Solaris", SchemaDefs_OSTypeId_OpenSolaris_64},
+- {"FreeBSD", SchemaDefs_OSTypeId_FreeBSD_64},
++ {"Parabola GNU/Linux-libre", SchemaDefs_OSTypeId_Parabola_64},
++ {"gNewSense", SchemaDefs_OSTypeId_gNewSense_64},
++ {"Blag Linux and GNU", SchemaDefs_OSTypeId_Blag_64},
++ {"Dragora", SchemaDefs_OSTypeId_Dragora_64},
++ {"Ututo XS", SchemaDefs_OSTypeId_Ututo_64},
++ {"Musix", SchemaDefs_OSTypeId_Musix_64},
++ {"Trisquel", SchemaDefs_OSTypeId_Trisquel_64},
++ {"GNU", SchemaDefs_OSTypeId_GNU_64},
++ {"GNU/Linux", SchemaDefs_OSTypeId_GNULinux_64},
+ };
+
+ /**
+--- VirtualBox-4.1.18.orig/src/VBox/Main/include/ovfreader.h 2012-06-20 10:17:34.000000000 -0300
++++ VirtualBox-4.1.18/src/VBox/Main/include/ovfreader.h 2012-07-26 03:51:21.807619186 -0300
+@@ -34,119 +34,24 @@
+
+ enum CIMOSType_T
+ {
+- CIMOSType_CIMOS_Unknown = 0,
+- CIMOSType_CIMOS_Other = 1,
+- CIMOSType_CIMOS_MACOS = 2,
+- CIMOSType_CIMOS_ATTUNIX = 3,
+- CIMOSType_CIMOS_DGUX = 4,
+- CIMOSType_CIMOS_DECNT = 5,
+- CIMOSType_CIMOS_Tru64UNIX = 6,
+- CIMOSType_CIMOS_OpenVMS = 7,
+- CIMOSType_CIMOS_HPUX = 8,
+- CIMOSType_CIMOS_AIX = 9,
+- CIMOSType_CIMOS_MVS = 10,
+- CIMOSType_CIMOS_OS400 = 11,
+- CIMOSType_CIMOS_OS2 = 12,
+- CIMOSType_CIMOS_JavaVM = 13,
+- CIMOSType_CIMOS_MSDOS = 14,
+- CIMOSType_CIMOS_WIN3x = 15,
+- CIMOSType_CIMOS_WIN95 = 16,
+- CIMOSType_CIMOS_WIN98 = 17,
+- CIMOSType_CIMOS_WINNT = 18,
+- CIMOSType_CIMOS_WINCE = 19,
+- CIMOSType_CIMOS_NCR3000 = 20,
+- CIMOSType_CIMOS_NetWare = 21,
+- CIMOSType_CIMOS_OSF = 22,
+- CIMOSType_CIMOS_DCOS = 23,
+- CIMOSType_CIMOS_ReliantUNIX = 24,
+- CIMOSType_CIMOS_SCOUnixWare = 25,
+- CIMOSType_CIMOS_SCOOpenServer = 26,
+- CIMOSType_CIMOS_Sequent = 27,
+- CIMOSType_CIMOS_IRIX = 28,
+- CIMOSType_CIMOS_Solaris = 29,
+- CIMOSType_CIMOS_SunOS = 30,
+- CIMOSType_CIMOS_U6000 = 31,
+- CIMOSType_CIMOS_ASERIES = 32,
+- CIMOSType_CIMOS_HPNonStopOS = 33,
+- CIMOSType_CIMOS_HPNonStopOSS = 34,
+- CIMOSType_CIMOS_BS2000 = 35,
+- CIMOSType_CIMOS_LINUX = 36,
+- CIMOSType_CIMOS_Lynx = 37,
+- CIMOSType_CIMOS_XENIX = 38,
+- CIMOSType_CIMOS_VM = 39,
+- CIMOSType_CIMOS_InteractiveUNIX = 40,
+- CIMOSType_CIMOS_BSDUNIX = 41,
+- CIMOSType_CIMOS_FreeBSD = 42,
+- CIMOSType_CIMOS_NetBSD = 43,
+- CIMOSType_CIMOS_GNUHurd = 44,
+- CIMOSType_CIMOS_OS9 = 45,
+- CIMOSType_CIMOS_MACHKernel = 46,
+- CIMOSType_CIMOS_Inferno = 47,
+- CIMOSType_CIMOS_QNX = 48,
+- CIMOSType_CIMOS_EPOC = 49,
+- CIMOSType_CIMOS_IxWorks = 50,
+- CIMOSType_CIMOS_VxWorks = 51,
+- CIMOSType_CIMOS_MiNT = 52,
+- CIMOSType_CIMOS_BeOS = 53,
+- CIMOSType_CIMOS_HPMPE = 54,
+- CIMOSType_CIMOS_NextStep = 55,
+- CIMOSType_CIMOS_PalmPilot = 56,
+- CIMOSType_CIMOS_Rhapsody = 57,
+- CIMOSType_CIMOS_Windows2000 = 58,
+- CIMOSType_CIMOS_Dedicated = 59,
+- CIMOSType_CIMOS_OS390 = 60,
+- CIMOSType_CIMOS_VSE = 61,
+- CIMOSType_CIMOS_TPF = 62,
+- CIMOSType_CIMOS_WindowsMe = 63,
+- CIMOSType_CIMOS_CalderaOpenUNIX = 64,
+- CIMOSType_CIMOS_OpenBSD = 65,
+- CIMOSType_CIMOS_NotApplicable = 66,
+- CIMOSType_CIMOS_WindowsXP = 67,
+- CIMOSType_CIMOS_zOS = 68,
+- CIMOSType_CIMOS_MicrosoftWindowsServer2003 = 69,
+- CIMOSType_CIMOS_MicrosoftWindowsServer2003_64 = 70,
+- CIMOSType_CIMOS_WindowsXP_64 = 71,
+- CIMOSType_CIMOS_WindowsXPEmbedded = 72,
+- CIMOSType_CIMOS_WindowsVista = 73,
+- CIMOSType_CIMOS_WindowsVista_64 = 74,
+- CIMOSType_CIMOS_WindowsEmbeddedforPointofService = 75,
+- CIMOSType_CIMOS_MicrosoftWindowsServer2008 = 76,
+- CIMOSType_CIMOS_MicrosoftWindowsServer2008_64 = 77,
+- CIMOSType_CIMOS_FreeBSD_64 = 78,
+- CIMOSType_CIMOS_RedHatEnterpriseLinux = 79,
+- CIMOSType_CIMOS_RedHatEnterpriseLinux_64 = 80,
+- CIMOSType_CIMOS_Solaris_64 = 81,
+- CIMOSType_CIMOS_SUSE = 82,
+- CIMOSType_CIMOS_SUSE_64 = 83,
+- CIMOSType_CIMOS_SLES = 84,
+- CIMOSType_CIMOS_SLES_64 = 85,
+- CIMOSType_CIMOS_NovellOES = 86,
+- CIMOSType_CIMOS_NovellLinuxDesktop = 87,
+- CIMOSType_CIMOS_SunJavaDesktopSystem = 88,
+- CIMOSType_CIMOS_Mandriva = 89,
+- CIMOSType_CIMOS_Mandriva_64 = 90,
+- CIMOSType_CIMOS_TurboLinux = 91,
+- CIMOSType_CIMOS_TurboLinux_64 = 92,
+- CIMOSType_CIMOS_Ubuntu = 93,
+- CIMOSType_CIMOS_Ubuntu_64 = 94,
+- CIMOSType_CIMOS_Debian = 95,
+- CIMOSType_CIMOS_Debian_64 = 96,
+- CIMOSType_CIMOS_Linux_2_4_x = 97,
+- CIMOSType_CIMOS_Linux_2_4_x_64 = 98,
+- CIMOSType_CIMOS_Linux_2_6_x = 99,
+- CIMOSType_CIMOS_Linux_2_6_x_64 = 100,
+- CIMOSType_CIMOS_Linux_64 = 101,
+- CIMOSType_CIMOS_Other_64 = 102,
+- // types added with CIM 2.25.0 follow:
+- CIMOSType_CIMOS_WindowsServer2008R2 = 103,
+- CIMOSType_CIMOS_VMwareESXi = 104,
+- CIMOSType_CIMOS_Windows7 = 105,
+- CIMOSType_CIMOS_CentOS = 106,
+- CIMOSType_CIMOS_CentOS_64 = 107,
+- CIMOSType_CIMOS_OracleEnterpriseLinux = 108,
+- CIMOSType_CIMOS_OracleEnterpriseLinux_64 = 109,
+- CIMOSType_CIMOS_eComStation = 110
+- // no new types added with CIM 2.26.0
++ CIMOSType_CIMOS_Unknown = 0,
++ CIMOSType_CIMOS_Other = 1,
++ CIMOSType_CIMOS_Other_64 = 2,
++ CIMOSType_CIMOS_gNewSense = 3,
++ CIMOSType_CIMOS_gNewSense_64 = 4,
++ CIMOSType_CIMOS_Dragora = 5,
++ CIMOSType_CIMOS_Dragora_64 = 6,
++ CIMOSType_CIMOS_Musix = 7,
++ CIMOSType_CIMOS_Musix_64 = 8,
++ CIMOSType_CIMOS_Trisquel = 9,
++ CIMOSType_CIMOS_Trisquel_64 = 10,
++ CIMOSType_CIMOS_Dynebolic = 11,
++ CIMOSType_CIMOS_Venenux = 12,
++ CIMOSType_CIMOS_GNU = 13,
++ CIMOSType_CIMOS_GNU_64 = 14,
++ CIMOSType_CIMOS_GNUHurd = 15,
++ CIMOSType_CIMOS_GNULinux = 16,
++ CIMOSType_CIMOS_GNULinux_64 = 17
+ };
+
+
+--- VirtualBox-4.1.18.orig/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c 2012-06-20 10:09:01.000000000 -0300
++++ VirtualBox-4.1.18/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c 2012-07-26 15:32:55.309812685 -0300
+@@ -622,16 +622,16 @@
+ * Call the common device extension initializer.
+ */
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) && defined(RT_ARCH_X86)
+- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux26;
++ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux;
+ #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) && defined(RT_ARCH_AMD64)
+- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux26_x64;
++ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux_x64;
+ #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) && defined(RT_ARCH_X86)
+- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux24;
++ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux;
+ #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) && defined(RT_ARCH_AMD64)
+- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux24_x64;
++ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux_x64;
+ #else
+ # warning "huh? which arch + version is this?"
+- VBOXOSTYPE enmOsType = VBOXOSTYPE_Linux;
++ VBOXOSTYPE enmOsType = VBOXOSTYPE_GNULinux;
+ #endif
+ rc = VBoxGuestInitDevExt(&g_DevExt,
+ g_IOPortBase,
diff --git a/libre/virtualbox-libre-modules/libre.patch b/libre/virtualbox-libre-modules/libre.patch
new file mode 100644
index 000000000..e51d0c0a7
--- /dev/null
+++ b/libre/virtualbox-libre-modules/libre.patch
@@ -0,0 +1,5765 @@
+--- VirtualBox-4.1.18.orig/Config.kmk 2012-07-24 16:38:43.981310996 -0300
++++ VirtualBox-4.1.18/Config.kmk 2012-07-24 16:38:44.001309865 -0300
+@@ -56,9 +56,6 @@
+ PROPS_SYSMODS_ACCUMULATE_L += INTERMEDIATES
+ PROPS_MISCBINS_ACCUMULATE_L += INTERMEDIATES
+
+-# Misc names used bye the install paths below.
+-VBOX_PUEL_MANGLED_NAME := Oracle_VM_VirtualBox_Extension_Pack
+-
+ # Install paths
+ ## @todo This will change after 4.1 is branched off!
+ # What is now 'bin' and 'lib' will be moved down under 'staged/', except on
+@@ -125,9 +122,6 @@
+ endif
+
+ INST_DOC = doc/
+-INST_EXTPACK = $(INST_BIN)ExtensionPacks/
+-INST_EXTPACK_CERTS = $(INST_BIN)ExtPackCertificates/
+-INST_EXTPACK_PUEL = $(INST_EXTPACK)$(VBOX_PUEL_MANGLED_NAME)/
+ INST_PACKAGES = packages/
+
+ VBOX_PATH_SDK = $(patsubst %/,%,$(PATH_STAGE)/$(INST_SDK))
+@@ -136,7 +130,6 @@
+ VBOX_PATH_ADDITIONS = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS))
+ VBOX_PATH_ADDITIONS_ISO = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS_ISO))
+ VBOX_PATH_ADDITIONS_LIB = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS_LIB))
+-VBOX_PATH_EXTPACK_PUEL= $(patsubst %/,%,$(PATH_STAGE)/$(INST_EXTPACK_PUEL))
+ VBOX_PATH_PACKAGES = $(patsubst %/,%,$(PATH_STAGE)/$(INST_PACKAGES))
+
+
+@@ -208,7 +201,6 @@
+ export VBOX_ADDITIONS_SH_MODE = release
+ export VBOX_DOCUMENTATION_SH_MODE = release
+ export VBOX_EFI_SH_MODE = release
+- export VBOX_EXTPACKS_SH_MODE = release
+ endif
+
+ # Some info on the vendor
+@@ -361,8 +353,6 @@
+ VBOX_WITH_USB = 1
+ # Enable the USB 1.1 controller plus virtual USB HID devices.
+ VBOX_WITH_VUSB = 1
+-# Enable the USB 2.0 controller.
+-VBOX_WITH_EHCI = 1
+ # Enable the ISCSI feature.
+ VBOX_WITH_ISCSI = 1
+ # Enable INIP support in the ISCSI feature.
+@@ -430,9 +420,6 @@
+ ifdef VBOX_WITH_USB
+ VBOX_WITH_VUSB = 1
+ endif
+-ifdef VBOX_WITH_EHCI
+- VBOX_WITH_EHCI_IMPL = 1
+-endif
+ ifdef VBOX_WITH_PCI_PASSTHROUGH
+ VBOX_WITH_PCI_PASSTHROUGH_IMPL = 1
+ endif
+@@ -591,15 +578,6 @@
+ ## @}
+
+
+-## @name Extension pack
+-## @{
+-# Enables the extension pack feature.
+-VBOX_WITH_EXTPACK = 1
+-# Enables separating code into the Oracle VM VirtualBox Extension Pack, dubbed PUEL.
+-VBOX_WITH_EXTPACK_PUEL = 1
+-# Enables building+packing the Oracle VM VirtualBox Extension Pack, includes VBOX_WITH_EXTPACK_PUEL
+-VBOX_WITH_EXTPACK_PUEL_BUILD = 1
+-## @}
+
+ ## @name Misc
+ ## @{
+@@ -777,14 +755,6 @@
+ # Skip stuff.
+ #
+
+-ifdef VBOX_ONLY_EXTPACKS
+- # Clear some VBOX_WITH_XXX variables instead of adding ifdefs all over the place.
+- VBOX_WITH_DEBUGGER =
+- VBOX_WITH_ADDITIONS =
+- VBOX_WITH_VBOXDRV =
+- VBOX_WITH_TESTCASES =
+-endif
+-
+ # VBOX_QUICK can be used by core developers to speed to the build
+ ifdef VBOX_QUICK
+ # undefine variables by assigning blank.
+@@ -848,7 +818,6 @@
+ VBOX_WITH_TESTSUITE=
+ VBOX_WITH_QTGUI=
+ VBOX_WITH_USB=
+- VBOX_WITH_EHCI=
+ VBOX_WITH_DOCS=
+ VBOX_WITH_PDM_ASYNC_COMPLETION=
+ VBOX_WITH_KCHMVIEWER=
+@@ -870,7 +839,6 @@
+ VBOX_WITH_CROGL=
+ VBOX_WITH_DEBUGGER=
+ VBOX_WITH_DOCS=
+- VBOX_WITH_EHCI=
+ VBOX_WITH_HARDENING=
+ VBOX_WITH_HEADLESS=
+ VBOX_WITH_HGCM=
+@@ -952,9 +920,6 @@
+ #
+ ifdef VBOX_OSE
+ VBOX_WITH_VRDP=
+- VBOX_WITH_EHCI_IMPL=
+- VBOX_WITH_EXTPACK_PUEL=
+- VBOX_WITH_EXTPACK_PUEL_BUILD=
+ VBOX_WITH_PCI_PASSTHROUGH_IMPL=
+ VBOX_WITH_OS2_ADDITIONS_BIN=
+ VBOX_WITH_SECURELABEL=
+@@ -1082,10 +1047,6 @@
+ VBOX_WITH_KCHMVIEWER=
+ endif
+
+-ifdef VBOX_WITH_EXTPACK_PUEL_BUILD
+- VBOX_WITH_EXTPACK_PUEL = 1
+-endif
+-
+ #
+ # Mark OSE builds clearly, helps figuring out limitations more easily.
+ #
+@@ -1679,9 +1640,6 @@
+ # biossums (set BIOS checksums)
+ VBOX_BIOSSUMS ?= $(PATH_OBJ)/biossums/biossums$(HOSTSUFF_EXE)
+
+-# RTManifest (extension pack manifest utility)
+-VBOX_RTMANIFEST ?= $(PATH_OBJ)/bldRTManifest/bldRTManifest$(HOSTSUFF_EXE)
+-
+ # filesplitter (splits java files)
+ VBOX_FILESPLIT ?= $(PATH_OBJ)/filesplitter/filesplitter$(HOSTSUFF_EXE)
+
+@@ -2461,13 +2419,6 @@
+ SDK_VBOX_OPENSSL2_LIBS = $(NO_SUCH_VARIABLE)
+ endif
+
+-SDK_VBoxOpenSslExtPack = Internal use only.
+-SDK_VBoxOpenSslExtPack_INCS = $(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)
+-SDK_VBoxOpenSslExtPack_ORDERDEPS = $(crypto-headers_1_TARGET)
+-SDK_VBoxOpenSslExtPack_LIBS = \
+- $(PATH_STAGE_LIB)/VBoxExtPack-libssl$(VBOX_SUFF_LIB) \
+- $(PATH_STAGE_LIB)/VBoxExtPack-libcrypto$(VBOX_SUFF_LIB)
+-
+ SDK_VBOX_BLD_OPENSSL = .
+ SDK_VBOX_BLD_OPENSSL_EXTENDS = VBOX_OPENSSL
+ SDK_VBOX_BLD_OPENSSL_LIBS ?= \
+@@ -3817,100 +3768,6 @@
+ endif
+ TEMPLATE_VBOXMAINCLIENTDLL_LDFLAGS.darwin = $(filter-out -bind_at_load,$(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS.darwin))
+
+-
+-
+-#
+-# Templates used for building the extension packs.
+-#
+-ifdef VBOX_WITH_EXTPACK
+- # Base templates (native or portable).
+- TEMPLATE_VBoxR3ExtPack = For the ring-3 context extension pack modules.
+- if 1 # Native for now.
+- TEMPLATE_VBoxR3ExtPack_EXTENDS = VBOXR3DLLNOXCPT
+- TEMPLATE_VBoxR3ExtPack_DEFS = $(TEMPLATE_VBOXR3DLLNOXCPT_DEFS) VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R3
+- else
+- TEMPLATE_VBoxR3ExtPack_EXTENDS = VBOXNOCRTGCC
+- TEMPLATE_VBoxR3ExtPack_DEFS = $(TEMPLATE_VBOXNOCRTGCC_DEFS) VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R3 IPRT_NO_CRT IN_RING3
+- TEMPLATE_VBoxR3ExtPack_INCS = $(PATH_ROOT)/include/iprt/nocrt $(TEMPLATE_VBOXR3DLLNOXCPT_INCS)
+- endif
+- ifneq ($(KBUILD_TARGET),win)
+- TEMPLATE_VBoxR3ExtPack_CXXFLAGS = $(TEMPLATE_VBOXR3DLLNOXCPT_CXXFLAGS) -fno-rtti
+- endif
+- TEMPLATE_VBoxR3ExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
+- ifeq ($(KBUILD_TARGET),linux)
+- TEMPLATE_VBoxR3ExtPack_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)', $(TEMPLATE_VBOXR3DLLNOXCPT_LDFLAGS))
+- else
+- if !defined(VBOX_WITH_RUNPATH) && defined(VBOX_WITH_RELATIVE_RUNPATH)
+- TEMPLATE_VBoxR3ExtPack_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/../../..' $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)', $(TEMPLATE_VBOXR3DLLNOXCPT_LDFLAGS))
+- endif
+- endif
+- ifdef VBOX_ONLY_EXTPACKS_USE_IMPLIBS
+- if1of ($(KBUILD_TARGET), win os2)
+- TEMPLATE_VBoxR3ExtPack_LIBS = \
+- $(TEMPLATE_LIBS_VBOXR3) \
+- $(PATH_STAGE_LIB)/VMMR3Imp$(VBOX_SUFF_LIB) \
+- $(PATH_STAGE_LIB)/VBoxRTImp$(VBOX_SUFF_LIB)
+- else
+- TEMPLATE_VBoxR3ExtPack_LIBS = \
+- $(TEMPLATE_LIBS_VBOXR3) \
+- $(PATH_STAGE_LIB)/VMMR3Imp$(VBOX_SUFF_DLL) \
+- $(PATH_STAGE_LIB)/VBoxRTImp$(VBOX_SUFF_DLL)
+- endif
+- else
+- TEMPLATE_VBoxR3ExtPack_LIBS = \
+- $(TEMPLATE_LIBS_VBOXR3) \
+- $(LIB_RUNTIME) \
+- $(LIB_VMM)
+- endif
+-
+- TEMPLATE_VBoxR0ExtPack = For the ring-0 context extension pack modules.
+- TEMPLATE_VBoxR0ExtPack_EXTENDS = VBoxR0
+- TEMPLATE_VBoxR0ExtPack_EXTENDS_BY = appending
+- TEMPLATE_VBoxR0ExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
+- TEMPLATE_VBoxR0ExtPack_DEFS = VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R0
+- if1of ($(VBOX_LDR_FMT), pe lx)
+- TEMPLATE_VBoxR0ExtPack_LIBS = \
+- $(PATH_STAGE_LIB)/VMMR0Imp$(VBOX_SUFF_LIB) \
+- $(PATH_STAGE_LIB)/SUPR0$(VBOX_SUFF_LIB)
+- endif
+-
+- TEMPLATE_VBoxRcExtPack = For the raw-mode context extension pack modules.
+- TEMPLATE_VBoxRcExtPack_EXTENDS = VBoxRc
+- TEMPLATE_VBoxRcExtPack_EXTENDS_BY = appending
+- TEMPLATE_VBoxRcExtPack_SYSSUFF = .rc
+- TEMPLATE_VBoxRcExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
+- TEMPLATE_VBoxRcExtPack_DEFS = VBOX_IN_EXTPACK VBOX_IN_EXTPACK_RC
+- if1of ($(VBOX_LDR_FMT32), pe lx)
+- TEMPLATE_VBoxRcExtPack_LIBS = \
+- $(PATH_STAGE_LIB)/VMMRCBuiltin$(VBOX_SUFF_LIB) \
+- $(PATH_STAGE_LIB)/VMMRCImp$(VBOX_SUFF_LIB)
+- endif
+-
+- TEMPLATE_VBoxInsExtPack = For the install targets of an extension pack.
+- TEMPLATE_VBoxInsExtPack_MODE = 0644
+- TEMPLATE_VBoxInsExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
+-
+- # For each individual extension pack
+- ifdef VBOX_WITH_EXTPACK_PUEL
+- TEMPLATE_VBoxR3ExtPackPuel = For the ring-3 context modules in the PUEL extension pack.
+- TEMPLATE_VBoxR3ExtPackPuel_EXTENDS = VBoxR3ExtPack
+- TEMPLATE_VBoxR3ExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/
+-
+- TEMPLATE_VBoxR0ExtPackPuel = For the ring-0 context modules in the PUEL extension pack.
+- TEMPLATE_VBoxR0ExtPackPuel_EXTENDS = VBoxR0ExtPack
+- TEMPLATE_VBoxR0ExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/
+-
+- TEMPLATE_VBoxRcExtPackPuel = For the raw-mode context modules in the PUEL extension pack.
+- TEMPLATE_VBoxRcExtPackPuel_EXTENDS = VBoxRcExtPack
+- TEMPLATE_VBoxRcExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/
+-
+- TEMPLATE_VBoxInsExtPackPuel = For the install targets of an extension pack.
+- TEMPLATE_VBoxInsExtPackPuel_EXTENDS = VBoxR0ExtPack
+- TEMPLATE_VBoxInsExtPackPuel_INST = $(INST_EXTPACK_PUEL)
+-endif
+-endif # VBOX_WITH_EXTPACK
+-
+-
+ #
+ # Qt 4
+ # Qt 4
+--- VirtualBox-4.1.18.orig/Makefile.kmk 2012-07-24 17:16:47.078929150 -0300
++++ VirtualBox-4.1.18/Makefile.kmk 2012-07-24 17:16:47.125592981 -0300
+@@ -446,7 +446,6 @@
+ include/VBox \
+ include/VBox/vmm \
+ include/VBox/com \
+- include/VBox/ExtPack \
+ include/VBox/HostServices \
+ include/VBox/GuestHost \
+ include/VBox/HGSMI \
+@@ -862,191 +861,6 @@
+ additions-build-linux.x86.combined \
+ additions-packing
+
+-
+-#
+-# Build the extension packs, all of them.
+-#
+-# This is tailored (hardcoded) for the extension pack build box.
+-#
+-# The fetching must be done in serial fashion, while the building should be
+-# more flexible wrt to -jN.
+-#
+-extpacks-fetch:
+- + $(KMK) -C tools fetch VBOX_ONLY_EXTPACKS=1
+- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=darwin BUILD_TARGET_ARCH=amd64 BUILD_TARGET=darwin VBOX_ONLY_EXTPACKS=1
+- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=darwin BUILD_TARGET_ARCH=x86 BUILD_TARGET=darwin VBOX_ONLY_EXTPACKS=1
+-# + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=freebsd BUILD_TARGET_ARCH=amd64 BUILD_TARGET=freebsd VBOX_ONLY_EXTPACKS=1
+-# + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=freebsd BUILD_TARGET_ARCH=x86 BUILD_TARGET=freebsd VBOX_ONLY_EXTPACKS=1
+- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=linux BUILD_TARGET_ARCH=amd64 BUILD_TARGET=linux VBOX_ONLY_EXTPACKS=1
+- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=linux BUILD_TARGET_ARCH=x86 BUILD_TARGET=linux VBOX_ONLY_EXTPACKS=1
+-# + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=os2 BUILD_TARGET_ARCH=x86 BUILD_TARGET=os2 VBOX_ONLY_EXTPACKS=1
+- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=solaris BUILD_TARGET_ARCH=amd64 BUILD_TARGET=solaris VBOX_ONLY_EXTPACKS=1
+- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=solaris BUILD_TARGET_ARCH=x86 BUILD_TARGET=solaris VBOX_ONLY_EXTPACKS=1
+- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=win BUILD_TARGET_ARCH=amd64 BUILD_TARGET=win VBOX_ONLY_EXTPACKS=1
+- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=win BUILD_TARGET_ARCH=x86 BUILD_TARGET=win VBOX_ONLY_EXTPACKS=1
+-
+-
+-extpacks-build: \
+- extpacks-build-win.amd64 \
+- extpacks-build-win.x86 \
+- extpacks-build-solaris.amd64 \
+- extpacks-build-solaris.x86 \
+- extpacks-build-os2.x86 \
+- extpacks-build-linux.amd64 \
+- extpacks-build-linux.x86 \
+- extpacks-build-darwin.amd64 \
+- extpacks-build-darwin.x86 \
+- extpacks-build-freebsd.amd64 \
+- extpacks-build-freebsd.x86
+-
+-VBOX_EXTPACKS_BUILD.amd64 = VBOX_ONLY_EXTPACKS=1 \
+- KBUILD_TYPE=$(KBUILD_TYPE) BUILD_TYPE=$(KBUILD_TYPE) \
+- KBUILD_TARGET_ARCH=amd64 BUILD_TARGET_ARCH=amd64 \
+- VBOX_SVN_REV=$(VBOX_SVN_REV)
+-
+-VBOX_EXTPACKS_BUILD.x86 = VBOX_ONLY_EXTPACKS=1 \
+- KBUILD_TYPE=$(KBUILD_TYPE) BUILD_TYPE=$(KBUILD_TYPE) \
+- KBUILD_TARGET_ARCH=x86 BUILD_TARGET_ARCH=x86 \
+- VBOX_SVN_REV=$(VBOX_SVN_REV)
+-
+-# Automatically determine the extpack build subdir name. Used for figuring out
+-# directory names inside the extension pack building VMs.
+-VBOX_EXTPACKS_BUILD_SUBDIRNAME := $(lastword $(subst /, ,$(PATH_ROOT)))
+-
+-# When building in parallel on a Windows host, make sure we finish the host
+-# bit before kicking off any UNIX guest or we'll run into file sharing issues.
+-ifeq ($(KBUILD_TARGET),win)
+-VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST = extpacks-build-win.x86 extpacks-build-win.amd64
+-else
+-VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST =
+-endif
+-
+-extpacks-build-win.amd64:
+-ifeq ($(KBUILD_TARGET),win)
+- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-else
+- $(call MSG_L1,Building Windows/amd64 extension packs)
+- $(VBOX_KMK_TIME) ssh vbox@192.168.27.6 " echo $@ && cd e:/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh kmk $(VBOX_EXTPACKS_BUILD.amd64) all"
+-endif
+-
+-extpacks-build-win.x86:
+-ifeq ($(KBUILD_TARGET),win)
+- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-else
+- $(call MSG_L1,Building Windows/x86 extension packs)
+- $(VBOX_KMK_TIME) ssh vbox@192.168.27.16 " echo $@ && cd e:/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh kmk $(VBOX_EXTPACKS_BUILD.x86) all"
+-endif
+-
+-ifeq ($(KBUILD_TARGET),solaris)
+-extpacks-build-solaris.amd64:
+- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-
+-extpacks-build-solaris.x86: extpacks-build-solaris.amd64
+- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) VBOX_WITH_COMBINED_SOLARIS_GUEST_PACKAGE=1 all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-
+-else
+-# Serialize 32-bit and 64-bit ASSUMING the same VM builds both.
+-extpacks-build-solaris.rsync-into-vm: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
+- $(VBOX_KMK_TIME) $(call VBOX_RSYNC_IN_FN,solaris,*) . 192.168.27.4:/mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)
+-
+-extpacks-build-solaris.build-it: extpacks-build-solaris.rsync-into-vm
+- $(call MSG_L1,Building Solaris/amd64 extension packs)
+- $(VBOX_KMK_TIME) ssh vbox@192.168.27.4 " echo $@/amd64 && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all"
+- $(call MSG_L1,Building Solaris/x86 extension packs)
+- $(VBOX_KMK_TIME) ssh vbox@192.168.27.4 " echo $@/x86 && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all"
+-
+-extpacks-build-solaris.rsync-out-of-vm: extpacks-build-solaris.build-it
+- $(VBOX_KMK_TIME) rsync -a --delete 192.168.27.4:/mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/solaris.x86 out/
+- $(VBOX_KMK_TIME) rsync -a --delete 192.168.27.4:/mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/solaris.amd64 out/
+-
+-.NOTPARALLEL: extpacks-build-solaris.rsync-out-of-vm extpacks-build-solaris.rsync-into-vm
+-.PHONY: extpacks-build-solaris.rsync-out-of-vm extpacks-build-solaris.rsync-into-vm extpacks-build-solaris.build-it
+-
+-extpacks-build-solaris.amd64: extpacks-build-solaris.rsync-out-of-vm
+-extpacks-build-solaris.x86: extpacks-build-solaris.rsync-out-of-vm
+-endif
+-
+-extpacks-build-os2.x86:
+-#ifeq ($(KBUILD_TARGET),os2)
+-# + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-#else
+-# $(VBOX_KMK_TIME) ssh vbox@192.168.27.3 " cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) "
+-#endif
+-
+-extpacks-build-linux.amd64: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
+-ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),linux.amd64)
+- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-else
+- $(call MSG_L1,Building Linux/amd64 extension packs)
+- $(VBOX_KMK_TIME) ssh vbox@192.168.27.12 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all"
+-endif
+-
+-extpacks-build-linux.x86: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
+-ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),linux.x86)
+- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-else
+- $(call MSG_L1,Building Linux/x86 extension packs)
+- $(VBOX_KMK_TIME) ssh vbox@192.168.27.11 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all"
+-endif
+-
+-extpacks-build-freebsd.amd64: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
+-#ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),freebsd.amd64)
+-# + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-#else
+-# $(call MSG_L1,Building FreeBSD/amd64 extension packs)
+-# $(VBOX_KMK_TIME) ssh vbox@192.168.27.17 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all"
+-#endif
+-
+-extpacks-build-freebsd.x86: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
+-#ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),freebsd.x86)
+-# + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-#else
+-# $(call MSG_L1,Building FreeBSD/x86 extension packs)
+-# $(VBOX_KMK_TIME) ssh vbox@192.168.27.7 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all"
+-#endif
+-
+-extpacks-build-darwin.amd64: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
+-ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),darwin.amd64)
+- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-else
+- $(call MSG_L1,Building Darwin/amd64 extension packs)
+- $(VBOX_KMK_TIME) $(call VBOX_RSYNC_IN_FN,darwin,amd64) . 192.168.27.15:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)
+- $(VBOX_KMK_TIME) ssh vbox@192.168.27.15 " echo $@ && cd /Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all"
+- $(VBOX_KMK_TIME) rsync -am -v --delete 192.168.27.15:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/darwin.amd64 out/
+-endif
+-
+-extpacks-build-darwin.x86: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
+-ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),darwin.x86)
+- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-else
+- $(call MSG_L1,Building Darwin/x86 extension packs)
+- $(VBOX_KMK_TIME) $(call VBOX_RSYNC_IN_FN,darwin,x86) . 192.168.27.5:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)
+- $(VBOX_KMK_TIME) ssh vbox@192.168.27.5 " echo $@ && cd /Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all"
+- $(VBOX_KMK_TIME) rsync -am -v --delete 192.168.27.5:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/darwin.x86 out/
+-endif
+-
+-
+-extpacks-packing:
+- + $(KMK) VBOX_ONLY_EXTPACKS=1 \
+- VBOX_WITH_EXTPACK_OS_ARCHS="darwin.amd64 darwin.x86 linux.amd64 linux.x86 solaris.amd64 solaris.x86 win.amd64 win.x86" \
+- packing
+-# +++ freebsd.amd64 freebsd.x86 os2.x86 ^^^
+-
+-.PHONY: \
+- extpacks-build-win.x86 \
+- extpacks-build-win.amd64 \
+- extpacks-build-solaris.amd64 \
+- extpacks-build-solaris.x86 \
+- extpacks-build-os2.x86 \
+- extpacks-build-linux.amd64 \
+- extpacks-build-linux.x86 \
+- extpacks-build-freebsd.amd64 \
+- extpacks-build-freebsd.x86 \
+- extpacks-build-darwin.amd64 \
+- extpacks-build-darwin.x86 \
+- extpacks-packing
+-
+-
+ #
+ # Build the test suite, all of it.
+ #
+--- VirtualBox-4.1.18.orig/src/VBox/Devices/build/VBoxDD.cpp 2012-06-20 10:15:51.000000000 -0300
++++ VirtualBox-4.1.18/src/VBox/Devices/build/VBoxDD.cpp 2012-07-24 16:18:03.964493454 -0300
+@@ -132,11 +132,6 @@
+ if (RT_FAILURE(rc))
+ return rc;
+ #endif
+-#ifdef VBOX_WITH_EHCI_IMPL
+- rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceEHCI);
+- if (RT_FAILURE(rc))
+- return rc;
+-#endif
+ #ifdef VBOX_ACPI
+ rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceACPI);
+ if (RT_FAILURE(rc))
+--- VirtualBox-4.1.18.orig/src/VBox/Devices/build/VBoxDD.h 2012-06-20 10:15:51.000000000 -0300
++++ VirtualBox-4.1.18/src/VBox/Devices/build/VBoxDD.h 2012-07-24 16:20:35.939205389 -0300
+@@ -62,7 +62,6 @@
+ extern const PDMDEVREG g_DeviceICH6_HDA;
+ extern const PDMDEVREG g_DeviceAudioSniffer;
+ extern const PDMDEVREG g_DeviceOHCI;
+-extern const PDMDEVREG g_DeviceEHCI;
+ extern const PDMDEVREG g_DeviceACPI;
+ extern const PDMDEVREG g_DeviceDMA;
+ extern const PDMDEVREG g_DeviceFloppyController;
+--- VirtualBox-4.1.18.orig/src/VBox/Main/include/ExtPackManagerImpl.h 2012-06-20 10:17:33.000000000 -0300
++++ /dev/null 2012-07-24 14:48:18.638572110 -0300
+@@ -1,245 +0,0 @@
+-/* $Id: ExtPackManagerImpl.h $ */
+-/** @file
+- * VirtualBox Main - interface for Extension Packs, VBoxSVC & VBoxC.
+- */
+-
+-/*
+- * Copyright (C) 2010 Oracle Corporation
+- *
+- * This file is part of VirtualBox Open Source Edition (OSE), as
+- * available from http://www.virtualbox.org. This file is free software;
+- * you can redistribute it and/or modify it under the terms of the GNU
+- * General Public License (GPL) as published by the Free Software
+- * Foundation, in version 2 as it comes in the "COPYING" file of the
+- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+- */
+-
+-#ifndef ____H_EXTPACKMANAGERIMPL
+-#define ____H_EXTPACKMANAGERIMPL
+-
+-#include "VirtualBoxBase.h"
+-#include <VBox/ExtPack/ExtPack.h>
+-#include <iprt/fs.h>
+-
+-/**
+- * An extension pack file.
+- */
+-class ATL_NO_VTABLE ExtPackFile :
+- public VirtualBoxBase,
+- VBOX_SCRIPTABLE_IMPL(IExtPackFile)
+-{
+-public:
+- /** @name COM and internal init/term/mapping cruft.
+- * @{ */
+- VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(ExtPackFile, IExtPackFile)
+- DECLARE_NOT_AGGREGATABLE(ExtPackFile)
+- DECLARE_PROTECT_FINAL_CONSTRUCT()
+- BEGIN_COM_MAP(ExtPackFile)
+- VBOX_DEFAULT_INTERFACE_ENTRIES(IExtPackFile)
+- COM_INTERFACE_ENTRY(IExtPackBase)
+- END_COM_MAP()
+- DECLARE_EMPTY_CTOR_DTOR(ExtPackFile)
+-
+- HRESULT FinalConstruct();
+- void FinalRelease();
+- HRESULT initWithFile(const char *a_pszFile, const char *a_pszDigest, class ExtPackManager *a_pExtPackMgr, VirtualBox *a_pVirtualBox);
+- void uninit();
+- RTMEMEF_NEW_AND_DELETE_OPERATORS();
+- /** @} */
+-
+- /** @name IExtPackBase interfaces
+- * @{ */
+- STDMETHOD(COMGETTER(Name))(BSTR *a_pbstrName);
+- STDMETHOD(COMGETTER(Description))(BSTR *a_pbstrDescription);
+- STDMETHOD(COMGETTER(Version))(BSTR *a_pbstrVersion);
+- STDMETHOD(COMGETTER(Revision))(ULONG *a_puRevision);
+- STDMETHOD(COMGETTER(VRDEModule))(BSTR *a_pbstrVrdeModule);
+- STDMETHOD(COMGETTER(PlugIns))(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns));
+- STDMETHOD(COMGETTER(Usable))(BOOL *a_pfUsable);
+- STDMETHOD(COMGETTER(WhyUnusable))(BSTR *a_pbstrWhy);
+- STDMETHOD(COMGETTER(ShowLicense))(BOOL *a_pfShowIt);
+- STDMETHOD(COMGETTER(License))(BSTR *a_pbstrHtmlLicense);
+- STDMETHOD(QueryLicense)(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage,
+- IN_BSTR a_bstrFormat, BSTR *a_pbstrLicense);
+- /** @} */
+-
+- /** @name IExtPackFile interfaces
+- * @{ */
+- STDMETHOD(COMGETTER(FilePath))(BSTR *a_pbstrPath);
+- STDMETHOD(Install)(BOOL a_fReplace, IN_BSTR a_bstrDisplayInfo, IProgress **a_ppProgress);
+- /** @} */
+-
+-private:
+- /** @name Misc init helpers
+- * @{ */
+- HRESULT initFailed(const char *a_pszWhyFmt, ...);
+- /** @} */
+-
+-private:
+- struct Data;
+- /** Pointer to the private instance. */
+- Data *m;
+-
+- friend class ExtPackManager;
+-};
+-
+-
+-/**
+- * An installed extension pack.
+- */
+-class ATL_NO_VTABLE ExtPack :
+- public VirtualBoxBase,
+- VBOX_SCRIPTABLE_IMPL(IExtPack)
+-{
+-public:
+- /** @name COM and internal init/term/mapping cruft.
+- * @{ */
+- VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(ExtPack, IExtPack)
+- DECLARE_NOT_AGGREGATABLE(ExtPack)
+- DECLARE_PROTECT_FINAL_CONSTRUCT()
+- BEGIN_COM_MAP(ExtPack)
+- VBOX_DEFAULT_INTERFACE_ENTRIES(IExtPack)
+- COM_INTERFACE_ENTRY(IExtPackBase)
+- END_COM_MAP()
+- DECLARE_EMPTY_CTOR_DTOR(ExtPack)
+-
+- HRESULT FinalConstruct();
+- void FinalRelease();
+- HRESULT initWithDir(VBOXEXTPACKCTX a_enmContext, const char *a_pszName, const char *a_pszDir);
+- void uninit();
+- RTMEMEF_NEW_AND_DELETE_OPERATORS();
+- /** @} */
+-
+- /** @name IExtPackBase interfaces
+- * @{ */
+- STDMETHOD(COMGETTER(Name))(BSTR *a_pbstrName);
+- STDMETHOD(COMGETTER(Description))(BSTR *a_pbstrDescription);
+- STDMETHOD(COMGETTER(Version))(BSTR *a_pbstrVersion);
+- STDMETHOD(COMGETTER(Revision))(ULONG *a_puRevision);
+- STDMETHOD(COMGETTER(VRDEModule))(BSTR *a_pbstrVrdeModule);
+- STDMETHOD(COMGETTER(PlugIns))(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns));
+- STDMETHOD(COMGETTER(Usable))(BOOL *a_pfUsable);
+- STDMETHOD(COMGETTER(WhyUnusable))(BSTR *a_pbstrWhy);
+- STDMETHOD(COMGETTER(ShowLicense))(BOOL *a_pfShowIt);
+- STDMETHOD(COMGETTER(License))(BSTR *a_pbstrHtmlLicense);
+- STDMETHOD(QueryLicense)(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage,
+- IN_BSTR a_bstrFormat, BSTR *a_pbstrLicense);
+- /** @} */
+-
+- /** @name IExtPack interfaces
+- * @{ */
+- STDMETHOD(QueryObject)(IN_BSTR a_bstrObjectId, IUnknown **a_ppUnknown);
+- /** @} */
+-
+- /** @name Internal interfaces used by ExtPackManager.
+- * @{ */
+- bool callInstalledHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock, PRTERRINFO pErrInfo);
+- HRESULT callUninstallHookAndClose(IVirtualBox *a_pVirtualBox, bool a_fForcedRemoval);
+- bool callVirtualBoxReadyHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock);
+- bool callConsoleReadyHook(IConsole *a_pConsole, AutoWriteLock *a_pLock);
+- bool callVmCreatedHook(IVirtualBox *a_pVirtualBox, IMachine *a_pMachine, AutoWriteLock *a_pLock);
+- bool callVmConfigureVmmHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc);
+- bool callVmPowerOnHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc);
+- bool callVmPowerOffHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock);
+- HRESULT checkVrde(void);
+- HRESULT getVrdpLibraryName(Utf8Str *a_pstrVrdeLibrary);
+- bool wantsToBeDefaultVrde(void) const;
+- HRESULT refresh(bool *pfCanDelete);
+- /** @} */
+-
+-protected:
+- /** @name Internal helper methods.
+- * @{ */
+- void probeAndLoad(void);
+- bool findModule(const char *a_pszName, const char *a_pszExt, VBOXEXTPACKMODKIND a_enmKind,
+- Utf8Str *a_ppStrFound, bool *a_pfNative, PRTFSOBJINFO a_pObjInfo) const;
+- static bool objinfoIsEqual(PCRTFSOBJINFO pObjInfo1, PCRTFSOBJINFO pObjInfo2);
+- /** @} */
+-
+- /** @name Extension Pack Helpers
+- * @{ */
+- static DECLCALLBACK(int) hlpFindModule(PCVBOXEXTPACKHLP pHlp, const char *pszName, const char *pszExt,
+- VBOXEXTPACKMODKIND enmKind, char *pszFound, size_t cbFound, bool *pfNative);
+- static DECLCALLBACK(int) hlpGetFilePath(PCVBOXEXTPACKHLP pHlp, const char *pszFilename, char *pszPath, size_t cbPath);
+- static DECLCALLBACK(VBOXEXTPACKCTX) hlpGetContext(PCVBOXEXTPACKHLP pHlp);
+- static DECLCALLBACK(int) hlpReservedN(PCVBOXEXTPACKHLP pHlp);
+- /** @} */
+-
+-private:
+- struct Data;
+- /** Pointer to the private instance. */
+- Data *m;
+-
+- friend class ExtPackManager;
+-};
+-
+-
+-/**
+- * Extension pack manager.
+- */
+-class ATL_NO_VTABLE ExtPackManager :
+- public VirtualBoxBase,
+- VBOX_SCRIPTABLE_IMPL(IExtPackManager)
+-{
+- /** @name COM and internal init/term/mapping cruft.
+- * @{ */
+- VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(ExtPackManager, IExtPackManager)
+- DECLARE_NOT_AGGREGATABLE(ExtPackManager)
+- DECLARE_PROTECT_FINAL_CONSTRUCT()
+- BEGIN_COM_MAP(ExtPackManager)
+- VBOX_DEFAULT_INTERFACE_ENTRIES(IExtPackManager)
+- END_COM_MAP()
+- DECLARE_EMPTY_CTOR_DTOR(ExtPackManager)
+-
+- HRESULT FinalConstruct();
+- void FinalRelease();
+- HRESULT initExtPackManager(VirtualBox *a_pVirtualBox, VBOXEXTPACKCTX a_enmContext);
+- void uninit();
+- RTMEMEF_NEW_AND_DELETE_OPERATORS();
+- /** @} */
+-
+- /** @name IExtPack interfaces
+- * @{ */
+- STDMETHOD(COMGETTER(InstalledExtPacks))(ComSafeArrayOut(IExtPack *, a_paExtPacks));
+- STDMETHOD(Find)(IN_BSTR a_bstrName, IExtPack **a_pExtPack);
+- STDMETHOD(OpenExtPackFile)(IN_BSTR a_bstrTarball, IExtPackFile **a_ppExtPackFile);
+- STDMETHOD(Uninstall)(IN_BSTR a_bstrName, BOOL a_fForcedRemoval, IN_BSTR a_bstrDisplayInfo, IProgress **a_ppProgress);
+- STDMETHOD(Cleanup)(void);
+- STDMETHOD(QueryAllPlugInsForFrontend)(IN_BSTR a_bstrFrontend, ComSafeArrayOut(BSTR, a_pabstrPlugInModules));
+- STDMETHOD(IsExtPackUsable(IN_BSTR a_bstrExtPack, BOOL *aUsable));
+- /** @} */
+-
+- /** @name Internal interfaces used by other Main classes.
+- * @{ */
+- static DECLCALLBACK(int) doInstallThreadProc(RTTHREAD hThread, void *pvJob);
+- HRESULT doInstall(ExtPackFile *a_pExtPackFile, bool a_fReplace, Utf8Str const *a_pstrDisplayInfo);
+- static DECLCALLBACK(int) doUninstallThreadProc(RTTHREAD hThread, void *pvJob);
+- HRESULT doUninstall(const Utf8Str *a_pstrName, bool a_fForcedRemoval, const Utf8Str *a_pstrDisplayInfo);
+- void callAllVirtualBoxReadyHooks(void);
+- void callAllConsoleReadyHooks(IConsole *a_pConsole);
+- void callAllVmCreatedHooks(IMachine *a_pMachine);
+- int callAllVmConfigureVmmHooks(IConsole *a_pConsole, PVM a_pVM);
+- int callAllVmPowerOnHooks(IConsole *a_pConsole, PVM a_pVM);
+- void callAllVmPowerOffHooks(IConsole *a_pConsole, PVM a_pVM);
+- HRESULT checkVrdeExtPack(Utf8Str const *a_pstrExtPack);
+- int getVrdeLibraryPathForExtPack(Utf8Str const *a_pstrExtPack, Utf8Str *a_pstrVrdeLibrary);
+- HRESULT getDefaultVrdeExtPack(Utf8Str *a_pstrExtPack);
+- bool isExtPackUsable(const char *a_pszExtPack);
+- void dumpAllToReleaseLog(void);
+- /** @} */
+-
+-private:
+- HRESULT runSetUidToRootHelper(Utf8Str const *a_pstrDisplayInfo, const char *a_pszCommand, ...);
+- ExtPack *findExtPack(const char *a_pszName);
+- void removeExtPack(const char *a_pszName);
+- HRESULT refreshExtPack(const char *a_pszName, bool a_fUnsuableIsError, ExtPack **a_ppExtPack);
+-
+-private:
+- struct Data;
+- /** Pointer to the private instance. */
+- Data *m;
+-};
+-
+-#endif
+-/* vi: set tabstop=4 shiftwidth=4 expandtab: */
+--- VirtualBox-4.1.18.orig/src/VBox/Main/include/ExtPackUtil.h 2012-06-20 10:17:33.000000000 -0300
++++ /dev/null 2012-07-24 14:48:18.638572110 -0300
+@@ -1,137 +0,0 @@
+-/* $Id: ExtPackUtil.h $ */
+-/** @file
+- * VirtualBox Main - Extension Pack Utilities and definitions, VBoxC, VBoxSVC, ++.
+- */
+-
+-/*
+- * Copyright (C) 2010 Oracle Corporation
+- *
+- * This file is part of VirtualBox Open Source Edition (OSE), as
+- * available from http://www.virtualbox.org. This file is free software;
+- * you can redistribute it and/or modify it under the terms of the GNU
+- * General Public License (GPL) as published by the Free Software
+- * Foundation, in version 2 as it comes in the "COPYING" file of the
+- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+- */
+-
+-#ifndef ____H_EXTPACKUTIL
+-#define ____H_EXTPACKUTIL
+-
+-#include <iprt/cpp/ministring.h>
+-#include <iprt/fs.h>
+-#include <iprt/vfs.h>
+-
+-
+-/** @name VBOX_EXTPACK_DESCRIPTION_NAME
+- * The name of the description file in an extension pack. */
+-#define VBOX_EXTPACK_DESCRIPTION_NAME "ExtPack.xml"
+-/** @name VBOX_EXTPACK_DESCRIPTION_NAME
+- * The name of the manifest file in an extension pack. */
+-#define VBOX_EXTPACK_MANIFEST_NAME "ExtPack.manifest"
+-/** @name VBOX_EXTPACK_SIGNATURE_NAME
+- * The name of the signature file in an extension pack. */
+-#define VBOX_EXTPACK_SIGNATURE_NAME "ExtPack.signature"
+-/** @name VBOX_EXTPACK_LICENSE_NAME_PREFIX
+- * The name prefix of a license file in an extension pack. There can be
+- * several license files in a pack, the variations being on locale, language
+- * and format (HTML, RTF, plain text). All extension packages shall include
+- * a */
+-#define VBOX_EXTPACK_LICENSE_NAME_PREFIX "ExtPack-license"
+-/** @name VBOX_EXTPACK_SUFFIX
+- * The suffix of a extension pack tarball. */
+-#define VBOX_EXTPACK_SUFFIX ".vbox-extpack"
+-
+-/** The minimum length (strlen) of a extension pack name. */
+-#define VBOX_EXTPACK_NAME_MIN_LEN 3
+-/** The max length (strlen) of a extension pack name. */
+-#define VBOX_EXTPACK_NAME_MAX_LEN 64
+-
+-/** The architecture-dependent application data subdirectory where the
+- * extension packs are installed. Relative to RTPathAppPrivateArch. */
+-#define VBOX_EXTPACK_INSTALL_DIR "ExtensionPacks"
+-/** The architecture-independent application data subdirectory where the
+- * certificates are installed. Relative to RTPathAppPrivateNoArch. */
+-#define VBOX_EXTPACK_CERT_DIR "ExtPackCertificates"
+-
+-/** The maximum entry name length.
+- * Play short and safe. */
+-#define VBOX_EXTPACK_MAX_MEMBER_NAME_LENGTH 128
+-
+-
+-/**
+- * Plug-in descriptor.
+- */
+-typedef struct VBOXEXTPACKPLUGINDESC
+-{
+- /** The name. */
+- RTCString strName;
+- /** The module name. */
+- RTCString strModule;
+- /** The description. */
+- RTCString strDescription;
+- /** The frontend or component which it plugs into. */
+- RTCString strFrontend;
+-} VBOXEXTPACKPLUGINDESC;
+-/** Pointer to a plug-in descriptor. */
+-typedef VBOXEXTPACKPLUGINDESC *PVBOXEXTPACKPLUGINDESC;
+-
+-/**
+- * Extension pack descriptor
+- *
+- * This is the internal representation of the ExtPack.xml.
+- */
+-typedef struct VBOXEXTPACKDESC
+-{
+- /** The name. */
+- RTCString strName;
+- /** The description. */
+- RTCString strDescription;
+- /** The version string. */
+- RTCString strVersion;
+- /** The edition string. */
+- RTCString strEdition;
+- /** The internal revision number. */
+- uint32_t uRevision;
+- /** The name of the main module. */
+- RTCString strMainModule;
+- /** The name of the VRDE module, empty if none. */
+- RTCString strVrdeModule;
+- /** The number of plug-in descriptors. */
+- uint32_t cPlugIns;
+- /** Pointer to an array of plug-in descriptors. */
+- PVBOXEXTPACKPLUGINDESC paPlugIns;
+- /** Whether to show the license prior to installation. */
+- bool fShowLicense;
+-} VBOXEXTPACKDESC;
+-
+-/** Pointer to a extension pack descriptor. */
+-typedef VBOXEXTPACKDESC *PVBOXEXTPACKDESC;
+-/** Pointer to a const extension pack descriptor. */
+-typedef VBOXEXTPACKDESC const *PCVBOXEXTPACKDESC;
+-
+-
+-void VBoxExtPackInitDesc(PVBOXEXTPACKDESC a_pExtPackDesc);
+-RTCString *VBoxExtPackLoadDesc(const char *a_pszDir, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo);
+-RTCString *VBoxExtPackLoadDescFromVfsFile(RTVFSFILE hVfsFile, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo);
+-RTCString *VBoxExtPackExtractNameFromTarballPath(const char *pszTarball);
+-void VBoxExtPackFreeDesc(PVBOXEXTPACKDESC a_pExtPackDesc);
+-bool VBoxExtPackIsValidName(const char *pszName);
+-bool VBoxExtPackIsValidMangledName(const char *pszMangledName, size_t cchMax = RTSTR_MAX);
+-RTCString *VBoxExtPackMangleName(const char *pszName);
+-RTCString *VBoxExtPackUnmangleName(const char *pszMangledName, size_t cbMax);
+-int VBoxExtPackCalcDir(char *pszExtPackDir, size_t cbExtPackDir, const char *pszParentDir, const char *pszName);
+-bool VBoxExtPackIsValidVersionString(const char *pszVersion);
+-bool VBoxExtPackIsValidEditionString(const char *pszEdition);
+-bool VBoxExtPackIsValidModuleString(const char *pszModule);
+-
+-int VBoxExtPackValidateMember(const char *pszName, RTVFSOBJTYPE enmType, RTVFSOBJ hVfsObj, char *pszError, size_t cbError);
+-int VBoxExtPackOpenTarFss(RTFILE hTarballFile, char *pszError, size_t cbError, PRTVFSFSSTREAM phTarFss, PRTMANIFEST phFileManifest);
+-int VBoxExtPackValidateTarball(RTFILE hTarballFile, const char *pszExtPackName,
+- const char *pszTarball, const char *pszTarballDigest,
+- char *pszError, size_t cbError,
+- PRTMANIFEST phValidManifest, PRTVFSFILE phXmlFile, RTCString *pStrDigest);
+-
+-
+-#endif
+-
+--- VirtualBox-4.1.18.orig/src/VBox/Main/src-all/ExtPackManagerImpl.cpp 2012-06-20 10:17:34.000000000 -0300
++++ /dev/null 2012-07-24 14:48:18.638572110 -0300
+@@ -1,3126 +0,0 @@
+-/* $Id: ExtPackManagerImpl.cpp $ */
+-/** @file
+- * VirtualBox Main - interface for Extension Packs, VBoxSVC & VBoxC.
+- */
+-
+-/*
+- * Copyright (C) 2010 Oracle Corporation
+- *
+- * This file is part of VirtualBox Open Source Edition (OSE), as
+- * available from http://www.virtualbox.org. This file is free software;
+- * you can redistribute it and/or modify it under the terms of the GNU
+- * General Public License (GPL) as published by the Free Software
+- * Foundation, in version 2 as it comes in the "COPYING" file of the
+- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+- */
+-
+-
+-/*******************************************************************************
+-* Header Files *
+-*******************************************************************************/
+-#include "ExtPackManagerImpl.h"
+-#include "ExtPackUtil.h"
+-
+-#include <iprt/buildconfig.h>
+-#include <iprt/ctype.h>
+-#include <iprt/dir.h>
+-#include <iprt/env.h>
+-#include <iprt/file.h>
+-#include <iprt/ldr.h>
+-#include <iprt/manifest.h>
+-#include <iprt/param.h>
+-#include <iprt/path.h>
+-#include <iprt/pipe.h>
+-#include <iprt/process.h>
+-#include <iprt/string.h>
+-
+-#include <VBox/com/array.h>
+-#include <VBox/com/ErrorInfo.h>
+-#include <VBox/err.h>
+-#include <VBox/log.h>
+-#include <VBox/sup.h>
+-#include <VBox/version.h>
+-#include "AutoCaller.h"
+-#include "Global.h"
+-#include "ProgressImpl.h"
+-#include "SystemPropertiesImpl.h"
+-#include "VirtualBoxImpl.h"
+-
+-
+-/*******************************************************************************
+-* Defined Constants And Macros *
+-*******************************************************************************/
+-/** @name VBOX_EXTPACK_HELPER_NAME
+- * The name of the utility application we employ to install and uninstall the
+- * extension packs. This is a set-uid-to-root binary on unixy platforms, which
+- * is why it has to be a separate application.
+- */
+-#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
+-# define VBOX_EXTPACK_HELPER_NAME "VBoxExtPackHelperApp.exe"
+-#else
+-# define VBOX_EXTPACK_HELPER_NAME "VBoxExtPackHelperApp"
+-#endif
+-
+-
+-/*******************************************************************************
+-* Structures and Typedefs *
+-*******************************************************************************/
+-struct ExtPackBaseData
+-{
+-public:
+- /** The extension pack descriptor (loaded from the XML, mostly). */
+- VBOXEXTPACKDESC Desc;
+- /** The file system object info of the XML file.
+- * This is for detecting changes and save time in refresh(). */
+- RTFSOBJINFO ObjInfoDesc;
+- /** Whether it's usable or not. */
+- bool fUsable;
+- /** Why it is unusable. */
+- Utf8Str strWhyUnusable;
+-};
+-
+-/**
+- * Private extension pack data.
+- */
+-struct ExtPackFile::Data : public ExtPackBaseData
+-{
+-public:
+- /** The path to the tarball. */
+- Utf8Str strExtPackFile;
+- /** The SHA-256 hash of the file (as string). */
+- Utf8Str strDigest;
+- /** The file handle of the extension pack file. */
+- RTFILE hExtPackFile;
+- /** Our manifest for the tarball. */
+- RTMANIFEST hOurManifest;
+- /** Pointer to the extension pack manager. */
+- ComObjPtr<ExtPackManager> ptrExtPackMgr;
+- /** Pointer to the VirtualBox object so we can create a progress object. */
+- VirtualBox *pVirtualBox;
+-
+- RTMEMEF_NEW_AND_DELETE_OPERATORS();
+-};
+-
+-/**
+- * Private extension pack data.
+- */
+-struct ExtPack::Data : public ExtPackBaseData
+-{
+-public:
+- /** Where the extension pack is located. */
+- Utf8Str strExtPackPath;
+- /** The file system object info of the extension pack directory.
+- * This is for detecting changes and save time in refresh(). */
+- RTFSOBJINFO ObjInfoExtPack;
+- /** The full path to the main module. */
+- Utf8Str strMainModPath;
+- /** The file system object info of the main module.
+- * This is used to determin whether to bother try reload it. */
+- RTFSOBJINFO ObjInfoMainMod;
+- /** The module handle of the main extension pack module. */
+- RTLDRMOD hMainMod;
+-
+- /** The helper callbacks for the extension pack. */
+- VBOXEXTPACKHLP Hlp;
+- /** Pointer back to the extension pack object (for Hlp methods). */
+- ExtPack *pThis;
+- /** The extension pack registration structure. */
+- PCVBOXEXTPACKREG pReg;
+- /** The current context. */
+- VBOXEXTPACKCTX enmContext;
+- /** Set if we've made the pfnVirtualBoxReady or pfnConsoleReady call. */
+- bool fMadeReadyCall;
+-
+- RTMEMEF_NEW_AND_DELETE_OPERATORS();
+-};
+-
+-/** List of extension packs. */
+-typedef std::list< ComObjPtr<ExtPack> > ExtPackList;
+-
+-/**
+- * Private extension pack manager data.
+- */
+-struct ExtPackManager::Data
+-{
+- /** The directory where the extension packs are installed. */
+- Utf8Str strBaseDir;
+- /** The directory where the certificates this installation recognizes are
+- * stored. */
+- Utf8Str strCertificatDirPath;
+- /** The list of installed extension packs. */
+- ExtPackList llInstalledExtPacks;
+- /** Pointer to the VirtualBox object, our parent. */
+- VirtualBox *pVirtualBox;
+- /** The current context. */
+- VBOXEXTPACKCTX enmContext;
+-#if !defined(RT_OS_WINDOWS) && !defined(RT_OS_DARWIN)
+- /** File handle for the VBoxVMM libary which we slurp because ExtPacks depend on it. */
+- RTLDRMOD hVBoxVMM;
+-#endif
+-
+- RTMEMEF_NEW_AND_DELETE_OPERATORS();
+-};
+-
+-/**
+- * Extension pack installation job.
+- */
+-typedef struct EXTPACKINSTALLJOB
+-{
+- /** Smart pointer to the extension pack file. */
+- ComPtr<ExtPackFile> ptrExtPackFile;
+- /** The replace argument. */
+- bool fReplace;
+- /** The display info argument. */
+- Utf8Str strDisplayInfo;
+- /** Smart pointer to the extension manager. */
+- ComPtr<ExtPackManager> ptrExtPackMgr;
+- /** Smart pointer to the progress object for this job. */
+- ComObjPtr<Progress> ptrProgress;
+-} EXTPACKINSTALLJOB;
+-/** Pointer to an extension pack installation job. */
+-typedef EXTPACKINSTALLJOB *PEXTPACKINSTALLJOB;
+-
+-/**
+- * Extension pack uninstallation job.
+- */
+-typedef struct EXTPACKUNINSTALLJOB
+-{
+- /** Smart pointer to the extension manager. */
+- ComPtr<ExtPackManager> ptrExtPackMgr;
+- /** The name of the extension pack. */
+- Utf8Str strName;
+- /** The replace argument. */
+- bool fForcedRemoval;
+- /** The display info argument. */
+- Utf8Str strDisplayInfo;
+- /** Smart pointer to the progress object for this job. */
+- ComObjPtr<Progress> ptrProgress;
+-} EXTPACKUNINSTALLJOB;
+-/** Pointer to an extension pack uninstallation job. */
+-typedef EXTPACKUNINSTALLJOB *PEXTPACKUNINSTALLJOB;
+-
+-
+-DEFINE_EMPTY_CTOR_DTOR(ExtPackFile)
+-
+-/**
+- * Called by ComObjPtr::createObject when creating the object.
+- *
+- * Just initialize the basic object state, do the rest in initWithDir().
+- *
+- * @returns S_OK.
+- */
+-HRESULT ExtPackFile::FinalConstruct()
+-{
+- m = NULL;
+- return BaseFinalConstruct();
+-}
+-
+-/**
+- * Initializes the extension pack by reading its file.
+- *
+- * @returns COM status code.
+- * @param a_pszFile The path to the extension pack file.
+- * @param a_pszDigest The SHA-256 digest of the file. Or an empty string.
+- * @param a_pExtPackMgr Pointer to the extension pack manager.
+- * @param a_pVirtualBox Pointer to the VirtualBox object.
+- */
+-HRESULT ExtPackFile::initWithFile(const char *a_pszFile, const char *a_pszDigest, ExtPackManager *a_pExtPackMgr, VirtualBox *a_pVirtualBox)
+-{
+- AutoInitSpan autoInitSpan(this);
+- AssertReturn(autoInitSpan.isOk(), E_FAIL);
+-
+- /*
+- * Allocate + initialize our private data.
+- */
+- m = new ExtPackFile::Data;
+- VBoxExtPackInitDesc(&m->Desc);
+- RT_ZERO(m->ObjInfoDesc);
+- m->fUsable = false;
+- m->strWhyUnusable = tr("ExtPack::init failed");
+- m->strExtPackFile = a_pszFile;
+- m->strDigest = a_pszDigest;
+- m->hExtPackFile = NIL_RTFILE;
+- m->hOurManifest = NIL_RTMANIFEST;
+- m->ptrExtPackMgr = a_pExtPackMgr;
+- m->pVirtualBox = a_pVirtualBox;
+-
+- RTCString *pstrTarName = VBoxExtPackExtractNameFromTarballPath(a_pszFile);
+- if (pstrTarName)
+- {
+- m->Desc.strName = *pstrTarName;
+- delete pstrTarName;
+- pstrTarName = NULL;
+- }
+-
+- autoInitSpan.setSucceeded();
+-
+- /*
+- * Try open the extension pack and check that it is a regular file.
+- */
+- int vrc = RTFileOpen(&m->hExtPackFile, a_pszFile,
+- RTFILE_O_READ | RTFILE_O_DENY_WRITE | RTFILE_O_OPEN);
+- if (RT_FAILURE(vrc))
+- {
+- if (vrc == VERR_FILE_NOT_FOUND || vrc == VERR_PATH_NOT_FOUND)
+- return initFailed(tr("'%s' file not found"), a_pszFile);
+- return initFailed(tr("RTFileOpen('%s',,) failed with %Rrc"), a_pszFile, vrc);
+- }
+-
+- RTFSOBJINFO ObjInfo;
+- vrc = RTFileQueryInfo(m->hExtPackFile, &ObjInfo, RTFSOBJATTRADD_UNIX);
+- if (RT_FAILURE(vrc))
+- return initFailed(tr("RTFileQueryInfo failed with %Rrc on '%s'"), vrc, a_pszFile);
+- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode))
+- return initFailed(tr("Not a regular file: %s"), a_pszFile);
+-
+- /*
+- * Validate the tarball and extract the XML file.
+- */
+- char szError[8192];
+- RTVFSFILE hXmlFile;
+- vrc = VBoxExtPackValidateTarball(m->hExtPackFile, NULL /*pszExtPackName*/, a_pszFile, a_pszDigest,
+- szError, sizeof(szError), &m->hOurManifest, &hXmlFile, &m->strDigest);
+- if (RT_FAILURE(vrc))
+- return initFailed(tr("%s"), szError);
+-
+- /*
+- * Parse the XML.
+- */
+- RTCString strSavedName(m->Desc.strName);
+- RTCString *pStrLoadErr = VBoxExtPackLoadDescFromVfsFile(hXmlFile, &m->Desc, &m->ObjInfoDesc);
+- RTVfsFileRelease(hXmlFile);
+- if (pStrLoadErr != NULL)
+- {
+- m->strWhyUnusable.printf(tr("Failed to the xml file: %s"), pStrLoadErr->c_str());
+- m->Desc.strName = strSavedName;
+- delete pStrLoadErr;
+- return S_OK;
+- }
+-
+- /*
+- * Match the tarball name with the name from the XML.
+- */
+- /** @todo drop this restriction after the old install interface is
+- * dropped. */
+- if (!strSavedName.equalsIgnoreCase(m->Desc.strName))
+- return initFailed(tr("Extension pack name mismatch between the downloaded file and the XML inside it (xml='%s' file='%s')"),
+- m->Desc.strName.c_str(), strSavedName.c_str());
+-
+- m->fUsable = true;
+- m->strWhyUnusable.setNull();
+- return S_OK;
+-}
+-
+-/**
+- * Protected helper that formats the strWhyUnusable value.
+- *
+- * @returns S_OK
+- * @param a_pszWhyFmt Why it failed, format string.
+- * @param ... The format arguments.
+- */
+-HRESULT ExtPackFile::initFailed(const char *a_pszWhyFmt, ...)
+-{
+- va_list va;
+- va_start(va, a_pszWhyFmt);
+- m->strWhyUnusable.printfV(a_pszWhyFmt, va);
+- va_end(va);
+- return S_OK;
+-}
+-
+-/**
+- * COM cruft.
+- */
+-void ExtPackFile::FinalRelease()
+-{
+- uninit();
+- BaseFinalRelease();
+-}
+-
+-/**
+- * Do the actual cleanup.
+- */
+-void ExtPackFile::uninit()
+-{
+- /* Enclose the state transition Ready->InUninit->NotReady */
+- AutoUninitSpan autoUninitSpan(this);
+- if (!autoUninitSpan.uninitDone() && m != NULL)
+- {
+- VBoxExtPackFreeDesc(&m->Desc);
+- RTFileClose(m->hExtPackFile);
+- m->hExtPackFile = NIL_RTFILE;
+- RTManifestRelease(m->hOurManifest);
+- m->hOurManifest = NIL_RTMANIFEST;
+-
+- delete m;
+- m = NULL;
+- }
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(Name)(BSTR *a_pbstrName)
+-{
+- CheckComArgOutPointerValid(a_pbstrName);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- Bstr str(m->Desc.strName);
+- str.cloneTo(a_pbstrName);
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(Description)(BSTR *a_pbstrDescription)
+-{
+- CheckComArgOutPointerValid(a_pbstrDescription);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- Bstr str(m->Desc.strDescription);
+- str.cloneTo(a_pbstrDescription);
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(Version)(BSTR *a_pbstrVersion)
+-{
+- CheckComArgOutPointerValid(a_pbstrVersion);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- /* HACK ALERT: This is for easing backporting to 4.1. The edition stuff
+- will be changed into a separate */
+- if (m->Desc.strEdition.isEmpty())
+- {
+- Bstr str(m->Desc.strVersion);
+- str.cloneTo(a_pbstrVersion);
+- }
+- else
+- {
+- RTCString strHack(m->Desc.strVersion);
+- strHack.append('-');
+- strHack.append(m->Desc.strEdition);
+-
+- Bstr str(strHack);
+- str.cloneTo(a_pbstrVersion);
+- }
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(Revision)(ULONG *a_puRevision)
+-{
+- CheckComArgOutPointerValid(a_puRevision);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- *a_puRevision = m->Desc.uRevision;
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(VRDEModule)(BSTR *a_pbstrVrdeModule)
+-{
+- CheckComArgOutPointerValid(a_pbstrVrdeModule);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- Bstr str(m->Desc.strVrdeModule);
+- str.cloneTo(a_pbstrVrdeModule);
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(PlugIns)(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns))
+-{
+- /** @todo implement plug-ins. */
+-#ifdef VBOX_WITH_XPCOM
+- NOREF(a_paPlugIns);
+- NOREF(a_paPlugInsSize);
+-#endif
+- ReturnComNotImplemented();
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(Usable)(BOOL *a_pfUsable)
+-{
+- CheckComArgOutPointerValid(a_pfUsable);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- *a_pfUsable = m->fUsable;
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(WhyUnusable)(BSTR *a_pbstrWhy)
+-{
+- CheckComArgOutPointerValid(a_pbstrWhy);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- m->strWhyUnusable.cloneTo(a_pbstrWhy);
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(ShowLicense)(BOOL *a_pfShowIt)
+-{
+- CheckComArgOutPointerValid(a_pfShowIt);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- *a_pfShowIt = m->Desc.fShowLicense;
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(License)(BSTR *a_pbstrHtmlLicense)
+-{
+- Bstr bstrHtml("html");
+- return QueryLicense(Bstr::Empty.raw(), Bstr::Empty.raw(), bstrHtml.raw(), a_pbstrHtmlLicense);
+-}
+-
+-/* Same as ExtPack::QueryLicense, should really explore the subject of base classes here... */
+-STDMETHODIMP ExtPackFile::QueryLicense(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage, IN_BSTR a_bstrFormat,
+- BSTR *a_pbstrLicense)
+-{
+- /*
+- * Validate input.
+- */
+- CheckComArgOutPointerValid(a_pbstrLicense);
+- CheckComArgNotNull(a_bstrPreferredLocale);
+- CheckComArgNotNull(a_bstrPreferredLanguage);
+- CheckComArgNotNull(a_bstrFormat);
+-
+- Utf8Str strPreferredLocale(a_bstrPreferredLocale);
+- if (strPreferredLocale.length() != 2 && strPreferredLocale.length() != 0)
+- return setError(E_FAIL, tr("The preferred locale is a two character string or empty."));
+-
+- Utf8Str strPreferredLanguage(a_bstrPreferredLanguage);
+- if (strPreferredLanguage.length() != 2 && strPreferredLanguage.length() != 0)
+- return setError(E_FAIL, tr("The preferred lanuage is a two character string or empty."));
+-
+- Utf8Str strFormat(a_bstrFormat);
+- if ( !strFormat.equals("html")
+- && !strFormat.equals("rtf")
+- && !strFormat.equals("txt"))
+- return setError(E_FAIL, tr("The license format can only have the values 'html', 'rtf' and 'txt'."));
+-
+- /*
+- * Combine the options to form a file name before locking down anything.
+- */
+- char szName[sizeof(VBOX_EXTPACK_LICENSE_NAME_PREFIX "-de_DE.html") + 2];
+- if (strPreferredLocale.isNotEmpty() && strPreferredLanguage.isNotEmpty())
+- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s_%s.%s",
+- strPreferredLocale.c_str(), strPreferredLanguage.c_str(), strFormat.c_str());
+- else if (strPreferredLocale.isNotEmpty())
+- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s.%s", strPreferredLocale.c_str(), strFormat.c_str());
+- else if (strPreferredLanguage.isNotEmpty())
+- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-_%s.%s", strPreferredLocale.c_str(), strFormat.c_str());
+- else
+- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX ".%s", strFormat.c_str());
+-
+- /*
+- * Lock the extension pack. We need a write lock here as there must not be
+- * concurrent accesses to the tar file handle.
+- */
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- /*
+- * Do not permit this query on a pack that isn't considered usable (could
+- * be marked so because of bad license files).
+- */
+- if (!m->fUsable)
+- hrc = setError(E_FAIL, tr("%s"), m->strWhyUnusable.c_str());
+- else
+- {
+- /*
+- * Look it up in the manifest before scanning the tarball for it
+- */
+- if (RTManifestEntryExists(m->hOurManifest, szName))
+- {
+- RTVFSFSSTREAM hTarFss;
+- char szError[8192];
+- int vrc = VBoxExtPackOpenTarFss(m->hExtPackFile, szError, sizeof(szError), &hTarFss, NULL);
+- if (RT_SUCCESS(vrc))
+- {
+- for (;;)
+- {
+- /* Get the first/next. */
+- char *pszName;
+- RTVFSOBJ hVfsObj;
+- RTVFSOBJTYPE enmType;
+- vrc = RTVfsFsStrmNext(hTarFss, &pszName, &enmType, &hVfsObj);
+- if (RT_FAILURE(vrc))
+- {
+- if (vrc != VERR_EOF)
+- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTVfsFsStrmNext failed: %Rrc"), vrc);
+- else
+- hrc = setError(E_UNEXPECTED, tr("'%s' was found in the manifest but not in the tarball"), szName);
+- break;
+- }
+-
+- /* Is this it? */
+- const char *pszAdjName = pszName[0] == '.' && pszName[1] == '/' ? &pszName[2] : pszName;
+- if ( !strcmp(pszAdjName, szName)
+- && ( enmType == RTVFSOBJTYPE_IO_STREAM
+- || enmType == RTVFSOBJTYPE_FILE))
+- {
+- RTVFSIOSTREAM hVfsIos = RTVfsObjToIoStream(hVfsObj);
+- RTVfsObjRelease(hVfsObj);
+- RTStrFree(pszName);
+-
+- /* Load the file into memory. */
+- RTFSOBJINFO ObjInfo;
+- vrc = RTVfsIoStrmQueryInfo(hVfsIos, &ObjInfo, RTFSOBJATTRADD_NOTHING);
+- if (RT_SUCCESS(vrc))
+- {
+- size_t cbFile = (size_t)ObjInfo.cbObject;
+- void *pvFile = RTMemAllocZ(cbFile + 1);
+- if (pvFile)
+- {
+- vrc = RTVfsIoStrmRead(hVfsIos, pvFile, cbFile, true /*fBlocking*/, NULL);
+- if (RT_SUCCESS(vrc))
+- {
+- /* try translate it into a string we can return. */
+- Bstr bstrLicense((const char *)pvFile, cbFile);
+- if (bstrLicense.isNotEmpty())
+- {
+- bstrLicense.detachTo(a_pbstrLicense);
+- hrc = S_OK;
+- }
+- else
+- hrc = setError(VBOX_E_IPRT_ERROR,
+- tr("The license file '%s' is empty or contains invalid UTF-8 encoding"),
+- szName);
+- }
+- else
+- hrc = setError(VBOX_E_IPRT_ERROR, tr("Failed to read '%s': %Rrc"), szName, vrc);
+- RTMemFree(pvFile);
+- }
+- else
+- hrc = setError(E_OUTOFMEMORY, tr("Failed to allocate %zu bytes for '%s'"), cbFile, szName);
+- }
+- else
+- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTVfsIoStrmQueryInfo on '%s': %Rrc"), szName, vrc);
+- RTVfsIoStrmRelease(hVfsIos);
+- break;
+- }
+-
+- /* Release current. */
+- RTVfsObjRelease(hVfsObj);
+- RTStrFree(pszName);
+- }
+- RTVfsFsStrmRelease(hTarFss);
+- }
+- else
+- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("%s"), szError);
+- }
+- else
+- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("The license file '%s' was not found in '%s'"),
+- szName, m->strExtPackFile.c_str());
+- }
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(FilePath)(BSTR *a_pbstrPath)
+-{
+- CheckComArgOutPointerValid(a_pbstrPath);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- m->strExtPackFile.cloneTo(a_pbstrPath);
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::Install(BOOL a_fReplace, IN_BSTR a_bstrDisplayInfo, IProgress **a_ppProgress)
+-{
+- if (a_ppProgress)
+- *a_ppProgress = NULL;
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- if (m->fUsable)
+- {
+- PEXTPACKINSTALLJOB pJob = NULL;
+- try
+- {
+- pJob = new EXTPACKINSTALLJOB;
+- pJob->ptrExtPackFile = this;
+- pJob->fReplace = a_fReplace != FALSE;
+- pJob->strDisplayInfo = a_bstrDisplayInfo;
+- pJob->ptrExtPackMgr = m->ptrExtPackMgr;
+- hrc = pJob->ptrProgress.createObject();
+- if (SUCCEEDED(hrc))
+- {
+- Bstr bstrDescription = tr("Installing extension pack");
+- hrc = pJob->ptrProgress->init(
+-#ifndef VBOX_COM_INPROC
+- m->pVirtualBox,
+-#endif
+- static_cast<IExtPackFile *>(this),
+- bstrDescription.raw(),
+- FALSE /*aCancelable*/,
+- NULL /*aId*/);
+- }
+- if (SUCCEEDED(hrc))
+- {
+- ComPtr<Progress> ptrProgress = pJob->ptrProgress;
+- int vrc = RTThreadCreate(NULL /*phThread*/, ExtPackManager::doInstallThreadProc, pJob, 0,
+- RTTHREADTYPE_DEFAULT, 0 /*fFlags*/, "ExtPackInst");
+- if (RT_SUCCESS(vrc))
+- {
+- pJob = NULL; /* the thread deletes it */
+- ptrProgress.queryInterfaceTo(a_ppProgress);
+- }
+- else
+- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTThreadCreate failed with %Rrc"), vrc);
+- }
+- }
+- catch (std::bad_alloc)
+- {
+- hrc = E_OUTOFMEMORY;
+- }
+- if (pJob)
+- delete pJob;
+- }
+- else
+- hrc = setError(E_FAIL, "%s", m->strWhyUnusable.c_str());
+- }
+- return hrc;
+-}
+-
+-
+-
+-
+-
+-DEFINE_EMPTY_CTOR_DTOR(ExtPack)
+-
+-/**
+- * Called by ComObjPtr::createObject when creating the object.
+- *
+- * Just initialize the basic object state, do the rest in initWithDir().
+- *
+- * @returns S_OK.
+- */
+-HRESULT ExtPack::FinalConstruct()
+-{
+- m = NULL;
+- return S_OK;
+-}
+-
+-/**
+- * Initializes the extension pack by reading its file.
+- *
+- * @returns COM status code.
+- * @param a_enmContext The context we're in.
+- * @param a_pszName The name of the extension pack. This is also the
+- * name of the subdirector under @a a_pszParentDir
+- * where the extension pack is installed.
+- * @param a_pszDir The extension pack directory name.
+- */
+-HRESULT ExtPack::initWithDir(VBOXEXTPACKCTX a_enmContext, const char *a_pszName, const char *a_pszDir)
+-{
+- AutoInitSpan autoInitSpan(this);
+- AssertReturn(autoInitSpan.isOk(), E_FAIL);
+-
+- static const VBOXEXTPACKHLP s_HlpTmpl =
+- {
+- /* u32Version = */ VBOXEXTPACKHLP_VERSION,
+- /* uVBoxFullVersion = */ VBOX_FULL_VERSION,
+- /* uVBoxVersionRevision = */ 0,
+- /* u32Padding = */ 0,
+- /* pszVBoxVersion = */ "",
+- /* pfnFindModule = */ ExtPack::hlpFindModule,
+- /* pfnGetFilePath = */ ExtPack::hlpGetFilePath,
+- /* pfnGetContext = */ ExtPack::hlpGetContext,
+- /* pfnReserved1 = */ ExtPack::hlpReservedN,
+- /* pfnReserved2 = */ ExtPack::hlpReservedN,
+- /* pfnReserved3 = */ ExtPack::hlpReservedN,
+- /* pfnReserved4 = */ ExtPack::hlpReservedN,
+- /* pfnReserved5 = */ ExtPack::hlpReservedN,
+- /* pfnReserved6 = */ ExtPack::hlpReservedN,
+- /* pfnReserved7 = */ ExtPack::hlpReservedN,
+- /* pfnReserved8 = */ ExtPack::hlpReservedN,
+- /* pfnReserved9 = */ ExtPack::hlpReservedN,
+- /* u32EndMarker = */ VBOXEXTPACKHLP_VERSION
+- };
+-
+- /*
+- * Allocate + initialize our private data.
+- */
+- m = new Data;
+- VBoxExtPackInitDesc(&m->Desc);
+- m->Desc.strName = a_pszName;
+- RT_ZERO(m->ObjInfoDesc);
+- m->fUsable = false;
+- m->strWhyUnusable = tr("ExtPack::init failed");
+- m->strExtPackPath = a_pszDir;
+- RT_ZERO(m->ObjInfoExtPack);
+- m->strMainModPath.setNull();
+- RT_ZERO(m->ObjInfoMainMod);
+- m->hMainMod = NIL_RTLDRMOD;
+- m->Hlp = s_HlpTmpl;
+- m->Hlp.pszVBoxVersion = RTBldCfgVersion();
+- m->Hlp.uVBoxInternalRevision = RTBldCfgRevision();
+- m->pThis = this;
+- m->pReg = NULL;
+- m->enmContext = a_enmContext;
+- m->fMadeReadyCall = false;
+-
+- /*
+- * Probe the extension pack (this code is shared with refresh()).
+- */
+- probeAndLoad();
+-
+- autoInitSpan.setSucceeded();
+- return S_OK;
+-}
+-
+-/**
+- * COM cruft.
+- */
+-void ExtPack::FinalRelease()
+-{
+- uninit();
+-}
+-
+-/**
+- * Do the actual cleanup.
+- */
+-void ExtPack::uninit()
+-{
+- /* Enclose the state transition Ready->InUninit->NotReady */
+- AutoUninitSpan autoUninitSpan(this);
+- if (!autoUninitSpan.uninitDone() && m != NULL)
+- {
+- if (m->hMainMod != NIL_RTLDRMOD)
+- {
+- AssertPtr(m->pReg);
+- if (m->pReg->pfnUnload != NULL)
+- m->pReg->pfnUnload(m->pReg);
+-
+- RTLdrClose(m->hMainMod);
+- m->hMainMod = NIL_RTLDRMOD;
+- m->pReg = NULL;
+- }
+-
+- VBoxExtPackFreeDesc(&m->Desc);
+-
+- delete m;
+- m = NULL;
+- }
+-}
+-
+-
+-/**
+- * Calls the installed hook.
+- *
+- * @returns true if we left the lock, false if we didn't.
+- * @param a_pVirtualBox The VirtualBox interface.
+- * @param a_pLock The write lock held by the caller.
+- * @param pErrInfo Where to return error information.
+- */
+-bool ExtPack::callInstalledHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock, PRTERRINFO pErrInfo)
+-{
+- if ( m != NULL
+- && m->hMainMod != NIL_RTLDRMOD)
+- {
+- if (m->pReg->pfnInstalled)
+- {
+- ComPtr<ExtPack> ptrSelfRef = this;
+- a_pLock->release();
+- pErrInfo->rc = m->pReg->pfnInstalled(m->pReg, a_pVirtualBox, pErrInfo);
+- a_pLock->acquire();
+- return true;
+- }
+- }
+- pErrInfo->rc = VINF_SUCCESS;
+- return false;
+-}
+-
+-/**
+- * Calls the uninstall hook and closes the module.
+- *
+- * @returns S_OK or COM error status with error information.
+- * @param a_pVirtualBox The VirtualBox interface.
+- * @param a_fForcedRemoval When set, we'll ignore complaints from the
+- * uninstall hook.
+- * @remarks The caller holds the manager's write lock, not released.
+- */
+-HRESULT ExtPack::callUninstallHookAndClose(IVirtualBox *a_pVirtualBox, bool a_fForcedRemoval)
+-{
+- HRESULT hrc = S_OK;
+-
+- if ( m != NULL
+- && m->hMainMod != NIL_RTLDRMOD)
+- {
+- if (m->pReg->pfnUninstall && !a_fForcedRemoval)
+- {
+- int vrc = m->pReg->pfnUninstall(m->pReg, a_pVirtualBox);
+- if (RT_FAILURE(vrc))
+- {
+- LogRel(("ExtPack pfnUninstall returned %Rrc for %s\n", vrc, m->Desc.strName.c_str()));
+- if (!a_fForcedRemoval)
+- hrc = setError(E_FAIL, tr("pfnUninstall returned %Rrc"), vrc);
+- }
+- }
+- if (SUCCEEDED(hrc))
+- {
+- RTLdrClose(m->hMainMod);
+- m->hMainMod = NIL_RTLDRMOD;
+- m->pReg = NULL;
+- }
+- }
+-
+- return hrc;
+-}
+-
+-/**
+- * Calls the pfnVirtualBoxReady hook.
+- *
+- * @returns true if we left the lock, false if we didn't.
+- * @param a_pVirtualBox The VirtualBox interface.
+- * @param a_pLock The write lock held by the caller.
+- */
+-bool ExtPack::callVirtualBoxReadyHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock)
+-{
+- if ( m != NULL
+- && m->fUsable
+- && !m->fMadeReadyCall)
+- {
+- m->fMadeReadyCall = true;
+- if (m->pReg->pfnVirtualBoxReady)
+- {
+- ComPtr<ExtPack> ptrSelfRef = this;
+- a_pLock->release();
+- m->pReg->pfnVirtualBoxReady(m->pReg, a_pVirtualBox);
+- a_pLock->acquire();
+- return true;
+- }
+- }
+- return false;
+-}
+-
+-/**
+- * Calls the pfnConsoleReady hook.
+- *
+- * @returns true if we left the lock, false if we didn't.
+- * @param a_pConsole The Console interface.
+- * @param a_pLock The write lock held by the caller.
+- */
+-bool ExtPack::callConsoleReadyHook(IConsole *a_pConsole, AutoWriteLock *a_pLock)
+-{
+- if ( m != NULL
+- && m->fUsable
+- && !m->fMadeReadyCall)
+- {
+- m->fMadeReadyCall = true;
+- if (m->pReg->pfnConsoleReady)
+- {
+- ComPtr<ExtPack> ptrSelfRef = this;
+- a_pLock->release();
+- m->pReg->pfnConsoleReady(m->pReg, a_pConsole);
+- a_pLock->acquire();
+- return true;
+- }
+- }
+- return false;
+-}
+-
+-/**
+- * Calls the pfnVMCreate hook.
+- *
+- * @returns true if we left the lock, false if we didn't.
+- * @param a_pVirtualBox The VirtualBox interface.
+- * @param a_pMachine The machine interface of the new VM.
+- * @param a_pLock The write lock held by the caller.
+- */
+-bool ExtPack::callVmCreatedHook(IVirtualBox *a_pVirtualBox, IMachine *a_pMachine, AutoWriteLock *a_pLock)
+-{
+- if ( m != NULL
+- && m->fUsable)
+- {
+- if (m->pReg->pfnVMCreated)
+- {
+- ComPtr<ExtPack> ptrSelfRef = this;
+- a_pLock->release();
+- m->pReg->pfnVMCreated(m->pReg, a_pVirtualBox, a_pMachine);
+- a_pLock->acquire();
+- return true;
+- }
+- }
+- return false;
+-}
+-
+-/**
+- * Calls the pfnVMConfigureVMM hook.
+- *
+- * @returns true if we left the lock, false if we didn't.
+- * @param a_pConsole The console interface.
+- * @param a_pVM The VM handle.
+- * @param a_pLock The write lock held by the caller.
+- * @param a_pvrc Where to return the status code of the
+- * callback. This is always set. LogRel is
+- * called on if a failure status is returned.
+- */
+-bool ExtPack::callVmConfigureVmmHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc)
+-{
+- *a_pvrc = VINF_SUCCESS;
+- if ( m != NULL
+- && m->fUsable)
+- {
+- if (m->pReg->pfnVMConfigureVMM)
+- {
+- ComPtr<ExtPack> ptrSelfRef = this;
+- a_pLock->release();
+- int vrc = m->pReg->pfnVMConfigureVMM(m->pReg, a_pConsole, a_pVM);
+- *a_pvrc = vrc;
+- a_pLock->acquire();
+- if (RT_FAILURE(vrc))
+- LogRel(("ExtPack pfnVMConfigureVMM returned %Rrc for %s\n", vrc, m->Desc.strName.c_str()));
+- return true;
+- }
+- }
+- return false;
+-}
+-
+-/**
+- * Calls the pfnVMPowerOn hook.
+- *
+- * @returns true if we left the lock, false if we didn't.
+- * @param a_pConsole The console interface.
+- * @param a_pVM The VM handle.
+- * @param a_pLock The write lock held by the caller.
+- * @param a_pvrc Where to return the status code of the
+- * callback. This is always set. LogRel is
+- * called on if a failure status is returned.
+- */
+-bool ExtPack::callVmPowerOnHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc)
+-{
+- *a_pvrc = VINF_SUCCESS;
+- if ( m != NULL
+- && m->fUsable)
+- {
+- if (m->pReg->pfnVMPowerOn)
+- {
+- ComPtr<ExtPack> ptrSelfRef = this;
+- a_pLock->release();
+- int vrc = m->pReg->pfnVMPowerOn(m->pReg, a_pConsole, a_pVM);
+- *a_pvrc = vrc;
+- a_pLock->acquire();
+- if (RT_FAILURE(vrc))
+- LogRel(("ExtPack pfnVMPowerOn returned %Rrc for %s\n", vrc, m->Desc.strName.c_str()));
+- return true;
+- }
+- }
+- return false;
+-}
+-
+-/**
+- * Calls the pfnVMPowerOff hook.
+- *
+- * @returns true if we left the lock, false if we didn't.
+- * @param a_pConsole The console interface.
+- * @param a_pVM The VM handle.
+- * @param a_pLock The write lock held by the caller.
+- */
+-bool ExtPack::callVmPowerOffHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock)
+-{
+- if ( m != NULL
+- && m->fUsable)
+- {
+- if (m->pReg->pfnVMPowerOff)
+- {
+- ComPtr<ExtPack> ptrSelfRef = this;
+- a_pLock->release();
+- m->pReg->pfnVMPowerOff(m->pReg, a_pConsole, a_pVM);
+- a_pLock->acquire();
+- return true;
+- }
+- }
+- return false;
+-}
+-
+-/**
+- * Check if the extension pack is usable and has an VRDE module.
+- *
+- * @returns S_OK or COM error status with error information.
+- *
+- * @remarks Caller holds the extension manager lock for reading, no locking
+- * necessary.
+- */
+-HRESULT ExtPack::checkVrde(void)
+-{
+- HRESULT hrc;
+- if ( m != NULL
+- && m->fUsable)
+- {
+- if (m->Desc.strVrdeModule.isNotEmpty())
+- hrc = S_OK;
+- else
+- hrc = setError(E_FAIL, tr("The extension pack '%s' does not include a VRDE module"), m->Desc.strName.c_str());
+- }
+- else
+- hrc = setError(E_FAIL, tr("%s"), m->strWhyUnusable.c_str());
+- return hrc;
+-}
+-
+-/**
+- * Same as checkVrde(), except that it also resolves the path to the module.
+- *
+- * @returns S_OK or COM error status with error information.
+- * @param a_pstrVrdeLibrary Where to return the path on success.
+- *
+- * @remarks Caller holds the extension manager lock for reading, no locking
+- * necessary.
+- */
+-HRESULT ExtPack::getVrdpLibraryName(Utf8Str *a_pstrVrdeLibrary)
+-{
+- HRESULT hrc = checkVrde();
+- if (SUCCEEDED(hrc))
+- {
+- if (findModule(m->Desc.strVrdeModule.c_str(), NULL, VBOXEXTPACKMODKIND_R3,
+- a_pstrVrdeLibrary, NULL /*a_pfNative*/, NULL /*a_pObjInfo*/))
+- hrc = S_OK;
+- else
+- hrc = setError(E_FAIL, tr("Failed to locate the VRDE module '%s' in extension pack '%s'"),
+- m->Desc.strVrdeModule.c_str(), m->Desc.strName.c_str());
+- }
+- return hrc;
+-}
+-
+-/**
+- * Check if this extension pack wishes to be the default VRDE provider.
+- *
+- * @returns @c true if it wants to and it is in a usable state, otherwise
+- * @c false.
+- *
+- * @remarks Caller holds the extension manager lock for reading, no locking
+- * necessary.
+- */
+-bool ExtPack::wantsToBeDefaultVrde(void) const
+-{
+- return m->fUsable
+- && m->Desc.strVrdeModule.isNotEmpty();
+-}
+-
+-/**
+- * Refreshes the extension pack state.
+- *
+- * This is called by the manager so that the on disk changes are picked up.
+- *
+- * @returns S_OK or COM error status with error information.
+- *
+- * @param a_pfCanDelete Optional can-delete-this-object output indicator.
+- *
+- * @remarks Caller holds the extension manager lock for writing.
+- * @remarks Only called in VBoxSVC.
+- */
+-HRESULT ExtPack::refresh(bool *a_pfCanDelete)
+-{
+- if (a_pfCanDelete)
+- *a_pfCanDelete = false;
+-
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); /* for the COMGETTERs */
+-
+- /*
+- * Has the module been deleted?
+- */
+- RTFSOBJINFO ObjInfoExtPack;
+- int vrc = RTPathQueryInfoEx(m->strExtPackPath.c_str(), &ObjInfoExtPack, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK);
+- if ( RT_FAILURE(vrc)
+- || !RTFS_IS_DIRECTORY(ObjInfoExtPack.Attr.fMode))
+- {
+- if (a_pfCanDelete)
+- *a_pfCanDelete = true;
+- return S_OK;
+- }
+-
+- /*
+- * We've got a directory, so try query file system object info for the
+- * files we are interested in as well.
+- */
+- RTFSOBJINFO ObjInfoDesc;
+- char szDescFilePath[RTPATH_MAX];
+- vrc = RTPathJoin(szDescFilePath, sizeof(szDescFilePath), m->strExtPackPath.c_str(), VBOX_EXTPACK_DESCRIPTION_NAME);
+- if (RT_SUCCESS(vrc))
+- vrc = RTPathQueryInfoEx(szDescFilePath, &ObjInfoDesc, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK);
+- if (RT_FAILURE(vrc))
+- RT_ZERO(ObjInfoDesc);
+-
+- RTFSOBJINFO ObjInfoMainMod;
+- if (m->strMainModPath.isNotEmpty())
+- vrc = RTPathQueryInfoEx(m->strMainModPath.c_str(), &ObjInfoMainMod, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK);
+- if (m->strMainModPath.isEmpty() || RT_FAILURE(vrc))
+- RT_ZERO(ObjInfoMainMod);
+-
+- /*
+- * If we have a usable module already, just verify that things haven't
+- * changed since we loaded it.
+- */
+- if (m->fUsable)
+- {
+- if (m->hMainMod == NIL_RTLDRMOD)
+- probeAndLoad();
+- else if ( !objinfoIsEqual(&ObjInfoDesc, &m->ObjInfoDesc)
+- || !objinfoIsEqual(&ObjInfoMainMod, &m->ObjInfoMainMod)
+- || !objinfoIsEqual(&ObjInfoExtPack, &m->ObjInfoExtPack) )
+- {
+- /** @todo not important, so it can wait. */
+- }
+- }
+- /*
+- * Ok, it is currently not usable. If anything has changed since last time
+- * reprobe the extension pack.
+- */
+- else if ( !objinfoIsEqual(&ObjInfoDesc, &m->ObjInfoDesc)
+- || !objinfoIsEqual(&ObjInfoMainMod, &m->ObjInfoMainMod)
+- || !objinfoIsEqual(&ObjInfoExtPack, &m->ObjInfoExtPack) )
+- probeAndLoad();
+-
+- return S_OK;
+-}
+-
+-/**
+- * Probes the extension pack, loading the main dll and calling its registration
+- * entry point.
+- *
+- * This updates the state accordingly, the strWhyUnusable and fUnusable members
+- * being the most important ones.
+- */
+-void ExtPack::probeAndLoad(void)
+-{
+- m->fUsable = false;
+- m->fMadeReadyCall = false;
+-
+- /*
+- * Query the file system info for the extension pack directory. This and
+- * all other file system info we save is for the benefit of refresh().
+- */
+- int vrc = RTPathQueryInfoEx(m->strExtPackPath.c_str(), &m->ObjInfoExtPack, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK);
+- if (RT_FAILURE(vrc))
+- {
+- m->strWhyUnusable.printf(tr("RTPathQueryInfoEx on '%s' failed: %Rrc"), m->strExtPackPath.c_str(), vrc);
+- return;
+- }
+- if (!RTFS_IS_DIRECTORY(m->ObjInfoExtPack.Attr.fMode))
+- {
+- if (RTFS_IS_SYMLINK(m->ObjInfoExtPack.Attr.fMode))
+- m->strWhyUnusable.printf(tr("'%s' is a symbolic link, this is not allowed"), m->strExtPackPath.c_str(), vrc);
+- else if (RTFS_IS_FILE(m->ObjInfoExtPack.Attr.fMode))
+- m->strWhyUnusable.printf(tr("'%s' is a symbolic file, not a directory"), m->strExtPackPath.c_str(), vrc);
+- else
+- m->strWhyUnusable.printf(tr("'%s' is not a directory (fMode=%#x)"), m->strExtPackPath.c_str(), m->ObjInfoExtPack.Attr.fMode);
+- return;
+- }
+-
+- RTERRINFOSTATIC ErrInfo;
+- RTErrInfoInitStatic(&ErrInfo);
+- vrc = SUPR3HardenedVerifyDir(m->strExtPackPath.c_str(), true /*fRecursive*/, true /*fCheckFiles*/, &ErrInfo.Core);
+- if (RT_FAILURE(vrc))
+- {
+- m->strWhyUnusable.printf(tr("%s (rc=%Rrc)"), ErrInfo.Core.pszMsg, vrc);
+- return;
+- }
+-
+- /*
+- * Read the description file.
+- */
+- RTCString strSavedName(m->Desc.strName);
+- RTCString *pStrLoadErr = VBoxExtPackLoadDesc(m->strExtPackPath.c_str(), &m->Desc, &m->ObjInfoDesc);
+- if (pStrLoadErr != NULL)
+- {
+- m->strWhyUnusable.printf(tr("Failed to load '%s/%s': %s"),
+- m->strExtPackPath.c_str(), VBOX_EXTPACK_DESCRIPTION_NAME, pStrLoadErr->c_str());
+- m->Desc.strName = strSavedName;
+- delete pStrLoadErr;
+- return;
+- }
+-
+- /*
+- * Make sure the XML name and directory matches.
+- */
+- if (!m->Desc.strName.equalsIgnoreCase(strSavedName))
+- {
+- m->strWhyUnusable.printf(tr("The description name ('%s') and directory name ('%s') does not match"),
+- m->Desc.strName.c_str(), strSavedName.c_str());
+- m->Desc.strName = strSavedName;
+- return;
+- }
+-
+- /*
+- * Load the main DLL and call the predefined entry point.
+- */
+- bool fIsNative;
+- if (!findModule(m->Desc.strMainModule.c_str(), NULL /* default extension */, VBOXEXTPACKMODKIND_R3,
+- &m->strMainModPath, &fIsNative, &m->ObjInfoMainMod))
+- {
+- m->strWhyUnusable.printf(tr("Failed to locate the main module ('%s')"), m->Desc.strMainModule.c_str());
+- return;
+- }
+-
+- vrc = SUPR3HardenedVerifyPlugIn(m->strMainModPath.c_str(), &ErrInfo.Core);
+- if (RT_FAILURE(vrc))
+- {
+- m->strWhyUnusable.printf(tr("%s"), ErrInfo.Core.pszMsg);
+- return;
+- }
+-
+- if (fIsNative)
+- {
+- vrc = SUPR3HardenedLdrLoadPlugIn(m->strMainModPath.c_str(), &m->hMainMod, &ErrInfo.Core);
+- if (RT_FAILURE(vrc))
+- {
+- m->hMainMod = NIL_RTLDRMOD;
+- m->strWhyUnusable.printf(tr("Failed to load the main module ('%s'): %Rrc - %s"),
+- m->strMainModPath.c_str(), vrc, ErrInfo.Core.pszMsg);
+- return;
+- }
+- }
+- else
+- {
+- m->strWhyUnusable.printf(tr("Only native main modules are currently supported"));
+- return;
+- }
+-
+- /*
+- * Resolve the predefined entry point.
+- */
+- PFNVBOXEXTPACKREGISTER pfnRegistration;
+- vrc = RTLdrGetSymbol(m->hMainMod, VBOX_EXTPACK_MAIN_MOD_ENTRY_POINT, (void **)&pfnRegistration);
+- if (RT_SUCCESS(vrc))
+- {
+- RTErrInfoClear(&ErrInfo.Core);
+- vrc = pfnRegistration(&m->Hlp, &m->pReg, &ErrInfo.Core);
+- if ( RT_SUCCESS(vrc)
+- && !RTErrInfoIsSet(&ErrInfo.Core)
+- && VALID_PTR(m->pReg))
+- {
+- if ( VBOXEXTPACK_IS_MAJOR_VER_EQUAL(m->pReg->u32Version, VBOXEXTPACKREG_VERSION)
+- && m->pReg->u32EndMarker == m->pReg->u32Version)
+- {
+- if ( (!m->pReg->pfnInstalled || RT_VALID_PTR(m->pReg->pfnInstalled))
+- && (!m->pReg->pfnUninstall || RT_VALID_PTR(m->pReg->pfnUninstall))
+- && (!m->pReg->pfnVirtualBoxReady || RT_VALID_PTR(m->pReg->pfnVirtualBoxReady))
+- && (!m->pReg->pfnConsoleReady || RT_VALID_PTR(m->pReg->pfnConsoleReady))
+- && (!m->pReg->pfnUnload || RT_VALID_PTR(m->pReg->pfnUnload))
+- && (!m->pReg->pfnVMCreated || RT_VALID_PTR(m->pReg->pfnVMCreated))
+- && (!m->pReg->pfnVMConfigureVMM || RT_VALID_PTR(m->pReg->pfnVMConfigureVMM))
+- && (!m->pReg->pfnVMPowerOn || RT_VALID_PTR(m->pReg->pfnVMPowerOn))
+- && (!m->pReg->pfnVMPowerOff || RT_VALID_PTR(m->pReg->pfnVMPowerOff))
+- && (!m->pReg->pfnQueryObject || RT_VALID_PTR(m->pReg->pfnQueryObject))
+- )
+- {
+- /*
+- * We're good!
+- */
+- m->fUsable = true;
+- m->strWhyUnusable.setNull();
+- return;
+- }
+-
+- m->strWhyUnusable = tr("The registration structure contains on or more invalid function pointers");
+- }
+- else
+- m->strWhyUnusable.printf(tr("Unsupported registration structure version %u.%u"),
+- RT_HIWORD(m->pReg->u32Version), RT_LOWORD(m->pReg->u32Version));
+- }
+- else
+- m->strWhyUnusable.printf(tr("%s returned %Rrc, pReg=%p ErrInfo='%s'"),
+- VBOX_EXTPACK_MAIN_MOD_ENTRY_POINT, vrc, m->pReg, ErrInfo.Core.pszMsg);
+- m->pReg = NULL;
+- }
+- else
+- m->strWhyUnusable.printf(tr("Failed to resolve exported symbol '%s' in the main module: %Rrc"),
+- VBOX_EXTPACK_MAIN_MOD_ENTRY_POINT, vrc);
+-
+- RTLdrClose(m->hMainMod);
+- m->hMainMod = NIL_RTLDRMOD;
+-}
+-
+-/**
+- * Finds a module.
+- *
+- * @returns true if found, false if not.
+- * @param a_pszName The module base name (no extension).
+- * @param a_pszExt The extension. If NULL we use default
+- * extensions.
+- * @param a_enmKind The kind of module to locate.
+- * @param a_pStrFound Where to return the path to the module we've
+- * found.
+- * @param a_pfNative Where to return whether this is a native module
+- * or an agnostic one. Optional.
+- * @param a_pObjInfo Where to return the file system object info for
+- * the module. Optional.
+- */
+-bool ExtPack::findModule(const char *a_pszName, const char *a_pszExt, VBOXEXTPACKMODKIND a_enmKind,
+- Utf8Str *a_pStrFound, bool *a_pfNative, PRTFSOBJINFO a_pObjInfo) const
+-{
+- /*
+- * Try the native path first.
+- */
+- char szPath[RTPATH_MAX];
+- int vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), RTBldCfgTargetDotArch());
+- AssertLogRelRCReturn(vrc, false);
+- vrc = RTPathAppend(szPath, sizeof(szPath), a_pszName);
+- AssertLogRelRCReturn(vrc, false);
+- if (!a_pszExt)
+- {
+- const char *pszDefExt;
+- switch (a_enmKind)
+- {
+- case VBOXEXTPACKMODKIND_RC: pszDefExt = ".rc"; break;
+- case VBOXEXTPACKMODKIND_R0: pszDefExt = ".r0"; break;
+- case VBOXEXTPACKMODKIND_R3: pszDefExt = RTLdrGetSuff(); break;
+- default:
+- AssertFailedReturn(false);
+- }
+- vrc = RTStrCat(szPath, sizeof(szPath), pszDefExt);
+- AssertLogRelRCReturn(vrc, false);
+- }
+-
+- RTFSOBJINFO ObjInfo;
+- if (!a_pObjInfo)
+- a_pObjInfo = &ObjInfo;
+- vrc = RTPathQueryInfo(szPath, a_pObjInfo, RTFSOBJATTRADD_UNIX);
+- if (RT_SUCCESS(vrc) && RTFS_IS_FILE(a_pObjInfo->Attr.fMode))
+- {
+- if (a_pfNative)
+- *a_pfNative = true;
+- *a_pStrFound = szPath;
+- return true;
+- }
+-
+- /*
+- * Try the platform agnostic modules.
+- */
+- /* gcc.x86/module.rel */
+- char szSubDir[32];
+- RTStrPrintf(szSubDir, sizeof(szSubDir), "%s.%s", RTBldCfgCompiler(), RTBldCfgTargetArch());
+- vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), szSubDir);
+- AssertLogRelRCReturn(vrc, false);
+- vrc = RTPathAppend(szPath, sizeof(szPath), a_pszName);
+- AssertLogRelRCReturn(vrc, false);
+- if (!a_pszExt)
+- {
+- vrc = RTStrCat(szPath, sizeof(szPath), ".rel");
+- AssertLogRelRCReturn(vrc, false);
+- }
+- vrc = RTPathQueryInfo(szPath, a_pObjInfo, RTFSOBJATTRADD_UNIX);
+- if (RT_SUCCESS(vrc) && RTFS_IS_FILE(a_pObjInfo->Attr.fMode))
+- {
+- if (a_pfNative)
+- *a_pfNative = false;
+- *a_pStrFound = szPath;
+- return true;
+- }
+-
+- /* x86/module.rel */
+- vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), RTBldCfgTargetArch());
+- AssertLogRelRCReturn(vrc, false);
+- vrc = RTPathAppend(szPath, sizeof(szPath), a_pszName);
+- AssertLogRelRCReturn(vrc, false);
+- if (!a_pszExt)
+- {
+- vrc = RTStrCat(szPath, sizeof(szPath), ".rel");
+- AssertLogRelRCReturn(vrc, false);
+- }
+- vrc = RTPathQueryInfo(szPath, a_pObjInfo, RTFSOBJATTRADD_UNIX);
+- if (RT_SUCCESS(vrc) && RTFS_IS_FILE(a_pObjInfo->Attr.fMode))
+- {
+- if (a_pfNative)
+- *a_pfNative = false;
+- *a_pStrFound = szPath;
+- return true;
+- }
+-
+- return false;
+-}
+-
+-/**
+- * Compares two file system object info structures.
+- *
+- * @returns true if equal, false if not.
+- * @param pObjInfo1 The first.
+- * @param pObjInfo2 The second.
+- * @todo IPRT should do this, really.
+- */
+-/* static */ bool ExtPack::objinfoIsEqual(PCRTFSOBJINFO pObjInfo1, PCRTFSOBJINFO pObjInfo2)
+-{
+- if (!RTTimeSpecIsEqual(&pObjInfo1->ModificationTime, &pObjInfo2->ModificationTime))
+- return false;
+- if (!RTTimeSpecIsEqual(&pObjInfo1->ChangeTime, &pObjInfo2->ChangeTime))
+- return false;
+- if (!RTTimeSpecIsEqual(&pObjInfo1->BirthTime, &pObjInfo2->BirthTime))
+- return false;
+- if (pObjInfo1->cbObject != pObjInfo2->cbObject)
+- return false;
+- if (pObjInfo1->Attr.fMode != pObjInfo2->Attr.fMode)
+- return false;
+- if (pObjInfo1->Attr.enmAdditional == pObjInfo2->Attr.enmAdditional)
+- {
+- switch (pObjInfo1->Attr.enmAdditional)
+- {
+- case RTFSOBJATTRADD_UNIX:
+- if (pObjInfo1->Attr.u.Unix.uid != pObjInfo2->Attr.u.Unix.uid)
+- return false;
+- if (pObjInfo1->Attr.u.Unix.gid != pObjInfo2->Attr.u.Unix.gid)
+- return false;
+- if (pObjInfo1->Attr.u.Unix.INodeIdDevice != pObjInfo2->Attr.u.Unix.INodeIdDevice)
+- return false;
+- if (pObjInfo1->Attr.u.Unix.INodeId != pObjInfo2->Attr.u.Unix.INodeId)
+- return false;
+- if (pObjInfo1->Attr.u.Unix.GenerationId != pObjInfo2->Attr.u.Unix.GenerationId)
+- return false;
+- break;
+- default:
+- break;
+- }
+- }
+- return true;
+-}
+-
+-
+-/**
+- * @interface_method_impl{VBOXEXTPACKHLP,pfnFindModule}
+- */
+-/*static*/ DECLCALLBACK(int)
+-ExtPack::hlpFindModule(PCVBOXEXTPACKHLP pHlp, const char *pszName, const char *pszExt, VBOXEXTPACKMODKIND enmKind,
+- char *pszFound, size_t cbFound, bool *pfNative)
+-{
+- /*
+- * Validate the input and get our bearings.
+- */
+- AssertPtrReturn(pszName, VERR_INVALID_POINTER);
+- AssertPtrNullReturn(pszExt, VERR_INVALID_POINTER);
+- AssertPtrReturn(pszFound, VERR_INVALID_POINTER);
+- AssertPtrNullReturn(pfNative, VERR_INVALID_POINTER);
+- AssertReturn(enmKind > VBOXEXTPACKMODKIND_INVALID && enmKind < VBOXEXTPACKMODKIND_END, VERR_INVALID_PARAMETER);
+-
+- AssertPtrReturn(pHlp, VERR_INVALID_POINTER);
+- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VERR_INVALID_POINTER);
+- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp);
+- AssertPtrReturn(m, VERR_INVALID_POINTER);
+- ExtPack *pThis = m->pThis;
+- AssertPtrReturn(pThis, VERR_INVALID_POINTER);
+-
+- /*
+- * This is just a wrapper around findModule.
+- */
+- Utf8Str strFound;
+- if (pThis->findModule(pszName, pszExt, enmKind, &strFound, pfNative, NULL))
+- return RTStrCopy(pszFound, cbFound, strFound.c_str());
+- return VERR_FILE_NOT_FOUND;
+-}
+-
+-/*static*/ DECLCALLBACK(int)
+-ExtPack::hlpGetFilePath(PCVBOXEXTPACKHLP pHlp, const char *pszFilename, char *pszPath, size_t cbPath)
+-{
+- /*
+- * Validate the input and get our bearings.
+- */
+- AssertPtrReturn(pszFilename, VERR_INVALID_POINTER);
+- AssertPtrReturn(pszPath, VERR_INVALID_POINTER);
+- AssertReturn(cbPath > 0, VERR_BUFFER_OVERFLOW);
+-
+- AssertPtrReturn(pHlp, VERR_INVALID_POINTER);
+- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VERR_INVALID_POINTER);
+- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp);
+- AssertPtrReturn(m, VERR_INVALID_POINTER);
+- ExtPack *pThis = m->pThis;
+- AssertPtrReturn(pThis, VERR_INVALID_POINTER);
+-
+- /*
+- * This is a simple RTPathJoin, no checking if things exists or anything.
+- */
+- int vrc = RTPathJoin(pszPath, cbPath, pThis->m->strExtPackPath.c_str(), pszFilename);
+- if (RT_FAILURE(vrc))
+- RT_BZERO(pszPath, cbPath);
+- return vrc;
+-}
+-
+-/*static*/ DECLCALLBACK(VBOXEXTPACKCTX)
+-ExtPack::hlpGetContext(PCVBOXEXTPACKHLP pHlp)
+-{
+- /*
+- * Validate the input and get our bearings.
+- */
+- AssertPtrReturn(pHlp, VBOXEXTPACKCTX_INVALID);
+- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VBOXEXTPACKCTX_INVALID);
+- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp);
+- AssertPtrReturn(m, VBOXEXTPACKCTX_INVALID);
+- ExtPack *pThis = m->pThis;
+- AssertPtrReturn(pThis, VBOXEXTPACKCTX_INVALID);
+-
+- return pThis->m->enmContext;
+-}
+-
+-/*static*/ DECLCALLBACK(int)
+-ExtPack::hlpReservedN(PCVBOXEXTPACKHLP pHlp)
+-{
+- /*
+- * Validate the input and get our bearings.
+- */
+- AssertPtrReturn(pHlp, VERR_INVALID_POINTER);
+- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VERR_INVALID_POINTER);
+- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp);
+- AssertPtrReturn(m, VERR_INVALID_POINTER);
+- ExtPack *pThis = m->pThis;
+- AssertPtrReturn(pThis, VERR_INVALID_POINTER);
+-
+- return VERR_NOT_IMPLEMENTED;
+-}
+-
+-
+-
+-
+-
+-STDMETHODIMP ExtPack::COMGETTER(Name)(BSTR *a_pbstrName)
+-{
+- CheckComArgOutPointerValid(a_pbstrName);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- Bstr str(m->Desc.strName);
+- str.cloneTo(a_pbstrName);
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(Description)(BSTR *a_pbstrDescription)
+-{
+- CheckComArgOutPointerValid(a_pbstrDescription);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- Bstr str(m->Desc.strDescription);
+- str.cloneTo(a_pbstrDescription);
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(Version)(BSTR *a_pbstrVersion)
+-{
+- CheckComArgOutPointerValid(a_pbstrVersion);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- /* HACK ALERT: This is for easing backporting to 4.1. The edition stuff
+- will be changed into a separate */
+- if (m->Desc.strEdition.isEmpty())
+- {
+- Bstr str(m->Desc.strVersion);
+- str.cloneTo(a_pbstrVersion);
+- }
+- else
+- {
+- RTCString strHack(m->Desc.strVersion);
+- strHack.append('-');
+- strHack.append(m->Desc.strEdition);
+-
+- Bstr str(strHack);
+- str.cloneTo(a_pbstrVersion);
+- }
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(Revision)(ULONG *a_puRevision)
+-{
+- CheckComArgOutPointerValid(a_puRevision);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- *a_puRevision = m->Desc.uRevision;
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(VRDEModule)(BSTR *a_pbstrVrdeModule)
+-{
+- CheckComArgOutPointerValid(a_pbstrVrdeModule);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- Bstr str(m->Desc.strVrdeModule);
+- str.cloneTo(a_pbstrVrdeModule);
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(PlugIns)(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns))
+-{
+- /** @todo implement plug-ins. */
+-#ifdef VBOX_WITH_XPCOM
+- NOREF(a_paPlugIns);
+- NOREF(a_paPlugInsSize);
+-#endif
+- ReturnComNotImplemented();
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(Usable)(BOOL *a_pfUsable)
+-{
+- CheckComArgOutPointerValid(a_pfUsable);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- *a_pfUsable = m->fUsable;
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(WhyUnusable)(BSTR *a_pbstrWhy)
+-{
+- CheckComArgOutPointerValid(a_pbstrWhy);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- m->strWhyUnusable.cloneTo(a_pbstrWhy);
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(ShowLicense)(BOOL *a_pfShowIt)
+-{
+- CheckComArgOutPointerValid(a_pfShowIt);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- *a_pfShowIt = m->Desc.fShowLicense;
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(License)(BSTR *a_pbstrHtmlLicense)
+-{
+- Bstr bstrHtml("html");
+- return QueryLicense(Bstr::Empty.raw(), Bstr::Empty.raw(), bstrHtml.raw(), a_pbstrHtmlLicense);
+-}
+-
+-STDMETHODIMP ExtPack::QueryLicense(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage, IN_BSTR a_bstrFormat,
+- BSTR *a_pbstrLicense)
+-{
+- /*
+- * Validate input.
+- */
+- CheckComArgOutPointerValid(a_pbstrLicense);
+- CheckComArgNotNull(a_bstrPreferredLocale);
+- CheckComArgNotNull(a_bstrPreferredLanguage);
+- CheckComArgNotNull(a_bstrFormat);
+-
+- Utf8Str strPreferredLocale(a_bstrPreferredLocale);
+- if (strPreferredLocale.length() != 2 && strPreferredLocale.length() != 0)
+- return setError(E_FAIL, tr("The preferred locale is a two character string or empty."));
+-
+- Utf8Str strPreferredLanguage(a_bstrPreferredLanguage);
+- if (strPreferredLanguage.length() != 2 && strPreferredLanguage.length() != 0)
+- return setError(E_FAIL, tr("The preferred lanuage is a two character string or empty."));
+-
+- Utf8Str strFormat(a_bstrFormat);
+- if ( !strFormat.equals("html")
+- && !strFormat.equals("rtf")
+- && !strFormat.equals("txt"))
+- return setError(E_FAIL, tr("The license format can only have the values 'html', 'rtf' and 'txt'."));
+-
+- /*
+- * Combine the options to form a file name before locking down anything.
+- */
+- char szName[sizeof(VBOX_EXTPACK_LICENSE_NAME_PREFIX "-de_DE.html") + 2];
+- if (strPreferredLocale.isNotEmpty() && strPreferredLanguage.isNotEmpty())
+- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s_%s.%s",
+- strPreferredLocale.c_str(), strPreferredLanguage.c_str(), strFormat.c_str());
+- else if (strPreferredLocale.isNotEmpty())
+- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s.%s", strPreferredLocale.c_str(), strFormat.c_str());
+- else if (strPreferredLanguage.isNotEmpty())
+- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-_%s.%s", strPreferredLocale.c_str(), strFormat.c_str());
+- else
+- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX ".%s", strFormat.c_str());
+-
+- /*
+- * Effectuate the query.
+- */
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); /* paranoia */
+-
+- if (!m->fUsable)
+- hrc = setError(E_FAIL, tr("%s"), m->strWhyUnusable.c_str());
+- else
+- {
+- char szPath[RTPATH_MAX];
+- int vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), szName);
+- if (RT_SUCCESS(vrc))
+- {
+- void *pvFile;
+- size_t cbFile;
+- vrc = RTFileReadAllEx(szPath, 0, RTFOFF_MAX, RTFILE_RDALL_O_DENY_READ, &pvFile, &cbFile);
+- if (RT_SUCCESS(vrc))
+- {
+- Bstr bstrLicense((const char *)pvFile, cbFile);
+- if (bstrLicense.isNotEmpty())
+- {
+- bstrLicense.detachTo(a_pbstrLicense);
+- hrc = S_OK;
+- }
+- else
+- hrc = setError(VBOX_E_IPRT_ERROR, tr("The license file '%s' is empty or contains invalid UTF-8 encoding"),
+- szPath);
+- RTFileReadAllFree(pvFile, cbFile);
+- }
+- else if (vrc == VERR_FILE_NOT_FOUND || vrc == VERR_PATH_NOT_FOUND)
+- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("The license file '%s' was not found in extension pack '%s'"),
+- szName, m->Desc.strName.c_str());
+- else
+- hrc = setError(VBOX_E_FILE_ERROR, tr("Failed to open the license file '%s': %Rrc"), szPath, vrc);
+- }
+- else
+- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTPathJoin failed: %Rrc"), vrc);
+- }
+- }
+- return hrc;
+-}
+-
+-
+-STDMETHODIMP ExtPack::QueryObject(IN_BSTR a_bstrObjectId, IUnknown **a_ppUnknown)
+-{
+- com::Guid ObjectId;
+- CheckComArgGuid(a_bstrObjectId, ObjectId);
+- CheckComArgOutPointerValid(a_ppUnknown);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- if ( m->pReg
+- && m->pReg->pfnQueryObject)
+- {
+- void *pvUnknown = m->pReg->pfnQueryObject(m->pReg, ObjectId.raw());
+- if (pvUnknown)
+- *a_ppUnknown = (IUnknown *)pvUnknown;
+- else
+- hrc = E_NOINTERFACE;
+- }
+- else
+- hrc = E_NOINTERFACE;
+- }
+- return hrc;
+-}
+-
+-
+-
+-
+-DEFINE_EMPTY_CTOR_DTOR(ExtPackManager)
+-
+-/**
+- * Called by ComObjPtr::createObject when creating the object.
+- *
+- * Just initialize the basic object state, do the rest in init().
+- *
+- * @returns S_OK.
+- */
+-HRESULT ExtPackManager::FinalConstruct()
+-{
+- m = NULL;
+- return S_OK;
+-}
+-
+-/**
+- * Initializes the extension pack manager.
+- *
+- * @returns COM status code.
+- * @param a_pVirtualBox Pointer to the VirtualBox object.
+- * @param a_enmContext The context we're in.
+- */
+-HRESULT ExtPackManager::initExtPackManager(VirtualBox *a_pVirtualBox, VBOXEXTPACKCTX a_enmContext)
+-{
+- AutoInitSpan autoInitSpan(this);
+- AssertReturn(autoInitSpan.isOk(), E_FAIL);
+-
+- /*
+- * Figure some stuff out before creating the instance data.
+- */
+- char szBaseDir[RTPATH_MAX];
+- int rc = RTPathAppPrivateArchTop(szBaseDir, sizeof(szBaseDir));
+- AssertLogRelRCReturn(rc, E_FAIL);
+- rc = RTPathAppend(szBaseDir, sizeof(szBaseDir), VBOX_EXTPACK_INSTALL_DIR);
+- AssertLogRelRCReturn(rc, E_FAIL);
+-
+- char szCertificatDir[RTPATH_MAX];
+- rc = RTPathAppPrivateNoArch(szCertificatDir, sizeof(szCertificatDir));
+- AssertLogRelRCReturn(rc, E_FAIL);
+- rc = RTPathAppend(szCertificatDir, sizeof(szCertificatDir), VBOX_EXTPACK_CERT_DIR);
+- AssertLogRelRCReturn(rc, E_FAIL);
+-
+- /*
+- * Allocate and initialize the instance data.
+- */
+- m = new Data;
+- m->strBaseDir = szBaseDir;
+- m->strCertificatDirPath = szCertificatDir;
+- m->pVirtualBox = a_pVirtualBox;
+- m->enmContext = a_enmContext;
+-
+- /*
+- * Slurp in VBoxVMM which is used by VBoxPuelMain.
+- */
+-#if !defined(RT_OS_WINDOWS) && !defined(RT_OS_DARWIN)
+- if (a_enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON)
+- {
+- int vrc = SUPR3HardenedLdrLoadAppPriv("VBoxVMM", &m->hVBoxVMM, RTLDRLOAD_FLAGS_GLOBAL, NULL);
+- if (RT_FAILURE(vrc))
+- m->hVBoxVMM = NIL_RTLDRMOD;
+- /* cleanup in ::uninit()? */
+- }
+-#endif
+-
+- /*
+- * Go looking for extensions. The RTDirOpen may fail if nothing has been
+- * installed yet, or if root is paranoid and has revoked our access to them.
+- *
+- * We ASSUME that there are no files, directories or stuff in the directory
+- * that exceed the max name length in RTDIRENTRYEX.
+- */
+- HRESULT hrc = S_OK;
+- PRTDIR pDir;
+- int vrc = RTDirOpen(&pDir, szBaseDir);
+- if (RT_SUCCESS(vrc))
+- {
+- for (;;)
+- {
+- RTDIRENTRYEX Entry;
+- vrc = RTDirReadEx(pDir, &Entry, NULL /*pcbDirEntry*/, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
+- if (RT_FAILURE(vrc))
+- {
+- AssertLogRelMsg(vrc == VERR_NO_MORE_FILES, ("%Rrc\n", vrc));
+- break;
+- }
+- if ( RTFS_IS_DIRECTORY(Entry.Info.Attr.fMode)
+- && strcmp(Entry.szName, ".") != 0
+- && strcmp(Entry.szName, "..") != 0
+- && VBoxExtPackIsValidMangledName(Entry.szName) )
+- {
+- /*
+- * All directories are extensions, the shall be nothing but
+- * extensions in this subdirectory.
+- */
+- char szExtPackDir[RTPATH_MAX];
+- vrc = RTPathJoin(szExtPackDir, sizeof(szExtPackDir), m->strBaseDir.c_str(), Entry.szName);
+- AssertLogRelRC(vrc);
+- if (RT_SUCCESS(vrc))
+- {
+- RTCString *pstrName = VBoxExtPackUnmangleName(Entry.szName, RTSTR_MAX);
+- AssertLogRel(pstrName);
+- if (pstrName)
+- {
+- ComObjPtr<ExtPack> NewExtPack;
+- HRESULT hrc2 = NewExtPack.createObject();
+- if (SUCCEEDED(hrc2))
+- hrc2 = NewExtPack->initWithDir(a_enmContext, pstrName->c_str(), szExtPackDir);
+- delete pstrName;
+- if (SUCCEEDED(hrc2))
+- m->llInstalledExtPacks.push_back(NewExtPack);
+- else if (SUCCEEDED(rc))
+- hrc = hrc2;
+- }
+- else
+- hrc = E_UNEXPECTED;
+- }
+- else
+- hrc = E_UNEXPECTED;
+- }
+- }
+- RTDirClose(pDir);
+- }
+- /* else: ignore, the directory probably does not exist or something. */
+-
+- if (SUCCEEDED(hrc))
+- autoInitSpan.setSucceeded();
+- return hrc;
+-}
+-
+-/**
+- * COM cruft.
+- */
+-void ExtPackManager::FinalRelease()
+-{
+- uninit();
+-}
+-
+-/**
+- * Do the actual cleanup.
+- */
+-void ExtPackManager::uninit()
+-{
+- /* Enclose the state transition Ready->InUninit->NotReady */
+- AutoUninitSpan autoUninitSpan(this);
+- if (!autoUninitSpan.uninitDone() && m != NULL)
+- {
+- delete m;
+- m = NULL;
+- }
+-}
+-
+-
+-STDMETHODIMP ExtPackManager::COMGETTER(InstalledExtPacks)(ComSafeArrayOut(IExtPack *, a_paExtPacks))
+-{
+- CheckComArgOutSafeArrayPointerValid(a_paExtPacks);
+- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- SafeIfaceArray<IExtPack> SaExtPacks(m->llInstalledExtPacks);
+- SaExtPacks.detachTo(ComSafeArrayOutArg(a_paExtPacks));
+- }
+-
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackManager::Find(IN_BSTR a_bstrName, IExtPack **a_pExtPack)
+-{
+- CheckComArgNotNull(a_bstrName);
+- CheckComArgOutPointerValid(a_pExtPack);
+- Utf8Str strName(a_bstrName);
+- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- ComPtr<ExtPack> ptrExtPack = findExtPack(strName.c_str());
+- if (!ptrExtPack.isNull())
+- ptrExtPack.queryInterfaceTo(a_pExtPack);
+- else
+- hrc = VBOX_E_OBJECT_NOT_FOUND;
+- }
+-
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackManager::OpenExtPackFile(IN_BSTR a_bstrTarballAndDigest, IExtPackFile **a_ppExtPackFile)
+-{
+- CheckComArgNotNull(a_bstrTarballAndDigest);
+- CheckComArgOutPointerValid(a_ppExtPackFile);
+- AssertReturn(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON, E_UNEXPECTED);
+-
+- /* The API can optionally take a ::SHA-256=<hex-digest> attribute at the
+- end of the file name. This is just a temporary measure for
+- backporting, in 4.2 we'll add another parameter to the method. */
+- Utf8Str strTarball;
+- Utf8Str strDigest;
+- Utf8Str strTarballAndDigest(a_bstrTarballAndDigest);
+- size_t offSha256 = strTarballAndDigest.find("::SHA-256=");
+- if (offSha256 == Utf8Str::npos)
+- strTarball = strTarballAndDigest;
+- else
+- {
+- strTarball = strTarballAndDigest.substr(0, offSha256);
+- strDigest = strTarballAndDigest.substr(offSha256 + sizeof("::SHA-256=") - 1);
+- }
+-
+- ComObjPtr<ExtPackFile> NewExtPackFile;
+- HRESULT hrc = NewExtPackFile.createObject();
+- if (SUCCEEDED(hrc))
+- hrc = NewExtPackFile->initWithFile(strTarball.c_str(), strDigest.c_str(), this, m->pVirtualBox);
+- if (SUCCEEDED(hrc))
+- NewExtPackFile.queryInterfaceTo(a_ppExtPackFile);
+-
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackManager::Uninstall(IN_BSTR a_bstrName, BOOL a_fForcedRemoval, IN_BSTR a_bstrDisplayInfo,
+- IProgress **a_ppProgress)
+-{
+- CheckComArgNotNull(a_bstrName);
+- if (a_ppProgress)
+- *a_ppProgress = NULL;
+- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- PEXTPACKUNINSTALLJOB pJob = NULL;
+- try
+- {
+- pJob = new EXTPACKUNINSTALLJOB;
+- pJob->ptrExtPackMgr = this;
+- pJob->strName = a_bstrName;
+- pJob->fForcedRemoval = a_fForcedRemoval != FALSE;
+- pJob->strDisplayInfo = a_bstrDisplayInfo;
+- hrc = pJob->ptrProgress.createObject();
+- if (SUCCEEDED(hrc))
+- {
+- Bstr bstrDescription = tr("Uninstalling extension pack");
+- hrc = pJob->ptrProgress->init(
+-#ifndef VBOX_COM_INPROC
+- m->pVirtualBox,
+-#endif
+- static_cast<IExtPackManager *>(this),
+- bstrDescription.raw(),
+- FALSE /*aCancelable*/,
+- NULL /*aId*/);
+- }
+- if (SUCCEEDED(hrc))
+- {
+- ComPtr<Progress> ptrProgress = pJob->ptrProgress;
+- int vrc = RTThreadCreate(NULL /*phThread*/, ExtPackManager::doUninstallThreadProc, pJob, 0,
+- RTTHREADTYPE_DEFAULT, 0 /*fFlags*/, "ExtPackUninst");
+- if (RT_SUCCESS(vrc))
+- {
+- pJob = NULL; /* the thread deletes it */
+- ptrProgress.queryInterfaceTo(a_ppProgress);
+- }
+- else
+- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTThreadCreate failed with %Rrc"), vrc);
+- }
+- }
+- catch (std::bad_alloc)
+- {
+- hrc = E_OUTOFMEMORY;
+- }
+- if (pJob)
+- delete pJob;
+- }
+-
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackManager::Cleanup(void)
+-{
+- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- /*
+- * Run the set-uid-to-root binary that performs the cleanup.
+- *
+- * Take the write lock to prevent conflicts with other calls to this
+- * VBoxSVC instance.
+- */
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+- hrc = runSetUidToRootHelper(NULL,
+- "cleanup",
+- "--base-dir", m->strBaseDir.c_str(),
+- (const char *)NULL);
+- }
+-
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackManager::QueryAllPlugInsForFrontend(IN_BSTR a_bstrFrontend, ComSafeArrayOut(BSTR, a_pabstrPlugInModules))
+-{
+- CheckComArgNotNull(a_bstrFrontend);
+- Utf8Str strName(a_bstrFrontend);
+- CheckComArgOutSafeArrayPointerValid(a_pabstrPlugInModules);
+- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- com::SafeArray<BSTR> saPaths((size_t)0);
+- /** @todo implement plug-ins */
+- saPaths.detachTo(ComSafeArrayOutArg(a_pabstrPlugInModules));
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackManager::IsExtPackUsable(IN_BSTR a_bstrExtPack, BOOL *aUsable)
+-{
+- CheckComArgNotNull(a_bstrExtPack);
+- Utf8Str strExtPack(a_bstrExtPack);
+- *aUsable = isExtPackUsable(strExtPack.c_str());
+- return S_OK;
+-}
+-
+-/**
+- * Finds the success indicator string in the stderr output ofr hte helper app.
+- *
+- * @returns Pointer to the indicator.
+- * @param psz The stderr output string. Can be NULL.
+- * @param cch The size of the string.
+- */
+-static char *findSuccessIndicator(char *psz, size_t cch)
+-{
+- static const char s_szSuccessInd[] = "rcExit=RTEXITCODE_SUCCESS";
+- Assert(!cch || strlen(psz) == cch);
+- if (cch < sizeof(s_szSuccessInd) - 1)
+- return NULL;
+- char *pszInd = &psz[cch - sizeof(s_szSuccessInd) + 1];
+- if (strcmp(s_szSuccessInd, pszInd))
+- return NULL;
+- return pszInd;
+-}
+-
+-/**
+- * Runs the helper application that does the privileged operations.
+- *
+- * @returns S_OK or a failure status with error information set.
+- * @param a_pstrDisplayInfo Platform specific display info hacks.
+- * @param a_pszCommand The command to execute.
+- * @param ... The argument strings that goes along with the
+- * command. Maximum is about 16. Terminated by a
+- * NULL.
+- */
+-HRESULT ExtPackManager::runSetUidToRootHelper(Utf8Str const *a_pstrDisplayInfo, const char *a_pszCommand, ...)
+-{
+- /*
+- * Calculate the path to the helper application.
+- */
+- char szExecName[RTPATH_MAX];
+- int vrc = RTPathAppPrivateArch(szExecName, sizeof(szExecName));
+- AssertLogRelRCReturn(vrc, E_UNEXPECTED);
+-
+- vrc = RTPathAppend(szExecName, sizeof(szExecName), VBOX_EXTPACK_HELPER_NAME);
+- AssertLogRelRCReturn(vrc, E_UNEXPECTED);
+-
+- /*
+- * Convert the variable argument list to a RTProcCreate argument vector.
+- */
+- const char *apszArgs[20];
+- unsigned cArgs = 0;
+-
+- LogRel(("ExtPack: Executing '%s'", szExecName));
+- apszArgs[cArgs++] = &szExecName[0];
+-
+- if ( a_pstrDisplayInfo
+- && a_pstrDisplayInfo->isNotEmpty())
+- {
+- LogRel((" '--display-info-hack' '%s'", a_pstrDisplayInfo->c_str()));
+- apszArgs[cArgs++] = "--display-info-hack";
+- apszArgs[cArgs++] = a_pstrDisplayInfo->c_str();
+- }
+-
+- LogRel(("'%s'", a_pszCommand));
+- apszArgs[cArgs++] = a_pszCommand;
+-
+- va_list va;
+- va_start(va, a_pszCommand);
+- const char *pszLastArg;
+- for (;;)
+- {
+- AssertReturn(cArgs < RT_ELEMENTS(apszArgs) - 1, E_UNEXPECTED);
+- pszLastArg = va_arg(va, const char *);
+- if (!pszLastArg)
+- break;
+- LogRel((" '%s'", pszLastArg));
+- apszArgs[cArgs++] = pszLastArg;
+- };
+- va_end(va);
+-
+- LogRel(("\n"));
+- apszArgs[cArgs] = NULL;
+-
+- /*
+- * Create a PIPE which we attach to stderr so that we can read the error
+- * message on failure and report it back to the caller.
+- */
+- RTPIPE hPipeR;
+- RTHANDLE hStdErrPipe;
+- hStdErrPipe.enmType = RTHANDLETYPE_PIPE;
+- vrc = RTPipeCreate(&hPipeR, &hStdErrPipe.u.hPipe, RTPIPE_C_INHERIT_WRITE);
+- AssertLogRelRCReturn(vrc, E_UNEXPECTED);
+-
+- /*
+- * Spawn the process.
+- */
+- HRESULT hrc;
+- RTPROCESS hProcess;
+- vrc = RTProcCreateEx(szExecName,
+- apszArgs,
+- RTENV_DEFAULT,
+- 0 /*fFlags*/,
+- NULL /*phStdIn*/,
+- NULL /*phStdOut*/,
+- &hStdErrPipe,
+- NULL /*pszAsUser*/,
+- NULL /*pszPassword*/,
+- &hProcess);
+- if (RT_SUCCESS(vrc))
+- {
+- vrc = RTPipeClose(hStdErrPipe.u.hPipe);
+- hStdErrPipe.u.hPipe = NIL_RTPIPE;
+-
+- /*
+- * Read the pipe output until the process completes.
+- */
+- RTPROCSTATUS ProcStatus = { -42, RTPROCEXITREASON_ABEND };
+- size_t cbStdErrBuf = 0;
+- size_t offStdErrBuf = 0;
+- char *pszStdErrBuf = NULL;
+- do
+- {
+- /*
+- * Service the pipe. Block waiting for output or the pipe breaking
+- * when the process terminates.
+- */
+- if (hPipeR != NIL_RTPIPE)
+- {
+- char achBuf[1024];
+- size_t cbRead;
+- vrc = RTPipeReadBlocking(hPipeR, achBuf, sizeof(achBuf), &cbRead);
+- if (RT_SUCCESS(vrc))
+- {
+- /* grow the buffer? */
+- size_t cbBufReq = offStdErrBuf + cbRead + 1;
+- if ( cbBufReq > cbStdErrBuf
+- && cbBufReq < _256K)
+- {
+- size_t cbNew = RT_ALIGN_Z(cbBufReq, 16); // 1024
+- void *pvNew = RTMemRealloc(pszStdErrBuf, cbNew);
+- if (pvNew)
+- {
+- pszStdErrBuf = (char *)pvNew;
+- cbStdErrBuf = cbNew;
+- }
+- }
+-
+- /* append if we've got room. */
+- if (cbBufReq <= cbStdErrBuf)
+- {
+- memcpy(&pszStdErrBuf[offStdErrBuf], achBuf, cbRead);
+- offStdErrBuf = offStdErrBuf + cbRead;
+- pszStdErrBuf[offStdErrBuf] = '\0';
+- }
+- }
+- else
+- {
+- AssertLogRelMsg(vrc == VERR_BROKEN_PIPE, ("%Rrc\n", vrc));
+- RTPipeClose(hPipeR);
+- hPipeR = NIL_RTPIPE;
+- }
+- }
+-
+- /*
+- * Service the process. Block if we have no pipe.
+- */
+- if (hProcess != NIL_RTPROCESS)
+- {
+- vrc = RTProcWait(hProcess,
+- hPipeR == NIL_RTPIPE ? RTPROCWAIT_FLAGS_BLOCK : RTPROCWAIT_FLAGS_NOBLOCK,
+- &ProcStatus);
+- if (RT_SUCCESS(vrc))
+- hProcess = NIL_RTPROCESS;
+- else
+- AssertLogRelMsgStmt(vrc == VERR_PROCESS_RUNNING, ("%Rrc\n", vrc), hProcess = NIL_RTPROCESS);
+- }
+- } while ( hPipeR != NIL_RTPIPE
+- || hProcess != NIL_RTPROCESS);
+-
+- LogRel(("ExtPack: enmReason=%d iStatus=%d stderr='%s'\n",
+- ProcStatus.enmReason, ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : ""));
+-
+- /*
+- * Look for rcExit=RTEXITCODE_SUCCESS at the end of the error output,
+- * cut it as it is only there to attest the success.
+- */
+- if (offStdErrBuf > 0)
+- {
+- RTStrStripR(pszStdErrBuf);
+- offStdErrBuf = strlen(pszStdErrBuf);
+- }
+-
+- char *pszSuccessInd = findSuccessIndicator(pszStdErrBuf, offStdErrBuf);
+- if (pszSuccessInd)
+- {
+- *pszSuccessInd = '\0';
+- offStdErrBuf = pszSuccessInd - pszStdErrBuf;
+- }
+- else if ( ProcStatus.enmReason == RTPROCEXITREASON_NORMAL
+- && ProcStatus.iStatus == 0)
+- ProcStatus.iStatus = offStdErrBuf ? 667 : 666;
+-
+- /*
+- * Compose the status code and, on failure, error message.
+- */
+- if ( ProcStatus.enmReason == RTPROCEXITREASON_NORMAL
+- && ProcStatus.iStatus == 0)
+- hrc = S_OK;
+- else if (ProcStatus.enmReason == RTPROCEXITREASON_NORMAL)
+- {
+- AssertMsg(ProcStatus.iStatus != 0, ("%s\n", pszStdErrBuf));
+- hrc = setError(E_FAIL, tr("The installer failed with exit code %d: %s"),
+- ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : "");
+- }
+- else if (ProcStatus.enmReason == RTPROCEXITREASON_SIGNAL)
+- hrc = setError(E_UNEXPECTED, tr("The installer was killed by signal #d (stderr: %s)"),
+- ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : "");
+- else if (ProcStatus.enmReason == RTPROCEXITREASON_ABEND)
+- hrc = setError(E_UNEXPECTED, tr("The installer aborted abnormally (stderr: %s)"),
+- offStdErrBuf ? pszStdErrBuf : "");
+- else
+- hrc = setError(E_UNEXPECTED, tr("internal error: enmReason=%d iStatus=%d stderr='%s'"),
+- ProcStatus.enmReason, ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : "");
+-
+- RTMemFree(pszStdErrBuf);
+- }
+- else
+- hrc = setError(VBOX_E_IPRT_ERROR, tr("Failed to launch the helper application '%s' (%Rrc)"), szExecName, vrc);
+-
+- RTPipeClose(hPipeR);
+- RTPipeClose(hStdErrPipe.u.hPipe);
+-
+- return hrc;
+-}
+-
+-/**
+- * Finds an installed extension pack.
+- *
+- * @returns Pointer to the extension pack if found, NULL if not. (No reference
+- * counting problem here since the caller must be holding the lock.)
+- * @param a_pszName The name of the extension pack.
+- */
+-ExtPack *ExtPackManager::findExtPack(const char *a_pszName)
+-{
+- size_t cchName = strlen(a_pszName);
+-
+- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin();
+- it != m->llInstalledExtPacks.end();
+- it++)
+- {
+- ExtPack::Data *pExtPackData = (*it)->m;
+- if ( pExtPackData
+- && pExtPackData->Desc.strName.length() == cchName
+- && pExtPackData->Desc.strName.equalsIgnoreCase(a_pszName))
+- return (*it);
+- }
+- return NULL;
+-}
+-
+-/**
+- * Removes an installed extension pack from the internal list.
+- *
+- * The package is expected to exist!
+- *
+- * @param a_pszName The name of the extension pack.
+- */
+-void ExtPackManager::removeExtPack(const char *a_pszName)
+-{
+- size_t cchName = strlen(a_pszName);
+-
+- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin();
+- it != m->llInstalledExtPacks.end();
+- it++)
+- {
+- ExtPack::Data *pExtPackData = (*it)->m;
+- if ( pExtPackData
+- && pExtPackData->Desc.strName.length() == cchName
+- && pExtPackData->Desc.strName.equalsIgnoreCase(a_pszName))
+- {
+- m->llInstalledExtPacks.erase(it);
+- return;
+- }
+- }
+- AssertMsgFailed(("%s\n", a_pszName));
+-}
+-
+-/**
+- * Refreshes the specified extension pack.
+- *
+- * This may remove the extension pack from the list, so any non-smart pointers
+- * to the extension pack object may become invalid.
+- *
+- * @returns S_OK and *a_ppExtPack on success, COM status code and error
+- * message on failure. Note that *a_ppExtPack can be NULL.
+- *
+- * @param a_pszName The extension to update..
+- * @param a_fUnusableIsError If @c true, report an unusable extension pack
+- * as an error.
+- * @param a_ppExtPack Where to store the pointer to the extension
+- * pack of it is still around after the refresh.
+- * This is optional.
+- *
+- * @remarks Caller holds the extension manager lock.
+- * @remarks Only called in VBoxSVC.
+- */
+-HRESULT ExtPackManager::refreshExtPack(const char *a_pszName, bool a_fUnusableIsError, ExtPack **a_ppExtPack)
+-{
+- Assert(m->pVirtualBox != NULL); /* Only called from VBoxSVC. */
+-
+- HRESULT hrc;
+- ExtPack *pExtPack = findExtPack(a_pszName);
+- if (pExtPack)
+- {
+- /*
+- * Refresh existing object.
+- */
+- bool fCanDelete;
+- hrc = pExtPack->refresh(&fCanDelete);
+- if (SUCCEEDED(hrc))
+- {
+- if (fCanDelete)
+- {
+- removeExtPack(a_pszName);
+- pExtPack = NULL;
+- }
+- }
+- }
+- else
+- {
+- /*
+- * Do this check here, otherwise VBoxExtPackCalcDir() will fail with a strange
+- * error.
+- */
+- bool fValid = VBoxExtPackIsValidName(a_pszName);
+- if (!fValid)
+- return setError(E_FAIL, "Invalid extension pack name specified");
+-
+- /*
+- * Does the dir exist? Make some special effort to deal with case
+- * sensitivie file systems (a_pszName is case insensitive and mangled).
+- */
+- char szDir[RTPATH_MAX];
+- int vrc = VBoxExtPackCalcDir(szDir, sizeof(szDir), m->strBaseDir.c_str(), a_pszName);
+- AssertLogRelRCReturn(vrc, E_FAIL);
+-
+- RTDIRENTRYEX Entry;
+- RTFSOBJINFO ObjInfo;
+- vrc = RTPathQueryInfoEx(szDir, &ObjInfo, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
+- bool fExists = RT_SUCCESS(vrc) && RTFS_IS_DIRECTORY(ObjInfo.Attr.fMode);
+- if (!fExists)
+- {
+- PRTDIR pDir;
+- vrc = RTDirOpen(&pDir, m->strBaseDir.c_str());
+- if (RT_SUCCESS(vrc))
+- {
+- const char *pszMangledName = RTPathFilename(szDir);
+- for (;;)
+- {
+- vrc = RTDirReadEx(pDir, &Entry, NULL /*pcbDirEntry*/, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
+- if (RT_FAILURE(vrc))
+- {
+- AssertLogRelMsg(vrc == VERR_NO_MORE_FILES, ("%Rrc\n", vrc));
+- break;
+- }
+- if ( RTFS_IS_DIRECTORY(Entry.Info.Attr.fMode)
+- && !RTStrICmp(Entry.szName, pszMangledName))
+- {
+- /*
+- * The installed extension pack has a uses different case.
+- * Update the name and directory variables.
+- */
+- vrc = RTPathJoin(szDir, sizeof(szDir), m->strBaseDir.c_str(), Entry.szName); /* not really necessary */
+- AssertLogRelRCReturnStmt(vrc, RTDirClose(pDir), E_UNEXPECTED);
+- a_pszName = Entry.szName;
+- fExists = true;
+- break;
+- }
+- }
+- RTDirClose(pDir);
+- }
+- }
+- if (fExists)
+- {
+- /*
+- * We've got something, create a new extension pack object for it.
+- */
+- ComObjPtr<ExtPack> ptrNewExtPack;
+- hrc = ptrNewExtPack.createObject();
+- if (SUCCEEDED(hrc))
+- hrc = ptrNewExtPack->initWithDir(m->enmContext, a_pszName, szDir);
+- if (SUCCEEDED(hrc))
+- {
+- m->llInstalledExtPacks.push_back(ptrNewExtPack);
+- if (ptrNewExtPack->m->fUsable)
+- LogRel(("ExtPackManager: Found extension pack '%s'.\n", a_pszName));
+- else
+- LogRel(("ExtPackManager: Found bad extension pack '%s': %s\n",
+- a_pszName, ptrNewExtPack->m->strWhyUnusable.c_str() ));
+- pExtPack = ptrNewExtPack;
+- }
+- }
+- else
+- hrc = S_OK;
+- }
+-
+- /*
+- * Report error if not usable, if that is desired.
+- */
+- if ( SUCCEEDED(hrc)
+- && pExtPack
+- && a_fUnusableIsError
+- && !pExtPack->m->fUsable)
+- hrc = setError(E_FAIL, "%s", pExtPack->m->strWhyUnusable.c_str());
+-
+- if (a_ppExtPack)
+- *a_ppExtPack = pExtPack;
+- return hrc;
+-}
+-
+-/**
+- * Thread wrapper around doInstall.
+- *
+- * @returns VINF_SUCCESS (ignored)
+- * @param hThread The thread handle (ignored).
+- * @param pvJob The job structure.
+- */
+-/*static*/ DECLCALLBACK(int) ExtPackManager::doInstallThreadProc(RTTHREAD hThread, void *pvJob)
+-{
+- PEXTPACKINSTALLJOB pJob = (PEXTPACKINSTALLJOB)pvJob;
+- HRESULT hrc = pJob->ptrExtPackMgr->doInstall(pJob->ptrExtPackFile, pJob->fReplace, &pJob->strDisplayInfo);
+- pJob->ptrProgress->notifyComplete(hrc);
+- delete pJob;
+-
+- NOREF(hThread);
+- return VINF_SUCCESS;
+-}
+-
+-/**
+- * Worker for IExtPackFile::Install.
+- *
+- * Called on a worker thread via doInstallThreadProc.
+- *
+- * @returns COM status code.
+- * @param a_pExtPackFile The extension pack file, caller checks that
+- * it's usable.
+- * @param a_fReplace Whether to replace any existing extpack or just
+- * fail.
+- * @param a_pstrDisplayInfo Host specific display information hacks.
+- * @param a_ppProgress Where to return a progress object some day. Can
+- * be NULL.
+- */
+-HRESULT ExtPackManager::doInstall(ExtPackFile *a_pExtPackFile, bool a_fReplace, Utf8Str const *a_pstrDisplayInfo)
+-{
+- AssertReturn(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON, E_UNEXPECTED);
+- RTCString const * const pStrName = &a_pExtPackFile->m->Desc.strName;
+- RTCString const * const pStrTarball = &a_pExtPackFile->m->strExtPackFile;
+- RTCString const * const pStrTarballDigest = &a_pExtPackFile->m->strDigest;
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- /*
+- * Refresh the data we have on the extension pack as it
+- * may be made stale by direct meddling or some other user.
+- */
+- ExtPack *pExtPack;
+- hrc = refreshExtPack(pStrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack);
+- if (SUCCEEDED(hrc))
+- {
+- if (pExtPack && a_fReplace)
+- hrc = pExtPack->callUninstallHookAndClose(m->pVirtualBox, false /*a_ForcedRemoval*/);
+- else if (pExtPack)
+- hrc = setError(E_FAIL,
+- tr("Extension pack '%s' is already installed."
+- " In case of a reinstallation, please uninstall it first"),
+- pStrName->c_str());
+- }
+- if (SUCCEEDED(hrc))
+- {
+- /*
+- * Run the privileged helper binary that performs the actual
+- * installation. Then create an object for the packet (we do this
+- * even on failure, to be on the safe side).
+- */
+- hrc = runSetUidToRootHelper(a_pstrDisplayInfo,
+- "install",
+- "--base-dir", m->strBaseDir.c_str(),
+- "--cert-dir", m->strCertificatDirPath.c_str(),
+- "--name", pStrName->c_str(),
+- "--tarball", pStrTarball->c_str(),
+- "--sha-256", pStrTarballDigest->c_str(),
+- pExtPack ? "--replace" : (const char *)NULL,
+- (const char *)NULL);
+- if (SUCCEEDED(hrc))
+- {
+- hrc = refreshExtPack(pStrName->c_str(), true /*a_fUnusableIsError*/, &pExtPack);
+- if (SUCCEEDED(hrc) && pExtPack)
+- {
+- RTERRINFOSTATIC ErrInfo;
+- RTErrInfoInitStatic(&ErrInfo);
+- pExtPack->callInstalledHook(m->pVirtualBox, &autoLock, &ErrInfo.Core);
+- if (RT_SUCCESS(ErrInfo.Core.rc))
+- LogRel(("ExtPackManager: Successfully installed extension pack '%s'.\n", pStrName->c_str()));
+- else
+- {
+- LogRel(("ExtPackManager: Installated hook for '%s' failed: %Rrc - %s\n",
+- pStrName->c_str(), ErrInfo.Core.rc, ErrInfo.Core.pszMsg));
+-
+- /*
+- * Uninstall the extpack if the error indicates that.
+- */
+- if (ErrInfo.Core.rc == VERR_EXTPACK_UNSUPPORTED_HOST_UNINSTALL)
+- runSetUidToRootHelper(a_pstrDisplayInfo,
+- "uninstall",
+- "--base-dir", m->strBaseDir.c_str(),
+- "--name", pStrName->c_str(),
+- "--forced",
+- (const char *)NULL);
+- hrc = setError(E_FAIL, tr("The installation hook failed: %Rrc - %s"),
+- ErrInfo.Core.rc, ErrInfo.Core.pszMsg);
+- }
+- }
+- else if (SUCCEEDED(hrc))
+- hrc = setError(E_FAIL, tr("Installing extension pack '%s' failed under mysterious circumstances"),
+- pStrName->c_str());
+- }
+- else
+- {
+- ErrorInfoKeeper Eik;
+- refreshExtPack(pStrName->c_str(), false /*a_fUnusableIsError*/, NULL);
+- }
+- }
+-
+- /*
+- * Do VirtualBoxReady callbacks now for any freshly installed
+- * extension pack (old ones will not be called).
+- */
+- if (m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON)
+- {
+- autoLock.release();
+- callAllVirtualBoxReadyHooks();
+- }
+- }
+-
+- return hrc;
+-}
+-
+-/**
+- * Thread wrapper around doUninstall.
+- *
+- * @returns VINF_SUCCESS (ignored)
+- * @param hThread The thread handle (ignored).
+- * @param pvJob The job structure.
+- */
+-/*static*/ DECLCALLBACK(int) ExtPackManager::doUninstallThreadProc(RTTHREAD hThread, void *pvJob)
+-{
+- PEXTPACKUNINSTALLJOB pJob = (PEXTPACKUNINSTALLJOB)pvJob;
+- HRESULT hrc = pJob->ptrExtPackMgr->doUninstall(&pJob->strName, pJob->fForcedRemoval, &pJob->strDisplayInfo);
+- pJob->ptrProgress->notifyComplete(hrc);
+- delete pJob;
+-
+- NOREF(hThread);
+- return VINF_SUCCESS;
+-}
+-
+-/**
+- * Worker for IExtPackManager::Uninstall.
+- *
+- * Called on a worker thread via doUninstallThreadProc.
+- *
+- * @returns COM status code.
+- * @param a_pstrName The name of the extension pack to uninstall.
+- * @param a_fForcedRemoval Whether to be skip and ignore certain bits of
+- * the extpack feedback. To deal with misbehaving
+- * extension pack hooks.
+- * @param a_pstrDisplayInfo Host specific display information hacks.
+- */
+-HRESULT ExtPackManager::doUninstall(Utf8Str const *a_pstrName, bool a_fForcedRemoval, Utf8Str const *a_pstrDisplayInfo)
+-{
+- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- /*
+- * Refresh the data we have on the extension pack as it may be made
+- * stale by direct meddling or some other user.
+- */
+- ExtPack *pExtPack;
+- hrc = refreshExtPack(a_pstrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack);
+- if (SUCCEEDED(hrc))
+- {
+- if (!pExtPack)
+- {
+- LogRel(("ExtPackManager: Extension pack '%s' is not installed, so nothing to uninstall.\n", a_pstrName->c_str()));
+- hrc = S_OK; /* nothing to uninstall */
+- }
+- else
+- {
+- /*
+- * Call the uninstall hook and unload the main dll.
+- */
+- hrc = pExtPack->callUninstallHookAndClose(m->pVirtualBox, a_fForcedRemoval);
+- if (SUCCEEDED(hrc))
+- {
+- /*
+- * Run the set-uid-to-root binary that performs the
+- * uninstallation. Then refresh the object.
+- *
+- * This refresh is theorically subject to races, but it's of
+- * the don't-do-that variety.
+- */
+- const char *pszForcedOpt = a_fForcedRemoval ? "--forced" : NULL;
+- hrc = runSetUidToRootHelper(a_pstrDisplayInfo,
+- "uninstall",
+- "--base-dir", m->strBaseDir.c_str(),
+- "--name", a_pstrName->c_str(),
+- pszForcedOpt, /* Last as it may be NULL. */
+- (const char *)NULL);
+- if (SUCCEEDED(hrc))
+- {
+- hrc = refreshExtPack(a_pstrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack);
+- if (SUCCEEDED(hrc))
+- {
+- if (!pExtPack)
+- LogRel(("ExtPackManager: Successfully uninstalled extension pack '%s'.\n", a_pstrName->c_str()));
+- else
+- hrc = setError(E_FAIL,
+- tr("Uninstall extension pack '%s' failed under mysterious circumstances"),
+- a_pstrName->c_str());
+- }
+- }
+- else
+- {
+- ErrorInfoKeeper Eik;
+- refreshExtPack(a_pstrName->c_str(), false /*a_fUnusableIsError*/, NULL);
+- }
+- }
+- }
+- }
+-
+- /*
+- * Do VirtualBoxReady callbacks now for any freshly installed
+- * extension pack (old ones will not be called).
+- */
+- if (m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON)
+- {
+- autoLock.release();
+- callAllVirtualBoxReadyHooks();
+- }
+- }
+-
+- return hrc;
+-}
+-
+-
+-/**
+- * Calls the pfnVirtualBoxReady hook for all working extension packs.
+- *
+- * @remarks The caller must not hold any locks.
+- */
+-void ExtPackManager::callAllVirtualBoxReadyHooks(void)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (FAILED(hrc))
+- return;
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+- ComPtr<ExtPackManager> ptrSelfRef = this;
+-
+- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin();
+- it != m->llInstalledExtPacks.end();
+- /* advancing below */)
+- {
+- if ((*it)->callVirtualBoxReadyHook(m->pVirtualBox, &autoLock))
+- it = m->llInstalledExtPacks.begin();
+- else
+- it++;
+- }
+-}
+-
+-/**
+- * Calls the pfnConsoleReady hook for all working extension packs.
+- *
+- * @param a_pConsole The console interface.
+- * @remarks The caller must not hold any locks.
+- */
+-void ExtPackManager::callAllConsoleReadyHooks(IConsole *a_pConsole)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (FAILED(hrc))
+- return;
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+- ComPtr<ExtPackManager> ptrSelfRef = this;
+-
+- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin();
+- it != m->llInstalledExtPacks.end();
+- /* advancing below */)
+- {
+- if ((*it)->callConsoleReadyHook(a_pConsole, &autoLock))
+- it = m->llInstalledExtPacks.begin();
+- else
+- it++;
+- }
+-}
+-
+-/**
+- * Calls the pfnVMCreated hook for all working extension packs.
+- *
+- * @param a_pMachine The machine interface of the new VM.
+- */
+-void ExtPackManager::callAllVmCreatedHooks(IMachine *a_pMachine)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (FAILED(hrc))
+- return;
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */
+- ExtPackList llExtPacks = m->llInstalledExtPacks;
+-
+- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++)
+- (*it)->callVmCreatedHook(m->pVirtualBox, a_pMachine, &autoLock);
+-}
+-
+-/**
+- * Calls the pfnVMConfigureVMM hook for all working extension packs.
+- *
+- * @returns VBox status code. Stops on the first failure, expecting the caller
+- * to signal this to the caller of the CFGM constructor.
+- * @param a_pConsole The console interface for the VM.
+- * @param a_pVM The VM handle.
+- */
+-int ExtPackManager::callAllVmConfigureVmmHooks(IConsole *a_pConsole, PVM a_pVM)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (FAILED(hrc))
+- return Global::vboxStatusCodeFromCOM(hrc);
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */
+- ExtPackList llExtPacks = m->llInstalledExtPacks;
+-
+- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++)
+- {
+- int vrc;
+- (*it)->callVmConfigureVmmHook(a_pConsole, a_pVM, &autoLock, &vrc);
+- if (RT_FAILURE(vrc))
+- return vrc;
+- }
+-
+- return VINF_SUCCESS;
+-}
+-
+-/**
+- * Calls the pfnVMPowerOn hook for all working extension packs.
+- *
+- * @returns VBox status code. Stops on the first failure, expecting the caller
+- * to not power on the VM.
+- * @param a_pConsole The console interface for the VM.
+- * @param a_pVM The VM handle.
+- */
+-int ExtPackManager::callAllVmPowerOnHooks(IConsole *a_pConsole, PVM a_pVM)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (FAILED(hrc))
+- return Global::vboxStatusCodeFromCOM(hrc);
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */
+- ExtPackList llExtPacks = m->llInstalledExtPacks;
+-
+- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++)
+- {
+- int vrc;
+- (*it)->callVmPowerOnHook(a_pConsole, a_pVM, &autoLock, &vrc);
+- if (RT_FAILURE(vrc))
+- return vrc;
+- }
+-
+- return VINF_SUCCESS;
+-}
+-
+-/**
+- * Calls the pfnVMPowerOff hook for all working extension packs.
+- *
+- * @param a_pConsole The console interface for the VM.
+- * @param a_pVM The VM handle. Can be NULL.
+- */
+-void ExtPackManager::callAllVmPowerOffHooks(IConsole *a_pConsole, PVM a_pVM)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (FAILED(hrc))
+- return;
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */
+- ExtPackList llExtPacks = m->llInstalledExtPacks;
+-
+- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++)
+- (*it)->callVmPowerOffHook(a_pConsole, a_pVM, &autoLock);
+-}
+-
+-
+-/**
+- * Checks that the specified extension pack contains a VRDE module and that it
+- * is shipshape.
+- *
+- * @returns S_OK if ok, appropriate failure status code with details.
+- * @param a_pstrExtPack The name of the extension pack.
+- */
+-HRESULT ExtPackManager::checkVrdeExtPack(Utf8Str const *a_pstrExtPack)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- ExtPack *pExtPack = findExtPack(a_pstrExtPack->c_str());
+- if (pExtPack)
+- hrc = pExtPack->checkVrde();
+- else
+- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("No extension pack by the name '%s' was found"), a_pstrExtPack->c_str());
+- }
+-
+- return hrc;
+-}
+-
+-/**
+- * Gets the full path to the VRDE library of the specified extension pack.
+- *
+- * This will do extacly the same as checkVrdeExtPack and then resolve the
+- * library path.
+- *
+- * @returns S_OK if a path is returned, COM error status and message return if
+- * not.
+- * @param a_pstrExtPack The extension pack.
+- * @param a_pstrVrdeLibrary Where to return the path.
+- */
+-int ExtPackManager::getVrdeLibraryPathForExtPack(Utf8Str const *a_pstrExtPack, Utf8Str *a_pstrVrdeLibrary)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- ExtPack *pExtPack = findExtPack(a_pstrExtPack->c_str());
+- if (pExtPack)
+- hrc = pExtPack->getVrdpLibraryName(a_pstrVrdeLibrary);
+- else
+- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("No extension pack by the name '%s' was found"), a_pstrExtPack->c_str());
+- }
+-
+- return hrc;
+-}
+-
+-/**
+- * Gets the name of the default VRDE extension pack.
+- *
+- * @returns S_OK or some COM error status on red tape failure.
+- * @param a_pstrExtPack Where to return the extension pack name. Returns
+- * empty if no extension pack wishes to be the default
+- * VRDP provider.
+- */
+-HRESULT ExtPackManager::getDefaultVrdeExtPack(Utf8Str *a_pstrExtPack)
+-{
+- a_pstrExtPack->setNull();
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin();
+- it != m->llInstalledExtPacks.end();
+- it++)
+- {
+- if ((*it)->wantsToBeDefaultVrde())
+- {
+- *a_pstrExtPack = (*it)->m->Desc.strName;
+- break;
+- }
+- }
+- }
+- return hrc;
+-}
+-
+-/**
+- * Checks if an extension pack is (present and) usable.
+- *
+- * @returns @c true if it is, otherwise @c false.
+- * @param a_pszExtPack The name of the extension pack.
+- */
+-bool ExtPackManager::isExtPackUsable(const char *a_pszExtPack)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (FAILED(hrc))
+- return false;
+- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- ExtPack *pExtPack = findExtPack(a_pszExtPack);
+- return pExtPack != NULL
+- && pExtPack->m->fUsable;
+-}
+-
+-/**
+- * Dumps all extension packs to the release log.
+- */
+-void ExtPackManager::dumpAllToReleaseLog(void)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (FAILED(hrc))
+- return;
+- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- LogRel(("Installed Extension Packs:\n"));
+- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin();
+- it != m->llInstalledExtPacks.end();
+- it++)
+- {
+- ExtPack::Data *pExtPackData = (*it)->m;
+- if (pExtPackData)
+- {
+- if (pExtPackData->fUsable)
+- LogRel((" %s (Version: %s r%u%s%s; VRDE Module: %s)\n",
+- pExtPackData->Desc.strName.c_str(),
+- pExtPackData->Desc.strVersion.c_str(),
+- pExtPackData->Desc.uRevision,
+- pExtPackData->Desc.strEdition.isEmpty() ? "" : " ",
+- pExtPackData->Desc.strEdition.c_str(),
+- pExtPackData->Desc.strVrdeModule.c_str() ));
+- else
+- LogRel((" %s (Version: %s r%u%s%s; VRDE Module: %s unusable because of '%s')\n",
+- pExtPackData->Desc.strName.c_str(),
+- pExtPackData->Desc.strVersion.c_str(),
+- pExtPackData->Desc.uRevision,
+- pExtPackData->Desc.strEdition.isEmpty() ? "" : " ",
+- pExtPackData->Desc.strEdition.c_str(),
+- pExtPackData->Desc.strVrdeModule.c_str(),
+- pExtPackData->strWhyUnusable.c_str() ));
+- }
+- else
+- LogRel((" pExtPackData is NULL\n"));
+- }
+-
+- if (!m->llInstalledExtPacks.size())
+- LogRel((" None installed!\n"));
+-}
+-
+-/* vi: set tabstop=4 shiftwidth=4 expandtab: */
+--- VirtualBox-4.1.18.orig/src/VBox/Main/src-all/ExtPackUtil.cpp 2012-06-20 10:17:34.000000000 -0300
++++ /dev/null 2012-07-24 14:48:18.638572110 -0300
+@@ -1,1385 +0,0 @@
+-/* $Id: ExtPackUtil.cpp $ */
+-/** @file
+- * VirtualBox Main - Extension Pack Utilities and definitions, VBoxC, VBoxSVC, ++.
+- */
+-
+-/*
+- * Copyright (C) 2010-2012 Oracle Corporation
+- *
+- * This file is part of VirtualBox Open Source Edition (OSE), as
+- * available from http://www.virtualbox.org. This file is free software;
+- * you can redistribute it and/or modify it under the terms of the GNU
+- * General Public License (GPL) as published by the Free Software
+- * Foundation, in version 2 as it comes in the "COPYING" file of the
+- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+- */
+-
+-
+-/*******************************************************************************
+-* Header Files *
+-*******************************************************************************/
+-#include "../include/ExtPackUtil.h"
+-
+-#include <iprt/ctype.h>
+-#include <iprt/dir.h>
+-#include <iprt/file.h>
+-#include <iprt/manifest.h>
+-#include <iprt/param.h>
+-#include <iprt/path.h>
+-#include <iprt/sha.h>
+-#include <iprt/string.h>
+-#include <iprt/vfs.h>
+-#include <iprt/tar.h>
+-#include <iprt/zip.h>
+-#include <iprt/cpp/xml.h>
+-
+-#include <VBox/log.h>
+-
+-
+-/**
+- * Worker for VBoxExtPackLoadDesc that loads the plug-in descriptors.
+- *
+- * @returns Same as VBoxExtPackLoadDesc.
+- * @param pVBoxExtPackElm
+- * @param pcPlugIns Where to return the number of plug-ins in the
+- * array.
+- * @param paPlugIns Where to return the plug-in descriptor array.
+- * (RTMemFree it even on failure)
+- */
+-static RTCString *
+-vboxExtPackLoadPlugInDescs(const xml::ElementNode *pVBoxExtPackElm,
+- uint32_t *pcPlugIns, PVBOXEXTPACKPLUGINDESC *paPlugIns)
+-{
+- *pcPlugIns = 0;
+- *paPlugIns = NULL;
+-
+- /** @todo plug-ins */
+- NOREF(pVBoxExtPackElm);
+-
+- return NULL;
+-}
+-
+-/**
+- * Clears the extension pack descriptor.
+- *
+- * @param a_pExtPackDesc The descriptor to clear.
+- */
+-static void vboxExtPackClearDesc(PVBOXEXTPACKDESC a_pExtPackDesc)
+-{
+- a_pExtPackDesc->strName.setNull();
+- a_pExtPackDesc->strDescription.setNull();
+- a_pExtPackDesc->strVersion.setNull();
+- a_pExtPackDesc->strEdition.setNull();
+- a_pExtPackDesc->uRevision = 0;
+- a_pExtPackDesc->strMainModule.setNull();
+- a_pExtPackDesc->strVrdeModule.setNull();
+- a_pExtPackDesc->cPlugIns = 0;
+- a_pExtPackDesc->paPlugIns = NULL;
+- a_pExtPackDesc->fShowLicense = false;
+-}
+-
+-/**
+- * Initializes an extension pack descriptor so that it's safe to call free on
+- * it whatever happens later on.
+- *
+- * @param a_pExtPackDesc The descirptor to initialize.
+- */
+-void VBoxExtPackInitDesc(PVBOXEXTPACKDESC a_pExtPackDesc)
+-{
+- vboxExtPackClearDesc(a_pExtPackDesc);
+-}
+-
+-
+-/**
+- * Load the extension pack descriptor from an XML document.
+- *
+- * @returns NULL on success, pointer to an error message on failure (caller
+- * deletes it).
+- * @param a_pDoc Pointer to the the XML document.
+- * @param a_pExtPackDesc Where to store the extension pack descriptor.
+- */
+-static RTCString *vboxExtPackLoadDescFromDoc(xml::Document *a_pDoc, PVBOXEXTPACKDESC a_pExtPackDesc)
+-{
+- /*
+- * Get the main element and check its version.
+- */
+- const xml::ElementNode *pVBoxExtPackElm = a_pDoc->getRootElement();
+- if ( !pVBoxExtPackElm
+- || strcmp(pVBoxExtPackElm->getName(), "VirtualBoxExtensionPack") != 0)
+- return new RTCString("No VirtualBoxExtensionPack element");
+-
+- RTCString strFormatVersion;
+- if (!pVBoxExtPackElm->getAttributeValue("version", strFormatVersion))
+- return new RTCString("Missing format version");
+- if (!strFormatVersion.equals("1.0"))
+- return &(new RTCString("Unsupported format version: "))->append(strFormatVersion);
+-
+- /*
+- * Read and validate mandatory bits.
+- */
+- const xml::ElementNode *pNameElm = pVBoxExtPackElm->findChildElement("Name");
+- if (!pNameElm)
+- return new RTCString("The 'Name' element is missing");
+- const char *pszName = pNameElm->getValue();
+- if (!VBoxExtPackIsValidName(pszName))
+- return &(new RTCString("Invalid name: "))->append(pszName);
+-
+- const xml::ElementNode *pDescElm = pVBoxExtPackElm->findChildElement("Description");
+- if (!pDescElm)
+- return new RTCString("The 'Description' element is missing");
+- const char *pszDesc = pDescElm->getValue();
+- if (!pszDesc || *pszDesc == '\0')
+- return new RTCString("The 'Description' element is empty");
+- if (strpbrk(pszDesc, "\n\r\t\v\b") != NULL)
+- return new RTCString("The 'Description' must not contain control characters");
+-
+- const xml::ElementNode *pVersionElm = pVBoxExtPackElm->findChildElement("Version");
+- if (!pVersionElm)
+- return new RTCString("The 'Version' element is missing");
+- const char *pszVersion = pVersionElm->getValue();
+- if (!pszVersion || *pszVersion == '\0')
+- return new RTCString("The 'Version' element is empty");
+- if (!VBoxExtPackIsValidVersionString(pszVersion))
+- return &(new RTCString("Invalid version string: "))->append(pszVersion);
+-
+- uint32_t uRevision;
+- if (!pVersionElm->getAttributeValue("revision", uRevision))
+- uRevision = 0;
+-
+- const char *pszEdition;
+- if (!pVersionElm->getAttributeValue("edition", pszEdition))
+- pszEdition = "";
+- if (!VBoxExtPackIsValidEditionString(pszEdition))
+- return &(new RTCString("Invalid edition string: "))->append(pszEdition);
+-
+- const xml::ElementNode *pMainModuleElm = pVBoxExtPackElm->findChildElement("MainModule");
+- if (!pMainModuleElm)
+- return new RTCString("The 'MainModule' element is missing");
+- const char *pszMainModule = pMainModuleElm->getValue();
+- if (!pszMainModule || *pszMainModule == '\0')
+- return new RTCString("The 'MainModule' element is empty");
+- if (!VBoxExtPackIsValidModuleString(pszMainModule))
+- return &(new RTCString("Invalid main module string: "))->append(pszMainModule);
+-
+- /*
+- * The VRDE module, optional.
+- * Accept both none and empty as tokens of no VRDE module.
+- */
+- const char *pszVrdeModule = NULL;
+- const xml::ElementNode *pVrdeModuleElm = pVBoxExtPackElm->findChildElement("VRDEModule");
+- if (pVrdeModuleElm)
+- {
+- pszVrdeModule = pVrdeModuleElm->getValue();
+- if (!pszVrdeModule || *pszVrdeModule == '\0')
+- pszVrdeModule = NULL;
+- else if (!VBoxExtPackIsValidModuleString(pszVrdeModule))
+- return &(new RTCString("Invalid VRDE module string: "))->append(pszVrdeModule);
+- }
+-
+- /*
+- * Whether to show the license, optional. (presense is enough here)
+- */
+- const xml::ElementNode *pShowLicenseElm = pVBoxExtPackElm->findChildElement("ShowLicense");
+- bool fShowLicense = pShowLicenseElm != NULL;
+-
+- /*
+- * Parse plug-in descriptions (last because of the manual memory management).
+- */
+- uint32_t cPlugIns = 0;
+- PVBOXEXTPACKPLUGINDESC paPlugIns = NULL;
+- RTCString *pstrRet = vboxExtPackLoadPlugInDescs(pVBoxExtPackElm, &cPlugIns, &paPlugIns);
+- if (pstrRet)
+- {
+- RTMemFree(paPlugIns);
+- return pstrRet;
+- }
+-
+- /*
+- * Everything seems fine, fill in the return values and return successfully.
+- */
+- a_pExtPackDesc->strName = pszName;
+- a_pExtPackDesc->strDescription = pszDesc;
+- a_pExtPackDesc->strVersion = pszVersion;
+- a_pExtPackDesc->strEdition = pszEdition;
+- a_pExtPackDesc->uRevision = uRevision;
+- a_pExtPackDesc->strMainModule = pszMainModule;
+- a_pExtPackDesc->strVrdeModule = pszVrdeModule;
+- a_pExtPackDesc->cPlugIns = cPlugIns;
+- a_pExtPackDesc->paPlugIns = paPlugIns;
+- a_pExtPackDesc->fShowLicense = fShowLicense;
+-
+- return NULL;
+-}
+-
+-/**
+- * Reads the extension pack descriptor.
+- *
+- * @returns NULL on success, pointer to an error message on failure (caller
+- * deletes it).
+- * @param a_pszDir The directory containing the description file.
+- * @param a_pExtPackDesc Where to store the extension pack descriptor.
+- * @param a_pObjInfo Where to store the object info for the file (unix
+- * attribs). Optional.
+- */
+-RTCString *VBoxExtPackLoadDesc(const char *a_pszDir, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo)
+-{
+- vboxExtPackClearDesc(a_pExtPackDesc);
+-
+- /*
+- * Validate, open and parse the XML file.
+- */
+- char szFilePath[RTPATH_MAX];
+- int vrc = RTPathJoin(szFilePath, sizeof(szFilePath), a_pszDir, VBOX_EXTPACK_DESCRIPTION_NAME);
+- if (RT_FAILURE(vrc))
+- return new RTCString("RTPathJoin failed with %Rrc", vrc);
+-
+- RTFSOBJINFO ObjInfo;
+- vrc = RTPathQueryInfoEx(szFilePath, &ObjInfo, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK);
+- if (RT_FAILURE(vrc))
+- return &(new RTCString())->printf("RTPathQueryInfoEx failed with %Rrc", vrc);
+- if (a_pObjInfo)
+- *a_pObjInfo = ObjInfo;
+- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode))
+- {
+- if (RTFS_IS_SYMLINK(ObjInfo.Attr.fMode))
+- return new RTCString("The XML file is symlinked, that is not allowed");
+- return &(new RTCString)->printf("The XML file is not a file (fMode=%#x)", ObjInfo.Attr.fMode);
+- }
+-
+- xml::Document Doc;
+- {
+- xml::XmlFileParser Parser;
+- try
+- {
+- Parser.read(szFilePath, Doc);
+- }
+- catch (xml::XmlError Err)
+- {
+- return new RTCString(Err.what());
+- }
+- }
+-
+- /*
+- * Hand the xml doc over to the common code.
+- */
+- return vboxExtPackLoadDescFromDoc(&Doc, a_pExtPackDesc);
+-}
+-
+-/**
+- * Reads the extension pack descriptor.
+- *
+- * @returns NULL on success, pointer to an error message on failure (caller
+- * deletes it).
+- * @param a_pszDir The directory containing the description file.
+- * @param a_pExtPackDesc Where to store the extension pack descriptor.
+- * @param a_pObjInfo Where to store the object info for the file (unix
+- * attribs). Optional.
+- */
+-RTCString *VBoxExtPackLoadDescFromVfsFile(RTVFSFILE hVfsFile, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo)
+-{
+- vboxExtPackClearDesc(a_pExtPackDesc);
+-
+- /*
+- * Query the object info.
+- */
+- RTFSOBJINFO ObjInfo;
+- int rc = RTVfsFileQueryInfo(hVfsFile, &ObjInfo, RTFSOBJATTRADD_UNIX);
+- if (RT_FAILURE(rc))
+- return &(new RTCString)->printf("RTVfsFileQueryInfo failed: %Rrc", rc);
+- if (a_pObjInfo)
+- *a_pObjInfo = ObjInfo;
+-
+- /*
+- * The simple approach, read the whole thing into memory and pass this to
+- * the XML parser.
+- */
+-
+- /* Check the file size. */
+- if (ObjInfo.cbObject > _1M || ObjInfo.cbObject < 0)
+- return &(new RTCString)->printf("The XML file is too large (%'RU64 bytes)", ObjInfo.cbObject);
+- size_t const cbFile = (size_t)ObjInfo.cbObject;
+-
+- /* Rewind to the start of the file. */
+- rc = RTVfsFileSeek(hVfsFile, 0, RTFILE_SEEK_BEGIN, NULL);
+- if (RT_FAILURE(rc))
+- return &(new RTCString)->printf("RTVfsFileSeek(,0,BEGIN) failed: %Rrc", rc);
+-
+- /* Allocate memory and read the file content into it. */
+- void *pvFile = RTMemTmpAlloc(cbFile);
+- if (!pvFile)
+- return &(new RTCString)->printf("RTMemTmpAlloc(%zu) failed", cbFile);
+-
+- RTCString *pstrErr = NULL;
+- rc = RTVfsFileRead(hVfsFile, pvFile, cbFile, NULL);
+- if (RT_FAILURE(rc))
+- pstrErr = &(new RTCString)->printf("RTVfsFileRead failed: %Rrc", rc);
+-
+- /*
+- * Parse the file.
+- */
+- xml::Document Doc;
+- if (RT_SUCCESS(rc))
+- {
+- xml::XmlMemParser Parser;
+- RTCString strFileName = VBOX_EXTPACK_DESCRIPTION_NAME;
+- try
+- {
+- Parser.read(pvFile, cbFile, strFileName, Doc);
+- }
+- catch (xml::XmlError Err)
+- {
+- pstrErr = new RTCString(Err.what());
+- rc = VERR_PARSE_ERROR;
+- }
+- }
+- RTMemTmpFree(pvFile);
+-
+- /*
+- * Hand the xml doc over to the common code.
+- */
+- if (RT_SUCCESS(rc))
+- pstrErr = vboxExtPackLoadDescFromDoc(&Doc, a_pExtPackDesc);
+-
+- return pstrErr;
+-}
+-
+-/**
+- * Frees all resources associated with a extension pack descriptor.
+- *
+- * @param a_pExtPackDesc The extension pack descriptor which members
+- * should be freed.
+- */
+-void VBoxExtPackFreeDesc(PVBOXEXTPACKDESC a_pExtPackDesc)
+-{
+- if (!a_pExtPackDesc)
+- return;
+-
+- a_pExtPackDesc->strName.setNull();
+- a_pExtPackDesc->strDescription.setNull();
+- a_pExtPackDesc->strVersion.setNull();
+- a_pExtPackDesc->strEdition.setNull();
+- a_pExtPackDesc->uRevision = 0;
+- a_pExtPackDesc->strMainModule.setNull();
+- a_pExtPackDesc->strVrdeModule.setNull();
+- a_pExtPackDesc->cPlugIns = 0;
+- RTMemFree(a_pExtPackDesc->paPlugIns);
+- a_pExtPackDesc->paPlugIns = NULL;
+- a_pExtPackDesc->fShowLicense = false;
+-}
+-
+-/**
+- * Extract the extension pack name from the tarball path.
+- *
+- * @returns String containing the name on success, the caller must delete it.
+- * NULL if no valid name was found or if we ran out of memory.
+- * @param pszTarball The path to the tarball.
+- */
+-RTCString *VBoxExtPackExtractNameFromTarballPath(const char *pszTarball)
+-{
+- /*
+- * Skip ahead to the filename part and count the number of characters
+- * that matches the criteria for a mangled extension pack name.
+- */
+- const char *pszSrc = RTPathFilename(pszTarball);
+- if (!pszSrc)
+- return NULL;
+-
+- size_t off = 0;
+- while (RT_C_IS_ALNUM(pszSrc[off]) || pszSrc[off] == '_')
+- off++;
+-
+- /*
+- * Check min and max name limits.
+- */
+- if ( off > VBOX_EXTPACK_NAME_MAX_LEN
+- || off < VBOX_EXTPACK_NAME_MIN_LEN)
+- return NULL;
+-
+- /*
+- * Return the unmangled name.
+- */
+- return VBoxExtPackUnmangleName(pszSrc, off);
+-}
+-
+-/**
+- * Validates the extension pack name.
+- *
+- * @returns true if valid, false if not.
+- * @param pszName The name to validate.
+- * @sa VBoxExtPackExtractNameFromTarballPath
+- */
+-bool VBoxExtPackIsValidName(const char *pszName)
+-{
+- if (!pszName)
+- return false;
+-
+- /*
+- * Check the characters making up the name, only english alphabet
+- * characters, decimal digits and spaces are allowed.
+- */
+- size_t off = 0;
+- while (pszName[off])
+- {
+- if (!RT_C_IS_ALNUM(pszName[off]) && pszName[off] != ' ')
+- return false;
+- off++;
+- }
+-
+- /*
+- * Check min and max name limits.
+- */
+- if ( off > VBOX_EXTPACK_NAME_MAX_LEN
+- || off < VBOX_EXTPACK_NAME_MIN_LEN)
+- return false;
+-
+- return true;
+-}
+-
+-/**
+- * Checks if an alledged manged extension pack name.
+- *
+- * @returns true if valid, false if not.
+- * @param pszMangledName The mangled name to validate.
+- * @param cchMax The max number of chars to test.
+- * @sa VBoxExtPackMangleName
+- */
+-bool VBoxExtPackIsValidMangledName(const char *pszMangledName, size_t cchMax /*= RTSTR_MAX*/)
+-{
+- if (!pszMangledName)
+- return false;
+-
+- /*
+- * Check the characters making up the name, only english alphabet
+- * characters, decimal digits and underscores (=space) are allowed.
+- */
+- size_t off = 0;
+- while (off < cchMax && pszMangledName[off])
+- {
+- if (!RT_C_IS_ALNUM(pszMangledName[off]) && pszMangledName[off] != '_')
+- return false;
+- off++;
+- }
+-
+- /*
+- * Check min and max name limits.
+- */
+- if ( off > VBOX_EXTPACK_NAME_MAX_LEN
+- || off < VBOX_EXTPACK_NAME_MIN_LEN)
+- return false;
+-
+- return true;
+-}
+-
+-/**
+- * Mangle an extension pack name so it can be used by a directory or file name.
+- *
+- * @returns String containing the mangled name on success, the caller must
+- * delete it. NULL on failure.
+- * @param pszName The unmangled name.
+- * @sa VBoxExtPackUnmangleName, VBoxExtPackIsValidMangledName
+- */
+-RTCString *VBoxExtPackMangleName(const char *pszName)
+-{
+- AssertReturn(VBoxExtPackIsValidName(pszName), NULL);
+-
+- char szTmp[VBOX_EXTPACK_NAME_MAX_LEN + 1];
+- size_t off = 0;
+- char ch;
+- while ((ch = pszName[off]) != '\0')
+- {
+- if (ch == ' ')
+- ch = '_';
+- szTmp[off++] = ch;
+- }
+- szTmp[off] = '\0';
+- Assert(VBoxExtPackIsValidMangledName(szTmp));
+-
+- return new RTCString(szTmp, off);
+-}
+-
+-/**
+- * Unmangle an extension pack name (reverses VBoxExtPackMangleName).
+- *
+- * @returns String containing the mangled name on success, the caller must
+- * delete it. NULL on failure.
+- * @param pszMangledName The mangled name.
+- * @param cchMax The max name length. RTSTR_MAX is fine.
+- * @sa VBoxExtPackMangleName, VBoxExtPackIsValidMangledName
+- */
+-RTCString *VBoxExtPackUnmangleName(const char *pszMangledName, size_t cchMax)
+-{
+- AssertReturn(VBoxExtPackIsValidMangledName(pszMangledName, cchMax), NULL);
+-
+- char szTmp[VBOX_EXTPACK_NAME_MAX_LEN + 1];
+- size_t off = 0;
+- char ch;
+- while ( off < cchMax
+- && (ch = pszMangledName[off]) != '\0')
+- {
+- if (ch == '_')
+- ch = ' ';
+- else
+- AssertReturn(RT_C_IS_ALNUM(ch) || ch == ' ', NULL);
+- szTmp[off++] = ch;
+- }
+- szTmp[off] = '\0';
+- AssertReturn(VBoxExtPackIsValidName(szTmp), NULL);
+-
+- return new RTCString(szTmp, off);
+-}
+-
+-/**
+- * Constructs the extension pack directory path.
+- *
+- * A combination of RTPathJoin and VBoxExtPackMangleName.
+- *
+- * @returns IPRT status code like RTPathJoin.
+- * @param pszExtPackDir Where to return the directory path.
+- * @param cbExtPackDir The size of the return buffer.
+- * @param pszParentDir The parent directory (".../Extensions").
+- * @param pszName The extension pack name, unmangled.
+- */
+-int VBoxExtPackCalcDir(char *pszExtPackDir, size_t cbExtPackDir, const char *pszParentDir, const char *pszName)
+-{
+- AssertReturn(VBoxExtPackIsValidName(pszName), VERR_INTERNAL_ERROR_5);
+-
+- RTCString *pstrMangledName = VBoxExtPackMangleName(pszName);
+- if (!pstrMangledName)
+- return VERR_INTERNAL_ERROR_4;
+-
+- int vrc = RTPathJoin(pszExtPackDir, cbExtPackDir, pszParentDir, pstrMangledName->c_str());
+- delete pstrMangledName;
+-
+- return vrc;
+-}
+-
+-
+-/**
+- * Validates the extension pack version string.
+- *
+- * @returns true if valid, false if not.
+- * @param pszVersion The version string to validate.
+- */
+-bool VBoxExtPackIsValidVersionString(const char *pszVersion)
+-{
+- if (!pszVersion || *pszVersion == '\0')
+- return false;
+-
+- /* 1.x.y.z... */
+- for (;;)
+- {
+- if (!RT_C_IS_DIGIT(*pszVersion))
+- return false;
+- do
+- pszVersion++;
+- while (RT_C_IS_DIGIT(*pszVersion));
+- if (*pszVersion != '.')
+- break;
+- pszVersion++;
+- }
+-
+- /* upper case string + numbers indicating the build type */
+- if (*pszVersion == '-' || *pszVersion == '_')
+- {
+- /** @todo Should probably restrict this to known build types (alpha,
+- * beta, rc, ++). */
+- do
+- pszVersion++;
+- while ( RT_C_IS_DIGIT(*pszVersion)
+- || RT_C_IS_UPPER(*pszVersion)
+- || *pszVersion == '-'
+- || *pszVersion == '_');
+- }
+-
+- return *pszVersion == '\0';
+-}
+-
+-/**
+- * Validates the extension pack edition string.
+- *
+- * @returns true if valid, false if not.
+- * @param pszEdition The edition string to validate.
+- */
+-bool VBoxExtPackIsValidEditionString(const char *pszEdition)
+-{
+- if (*pszEdition)
+- {
+- if (!RT_C_IS_UPPER(*pszEdition))
+- return false;
+-
+- do
+- pszEdition++;
+- while ( RT_C_IS_UPPER(*pszEdition)
+- || RT_C_IS_DIGIT(*pszEdition)
+- || *pszEdition == '-'
+- || *pszEdition == '_');
+- }
+- return *pszEdition == '\0';
+-}
+-
+-/**
+- * Validates an extension pack module string.
+- *
+- * @returns true if valid, false if not.
+- * @param pszModule The module string to validate.
+- */
+-bool VBoxExtPackIsValidModuleString(const char *pszModule)
+-{
+- if (!pszModule || *pszModule == '\0')
+- return false;
+-
+- /* Restricted charset, no extensions (dots). */
+- while ( RT_C_IS_ALNUM(*pszModule)
+- || *pszModule == '-'
+- || *pszModule == '_')
+- pszModule++;
+-
+- return *pszModule == '\0';
+-}
+-
+-/**
+- * RTStrPrintfv wrapper.
+- *
+- * @returns @a rc
+- * @param rc The status code to return.
+- * @param pszError The error buffer.
+- * @param cbError The size of the buffer.
+- * @param pszFormat The error message format string.
+- * @param ... Format arguments.
+- */
+-static int vboxExtPackReturnError(int rc, char *pszError, size_t cbError, const char *pszFormat, ...)
+-{
+- va_list va;
+- va_start(va, pszFormat);
+- RTStrPrintfV(pszError, cbError, pszFormat, va);
+- va_end(va);
+- return rc;
+-}
+-
+-/**
+- * RTStrPrintfv wrapper.
+- *
+- * @param pszError The error buffer.
+- * @param cbError The size of the buffer.
+- * @param pszFormat The error message format string.
+- * @param ... Format arguments.
+- */
+-static void vboxExtPackSetError(char *pszError, size_t cbError, const char *pszFormat, ...)
+-{
+- va_list va;
+- va_start(va, pszFormat);
+- RTStrPrintfV(pszError, cbError, pszFormat, va);
+- va_end(va);
+-}
+-
+-/**
+- * Verifies the manifest and its signature.
+- *
+- * @returns VBox status code, failures with message.
+- * @param hManifestFile The xml from the extension pack.
+- * @param pszExtPackName The expected extension pack name. This can be
+- * NULL, in which we don't have any expectations.
+- * @param pszError Where to store an error message on failure.
+- * @param cbError The size of the buffer @a pszError points to.
+- */
+-static int vboxExtPackVerifyXml(RTVFSFILE hXmlFile, const char *pszExtPackName, char *pszError, size_t cbError)
+-{
+- /*
+- * Load the XML.
+- */
+- VBOXEXTPACKDESC ExtPackDesc;
+- RTCString *pstrErr = VBoxExtPackLoadDescFromVfsFile(hXmlFile, &ExtPackDesc, NULL);
+- if (pstrErr)
+- {
+- RTStrCopy(pszError, cbError, pstrErr->c_str());
+- delete pstrErr;
+- return VERR_PARSE_ERROR;
+- }
+-
+- /*
+- * Check the name.
+- */
+- /** @todo drop this restriction after the old install interface is
+- * dropped. */
+- int rc = VINF_SUCCESS;
+- if ( pszExtPackName
+- && !ExtPackDesc.strName.equalsIgnoreCase(pszExtPackName))
+- rc = vboxExtPackReturnError(VERR_NOT_EQUAL, pszError, cbError,
+- "The name of the downloaded file and the name stored inside the extension pack does not match"
+- " (xml='%s' file='%s')", ExtPackDesc.strName.c_str(), pszExtPackName);
+- return rc;
+-}
+-
+-/**
+- * Verifies the manifest and its signature.
+- *
+- * @returns VBox status code, failures with message.
+- * @param hOurManifest The manifest we compiled.
+- * @param hManifestFile The manifest file in the extension pack.
+- * @param hSignatureFile The manifest signature file.
+- * @param pszError Where to store an error message on failure.
+- * @param cbError The size of the buffer @a pszError points to.
+- */
+-static int vboxExtPackVerifyManifestAndSignature(RTMANIFEST hOurManifest, RTVFSFILE hManifestFile, RTVFSFILE hSignatureFile,
+- char *pszError, size_t cbError)
+-{
+- /*
+- * Read the manifest from the extension pack.
+- */
+- int rc = RTVfsFileSeek(hManifestFile, 0, RTFILE_SEEK_BEGIN, NULL);
+- if (RT_FAILURE(rc))
+- return vboxExtPackReturnError(rc, pszError, cbError, "RTVfsFileSeek failed: %Rrc", rc);
+-
+- RTMANIFEST hTheirManifest;
+- rc = RTManifestCreate(0 /*fFlags*/, &hTheirManifest);
+- if (RT_FAILURE(rc))
+- return vboxExtPackReturnError(rc, pszError, cbError, "RTManifestCreate failed: %Rrc", rc);
+-
+- RTVFSIOSTREAM hVfsIos = RTVfsFileToIoStream(hManifestFile);
+- rc = RTManifestReadStandard(hTheirManifest, hVfsIos);
+- RTVfsIoStrmRelease(hVfsIos);
+- if (RT_SUCCESS(rc))
+- {
+- /*
+- * Compare the manifests.
+- */
+- static const char *s_apszIgnoreEntries[] =
+- {
+- VBOX_EXTPACK_MANIFEST_NAME,
+- VBOX_EXTPACK_SIGNATURE_NAME,
+- "./" VBOX_EXTPACK_MANIFEST_NAME,
+- "./" VBOX_EXTPACK_SIGNATURE_NAME,
+- NULL
+- };
+- char szError[RTPATH_MAX];
+- rc = RTManifestEqualsEx(hOurManifest, hTheirManifest, &s_apszIgnoreEntries[0], NULL,
+- RTMANIFEST_EQUALS_IGN_MISSING_ATTRS /*fFlags*/,
+- szError, sizeof(szError));
+- if (RT_SUCCESS(rc))
+- {
+- /*
+- * Validate the manifest file signature.
+- */
+- /** @todo implement signature stuff */
+- NOREF(hSignatureFile);
+-
+- }
+- else if (rc == VERR_NOT_EQUAL && szError[0])
+- vboxExtPackSetError(pszError, cbError, "Manifest mismatch: %s", szError);
+- else
+- vboxExtPackSetError(pszError, cbError, "RTManifestEqualsEx failed: %Rrc", rc);
+-#if 0
+- RTVFSIOSTREAM hVfsIosStdOut = NIL_RTVFSIOSTREAM;
+- RTVfsIoStrmFromStdHandle(RTHANDLESTD_OUTPUT, RTFILE_O_WRITE, true, &hVfsIosStdOut);
+- RTVfsIoStrmWrite(hVfsIosStdOut, "Our:\n", sizeof("Our:\n") - 1, true, NULL);
+- RTManifestWriteStandard(hOurManifest, hVfsIosStdOut);
+- RTVfsIoStrmWrite(hVfsIosStdOut, "Their:\n", sizeof("Their:\n") - 1, true, NULL);
+- RTManifestWriteStandard(hTheirManifest, hVfsIosStdOut);
+-#endif
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "Error parsing '%s': %Rrc", VBOX_EXTPACK_MANIFEST_NAME, rc);
+-
+- RTManifestRelease(hTheirManifest);
+- return rc;
+-}
+-
+-
+-/**
+- * Verifies the file digest (if specified) and returns the SHA-256 of the file.
+- *
+- * @returns
+- * @param hFileManifest Manifest containing a SHA-256 digest of the file
+- * that was calculated as the file was processed.
+- * @param pszFileDigest SHA-256 digest of the file.
+- * @param pStrDigest Where to return the SHA-256 digest. Optional.
+- * @param pszError Where to write an error message on failure.
+- * @param cbError The size of the @a pszError buffer.
+- */
+-static int vboxExtPackVerifyFileDigest(RTMANIFEST hFileManifest, const char *pszFileDigest,
+- RTCString *pStrDigest, char *pszError, size_t cbError)
+-{
+- /*
+- * Extract the SHA-256 entry for the extpack file.
+- */
+- char szCalculatedDigest[RTSHA256_DIGEST_LEN + 1];
+- int rc = RTManifestEntryQueryAttr(hFileManifest, "extpack", NULL /*no name*/, RTMANIFEST_ATTR_SHA256,
+- szCalculatedDigest, sizeof(szCalculatedDigest), NULL);
+- if (RT_SUCCESS(rc))
+- {
+- /*
+- * Convert the two strings to binary form before comparing.
+- * We convert the calculated hash even if we don't have anything to
+- * compare with, just to validate it.
+- */
+- uint8_t abCalculatedHash[RTSHA256_HASH_SIZE];
+- rc = RTSha256FromString(szCalculatedDigest, abCalculatedHash);
+- if (RT_SUCCESS(rc))
+- {
+- if ( pszFileDigest
+- && *pszFileDigest != '\0')
+- {
+- uint8_t abFileHash[RTSHA256_HASH_SIZE];
+- rc = RTSha256FromString(pszFileDigest, abFileHash);
+- if (RT_SUCCESS(rc))
+- {
+- if (memcmp(abFileHash, abCalculatedHash, sizeof(abFileHash)))
+- {
+- vboxExtPackSetError(pszError, cbError, "The extension pack file has changed (SHA-256 mismatch)");
+- rc = VERR_NOT_EQUAL;
+- }
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "Bad SHA-256 '%s': %Rrc", szCalculatedDigest, rc);
+- }
+-
+- /*
+- * Set the output hash on success.
+- */
+- if (pStrDigest && RT_SUCCESS(rc))
+- {
+- try
+- {
+- *pStrDigest = szCalculatedDigest;
+- }
+- catch (std::bad_alloc)
+- {
+- rc = VERR_NO_MEMORY;
+- }
+- }
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "Bad SHA-256 '%s': %Rrc", szCalculatedDigest, rc);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTManifestEntryGetAttr: %Rrc", rc);
+- return rc;
+-}
+-
+-
+-
+-/**
+- * Validates a standard file.
+- *
+- * Generally all files are
+- *
+- * @returns VBox status code, failure message in @a pszError.
+- * @param pszAdjName The adjusted member name.
+- * @param enmType The VFS object type.
+- * @param phVfsObj The pointer to the VFS object handle variable.
+- * This is both input and output.
+- * @param phVfsFile Where to store the handle to the memorized
+- * file. This is NULL for license files.
+- * @param pszError Where to write an error message on failure.
+- * @param cbError The size of the @a pszError buffer.
+- */
+-static int VBoxExtPackValidateStandardFile(const char *pszAdjName, RTVFSOBJTYPE enmType,
+- PRTVFSOBJ phVfsObj, PRTVFSFILE phVfsFile, char *pszError, size_t cbError)
+-{
+- int rc;
+-
+- /*
+- * Make sure it's a file and that it isn't too large.
+- */
+- if (phVfsFile && *phVfsFile != NIL_RTVFSFILE)
+- rc = vboxExtPackReturnError(VERR_DUPLICATE, pszError, cbError,
+- "There can only be one '%s'", pszAdjName);
+- else if (enmType != RTVFSOBJTYPE_IO_STREAM && enmType != RTVFSOBJTYPE_FILE)
+- rc = vboxExtPackReturnError(VERR_NOT_A_FILE, pszError, cbError,
+- "Standard member '%s' is not a file", pszAdjName);
+- else
+- {
+- RTFSOBJINFO ObjInfo;
+- rc = RTVfsObjQueryInfo(*phVfsObj, &ObjInfo, RTFSOBJATTRADD_NOTHING);
+- if (RT_SUCCESS(rc))
+- {
+- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode))
+- rc = vboxExtPackReturnError(VERR_NOT_A_FILE, pszError, cbError,
+- "Standard member '%s' is not a file", pszAdjName);
+- else if (ObjInfo.cbObject >= _1M)
+- rc = vboxExtPackReturnError(VERR_OUT_OF_RANGE, pszError, cbError,
+- "Standard member '%s' is too large: %'RU64 bytes (max 1 MB)",
+- pszAdjName, (uint64_t)ObjInfo.cbObject);
+- else
+- {
+- /*
+- * Make an in memory copy of the stream and check that the file
+- * is UTF-8 clean.
+- */
+- RTVFSIOSTREAM hVfsIos = RTVfsObjToIoStream(*phVfsObj);
+- RTVFSFILE hVfsFile;
+- rc = RTVfsMemorizeIoStreamAsFile(hVfsIos, RTFILE_O_READ, &hVfsFile);
+- if (RT_SUCCESS(rc))
+- {
+- rc = RTVfsIoStrmValidateUtf8Encoding(hVfsIos,
+- RTVFS_VALIDATE_UTF8_BY_RTC_3629 | RTVFS_VALIDATE_UTF8_NO_NULL,
+- NULL);
+- if (RT_SUCCESS(rc))
+- {
+- /*
+- * Replace *phVfsObj with the memorized file.
+- */
+- rc = RTVfsFileSeek(hVfsFile, 0, RTFILE_SEEK_BEGIN, NULL);
+- if (RT_SUCCESS(rc))
+- {
+- RTVfsObjRelease(*phVfsObj);
+- *phVfsObj = RTVfsObjFromFile(hVfsFile);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTVfsFileSeek failed on '%s': %Rrc", pszAdjName, rc);
+- }
+-
+- if (phVfsFile && RT_SUCCESS(rc))
+- *phVfsFile = hVfsFile;
+- else
+- RTVfsFileRelease(hVfsFile);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTVfsMemorizeIoStreamAsFile failed on '%s': %Rrc", pszAdjName, rc);
+- RTVfsIoStrmRelease(hVfsIos);
+- }
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTVfsObjQueryInfo failed on '%s': %Rrc", pszAdjName, rc);
+- }
+- return rc;
+-}
+-
+-
+-/**
+- * Validates a name in an extension pack.
+- *
+- * We restrict the charset to try make sure the extension pack can be unpacked
+- * on all file systems.
+- *
+- * @returns VBox status code, failures with message.
+- * @param pszName The name to validate.
+- * @param pszError Where to store an error message on failure.
+- * @param cbError The size of the buffer @a pszError points to.
+- */
+-static int vboxExtPackValidateMemberName(const char *pszName, char *pszError, size_t cbError)
+-{
+- if (RTPathStartsWithRoot(pszName))
+- return vboxExtPackReturnError(VERR_PATH_IS_NOT_RELATIVE, pszError, cbError, "'%s': starts with root spec", pszName);
+-
+- const char *pszErr = NULL;
+- const char *psz = pszName;
+- int ch;
+- while ((ch = *psz) != '\0')
+- {
+- /* Character set restrictions. */
+- if (ch < 0 || ch >= 128)
+- {
+- pszErr = "Only 7-bit ASCII allowed";
+- break;
+- }
+- if (ch <= 31 || ch == 127)
+- {
+- pszErr = "No control characters are not allowed";
+- break;
+- }
+- if (ch == '\\')
+- {
+- pszErr = "Only backward slashes are not allowed";
+- break;
+- }
+- if (strchr("'\":;*?|[]<>(){}", ch))
+- {
+- pszErr = "The characters ', \", :, ;, *, ?, |, [, ], <, >, (, ), { and } are not allowed";
+- break;
+- }
+-
+- /* Take the simple way out and ban all ".." sequences. */
+- if ( ch == '.'
+- && psz[1] == '.')
+- {
+- pszErr = "Double dot sequence are not allowed";
+- break;
+- }
+-
+- /* Keep the tree shallow or the hardening checks will fail. */
+- if (psz - pszName > VBOX_EXTPACK_MAX_MEMBER_NAME_LENGTH)
+- {
+- pszErr = "Too long";
+- break;
+- }
+-
+- /* advance */
+- psz++;
+- }
+-
+- if (pszErr)
+- return vboxExtPackReturnError(VERR_INVALID_NAME, pszError, cbError,
+- "Bad member name '%s' (pos %zu): %s", pszName, (size_t)(psz - pszName), pszErr);
+- return RTEXITCODE_SUCCESS;
+-}
+-
+-
+-/**
+- * Validates a file in an extension pack.
+- *
+- * @returns VBox status code, failures with message.
+- * @param pszName The name of the file.
+- * @param hVfsObj The VFS object.
+- * @param pszError Where to store an error message on failure.
+- * @param cbError The size of the buffer @a pszError points to.
+- */
+-static int vboxExtPackValidateMemberFile(const char *pszName, RTVFSOBJ hVfsObj, char *pszError, size_t cbError)
+-{
+- int rc = vboxExtPackValidateMemberName(pszName, pszError, cbError);
+- if (RT_SUCCESS(rc))
+- {
+- RTFSOBJINFO ObjInfo;
+- rc = RTVfsObjQueryInfo(hVfsObj, &ObjInfo, RTFSOBJATTRADD_NOTHING);
+- if (RT_SUCCESS(rc))
+- {
+- if (ObjInfo.cbObject >= 9*_1G64)
+- rc = vboxExtPackReturnError(VERR_OUT_OF_RANGE, pszError, cbError,
+- "'%s': too large (%'RU64 bytes)",
+- pszName, (uint64_t)ObjInfo.cbObject);
+- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode))
+- rc = vboxExtPackReturnError(VERR_NOT_A_FILE, pszError, cbError,
+- "The alleged file '%s' has a mode mask stating otherwise (%RTfmode)",
+- pszName, ObjInfo.Attr.fMode);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTVfsObjQueryInfo failed on '%s': %Rrc", pszName, rc);
+- }
+- return rc;
+-}
+-
+-
+-/**
+- * Validates a directory in an extension pack.
+- *
+- * @returns VBox status code, failures with message.
+- * @param pszName The name of the directory.
+- * @param hVfsObj The VFS object.
+- * @param pszError Where to store an error message on failure.
+- * @param cbError The size of the buffer @a pszError points to.
+- */
+-static int vboxExtPackValidateMemberDir(const char *pszName, RTVFSOBJ hVfsObj, char *pszError, size_t cbError)
+-{
+- int rc = vboxExtPackValidateMemberName(pszName, pszError, cbError);
+- if (RT_SUCCESS(rc))
+- {
+- RTFSOBJINFO ObjInfo;
+- rc = RTVfsObjQueryInfo(hVfsObj, &ObjInfo, RTFSOBJATTRADD_NOTHING);
+- if (RT_SUCCESS(rc))
+- {
+- if (!RTFS_IS_DIRECTORY(ObjInfo.Attr.fMode))
+- rc = vboxExtPackReturnError(VERR_NOT_A_DIRECTORY, pszError, cbError,
+- "The alleged directory '%s' has a mode mask saying differently (%RTfmode)",
+- pszName, ObjInfo.Attr.fMode);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTVfsObjQueryInfo failed on '%s': %Rrc", pszName, rc);
+- }
+- return rc;
+-}
+-
+-/**
+- * Validates a member of an extension pack.
+- *
+- * @returns VBox status code, failures with message.
+- * @param pszName The name of the directory.
+- * @param enmType The object type.
+- * @param hVfsObj The VFS object.
+- * @param pszError Where to store an error message on failure.
+- * @param cbError The size of the buffer @a pszError points to.
+- */
+-int VBoxExtPackValidateMember(const char *pszName, RTVFSOBJTYPE enmType, RTVFSOBJ hVfsObj, char *pszError, size_t cbError)
+-{
+- Assert(cbError > 0);
+- *pszError = '\0';
+-
+- int rc;
+- if ( enmType == RTVFSOBJTYPE_FILE
+- || enmType == RTVFSOBJTYPE_IO_STREAM)
+- rc = vboxExtPackValidateMemberFile(pszName, hVfsObj, pszError, cbError);
+- else if ( enmType == RTVFSOBJTYPE_DIR
+- || enmType == RTVFSOBJTYPE_BASE)
+- rc = vboxExtPackValidateMemberDir(pszName, hVfsObj, pszError, cbError);
+- else
+- rc = vboxExtPackReturnError(VERR_UNEXPECTED_FS_OBJ_TYPE, pszError, cbError,
+- "'%s' is not a file or directory (enmType=%d)", pszName, enmType);
+- return rc;
+-}
+-
+-
+-/**
+- * Rewinds the tarball file handle and creates a gunzip | tar chain that
+- * results in a filesystem stream.
+- *
+- * @returns VBox status code, failures with message.
+- * @param hTarballFile The handle to the tarball file.
+- * @param pszError Where to store an error message on failure.
+- * @param cbError The size of the buffer @a pszError points to.
+- * @param phTarFss Where to return the filesystem stream handle.
+- * @param phFileManifest Where to return a manifest where the tarball is
+- * gettting hashed. The entry will be called
+- * "extpack" and be ready when the file system
+- * stream is at an end. Optional.
+- */
+-int VBoxExtPackOpenTarFss(RTFILE hTarballFile, char *pszError, size_t cbError, PRTVFSFSSTREAM phTarFss, PRTMANIFEST phFileManifest)
+-{
+- Assert(cbError > 0);
+- *pszError = '\0';
+- *phTarFss = NIL_RTVFSFSSTREAM;
+-
+- /*
+- * Rewind the file and set up a VFS chain for it.
+- */
+- int rc = RTFileSeek(hTarballFile, 0, RTFILE_SEEK_BEGIN, NULL);
+- if (RT_FAILURE(rc))
+- return vboxExtPackReturnError(rc, pszError, cbError, "Failed seeking to the start of the tarball: %Rrc", rc);
+-
+- RTVFSIOSTREAM hTarballIos;
+- rc = RTVfsIoStrmFromRTFile(hTarballFile, RTFILE_O_READ | RTFILE_O_DENY_WRITE | RTFILE_O_OPEN, true /*fLeaveOpen*/,
+- &hTarballIos);
+- if (RT_FAILURE(rc))
+- return vboxExtPackReturnError(rc, pszError, cbError, "RTVfsIoStrmFromRTFile failed: %Rrc", rc);
+-
+- RTMANIFEST hFileManifest = NIL_RTMANIFEST;
+- rc = RTManifestCreate(0 /*fFlags*/, &hFileManifest);
+- if (RT_SUCCESS(rc))
+- {
+- RTVFSIOSTREAM hPtIos;
+- rc = RTManifestEntryAddPassthruIoStream(hFileManifest, hTarballIos, "extpack", RTMANIFEST_ATTR_SHA256, true /*read*/, &hPtIos);
+- if (RT_SUCCESS(rc))
+- {
+- RTVFSIOSTREAM hGunzipIos;
+- rc = RTZipGzipDecompressIoStream(hPtIos, 0 /*fFlags*/, &hGunzipIos);
+- if (RT_SUCCESS(rc))
+- {
+- RTVFSFSSTREAM hTarFss;
+- rc = RTZipTarFsStreamFromIoStream(hGunzipIos, 0 /*fFlags*/, &hTarFss);
+- if (RT_SUCCESS(rc))
+- {
+- RTVfsIoStrmRelease(hPtIos);
+- RTVfsIoStrmRelease(hGunzipIos);
+- RTVfsIoStrmRelease(hTarballIos);
+- *phTarFss = hTarFss;
+- if (phFileManifest)
+- *phFileManifest = hFileManifest;
+- else
+- RTManifestRelease(hFileManifest);
+- return VINF_SUCCESS;
+- }
+-
+- vboxExtPackSetError(pszError, cbError, "RTZipTarFsStreamFromIoStream failed: %Rrc", rc);
+- RTVfsIoStrmRelease(hGunzipIos);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTZipGzipDecompressIoStream failed: %Rrc", rc);
+- RTVfsIoStrmRelease(hPtIos);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTManifestEntryAddPassthruIoStream failed: %Rrc", rc);
+- RTManifestRelease(hFileManifest);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTManifestCreate failed: %Rrc", rc);
+-
+- RTVfsIoStrmRelease(hTarballIos);
+- return rc;
+-}
+-
+-
+-/**
+- * Validates the extension pack tarball prior to unpacking.
+- *
+- * Operations performed:
+- * - Mandatory files.
+- * - Manifest check.
+- * - Manifest seal check.
+- * - XML check, match name.
+- *
+- * @returns VBox status code, failures with message.
+- * @param hTarballFile The handle to open the @a pszTarball file.
+- * @param pszExtPackName The name of the extension pack name. NULL if
+- * the name is not fixed.
+- * @param pszTarball The name of the tarball in case we have to
+- * complain about something.
+- * @param pszTarballDigest The SHA-256 digest of the tarball. Empty string
+- * if no digest available.
+- * @param pszError Where to store an error message on failure.
+- * @param cbError The size of the buffer @a pszError points to.
+- * @param phValidManifest Where to optionally return the handle to fully
+- * validated the manifest for the extension pack.
+- * This includes all files.
+- * @param phXmlFile Where to optionally return the memorized XML
+- * file.
+- * @param pStrDigest Where to return the digest of the file.
+- * Optional.
+- */
+-int VBoxExtPackValidateTarball(RTFILE hTarballFile, const char *pszExtPackName,
+- const char *pszTarball, const char *pszTarballDigest,
+- char *pszError, size_t cbError,
+- PRTMANIFEST phValidManifest, PRTVFSFILE phXmlFile, RTCString *pStrDigest)
+-{
+- /*
+- * Clear return values.
+- */
+- if (phValidManifest)
+- *phValidManifest = NIL_RTMANIFEST;
+- if (phXmlFile)
+- *phXmlFile = NIL_RTVFSFILE;
+- Assert(cbError > 1);
+- *pszError = '\0';
+- NOREF(pszTarball);
+-
+- /*
+- * Open the tar.gz filesystem stream and set up an manifest in-memory file.
+- */
+- RTMANIFEST hFileManifest;
+- RTVFSFSSTREAM hTarFss;
+- int rc = VBoxExtPackOpenTarFss(hTarballFile, pszError, cbError, &hTarFss, &hFileManifest);
+- if (RT_FAILURE(rc))
+- return rc;
+-
+- RTMANIFEST hOurManifest;
+- rc = RTManifestCreate(0 /*fFlags*/, &hOurManifest);
+- if (RT_SUCCESS(rc))
+- {
+- /*
+- * Process the tarball (would be nice to move this to a function).
+- */
+- RTVFSFILE hXmlFile = NIL_RTVFSFILE;
+- RTVFSFILE hManifestFile = NIL_RTVFSFILE;
+- RTVFSFILE hSignatureFile = NIL_RTVFSFILE;
+- for (;;)
+- {
+- /*
+- * Get the next stream object.
+- */
+- char *pszName;
+- RTVFSOBJ hVfsObj;
+- RTVFSOBJTYPE enmType;
+- rc = RTVfsFsStrmNext(hTarFss, &pszName, &enmType, &hVfsObj);
+- if (RT_FAILURE(rc))
+- {
+- if (rc != VERR_EOF)
+- vboxExtPackSetError(pszError, cbError, "RTVfsFsStrmNext failed: %Rrc", rc);
+- else
+- rc = VINF_SUCCESS;
+- break;
+- }
+- const char *pszAdjName = pszName[0] == '.' && pszName[1] == '/' ? &pszName[2] : pszName;
+-
+- /*
+- * Check the type & name validity, performing special tests on
+- * standard extension pack member files.
+- *
+- * N.B. We will always reach the end of the loop before breaking on
+- * failure - cleanup reasons.
+- */
+- rc = VBoxExtPackValidateMember(pszName, enmType, hVfsObj, pszError, cbError);
+- if (RT_SUCCESS(rc))
+- {
+- PRTVFSFILE phVfsFile = NULL;
+- if (!strcmp(pszAdjName, VBOX_EXTPACK_DESCRIPTION_NAME))
+- phVfsFile = &hXmlFile;
+- else if (!strcmp(pszAdjName, VBOX_EXTPACK_MANIFEST_NAME))
+- phVfsFile = &hManifestFile;
+- else if (!strcmp(pszAdjName, VBOX_EXTPACK_SIGNATURE_NAME))
+- phVfsFile = &hSignatureFile;
+- else if (!strncmp(pszAdjName, VBOX_EXTPACK_LICENSE_NAME_PREFIX, sizeof(VBOX_EXTPACK_LICENSE_NAME_PREFIX) - 1))
+- rc = VBoxExtPackValidateStandardFile(pszAdjName, enmType, &hVfsObj, NULL, pszError, cbError);
+- if (phVfsFile)
+- rc = VBoxExtPackValidateStandardFile(pszAdjName, enmType, &hVfsObj, phVfsFile, pszError, cbError);
+- }
+-
+- /*
+- * Add any I/O stream to the manifest
+- */
+- if ( RT_SUCCESS(rc)
+- && ( enmType == RTVFSOBJTYPE_FILE
+- || enmType == RTVFSOBJTYPE_IO_STREAM))
+- {
+- RTVFSIOSTREAM hVfsIos = RTVfsObjToIoStream(hVfsObj);
+- rc = RTManifestEntryAddIoStream(hOurManifest, hVfsIos, pszAdjName, RTMANIFEST_ATTR_SIZE | RTMANIFEST_ATTR_SHA256);
+- if (RT_FAILURE(rc))
+- vboxExtPackSetError(pszError, cbError, "RTManifestEntryAddIoStream failed on '%s': %Rrc", pszAdjName, rc);
+- RTVfsIoStrmRelease(hVfsIos);
+- }
+-
+- /*
+- * Clean up and break out on failure.
+- */
+- RTVfsObjRelease(hVfsObj);
+- RTStrFree(pszName);
+- if (RT_FAILURE(rc))
+- break;
+- }
+-
+- /*
+- * Check the integrity of the tarball file.
+- */
+- if (RT_SUCCESS(rc))
+- {
+- RTVfsFsStrmRelease(hTarFss);
+- hTarFss = NIL_RTVFSFSSTREAM;
+- rc = vboxExtPackVerifyFileDigest(hFileManifest, pszTarballDigest, pStrDigest, pszError, cbError);
+- }
+-
+- /*
+- * If we've successfully processed the tarball, verify that the
+- * mandatory files are present.
+- */
+- if (RT_SUCCESS(rc))
+- {
+- if (hXmlFile == NIL_RTVFSFILE)
+- rc = vboxExtPackReturnError(VERR_MISSING, pszError, cbError, "Mandator file '%s' is missing", VBOX_EXTPACK_DESCRIPTION_NAME);
+- if (hManifestFile == NIL_RTVFSFILE)
+- rc = vboxExtPackReturnError(VERR_MISSING, pszError, cbError, "Mandator file '%s' is missing", VBOX_EXTPACK_MANIFEST_NAME);
+- if (hSignatureFile == NIL_RTVFSFILE)
+- rc = vboxExtPackReturnError(VERR_MISSING, pszError, cbError, "Mandator file '%s' is missing", VBOX_EXTPACK_SIGNATURE_NAME);
+- }
+-
+- /*
+- * Check the manifest and it's signature.
+- */
+- if (RT_SUCCESS(rc))
+- rc = vboxExtPackVerifyManifestAndSignature(hOurManifest, hManifestFile, hSignatureFile, pszError, cbError);
+-
+- /*
+- * Check the XML.
+- */
+- if (RT_SUCCESS(rc))
+- rc = vboxExtPackVerifyXml(hXmlFile, pszExtPackName, pszError, cbError);
+-
+- /*
+- * Returns objects.
+- */
+- if (RT_SUCCESS(rc))
+- {
+- if (phValidManifest)
+- {
+- RTManifestRetain(hOurManifest);
+- *phValidManifest = hOurManifest;
+- }
+- if (phXmlFile)
+- {
+- RTVfsFileRetain(hXmlFile);
+- *phXmlFile = hXmlFile;
+- }
+- }
+-
+- /*
+- * Release our object references.
+- */
+- RTManifestRelease(hOurManifest);
+- RTVfsFileRelease(hXmlFile);
+- RTVfsFileRelease(hManifestFile);
+- RTVfsFileRelease(hSignatureFile);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTManifestCreate failed: %Rrc", rc);
+- RTVfsFsStrmRelease(hTarFss);
+- RTManifestRelease(hFileManifest);
+-
+- return rc;
+-}
+-
+--- VirtualBox-4.1.18.orig/include/Makefile.kmk 2012-06-20 10:07:49.000000000 -0300
++++ VirtualBox-4.1.18/include/Makefile.kmk 2012-07-24 21:11:57.007068865 -0300
+@@ -51,7 +51,6 @@
+ VBox/vd-cache-plugin.h \
+ VBox/vmm/uvm.h \
+ VBox/vscsi.h \
+- $(wildcard VBox/ExtPack/*.h ) \
+ iprt/alloca.h \
+ iprt/tcp.h \
+ iprt/localipc.h \
+--- VirtualBox-4.1.18.orig/src/Makefile.kmk 2012-06-20 10:07:57.000000000 -0300
++++ VirtualBox-4.1.18/src/Makefile.kmk 2012-07-24 22:51:10.206996034 -0300
+@@ -26,14 +26,6 @@
+ include $(PATH_SUB_CURRENT)/VBox/Makefile.kmk
+ include $(PATH_SUB_CURRENT)/libs/Makefile.kmk
+
+-else if defined(VBOX_ONLY_EXTPACKS)
+- include $(PATH_SUB_CURRENT)/bldprogs/Makefile.kmk
+- include $(PATH_SUB_CURRENT)/VBox/Makefile.kmk
+- include $(PATH_SUB_CURRENT)/libs/Makefile.kmk
+- ifndef VBOX_ONLY_EXTPACKS_USE_IMPLIBS
+- include $(PATH_SUB_CURRENT)/recompiler/Makefile.kmk
+- endif
+-
+ else if defined(VBOX_ONLY_TESTSUITE)
+ include $(PATH_SUB_CURRENT)/libs/Makefile.kmk
+ include $(PATH_SUB_CURRENT)/VBox/Makefile.kmk
+--- VirtualBox-4.1.18.orig/src/VBox/Makefile.kmk 2012-07-24 21:19:55.565641784 -0300
++++ VirtualBox-4.1.18/src/VBox/Makefile.kmk 2012-07-24 22:12:55.429156962 -0300
+@@ -33,19 +33,6 @@
+ include $(PATH_SUB_CURRENT)/HostDrivers/Makefile.kmk
+ include $(PATH_SUB_CURRENT)/Frontends/Makefile.kmk
+
+-else ifdef VBOX_ONLY_EXTPACKS
+- include $(PATH_SUB_CURRENT)/Runtime/Makefile.kmk
+- include $(PATH_SUB_CURRENT)/Devices/Makefile.kmk
+- include $(PATH_SUB_CURRENT)/HostDrivers/Makefile.kmk
+- include $(PATH_SUB_CURRENT)/ExtPacks/Makefile.kmk
+- ifdef VBOX_WITH_VRDP
+- include $(PATH_SUB_CURRENT)/RDP/Makefile.kmk
+- endif
+- include $(PATH_SUB_CURRENT)/VMM/Makefile.kmk
+- ifndef VBOX_ONLY_EXTPACKS_USE_IMPLIBS
+- include $(PATH_SUB_CURRENT)/Disassembler/Makefile.kmk
+- endif
+-
+ else ifdef VBOX_ONLY_SDK
+ include $(PATH_SUB_CURRENT)/Main/Makefile.kmk
+ ifdef VBOX_WITH_VRDP
+@@ -92,9 +79,6 @@
+ if1of ($(KBUILD_TARGET_ARCH), amd64 x86)
+ include $(PATH_SUB_CURRENT)/NetworkServices/Makefile.kmk
+ endif
+- ifndef VBOX_OSE
+- include $(PATH_SUB_CURRENT)/ExtPacks/Makefile.kmk
+- endif
+ ifdef VBOX_WITH_INSTALLER
+ include $(PATH_SUB_CURRENT)/Installer/Makefile.kmk # Keep this last.
+ endif
+--- VirtualBox-4.1.18/src/libs/Makefile.kmk.orig 2012-07-24 21:23:26.938013023 -0300
++++ VirtualBox-4.1.18/src/libs/Makefile.kmk 2012-07-24 21:43:42.557911752 -0300
+@@ -48,13 +48,6 @@
+ include $(PATH_SUB_CURRENT)/kStuff/Makefile.kmk
+ endif
+
+-# OpenSSL.
+-if !defined(VBOX_ONLY_SDK) \
+- && ( "$(SDK_VBOX_OPENSSL_INCS)" == "$(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)" \
+- || defined(VBOX_WITH_EXTPACK_PUEL_BUILD))
+- include $(PATH_SUB_CURRENT)/openssl-0.9.8t/Makefile.kmk
+-endif
+-
+ # libjpeg for VRDP video redirection
+ if defined(VBOX_WITH_VRDP) && defined(VBOX_WITH_VRDP_VIDEO_CHANNEL)
+ include $(PATH_SUB_CURRENT)/jpeg-8a/Makefile.kmk
+--- VirtualBox-4.1.18.orig/src/VBox/Devices/Makefile.kmk 2012-07-24 23:06:45.916276235 -0300
++++ VirtualBox-4.1.18/src/VBox/Devices/Makefile.kmk 2012-07-24 23:17:00.202963228 -0300
+@@ -21,9 +21,7 @@
+
+ # Include sub-makefiles.
+ include $(PATH_SUB_CURRENT)/testcase/Makefile.kmk
+-if defined(VBOX_WITH_INTEL_PXE) || defined(VBOX_ONLY_EXTPACKS)
+- include $(PATH_SUB_CURRENT)/PC/PXE/Makefile.kmk
+-else if defined(VBOX_WITH_PXE_ROM) && !defined(VBOX_WITHOUT_ETHERBOOT)
++if defined(VBOX_WITH_PXE_ROM) && !defined(VBOX_WITHOUT_ETHERBOOT)
+ include $(PATH_SUB_CURRENT)/PC/Etherboot-src/Makefile.kmk
+ endif
+ if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file.
+@@ -57,9 +55,6 @@
+ ifdef VBOX_WITH_USB
+ VBoxDDU_DEFS += VBOX_WITH_USB IN_USBLIB
+ VBoxDDU_SDKS.win = WINPSDK W2K3DDK
+- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
+- VBoxDDU_DEFS += VBOX_WITH_EHCI_IMPL
+- endif
+ ifdef VBOX_WITH_NEW_USB_CODE_ON_DARWIN
+ VBoxDDU_DEFS.darwin += VBOX_WITH_NEW_USB_CODE_ON_DARWIN
+ endif
+@@ -122,9 +117,6 @@
+ VBoxDD_DEFS = VBOX_ACPI
+ ifdef VBOX_WITH_USB
+ VBoxDD_DEFS += VBOX_WITH_USB
+- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
+- VBoxDD_DEFS += VBOX_WITH_EHCI_IMPL
+- endif
+ endif
+ ifdef VBOX_WITH_VUSB
+ VBoxDD_DEFS += VBOX_WITH_VUSB
+@@ -446,11 +438,6 @@
+ endif
+ ifdef VBOX_WITH_USB
+ DevicesR3_DEFS += VBOX_WITH_USB
+- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
+- DevicesR3_DEFS += VBOX_WITH_EHCI_IMPL
+- DevicesR3_SOURCES += \
+- USB/DevEHCI.cpp
+- endif
+ endif
+ if defined(VBOX_WITH_PCI_PASSTHROUGH_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
+ DevicesR3_DEFS += VBOX_WITH_PCI_PASSTHROUGH_IMPL
+@@ -607,11 +594,6 @@
+
+ ifdef VBOX_WITH_USB
+ VBoxDDGC_DEFS += VBOX_WITH_USB
+- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
+- VBoxDDGC_DEFS += VBOX_WITH_EHCI_IMPL
+- VBoxDDGC_SOURCES += \
+- USB/DevEHCI.cpp
+- endif
+ endif
+
+ ifdef VBOX_WITH_VIDEOHWACCEL
+@@ -711,11 +693,6 @@
+ endif
+ ifdef VBOX_WITH_USB
+ VBoxDDR0_DEFS += VBOX_WITH_USB
+- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
+- VBoxDDR0_DEFS += VBOX_WITH_EHCI_IMPL
+- VBoxDDR0_SOURCES += \
+- USB/DevEHCI.cpp
+- endif
+ endif
+
+ if defined(VBOX_WITH_PCI_PASSTHROUGH_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
+@@ -1204,49 +1181,5 @@
+
+ endif # !VBOX_ONLY_EXTPACKS
+
+-if defined(VBOX_WITH_EXTPACK_PUEL) && defined(VBOX_WITH_EXTPACK_PUEL_BUILD)
+- #
+- # The EHCI (USB 2.0) Extension Pack Modules.
+- #
+- if defined(VBOX_WITH_USB)
+- DLLS += VBoxEhciR3
+- VBoxEhciR3_TEMPLATE = VBoxR3ExtPackPuel
+- VBoxEhciR3_SOURCES = USB/DevEHCI.cpp
+-
+- SYSMODS += VBoxEhciR0
+- VBoxEhciR0_TEMPLATE = VBoxR0ExtPackPuel
+- VBoxEhciR0_SOURCES = USB/DevEHCI.cpp
+-
+- ifdef VBOX_WITH_RAW_MODE
+- SYSMODS += VBoxEhciRC
+- VBoxEhciRC_TEMPLATE = VBoxRcExtPackPuel
+- VBoxEhciRC_SOURCES = USB/DevEHCI.cpp
+- endif
+- endif
+-
+- if defined(VBOX_WITH_PCI_PASSTHROUGH)
+- DLLS += VBoxPciRawR3
+- VBoxPciRawR3_TEMPLATE = VBoxR3ExtPackPuel
+- VBoxPciRawR3_SOURCES = Bus/DevPciRaw.cpp
+-
+- DLLS += VBoxPciRawDrv
+- VBoxPciRawDrv_TEMPLATE = VBoxR3ExtPackPuel
+- VBoxPciRawDrv_SOURCES = Bus/DrvPciRaw.cpp
+-
+- SYSMODS += VBoxPciRawR0
+- VBoxPciRawR0_TEMPLATE = VBoxR0ExtPackPuel
+- VBoxPciRawR0_SOURCES = Bus/DevPciRaw.cpp
+-
+- Bus/DevPciRaw.cpp_INCS = Bus
+- endif
+-
+- #
+- # The Intel PXE rom.
+- #
+- INSTALLS += VBoxExtPackPuelInsRoms
+- VBoxExtPackPuelInsRoms_TEMPLATE = VBoxInsExtPackPuel
+- VBoxExtPackPuelInsRoms_SOURCES = PC/PXE/PXE-Intel.rom=>PXE-Intel.rom
+-endif # VBOX_WITH_EXTPACK_PUEL
+-
+ include $(KBUILD_PATH)/subfooter.kmk
+
+--- VirtualBox-4.1.18.orig/src/VBox/Main/Makefile.kmk 2012-07-24 23:38:25.304126039 -0300
++++ VirtualBox-4.1.18/src/VBox/Main/Makefile.kmk 2012-07-24 23:38:25.350789964 -0300
+@@ -230,14 +230,12 @@
+ $(if $(VBOX_USB_WITH_SYSFS),VBOX_USB_WITH_SYSFS,) \
+ $(if $(VBOX_USB_WITH_INOTIFY),VBOX_USB_WITH_INOTIFY,) \
+ $(if $(VBOX_WITH_LIVE_MIGRATION),VBOX_WITH_LIVE_MIGRATION,) \
+- $(if $(VBOX_WITH_EXTPACK),VBOX_WITH_EXTPACK,) \
+ $(if $(VBOX_WITH_VUSB),VBOX_WITH_VUSB,) \
+ $(if $(VBOX_WITH_S3),VBOX_WITH_S3,) \
+ $(if $(VBOX_WITH_PCI_PASSTHROUGH),VBOX_WITH_PCI_PASSTHROUGH,)
+ ifdef VBOX_WITH_USB
+ VBoxSVC_DEFS += \
+ VBOX_WITH_USB \
+- $(if $(VBOX_WITH_EHCI),VBOX_WITH_EHCI,) \
+ $(if $(VBOX_WITH_NEW_USB_CODE_ON_DARWIN),VBOX_WITH_NEW_USB_CODE_ON_DARWIN,)
+ endif
+ VBoxSVC_DEFS.win += VBOX_COM_OUTOFPROC_MODULE
+@@ -290,7 +288,6 @@
+ src-all/SharedFolderImpl.cpp \
+ src-all/VirtualBoxBase.cpp \
+ src-all/VirtualBoxErrorInfoImpl.cpp \
+- $(if $(VBOX_WITH_EXTPACK),src-all/ExtPackManagerImpl.cpp src-all/ExtPackUtil.cpp,) \
+ src-server/ApplianceImpl.cpp \
+ src-server/ApplianceImplExport.cpp \
+ src-server/ApplianceImplImport.cpp \
+@@ -543,8 +540,6 @@
+ $(if $(VBOX_WITH_HGSMI),VBOX_WITH_HGSMI,) \
+ $(if $(VBOX_WITH_VIDEOHWACCEL),VBOX_WITH_VIDEOHWACCEL,) \
+ $(if $(VBOX_WITH_USB),VBOX_WITH_USB,) \
+- $(if-expr defined(VBOX_WITH_EHCI) && defined(VBOX_WITH_USB),VBOX_WITH_EHCI,) \
+- $(if $(VBOX_WITH_EXTPACK),VBOX_WITH_EXTPACK,) \
+ $(if $(VBOX_WITH_PCI_PASSTHROUGH),VBOX_WITH_PCI_PASSTHROUGH,)
+
+ VBoxC_DEFS.darwin.x86 = VBOX_WITH_2X_4GB_ADDR_SPACE
+@@ -602,7 +597,6 @@
+ src-all/SharedFolderImpl.cpp \
+ src-all/VirtualBoxBase.cpp \
+ src-all/VirtualBoxErrorInfoImpl.cpp \
+- $(if $(VBOX_WITH_EXTPACK),src-all/ExtPackManagerImpl.cpp src-all/ExtPackUtil.cpp,) \
+ $(if $(VBOX_WITH_USB_VIDEO),src-client/UsbWebcamInterface.cpp,) \
+ $(if $(VBOX_WITH_USB_CARDREADER),src-client/UsbCardReader.cpp,) \
+ src-client/AdditionsFacilityImpl.cpp \
+@@ -711,22 +705,6 @@
+ endif # !win
+
+
+-#
+-# The VBoxExtPackHelperApp.
+-#
+-ifdef VBOX_WITH_EXTPACK
+- PROGRAMS += VBoxExtPackHelperApp
+- VBoxExtPackHelperApp_TEMPLATE = VBoxR3SetUidToRoot
+- VBoxExtPackHelperApp_LDFLAGS.darwin = -framework Security
+- VBoxExtPackHelperApp_LDFLAGS.win = /SUBSYSTEM:windows
+- VBoxExtPackHelperApp_SOURCES = \
+- src-helper-apps/VBoxExtPackHelperApp.cpp \
+- src-all/ExtPackUtil.cpp
+- VBoxExtPackHelperApp_LIBS = \
+- $(LIB_RUNTIME)
+-endif # VBOX_WITH_EXTPACK
+-
+-
+ endif # !VBOX_ONLY_SDK (the ifndef is far above)
+
+
+--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/Makefile.kmk 2012-07-24 23:25:04.575825175 -0300
++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/Makefile.kmk 2012-07-24 23:25:04.619156084 -0300
+@@ -888,7 +888,6 @@
+ $(VBOX_MACOSX_ICON_FILE)=>Resources/virtualbox.icns \
+ $(VBOX_BRAND_GUI_VBOX_64PX_PNG)=>Resources/virtualbox.png \
+ $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-vbox.icns=>Resources/virtualbox-vbox.icns \
+- $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-vbox-extpack.icns=>Resources/virtualbox-vbox-extpack.icns \
+ $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-ovf.icns=>Resources/virtualbox-ovf.icns \
+ $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-ova.icns=>Resources/virtualbox-ova.icns \
+ $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-vdi.icns=>Resources/virtualbox-vdi.icns \
+--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-24 23:28:17.985011038 -0300
++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-24 23:28:18.051673913 -0300
+@@ -167,18 +167,6 @@
+ <file alias="status_check_32px.png">images/status_check_32px.png</file>
+ <file alias="status_error_16px.png">images/status_error_16px.png</file>
+ <file alias="status_error_32px.png">images/status_error_32px.png</file>
+- <file alias="extension_pack_16px.png">images/extension_pack_16px.png</file>
+- <file alias="extension_pack_disabled_16px.png">images/extension_pack_disabled_16px.png</file>
+- <file alias="extension_pack_32px.png">images/extension_pack_32px.png</file>
+- <file alias="extension_pack_disabled_32px.png">images/extension_pack_disabled_32px.png</file>
+- <file alias="extension_pack_install_16px.png">images/extension_pack_install_16px.png</file>
+- <file alias="extension_pack_install_disabled_16px.png">images/extension_pack_install_disabled_16px.png</file>
+- <file alias="extension_pack_install_32px.png">images/extension_pack_install_32px.png</file>
+- <file alias="extension_pack_install_disabled_32px.png">images/extension_pack_install_disabled_32px.png</file>
+- <file alias="extension_pack_uninstall_16px.png">images/extension_pack_uninstall_16px.png</file>
+- <file alias="extension_pack_uninstall_disabled_16px.png">images/extension_pack_uninstall_disabled_16px.png</file>
+- <file alias="extension_pack_uninstall_32px.png">images/extension_pack_uninstall_32px.png</file>
+- <file alias="extension_pack_uninstall_disabled_32px.png">images/extension_pack_uninstall_disabled_32px.png</file>
+ <file alias="proxy_16px.png">images/proxy_16px.png</file>
+ <file alias="proxy_disabled_16px.png">images/proxy_disabled_16px.png</file>
+ <file alias="proxy_32px.png">images/proxy_32px.png</file>
+--- VirtualBox-4.1.18.orig/src/VBox/Installer/linux/Makefile.kmk 2012-07-25 00:32:00.780012664 -0300
++++ VirtualBox-4.1.18/src/VBox/Installer/linux/Makefile.kmk 2012-07-25 00:32:00.806677728 -0300
+@@ -170,11 +170,6 @@
+ VBox.sh \
+ VBox.png
+
+-ifdef VBOX_WITH_EXTPACK
+- VBOX_LNX_STRIP_BIN += \
+- VBoxExtPackHelperApp
+-endif
+-
+ # Qt4 GUI
+ ifdef VBOX_WITH_QTGUI
+ include $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/nls/ApprovedLanguages.kmk
+@@ -286,7 +281,7 @@
+
+ VBOX_MIME_ICONS = \
+ $(addprefix $(PATH_ROOT)/src/VBox/Resources/other/,\
+- $(foreach f,ova ovf vbox vbox-extpack vdi vmdk vhd hdd, \
++ $(foreach f,ova ovf vbox vdi vmdk vhd hdd, \
+ $(foreach s,16 20 24 32 48 64 72 96 128 256,\
+ virtualbox-$(f)-$(s)px.png=>$(s)x$(s)/virtualbox-$(f).png)))
+
+--- VirtualBox-4.1.18.orig/src/VBox/Installer/win/Makefile.kmk 2012-07-25 00:34:52.253398525 -0300
++++ VirtualBox-4.1.18/src/VBox/Installer/win/Makefile.kmk 2012-07-25 00:34:52.300062531 -0300
+@@ -435,7 +435,6 @@
+ -E 'VBOX_WITH_DEBUGGER_GUI=$(if-expr defined(VBOX_WITH_DEBUGGER_GUI) && defined(VBOX_WITH_QTGUI),yes,no)' \
+ -E 'VBOX_WITH_DOCS_PACKING=$(if $(VBOX_WITH_DOCS_PACKING),yes,no)' \
+ -E 'VBOX_WITH_EFIFW_PACKING=$(if $(VBOX_WITH_EFIFW_PACKING),yes,no)' \
+- -E 'VBOX_WITH_EXTPACK=$(if $(VBOX_WITH_EXTPACK),yes,no)' \
+ -E 'VBOX_WITH_GUEST_CONTROL=$(if $(VBOX_WITH_GUEST_CONTROL),yes,no)' \
+ -E 'VBOX_WITH_GUEST_PROPS=$(if $(VBOX_WITH_GUEST_PROPS),yes,no)' \
+ -E 'VBOX_WITH_NETFLT=$(if $(VBOX_WITH_NETFLT),yes,no)' \
+--- VirtualBox-4.1.18.orig/src/VBox/Installer/darwin/Makefile.kmk 2012-07-25 00:36:55.929571374 -0300
++++ VirtualBox-4.1.18/src/VBox/Installer/darwin/Makefile.kmk 2012-07-25 00:36:55.959569630 -0300
+@@ -629,7 +629,6 @@
+ MacOS/VirtualBoxVM \
+ MacOS/VBoxNetAdpCtl \
+ MacOS/VBoxNetDHCP \
+- MacOS/VBoxExtPackHelperApp \
+ MacOS/VBoxBalloonCtrl
+ ifdef VBOX_WITH_WEBSERVICES
+ VBOX_DI_VBAPP_PROGS += \
+@@ -659,7 +658,6 @@
+ Resources/virtualbox.icns \
+ Resources/virtualbox.png \
+ Resources/virtualbox-vbox.icns \
+- Resources/virtualbox-vbox-extpack.icns \
+ Resources/virtualbox-ovf.icns \
+ Resources/virtualbox-ova.icns \
+ Resources/virtualbox-vdi.icns \
+--- VirtualBox-4.1.18/src/VBox/Installer/solaris/Makefile.kmk.orig 2012-07-25 00:38:48.476398293 -0300
++++ VirtualBox-4.1.18/src/VBox/Installer/solaris/Makefile.kmk 2012-07-25 00:38:48.516396159 -0300
+@@ -185,12 +185,12 @@
+
+ VBOX_MIME_ICONS = \
+ $(addprefix $(PATH_ROOT)/src/VBox/Resources/other/,\
+- $(foreach f,ova ovf vbox vbox-extpack vdi vmdk vhd hdd, \
++ $(foreach f,ova ovf vbox vdi vmdk vhd hdd, \
+ $(foreach s,16 20 24 32 48 64 72 96 128 256,\
+ virtualbox-$(f)-$(s)px.png=>$(s)x$(s)/mimetypes/virtualbox-$(f).png)))
+
+ SOLARIS_COMMON_ICONS = \
+- $(foreach f,ova ovf vbox vbox-extpack vdi vmdk vhd hdd, \
++ $(foreach f,ova ovf vbox vdi vmdk vhd hdd, \
+ $(foreach s,16 20 24 32 48 64 72 96 128 256,\
+ $(s)x$(s)/mimetypes/virtualbox-$(f).png))
+
+@@ -210,7 +210,6 @@
+ $(if $(VBOX_WITH_VBOXSDL),VBoxSDL,) \
+ $(if $(VBOX_WITH_NETADP),VBoxNetAdpCtl,) \
+ VBoxNetDHCP \
+- $(if $(VBOX_WITH_EXTPACK),VBoxExtPackHelperApp,) \
+ VBoxSVC \
+ $(if $(VBOX_WITH_CROGL),VBoxTestOGL,) \
+ VBoxXPCOMIPCD \
+--- VirtualBox-4.1.18.orig/src/VBox/Runtime/Makefile.kmk 2012-07-25 00:40:58.745522450 -0300
++++ VirtualBox-4.1.18/src/VBox/Runtime/Makefile.kmk 2012-07-25 00:40:58.782186960 -0300
+@@ -53,15 +53,6 @@
+ #
+ LIBRARIES += RuntimeR3 RuntimeBldProg
+
+-else ifdef VBOX_ONLY_EXTPACKS_USE_IMPLIBS
+- #
+- # Build docs only - need just regular R3 runtime.
+- #
+- LIBRARIES += RuntimeBldProg
+- LIBRARIES.solaris += RuntimeR0Stub
+- LIBRARIES.win += RuntimeR0Stub RuntimeRCStub
+- include $(PATH_SUB_CURRENT)/tools/Makefile.kmk
+-
+ else # !VBOX_ONLY_ADDITIONS && !VBOX_ONLY_TESTSUITE && !VBOX_ONLY_DOCS
+
+ #
diff --git a/libre/virtualbox-libre-modules/linux34.patch b/libre/virtualbox-libre-modules/linux34.patch
new file mode 100644
index 000000000..05ec78557
--- /dev/null
+++ b/libre/virtualbox-libre-modules/linux34.patch
@@ -0,0 +1,12 @@
+diff -Nur VirtualBox-4.1.14.orig/Config.kmk VirtualBox-4.1.14/Config.kmk
+--- VirtualBox-4.1.14.orig/Config.kmk 2012-04-26 16:56:21.000000000 +0000
++++ VirtualBox-4.1.14/Config.kmk 2012-05-21 14:35:22.348398884 +0000
+@@ -2856,7 +2856,7 @@
+ TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 -mno-red-zone -mcmodel=kernel -mno-sse -mno-mmx -mno-sse2 -mno-3dnow \
+ -fno-reorder-blocks -ffreestanding -fno-asynchronous-unwind-tables -funit-at-a-time \
+ -Wno-sign-compare -Wdeclaration-after-statement
+-TEMPLATE_VBOXR0DRV_CXXFLAGS = $(filter-out -Wstrict-prototypes -Wno-pointer-sign -ffreestanding -Wdeclaration-after-statement -Werror-implicit-function-declaration,$(TEMPLATE_VBOXR0DRV_CFLAGS) $(TEMPLATE_VBOXR0DRV_CFLAGS.$(KBUILD_TARGET_ARCH))) -fno-exceptions -fno-rtti
++TEMPLATE_VBOXR0DRV_CXXFLAGS = $(filter-out -Wstrict-prototypes -Wno-pointer-sign -ffreestanding -Wdeclaration-after-statement -Werror-implicit-function-declaration,$(TEMPLATE_VBOXR0DRV_CFLAGS) $(TEMPLATE_VBOXR0DRV_CFLAGS.$(KBUILD_TARGET_ARCH))) -fno-exceptions -fno-rtti -fpermissive
+ ifndef VBOX_LINUX_VERSION_2_4
+ # 2.6
+ TEMPLATE_VBOXR0DRV_SYSSUFF = .ko
diff --git a/libre/virtualbox-libre-modules/os_blag.png b/libre/virtualbox-libre-modules/os_blag.png
new file mode 100644
index 000000000..61995ca10
--- /dev/null
+++ b/libre/virtualbox-libre-modules/os_blag.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules/os_blag_64.png b/libre/virtualbox-libre-modules/os_blag_64.png
new file mode 100644
index 000000000..aa4463a97
--- /dev/null
+++ b/libre/virtualbox-libre-modules/os_blag_64.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules/os_dragora.png b/libre/virtualbox-libre-modules/os_dragora.png
new file mode 100644
index 000000000..d1df45880
--- /dev/null
+++ b/libre/virtualbox-libre-modules/os_dragora.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules/os_dragora_64.png b/libre/virtualbox-libre-modules/os_dragora_64.png
new file mode 100644
index 000000000..64bcecf20
--- /dev/null
+++ b/libre/virtualbox-libre-modules/os_dragora_64.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules/os_dynebolic.png b/libre/virtualbox-libre-modules/os_dynebolic.png
new file mode 100644
index 000000000..67b07d4c0
--- /dev/null
+++ b/libre/virtualbox-libre-modules/os_dynebolic.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules/os_gnewsense.png b/libre/virtualbox-libre-modules/os_gnewsense.png
new file mode 100644
index 000000000..76d9e38b3
--- /dev/null
+++ b/libre/virtualbox-libre-modules/os_gnewsense.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules/os_gnewsense_64.png b/libre/virtualbox-libre-modules/os_gnewsense_64.png
new file mode 100644
index 000000000..8859c34e8
--- /dev/null
+++ b/libre/virtualbox-libre-modules/os_gnewsense_64.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules/os_gnu.png b/libre/virtualbox-libre-modules/os_gnu.png
new file mode 100644
index 000000000..26c4550f9
--- /dev/null
+++ b/libre/virtualbox-libre-modules/os_gnu.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules/os_gnu_64.png b/libre/virtualbox-libre-modules/os_gnu_64.png
new file mode 100644
index 000000000..4161634e9
--- /dev/null
+++ b/libre/virtualbox-libre-modules/os_gnu_64.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules/os_gnuhurd.png b/libre/virtualbox-libre-modules/os_gnuhurd.png
new file mode 100644
index 000000000..26c4550f9
--- /dev/null
+++ b/libre/virtualbox-libre-modules/os_gnuhurd.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules/os_gnulinux.png b/libre/virtualbox-libre-modules/os_gnulinux.png
new file mode 100644
index 000000000..26c4550f9
--- /dev/null
+++ b/libre/virtualbox-libre-modules/os_gnulinux.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules/os_gnulinux_64.png b/libre/virtualbox-libre-modules/os_gnulinux_64.png
new file mode 100644
index 000000000..4161634e9
--- /dev/null
+++ b/libre/virtualbox-libre-modules/os_gnulinux_64.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules/os_musix.png b/libre/virtualbox-libre-modules/os_musix.png
new file mode 100644
index 000000000..fb7b94577
--- /dev/null
+++ b/libre/virtualbox-libre-modules/os_musix.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules/os_musix_64.png b/libre/virtualbox-libre-modules/os_musix_64.png
new file mode 100644
index 000000000..a1bbbbf3a
--- /dev/null
+++ b/libre/virtualbox-libre-modules/os_musix_64.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules/os_os64base.png b/libre/virtualbox-libre-modules/os_os64base.png
new file mode 100644
index 000000000..7aec20314
--- /dev/null
+++ b/libre/virtualbox-libre-modules/os_os64base.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules/os_os64base.xcf b/libre/virtualbox-libre-modules/os_os64base.xcf
new file mode 100644
index 000000000..d8e28e35e
--- /dev/null
+++ b/libre/virtualbox-libre-modules/os_os64base.xcf
Binary files differ
diff --git a/libre/virtualbox-libre-modules/os_osbase.png b/libre/virtualbox-libre-modules/os_osbase.png
new file mode 100644
index 000000000..00f197fca
--- /dev/null
+++ b/libre/virtualbox-libre-modules/os_osbase.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules/os_osbase.xcf b/libre/virtualbox-libre-modules/os_osbase.xcf
new file mode 100644
index 000000000..c4463c857
--- /dev/null
+++ b/libre/virtualbox-libre-modules/os_osbase.xcf
Binary files differ
diff --git a/libre/virtualbox-libre-modules/os_parabola.png b/libre/virtualbox-libre-modules/os_parabola.png
new file mode 100644
index 000000000..757abc484
--- /dev/null
+++ b/libre/virtualbox-libre-modules/os_parabola.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules/os_parabola_64.png b/libre/virtualbox-libre-modules/os_parabola_64.png
new file mode 100644
index 000000000..5ac7c2767
--- /dev/null
+++ b/libre/virtualbox-libre-modules/os_parabola_64.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules/os_trisquel.png b/libre/virtualbox-libre-modules/os_trisquel.png
new file mode 100644
index 000000000..c6f0d3d7a
--- /dev/null
+++ b/libre/virtualbox-libre-modules/os_trisquel.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules/os_trisquel_64.png b/libre/virtualbox-libre-modules/os_trisquel_64.png
new file mode 100644
index 000000000..ebca3dd43
--- /dev/null
+++ b/libre/virtualbox-libre-modules/os_trisquel_64.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules/os_ututo.png b/libre/virtualbox-libre-modules/os_ututo.png
new file mode 100644
index 000000000..e1dffb575
--- /dev/null
+++ b/libre/virtualbox-libre-modules/os_ututo.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules/os_ututo_64.png b/libre/virtualbox-libre-modules/os_ututo_64.png
new file mode 100644
index 000000000..158468e0a
--- /dev/null
+++ b/libre/virtualbox-libre-modules/os_ututo_64.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules/os_venenux.png b/libre/virtualbox-libre-modules/os_venenux.png
new file mode 100644
index 000000000..5e0c1585d
--- /dev/null
+++ b/libre/virtualbox-libre-modules/os_venenux.png
Binary files differ
diff --git a/libre/virtualbox-libre-modules/virtualbox-libre-modules.install b/libre/virtualbox-libre-modules/virtualbox-libre-modules.install
new file mode 100644
index 000000000..3f2a12a3f
--- /dev/null
+++ b/libre/virtualbox-libre-modules/virtualbox-libre-modules.install
@@ -0,0 +1,19 @@
+post_install() {
+/bin/cat << EOF
+===> You must load vboxdrv module before starting VirtualBox:
+===> # modprobe vboxdrv
+EOF
+ EXTRAMODULES='extramodules-3.5-LIBRE'
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
+}
+
+post_upgrade() {
+ EXTRAMODULES='extramodules-3.5-LIBRE'
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
+ echo 'In order to use the new version, reload all virtualbox modules manually.'
+}
+
+post_remove() {
+ EXTRAMODULES='extramodules-3.5-LIBRE'
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
+}
diff --git a/libre/virtualbox-libre-modules/virtualbox-libre-parabola-modules.install b/libre/virtualbox-libre-modules/virtualbox-libre-parabola-modules.install
new file mode 100644
index 000000000..c3419c991
--- /dev/null
+++ b/libre/virtualbox-libre-modules/virtualbox-libre-parabola-modules.install
@@ -0,0 +1,17 @@
+post_install() {
+cat << EOF
+===> You may want to load vboxguest, vboxsf and vboxvideo
+EOF
+ EXTRAMODULES='extramodules-3.5-LIBRE'
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
+}
+
+post_upgrade() {
+ EXTRAMODULES='extramodules-3.5-LIBRE'
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
+}
+
+post_remove() {
+ EXTRAMODULES='extramodules-3.5-LIBRE'
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
+}
diff --git a/libre/virtualbox-libre/.directory b/libre/virtualbox-libre/.directory
new file mode 100644
index 000000000..502696f2f
--- /dev/null
+++ b/libre/virtualbox-libre/.directory
@@ -0,0 +1,4 @@
+[Dolphin]
+Timestamp=2012,8,8,14,52,43
+Version=3
+ViewMode=2
diff --git a/libre/virtualbox-libre/LocalConfig.kmk b/libre/virtualbox-libre/LocalConfig.kmk
index d42cd3e1f..6eca06d9b 100644
--- a/libre/virtualbox-libre/LocalConfig.kmk
+++ b/libre/virtualbox-libre/LocalConfig.kmk
@@ -10,6 +10,7 @@ VBOX_PATH_SHARED_LIBS := $(VBOX_PATH_APP_PRIVATE_ARCH)
VBOX_WITH_RUNPATH := $(VBOX_PATH_APP_PRIVATE_ARCH)
VBOX_PATH_APP_PRIVATE := /usr/share/virtualbox
VBOX_PATH_APP_DOCS := /usr/share/virtualbox
+VBOX_PATH_PACKAGE_DOCS := $(VBOX_PATH_APP_DOCS)
VBOX_WITH_REGISTRATION_REQUEST =
VBOX_WITH_UPDATE_REQUEST =
VBOX_WITH_VNC := 1
diff --git a/libre/virtualbox-libre/PKGBUILD b/libre/virtualbox-libre/PKGBUILD
index a6dfc053b..ceff911bc 100644
--- a/libre/virtualbox-libre/PKGBUILD
+++ b/libre/virtualbox-libre/PKGBUILD
@@ -1,38 +1,62 @@
# $Id$
+# Maintainer: Ionut Biru <ibiru@archlinux.org>
# Maintainer (Parabola): Nicolas Reynolds <fauno@kiwwwi.com.ar>
-# Maintainer (Parabola): Jorge López <jorginho@adinet.com.uy>
-# Contributor (Parabola): André Silva <emulatorman@lavabit.com>
-# Changes:
-# * Adapt to linux-libre
-# * virtualbox-{archlinux,parabola}-*
-# * Removed unfree user manual
-# * Package with --pkg "virtualbox-parabola-additions virtualbox-parabola-modules"
-# Based on
-#Maintainer: Ionut Biru <ibiru@archlinux.org>
+# Maintainer (Parabola): Jorge López <jorginho@lavabit.com>
+# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
+# Maintainer (Parabola): Márcio Silva <coadde@lavabit.com>
pkgbase=virtualbox-libre
-pkgname=('virtualbox-libre' 'virtualbox-parabola-additions' 'virtualbox-sdk' 'virtualbox-source')
-pkgver=4.1.18
-pkgrel=1
-arch=('i686' 'x86_64' 'mips64el')
+pkgname=('virtualbox-libre'
+ 'virtualbox-libre-parabola-additions'
+ 'virtualbox-libre-sdk'
+ 'virtualbox-libre-source'
+ 'virtualbox-libre-parabola-source')
+pkgver=4.1.22
+pkgrel=1.3
+arch=('i686' 'x86_64')
url='http://virtualbox.org'
license=('GPL' 'custom')
makedepends=('libstdc++5' 'bin86' 'dev86' 'iasl' 'libxslt' 'libxml2' 'libxcursor' 'qt' 'libidl2' 'sdl_ttf' 'alsa-lib' 'libpulse' 'libxtst'
-'xalan-c' 'sdl' 'libxmu' 'curl' 'python2' 'linux-libre-headers' 'mesa' 'libxrandr' 'libxinerama' 'libvncserver' 'jdk7-openjdk' 'gsoap' 'vde2')
+'xalan-c' 'sdl-libre' 'libxmu' 'curl' 'python2' 'linux-libre-headers' 'mesa' 'libxrandr' 'libxinerama' 'libvncserver' 'jdk7-openjdk' 'gsoap' 'vde2')
#'xorg-server-devel' 'xf86driproto' 'libxcomposite')
[[ $CARCH == "x86_64" ]] && makedepends=("${makedepends[@]}" 'gcc-multilib' 'lib32-glibc')
source=(http://download.virtualbox.org/virtualbox/${pkgver}/VirtualBox-${pkgver}.tar.bz2
- 10-vboxdrv.rules vboxdrv-reference.patch LocalConfig.kmk vboxbuild
- change_default_driver_dir.patch vbox-service.conf vbox-service.rc
- vboxweb.conf vboxweb.rc)
+ 10-vboxdrv.rules vboxdrv-reference.patch LocalConfig.kmk ipv6_vnc.patch
+ change_default_driver_dir.patch vboxservice.conf vboxservice.rc vboxservice.service
+ vboxweb.conf vboxweb.rc vboxweb.service os_blag_64.png os_blag.png os_dragora_64.png
+ os_dragora.png os_dynebolic.png os_gnewsense_64.png os_gnewsense.png os_gnu_64.png
+ os_gnuhurd.png os_gnulinux_64.png os_gnulinux.png os_gnu.png os_musix_64.png
+ os_musix.png os_parabola_64.png os_parabola.png os_trisquel_64.png os_trisquel.png
+ os_ututo_64.png os_ututo.png os_venenux.png libre.patch free-distros.patch)
-_extramodules=extramodules-3.4-LIBRE
-_kernver="$(cat /lib/modules/${_extramodules}/version)"
+_extramodules=extramodules-3.5-LIBRE
+_kernver="$(cat /usr/lib/modules/${_extramodules}/version)" || true
build() {
- cd "$srcdir/VirtualBox-${pkgver}"
+ cd "VirtualBox-$pkgver"
patch -Np1 -i "$srcdir/vboxdrv-reference.patch"
patch -Np1 -i "$srcdir/change_default_driver_dir.patch"
+ patch -Np1 -i "$srcdir/libre.patch"
+ patch -Np1 -i "$srcdir/free-distros.patch"
+
+ ## Removing Nonfree directories
+ rm -rv "./include/VBox/ExtPack"
+ rm -rv "./src/VBox/ExtPacks"
+ rm -rv "./src/VBox/Main/src-helper-apps"
+
+ ## Removing Oracle VM VirtualBox Extension Pack icons
+ rm -v "./src/VBox/Resources/darwin/virtualbox-vbox-extpack.icns"
+ rm -v "./src/VBox/Resources/other/virtualbox-vbox-extpack-"{16px,20px,24px,32px,40px,48px,64px,72px,80px,96px,128px,256px,512px}.png
+ rm -v "./src/VBox/Resources/win/OSE/virtualbox-vbox-extpack.ico"
+ rm -v "./src/VBox/Frontends/VirtualBox/images/extension_pack_"{16px,32px,disabled{_16px,_32px},install{_16px,_32px},install_disabled{_16px,_32px},uninstall{_16px,_32px},uninstall_disabled{_16px,_32px}}.png
+
+ ## Adding free distros icons
+ for i in {gnuhurd,dynebolic,venenux,{gnu{,linux},parabola,gnewsense,blag,dragora,ututo,musix,trisquel}{,_64}}; do
+ cp -v "$srcdir/os_${i}.png" "./src/VBox/Frontends/VirtualBox/images"
+ done
+
+ ## Removing non-free OS icons
+ rm -v "./src/VBox/Frontends/VirtualBox/images/os_"{{{arch,turbo}linux,debian,fedora,gentoo,linux{24,26},macosx,mandriva,{free,net,open}bsd,redhat,solaris,opensuse,oracle{,solaris},ubuntu,win{2k{3,8},7,8,vista,xp},xandros}{,_64},dos,jrockitve,l4,linux{,22,_other},netware,qnx,os2{_other,ecs,warp{3,4,45}},win{2k,31,95,98,_other,me,nt4}}.png
cp "$srcdir/LocalConfig.kmk" .
@@ -45,36 +69,41 @@ build() {
source ./env.sh
kmk all
sed -i 's_^#!.*/usr/bin/python_#!/usr/bin/python2_' "out/linux.$BUILD_PLATFORM_ARCH/release/bin/vboxshell.py"
+ # build rdesktop-vrdp (broken from LocalConfig.kmk)
+ cd src/VBox/RDP/client
+ cp "$srcdir/LocalConfig.kmk" .
+ kmk all
}
package_virtualbox-libre() {
- pkgdesc="Powerful x86 virtualization for enterprise as well as home use"
- depends=('virtualbox-modules' 'libxml2' 'libxcursor' 'libxinerama' 'sdl' 'libxmu' 'curl' 'libvncserver' 'libpng')
+ pkgdesc="Powerful x86 virtualization for enterprise as well as home use (without non-free distros and others OS presets for the VM creation wizard; Oracle VM VirtualBox Extension Pack support removed)"
+ depends=('virtualbox-libre-modules' 'libxml2' 'libxcursor' 'libxinerama' 'sdl-libre' 'libxmu' 'curl' 'libvncserver' 'libpng')
optdepends=('qt: for VirtualBox GUI'
'vde2: Virtual Distributed Ethernet support'
- 'virtualbox-sdk: developer kit'
- 'virtualbox-source: host kernel source modules for non-stock kernels'
+ 'virtualbox-libre-sdk: developer kit'
+ 'virtualbox-libre-source: host kernel libre source modules for non-stock kernels'
'net-tools: for host-only or bridged networking')
- backup=('etc/vbox/vbox.cfg')
+ backup=('etc/vbox/vbox.cfg' 'etc/conf.d/vboxweb')
replaces=('virtualbox' 'virtualbox-ose')
conflicts=('virtualbox' 'virtualbox-ose')
provides=("virtualbox=$pkgver")
- install=virtualbox.install
+ install=virtualbox-libre.install
- source "$srcdir/VirtualBox-${pkgver}/env.sh"
-
- cd "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin"
- mkdir -p "$pkgdir"/usr/{bin,lib/virtualbox/components,lib/virtualbox/ExtensionPacks,share/virtualbox/nls}
+ source "VirtualBox-$pkgver/env.sh"
+ cd "VirtualBox-$pkgver/out/linux.$BUILD_PLATFORM_ARCH/release/bin"
+ install -dm755 "$pkgdir"/usr/{bin,lib/virtualbox/components,share/virtualbox/nls,share/virtualbox/rdesktop-vrdp-keymaps}
#Binaries and Wrapper with Launchers
install -m 0755 VBox.sh "$pkgdir/usr/bin/VBox"
- for i in VBoxHeadless vboxheadless VBoxManage vboxmanage VBoxSDL vboxsdl VirtualBox virtualbox vboxwebsrv VBoxBalloonCtrl vboxballoonctrl; do
+ for i in VBoxHeadless VBoxManage VBoxSDL VirtualBox vboxwebsrv VBoxBalloonCtrl; do
ln -sf VBox "$pkgdir/usr/bin/$i"
+ ln -sf VBox "$pkgdir/usr/bin/${i,,}"
done
install -m 0755 VBoxTunctl "$pkgdir/usr/bin"
+ install -m 0755 rdesktop-vrdp "$pkgdir/usr/bin"
#components
install -m 0755 components/* -t "$pkgdir/usr/lib/virtualbox/components"
@@ -86,11 +115,14 @@ package_virtualbox-libre() {
#setuid root binaries
install -m 4755 VBoxSDL VirtualBox VBoxHeadless VBoxNetDHCP VBoxNetAdpCtl -t "$pkgdir/usr/lib/virtualbox"
#other binaries
- install -m 0755 VBoxManage VBoxSVC VBoxExtPackHelperApp VBoxXPCOMIPCD VBoxTestOGL VBoxBalloonCtrl vboxwebsrv webtest -t "$pkgdir/usr/lib/virtualbox"
+ install -m 0755 VBoxManage VBoxSVC VBoxXPCOMIPCD VBoxTestOGL VBoxBalloonCtrl vboxwebsrv webtest -t "$pkgdir/usr/lib/virtualbox"
#language
install -m 0755 nls/*.qm -t "$pkgdir/usr/share/virtualbox/nls"
+ #rdesktop keymaps
+ install -m 0644 rdesktop-vrdp-keymaps/* "$pkgdir/usr/share/virtualbox/rdesktop-vrdp-keymaps"
+
#useless scripts
install -m 0755 VBoxCreateUSBNode.sh VBoxSysInfo.sh -t "$pkgdir/usr/share/virtualbox"
@@ -120,38 +152,41 @@ package_virtualbox-libre() {
# install rc.d script
install -D -m755 "$srcdir/vboxweb.rc" "$pkgdir/etc/rc.d/vboxweb"
+ # install systemd service
+ install -D -m644 "$srcdir/vboxweb.service" \
+ "$pkgdir/usr/lib/systemd/system/vboxweb.service"
# install sample config
install -D -m644 "$srcdir/vboxweb.conf" "$pkgdir/etc/conf.d/vboxweb"
}
-package_virtualbox-source() {
- pkgdesc="VirtualBox kernel modules source"
- depends=(gcc make)
- provides=(virtualbox-modules)
+package_virtualbox-libre-source() {
+ pkgdesc="VirtualBox kernel libre modules source"
+ depends=(dkms gcc make)
+ replaces=('virtualbox-source')
+ conflicts=('virtualbox-source')
+ provides=("virtualbox-source=$pkgver" 'virtualbox-libre-modules')
optdepends=('linux-libre-headers'
'linux-libre-lts-headers')
- install=virtualbox-source.install
-
- source "$srcdir/VirtualBox-${pkgver}/env.sh"
- mkdir -p $pkgdir/usr/lib/virtualbox
-
- cd "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin"
+ install=virtualbox-libre-source.install
- #sources for modules
- cp -r src ${pkgdir}/usr/lib/virtualbox
- #install compilation script
- install -D -m 755 "${srcdir}/vboxbuild" "${pkgdir}/usr/bin/vboxbuild"
+ install -dm755 "$pkgdir/var/lib/dkms/vboxhost/$pkgver"
+ source "VirtualBox-$pkgver/env.sh"
+ cd "VirtualBox-$pkgver/out/linux.$BUILD_PLATFORM_ARCH/release/bin"
+ cp -r src "$pkgdir/var/lib/dkms/vboxhost/$pkgver/source"
}
-package_virtualbox-sdk() {
+package_virtualbox-libre-sdk() {
pkgdesc="VirtualBox Software Developer Kit (SDK)"
depends=('python2')
+ replaces=('virtualbox-sdk')
+ conflicts=('virtualbox-sdk')
+ provides=("virtualbox-sdk=$pkgver")
- mkdir -p "$pkgdir/usr/lib/virtualbox"
+ install -dm755 "$pkgdir/usr/lib/virtualbox"
- source "$srcdir/VirtualBox-${pkgver}/env.sh"
- cd "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin"
+ source "VirtualBox-$pkgver/env.sh"
+ cd "VirtualBox-$pkgver/out/linux.$BUILD_PLATFORM_ARCH/release/bin"
install -D -m 0755 vboxshell.py "$pkgdir/usr/lib/virtualbox/vboxshell.py"
#python sdk
@@ -162,24 +197,26 @@ package_virtualbox-sdk() {
mv sdk "$pkgdir/usr/lib/virtualbox"
}
-package_virtualbox-parabola-additions(){
+package_virtualbox-libre-parabola-additions(){
pkgdesc="Additions only for Parabola guests (userspace tools)"
- depends=("virtualbox-parabola-modules=$pkgver" 'gcc-libs' 'libxmu' 'xorg-xrandr' 'libxfixes')
- replaces=('virtualbox-guest-additions' 'virtualbox-archlinux-additions')
- conflicts=('virtualbox-guest-additions' 'virtualbox-archlinux-additions')
+ depends=('virtualbox-libre-parabola-modules' 'gcc-libs' 'libxmu' 'xorg-xrandr' 'libxfixes')
+ replaces=('virtualbox-archlinux-additions' 'virtualbox-guest-additions')
+ conflicts=('virtualbox-archlinux-additions' 'virtualbox-guest-additions')
provides=("virtualbox-archlinux-additions=${pkgver}")
+ backup=('etc/conf.d/vboxservice')
+ install=virtualbox-libre-parabola-additions.install
- source "$srcdir/VirtualBox-${pkgver}/env.sh"
+ source "VirtualBox-$pkgver/env.sh"
- cd "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/additions"
+ cd "VirtualBox-$pkgver/out/linux.$BUILD_PLATFORM_ARCH/release/bin/additions"
install -d "$pkgdir"/{usr/bin,sbin}
install -m755 VBoxClient VBoxControl VBoxService "$pkgdir/usr/bin"
install -m755 mount.vboxsf "$pkgdir/sbin"
- install -m755 -D "$srcdir"/VirtualBox-${pkgver}/src/VBox/Additions/x11/Installer/98vboxadd-xclient \
+ install -m755 -D "$srcdir"/VirtualBox-$pkgver/src/VBox/Additions/x11/Installer/98vboxadd-xclient \
"$pkgdir"/usr/bin/VBoxClient-all
- install -m755 -D "$srcdir"/VirtualBox-${pkgver}/src/VBox/Additions/x11/Installer/vboxclient.desktop \
+ install -m755 -D "$srcdir"/VirtualBox-$pkgver/src/VBox/Additions/x11/Installer/vboxclient.desktop \
"$pkgdir"/etc/xdg/autostart/vboxclient.desktop
install -D vboxvideo_drv_112.so \
"$pkgdir/usr/lib/xorg/modules/drivers/vboxvideo.so"
@@ -189,18 +226,64 @@ package_virtualbox-parabola-additions(){
install -m755 -D pam_vbox.so "$pkgdir/usr/lib/security/pam_vbox.so"
# install rc.d script
- install -D -m755 "$srcdir/vbox-service.rc" "$pkgdir/etc/rc.d/vbox-service"
+ install -D -m755 "$srcdir/vboxservice.rc" "$pkgdir/etc/rc.d/vboxservice"
# install sample config
- install -D -m644 "$srcdir/vbox-service.conf" "$pkgdir/etc/conf.d/vbox-service"
+ install -D -m644 "$srcdir/vboxservice.conf" "$pkgdir/etc/conf.d/vboxservice"
+
+ # install systemd service file
+ install -D -m644 "$srcdir/vboxservice.service" \
+ "$pkgdir/usr/lib/systemd/system/vboxservice.service"
}
-md5sums=('38db0a87cba659b484af868b0c2bd3ac'
+
+package_virtualbox-libre-parabola-source() {
+ pkgdesc='VirtualBox Additions kernel libre modules source'
+ depends=(dkms gcc make)
+ replaces=('virtualbox-archlinux-source')
+ conflicts=('virtualbox-archlinux-source')
+ provides=("virtualbox-archlinux-source=${pkgver}" 'virtualbox-libre-parabola-modules')
+ optdepends=('linux-libre-headers'
+ 'linux-libre-lts-headers')
+ install=virtualbox-libre-parabola-source.install
+
+ install -dm755 "$pkgdir/var/lib/dkms/vboxguest/$pkgver"
+ source "VirtualBox-$pkgver/env.sh"
+ cd "VirtualBox-$pkgver/out/linux.$BUILD_PLATFORM_ARCH/release/bin/additions"
+ cp -r src "$pkgdir/var/lib/dkms/vboxguest/$pkgver/source"
+}
+
+md5sums=('84c5beeead094ce52d098105897aadbb'
'5f85710e0b8606de967716ded7b2d351'
- '755ab0dd9bcacf2c00d2275b1ca69547'
- 'a1ff1d1b4423556887e48a32978226a6'
- '3c96faa76894c182c1bb56bb30d9a17e'
+ 'bf5d1eeeec20a042e8af34cd61a9e11b'
+ '58d6e5bb4b4c1c6f3f0b3daa6aaeed03'
+ '4ff559f2bea335d59c4012048983ca91'
'97e193f050574dd272a38e5ee5ebe62b'
'3c08ad30b89add47d3f45121200a5360'
- '208cf5f842eb2e3a5b6dcfc59080d26c'
- '3ac185709bfe688bb753c46e170d0546'
- 'c159d683ba1947290fc2ad2c64194150')
+ '7d9823507206de9b8528a72af2f18d74'
+ '07c5f6d86c4b7839d719c8ee0c53653b'
+ '7e9483b1069a54f181546083ac7e5469'
+ 'c159d683ba1947290fc2ad2c64194150'
+ 'bc9efed88e0469cd7fc460d5a5cd7b4b'
+ '8538dba8686d7449cb481c9bae9d722a'
+ '545c925b46f2ac95e5f8ae407fad101a'
+ 'f6416f509c2e5460e4dc624e0a57f3c1'
+ 'bbfb59dd517c020a23701b480187a355'
+ 'efacfdb61918286ea9bc89866b8fd239'
+ '7c3eb09995e8bafeef414374e44ad4ce'
+ 'a49ed3ab6bd0fb084de0ab3dd97ae93e'
+ '6b432b3305ed446125eef052c38355a6'
+ 'a70022a468bd3e9daf01818d2d74ac3c'
+ '6b432b3305ed446125eef052c38355a6'
+ 'a70022a468bd3e9daf01818d2d74ac3c'
+ 'a70022a468bd3e9daf01818d2d74ac3c'
+ '380eb2ab6cad3da198094585853c129c'
+ 'a60bb9a98abcc3c34156f9051d00df9a'
+ '3a908ef6952bcf987e63ef2fe4e98d24'
+ '02e87c39c353634cecacf98f1707fa15'
+ '0cf41a41e7a415d404d5584e047fd450'
+ '449cde3b58390284b59c5d663de3edc9'
+ 'c7951fe6888d939f3a7d0dafe477e82b'
+ '4da8eeb2ece7e475fc7a0d1003da26c6'
+ '5e4187af59726d71c5be48d0cd816c34'
+ 'a9e4724b56ddf99bb2e9a8fab8ad43ba'
+ '1e47d90affabfbf6dbb07d9d42742d6a')
diff --git a/libre/virtualbox-libre/free-distros.patch b/libre/virtualbox-libre/free-distros.patch
new file mode 100644
index 000000000..47857e05d
--- /dev/null
+++ b/libre/virtualbox-libre/free-distros.patch
@@ -0,0 +1,1383 @@
+--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UINewVMWzd.cpp 2012-07-25 14:51:03.569003667 -0300
++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UINewVMWzd.cpp 2012-07-25 14:51:03.652333615 -0300
+@@ -44,94 +44,38 @@
+ * first matching string found, will be used. */
+ static const osTypePattern gs_OSTypePattern[] =
+ {
+- { QRegExp("DOS", Qt::CaseInsensitive), "DOS" },
+
+- /* Windows */
+- { QRegExp("Wi.*98", Qt::CaseInsensitive), "Windows98" },
+- { QRegExp("Wi.*95", Qt::CaseInsensitive), "Windows95" },
+- { QRegExp("Wi.*Me", Qt::CaseInsensitive), "WindowsMe" },
+- { QRegExp("(Wi.*NT)|(NT4)", Qt::CaseInsensitive), "WindowsNT4" },
+- { QRegExp("((Wi.*XP)|(\\bXP\\b)).*64", Qt::CaseInsensitive), "WindowsXP_64" },
+- { QRegExp("(Wi.*XP)|(\\bXP\\b)", Qt::CaseInsensitive), "WindowsXP" },
+- { QRegExp("((Wi.*2003)|(W2K3)).*64", Qt::CaseInsensitive), "Windows2003_64" },
+- { QRegExp("(Wi.*2003)|(W2K3)", Qt::CaseInsensitive), "Windows2003" },
+- { QRegExp("((Wi.*V)|(Vista)).*64", Qt::CaseInsensitive), "WindowsVista_64" },
+- { QRegExp("(Wi.*V)|(Vista)", Qt::CaseInsensitive), "WindowsVista" },
+- { QRegExp("((Wi.*2008)|(W2K8)).*64", Qt::CaseInsensitive), "Windows2008_64" },
+- { QRegExp("(Wi.*2008)|(W2K8)", Qt::CaseInsensitive), "Windows2008" },
+- { QRegExp("(Wi.*2000)|(W2K)", Qt::CaseInsensitive), "Windows2000" },
+- { QRegExp("(Wi.*7.*64)|(W7.*64)", Qt::CaseInsensitive), "Windows7_64" },
+- { QRegExp("(Wi.*7)|(W7)", Qt::CaseInsensitive), "Windows7" },
+- { QRegExp("(Wi.*8.*64)|(W8.*64)", Qt::CaseInsensitive), "Windows8_64" },
+- { QRegExp("(Wi.*8)|(W8)", Qt::CaseInsensitive), "Windows8" },
+- { QRegExp("Wi.*3", Qt::CaseInsensitive), "Windows31" },
+- { QRegExp("Wi", Qt::CaseInsensitive), "WindowsXP" },
+-
+- /* Solaris */
+- { QRegExp("((Op.*So)|(os20[01][0-9])|(So.*1[01])|(India)|(Neva)).*64", Qt::CaseInsensitive), "OpenSolaris_64" },
+- { QRegExp("(Op.*So)|(os20[01][0-9])|(So.*1[01])|(India)|(Neva)", Qt::CaseInsensitive), "OpenSolaris" },
+- { QRegExp("So.*64", Qt::CaseInsensitive), "Solaris_64" },
+- { QRegExp("So", Qt::CaseInsensitive), "Solaris" },
+-
+- /* OS/2 */
+- { QRegExp("OS[/|!-]{,1}2.*W.*4.?5", Qt::CaseInsensitive), "OS2Warp45" },
+- { QRegExp("OS[/|!-]{,1}2.*W.*4", Qt::CaseInsensitive), "OS2Warp4" },
+- { QRegExp("OS[/|!-]{,1}2.*W", Qt::CaseInsensitive), "OS2Warp3" },
+- { QRegExp("(OS[/|!-]{,1}2.*e)|(eCS.*)", Qt::CaseInsensitive), "OS2eCS" },
+- { QRegExp("OS[/|!-]{,1}2", Qt::CaseInsensitive), "OS2" },
+-
+- /* Code names for Linux distributions */
+- { QRegExp("((edgy)|(feisty)|(gutsy)|(hardy)|(intrepid)|(jaunty)|(karmic)|(lucid)|(maverick)|(natty)|(oneiric)|(precise)).*64", Qt::CaseInsensitive), "Ubuntu_64" },
+- { QRegExp("(edgy)|(feisty)|(gutsy)|(hardy)|(intrepid)|(jaunty)|(karmic)|(lucid)|(maverick)|(natty)|(oneiric)|(precise)", Qt::CaseInsensitive), "Ubuntu" },
+- { QRegExp("((sarge)|(etch)|(lenny)|(squeeze)|(wheezy)|(sid)).*64", Qt::CaseInsensitive), "Debian_64" },
+- { QRegExp("(sarge)|(etch)|(lenny)|(squeeze)|(wheezy)|(sid)", Qt::CaseInsensitive), "Debian" },
+- { QRegExp("((moonshine)|(werewolf)|(sulphur)|(cambridge)|(leonidas)|(constantine)|(goddard)|(laughlin)|(lovelock)|(verne)).*64", Qt::CaseInsensitive), "Fedora_64" },
+- { QRegExp("(moonshine)|(werewolf)|(sulphur)|(cambridge)|(leonidas)|(constantine)|(goddard)|(laughlin)|(lovelock)|(verne)", Qt::CaseInsensitive), "Fedora" },
+-
+- /* Regular names of Linux distributions */
+- { QRegExp("Arc.*64", Qt::CaseInsensitive), "ArchLinux_64" },
+- { QRegExp("Arc", Qt::CaseInsensitive), "ArchLinux" },
+- { QRegExp("Deb.*64", Qt::CaseInsensitive), "Debian_64" },
+- { QRegExp("Deb", Qt::CaseInsensitive), "Debian" },
+- { QRegExp("((SU)|(Nov)|(SLE)).*64", Qt::CaseInsensitive), "OpenSUSE_64" },
+- { QRegExp("(SU)|(Nov)|(SLE)", Qt::CaseInsensitive), "OpenSUSE" },
+- { QRegExp("Fe.*64", Qt::CaseInsensitive), "Fedora_64" },
+- { QRegExp("Fe", Qt::CaseInsensitive), "Fedora" },
+- { QRegExp("((Gen)|(Sab)).*64", Qt::CaseInsensitive), "Gentoo_64" },
+- { QRegExp("(Gen)|(Sab)", Qt::CaseInsensitive), "Gentoo" },
+- { QRegExp("Man.*64", Qt::CaseInsensitive), "Mandriva_64" },
+- { QRegExp("Man", Qt::CaseInsensitive), "Mandriva" },
+- { QRegExp("((Red)|(rhel)|(cen)).*64", Qt::CaseInsensitive), "RedHat_64" },
+- { QRegExp("(Red)|(rhel)|(cen)", Qt::CaseInsensitive), "RedHat" },
+- { QRegExp("Tur.*64", Qt::CaseInsensitive), "Turbolinux_64" },
+- { QRegExp("Tur", Qt::CaseInsensitive), "Turbolinux" },
+- { QRegExp("Ub.*64", Qt::CaseInsensitive), "Ubuntu_64" },
+- { QRegExp("Ub", Qt::CaseInsensitive), "Ubuntu" },
+- { QRegExp("Xa.*64", Qt::CaseInsensitive), "Xandros_64" },
+- { QRegExp("Xa", Qt::CaseInsensitive), "Xandros" },
+- { QRegExp("((Or)|(oel)).*64", Qt::CaseInsensitive), "Oracle_64" },
+- { QRegExp("(Or)|(oel)", Qt::CaseInsensitive), "Oracle" },
+- { QRegExp("((Li)|(lnx)).*2.?2", Qt::CaseInsensitive), "Linux22" },
+- { QRegExp("((Li)|(lnx)).*2.?4.*64", Qt::CaseInsensitive), "Linux24_64" },
+- { QRegExp("((Li)|(lnx)).*2.?4", Qt::CaseInsensitive), "Linux24" },
+- { QRegExp("((((Li)|(lnx)).*2.?6)|(LFS)).*64", Qt::CaseInsensitive), "Linux26_64" },
+- { QRegExp("(((Li)|(lnx)).*2.?6)|(LFS)", Qt::CaseInsensitive), "Linux26" },
+- { QRegExp("((Li)|(lnx)).*64", Qt::CaseInsensitive), "Linux26_64" },
+- { QRegExp("(Li)|(lnx)", Qt::CaseInsensitive), "Linux26" },
++ /* Code names for GNU/Linux distributions */
++ { QRegExp("((Taranis)|(Dagda)|(Brigantia)).*64", Qt::CaseInsensitive), "Trisquel_64" },
++ { QRegExp("(Taranis)|(Dagda)|(Brigantia)", Qt::CaseInsensitive), "Trisquel" },
++ { QRegExp("((metad)|(parkes)|(three)).*64", Qt::CaseInsensitive), "gNewSense_64" },
++ { QRegExp("(deltah)|(metad)|(parkes)|(three)", Qt::CaseInsensitive), "gNewSense" },
++ { QRegExp("((90k)|(119k)|(140k)|(160k)|(90000)|(119000)|(140000)|(160000)|(Spartakus)).*64", Qt::CaseInsensitive), "Blag_64" },
++ { QRegExp("(90k)|(119k)|(140k)|(160k)|(90000)|(119000)|(140000)|(160000)|(Spartakus)", Qt::CaseInsensitive), "Blag" },
++
++ /* Regular names of GNU/Linux distributions and GNU-Hurd */
++ { QRegExp("Pa.*64", Qt::CaseInsensitive), "Parabola_64" },
++ { QRegExp("Pa", Qt::CaseInsensitive), "Parabola" },
++ { QRegExp("((gNe)|(new)|(Sen)).*64", Qt::CaseInsensitive), "gNewSense_64" },
++ { QRegExp("(gNe)|(new)|(Sen)", Qt::CaseInsensitive), "gNewSense" },
++ { QRegExp("Bla.*64", Qt::CaseInsensitive), "Blag_64" },
++ { QRegExp("Bla", Qt::CaseInsensitive), "Blag" },
++ { QRegExp("Dra.*64", Qt::CaseInsensitive), "Dragora_64" },
++ { QRegExp("Dra", Qt::CaseInsensitive), "Dragora" },
++ { QRegExp("((Utu)|(XS)).*64", Qt::CaseInsensitive), "Ututo_64" },
++ { QRegExp("(Utu)|(XS)", Qt::CaseInsensitive), "Ututo" },
++ { QRegExp("Mus.*64", Qt::CaseInsensitive), "Musix_64" },
++ { QRegExp("Mus", Qt::CaseInsensitive), "Musix" },
++ { QRegExp("Tri.*64", Qt::CaseInsensitive), "Trisquel_64" },
++ { QRegExp("Tri", Qt::CaseInsensitive), "Trisquel" },
++ { QRegExp("Dyn", Qt::CaseInsensitive), "Dynebolic" },
++ { QRegExp("Ven", Qt::CaseInsensitive), "Venenux" },
++ { QRegExp("GNU", Qt::CaseInsensitive), "GNU" },
++ { QRegExp("Hu", Qt::CaseInsensitive), "GNUHurd" },
++ { QRegExp("((Li)|(lnx)).*64", Qt::CaseInsensitive), "GNULinux_64" },
++ { QRegExp("(Li)|(lnx)", Qt::CaseInsensitive), "GNULinux" },
+
+ /* Other */
+- { QRegExp("L4", Qt::CaseInsensitive), "L4" },
+- { QRegExp("((Fr.*B)|(fbsd)).*64", Qt::CaseInsensitive), "FreeBSD_64" },
+- { QRegExp("(Fr.*B)|(fbsd)", Qt::CaseInsensitive), "FreeBSD" },
+- { QRegExp("Op.*B.*64", Qt::CaseInsensitive), "OpenBSD_64" },
+- { QRegExp("Op.*B", Qt::CaseInsensitive), "OpenBSD" },
+- { QRegExp("Ne.*B.*64", Qt::CaseInsensitive), "NetBSD_64" },
+- { QRegExp("Ne.*B", Qt::CaseInsensitive), "NetBSD" },
+- { QRegExp("QN", Qt::CaseInsensitive), "QNX" },
+- { QRegExp("((Mac)|(Tig)|(Leop)|(osx)).*64", Qt::CaseInsensitive), "MacOS_64" },
+- { QRegExp("(Mac)|(Tig)|(Leop)|(osx)", Qt::CaseInsensitive), "MacOS" },
+- { QRegExp("Net", Qt::CaseInsensitive), "Netware" },
+- { QRegExp("Rocki", Qt::CaseInsensitive), "JRockitVE" },
+ { QRegExp("Ot", Qt::CaseInsensitive), "Other" },
+ };
+
+--- VirtualBox-4.1.18.orig/src/VBox/Main/xml/Settings.cpp 2012-07-25 15:14:50.498764160 -0300
++++ VirtualBox-4.1.18/src/VBox/Main/xml/Settings.cpp 2012-07-25 15:14:50.548761649 -0300
+@@ -3227,40 +3227,18 @@
+ } aConvertOSTypes[] =
+ {
+ { "unknown", "Other" },
+- { "dos", "DOS" },
+- { "win31", "Windows31" },
+- { "win95", "Windows95" },
+- { "win98", "Windows98" },
+- { "winme", "WindowsMe" },
+- { "winnt4", "WindowsNT4" },
+- { "win2k", "Windows2000" },
+- { "winxp", "WindowsXP" },
+- { "win2k3", "Windows2003" },
+- { "winvista", "WindowsVista" },
+- { "win2k8", "Windows2008" },
+- { "os2warp3", "OS2Warp3" },
+- { "os2warp4", "OS2Warp4" },
+- { "os2warp45", "OS2Warp45" },
+- { "ecs", "OS2eCS" },
+- { "linux22", "Linux22" },
+- { "linux24", "Linux24" },
+- { "linux26", "Linux26" },
+- { "archlinux", "ArchLinux" },
+- { "debian", "Debian" },
+- { "opensuse", "OpenSUSE" },
+- { "fedoracore", "Fedora" },
+- { "gentoo", "Gentoo" },
+- { "mandriva", "Mandriva" },
+- { "redhat", "RedHat" },
+- { "ubuntu", "Ubuntu" },
+- { "xandros", "Xandros" },
+- { "freebsd", "FreeBSD" },
+- { "openbsd", "OpenBSD" },
+- { "netbsd", "NetBSD" },
+- { "netware", "Netware" },
+- { "solaris", "Solaris" },
+- { "opensolaris", "OpenSolaris" },
+- { "l4", "L4" }
++ { "gnu", "GNU" },
++ { "gnuhurd", "GNUHurd" },
++ { "gnulinux", "GNULinux" },
++ { "parabola", "Parabola" },
++ { "gnewsense", "gNewSense" },
++ { "blag", "Blag" },
++ { "dragora", "Dragora" },
++ { "ututo", "Ututo" },
++ { "musix", "Musix" },
++ { "trisquel", "Trisquel" },
++ { "dynebolic", "Dynebolic" },
++ { "venenux", "Venenux" },
+ };
+
+ void MachineConfigFile::convertOldOSType_pre1_5(Utf8Str &str)
+--- VirtualBox-4.1.18.orig/src/VBox/Main/xml/SettingsConverter.xsl 2012-07-25 15:21:04.553581275 -0300
++++ VirtualBox-4.1.18/src/VBox/Main/xml/SettingsConverter.xsl 2012-07-25 15:21:04.593579427 -0300
+@@ -729,40 +729,18 @@
+ <xsl:attribute name="OSType">
+ <xsl:choose>
+ <xsl:when test="@OSType='unknown'">Other</xsl:when>
+- <xsl:when test="@OSType='dos'">DOS</xsl:when>
+- <xsl:when test="@OSType='win31'">Windows31</xsl:when>
+- <xsl:when test="@OSType='win95'">Windows95</xsl:when>
+- <xsl:when test="@OSType='win98'">Windows98</xsl:when>
+- <xsl:when test="@OSType='winme'">WindowsMe</xsl:when>
+- <xsl:when test="@OSType='winnt4'">WindowsNT4</xsl:when>
+- <xsl:when test="@OSType='win2k'">Windows2000</xsl:when>
+- <xsl:when test="@OSType='winxp'">WindowsXP</xsl:when>
+- <xsl:when test="@OSType='win2k3'">Windows2003</xsl:when>
+- <xsl:when test="@OSType='winvista'">WindowsVista</xsl:when>
+- <xsl:when test="@OSType='win2k8'">Windows2008</xsl:when>
+- <xsl:when test="@OSType='os2warp3'">OS2Warp3</xsl:when>
+- <xsl:when test="@OSType='os2warp4'">OS2Warp4</xsl:when>
+- <xsl:when test="@OSType='os2warp45'">OS2Warp45</xsl:when>
+- <xsl:when test="@OSType='ecs'">OS2eCS</xsl:when>
+- <xsl:when test="@OSType='linux22'">Linux22</xsl:when>
+- <xsl:when test="@OSType='linux24'">Linux24</xsl:when>
+- <xsl:when test="@OSType='linux26'">Linux26</xsl:when>
+- <xsl:when test="@OSType='archlinux'">ArchLinux</xsl:when>
+- <xsl:when test="@OSType='debian'">Debian</xsl:when>
+- <xsl:when test="@OSType='opensuse'">OpenSUSE</xsl:when>
+- <xsl:when test="@OSType='fedoracore'">Fedora</xsl:when>
+- <xsl:when test="@OSType='gentoo'">Gentoo</xsl:when>
+- <xsl:when test="@OSType='mandriva'">Mandriva</xsl:when>
+- <xsl:when test="@OSType='redhat'">RedHat</xsl:when>
+- <xsl:when test="@OSType='ubuntu'">Ubuntu</xsl:when>
+- <xsl:when test="@OSType='xandros'">Xandros</xsl:when>
+- <xsl:when test="@OSType='freebsd'">FreeBSD</xsl:when>
+- <xsl:when test="@OSType='openbsd'">OpenBSD</xsl:when>
+- <xsl:when test="@OSType='netbsd'">NetBSD</xsl:when>
+- <xsl:when test="@OSType='netware'">Netware</xsl:when>
+- <xsl:when test="@OSType='solaris'">Solaris</xsl:when>
+- <xsl:when test="@OSType='opensolaris'">OpenSolaris</xsl:when>
+- <xsl:when test="@OSType='l4'">L4</xsl:when>
++ <xsl:when test="@OSType='gnu'">GNU</xsl:when>
++ <xsl:when test="@OSType='gnuhurd'">GNUHurd</xsl:when>
++ <xsl:when test="@OSType='gnulinux'">GNULinux</xsl:when>
++ <xsl:when test="@OSType='parabola'">Parabola</xsl:when>
++ <xsl:when test="@OSType='gnewsense'">gNewSense</xsl:when>
++ <xsl:when test="@OSType='blag'">Blag</xsl:when>
++ <xsl:when test="@OSType='dragora'">Dragora</xsl:when>
++ <xsl:when test="@OSType='ututo'">Ututo</xsl:when>
++ <xsl:when test="@OSType='musix'">Musix</xsl:when>
++ <xsl:when test="@OSType='trisquel'">Trisquel</xsl:when>
++ <xsl:when test="@OSType='dynebolic'">Dynebolic</xsl:when>
++ <xsl:when test="@OSType='venenux'">Venenux</xsl:when>
+ </xsl:choose>
+ </xsl:attribute>
+ <xsl:apply-templates select="@*[name()!='OSType']" mode="v1.5"/>
+--- VirtualBox-4.1.18.orig/src/VBox/Main/xml/VirtualBox-settings-common.xsd 2012-07-25 15:04:37.856003691 -0300
++++ VirtualBox-4.1.18/src/VBox/Main/xml/VirtualBox-settings-common.xsd 2012-07-25 15:04:37.892668156 -0300
+@@ -137,75 +137,27 @@
+ <xsd:simpleType name="TGuestOSType">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Other"/>
+- <xsd:enumeration value="DOS"/>
+- <xsd:enumeration value="Netware"/>
+- <xsd:enumeration value="L4"/>
+- <xsd:enumeration value="Windows31"/>
+- <xsd:enumeration value="Windows95"/>
+- <xsd:enumeration value="Windows98"/>
+- <xsd:enumeration value="WindowsMe"/>
+- <xsd:enumeration value="WindowsNT4"/>
+- <xsd:enumeration value="Windows2000"/>
+- <xsd:enumeration value="WindowsXP"/>
+- <xsd:enumeration value="WindowsXP_64"/>
+- <xsd:enumeration value="Windows2003"/>
+- <xsd:enumeration value="Windows2003_64"/>
+- <xsd:enumeration value="WindowsVista"/>
+- <xsd:enumeration value="WindowsVista_64"/>
+- <xsd:enumeration value="Windows2008"/>
+- <xsd:enumeration value="Windows2008_64"/>
+- <xsd:enumeration value="Windows7"/>
+- <xsd:enumeration value="Windows7_64"/>
+- <xsd:enumeration value="Windows8"/>
+- <xsd:enumeration value="Windows8_64"/>
+- <xsd:enumeration value="WindowsNT"/>
+- <xsd:enumeration value="OS2Warp3"/>
+- <xsd:enumeration value="OS2Warp4"/>
+- <xsd:enumeration value="OS2Warp45"/>
+- <xsd:enumeration value="OS2eCS"/>
+- <xsd:enumeration value="OS2"/>
+- <xsd:enumeration value="Linux22"/>
+- <xsd:enumeration value="Linux24"/>
+- <xsd:enumeration value="Linux24_64"/>
+- <xsd:enumeration value="Linux26"/>
+- <xsd:enumeration value="Linux26_64"/>
+- <xsd:enumeration value="ArchLinux"/>
+- <xsd:enumeration value="ArchLinux_64"/>
+- <xsd:enumeration value="Debian"/>
+- <xsd:enumeration value="Debian_64"/>
+- <xsd:enumeration value="OpenSUSE"/>
+- <xsd:enumeration value="OpenSUSE_64"/>
+- <xsd:enumeration value="Fedora"/>
+- <xsd:enumeration value="Fedora_64"/>
+- <xsd:enumeration value="Gentoo"/>
+- <xsd:enumeration value="Gentoo_64"/>
+- <xsd:enumeration value="Mandriva"/>
+- <xsd:enumeration value="Mandriva_64"/>
+- <xsd:enumeration value="RedHat"/>
+- <xsd:enumeration value="RedHat_64"/>
+- <xsd:enumeration value="Turbolinux"/>
+- <xsd:enumeration value="Turbolinux_64"/>
+- <xsd:enumeration value="Ubuntu"/>
+- <xsd:enumeration value="Ubuntu_64"/>
+- <xsd:enumeration value="Xandros"/>
+- <xsd:enumeration value="Xandros_64"/>
+- <xsd:enumeration value="Oracle"/>
+- <xsd:enumeration value="Oracle_64"/>
+- <xsd:enumeration value="Linux"/>
+- <xsd:enumeration value="FreeBSD"/>
+- <xsd:enumeration value="FreeBSD_64"/>
+- <xsd:enumeration value="OpenBSD"/>
+- <xsd:enumeration value="OpenBSD_64"/>
+- <xsd:enumeration value="NetBSD"/>
+- <xsd:enumeration value="NetBSD_64"/>
+- <xsd:enumeration value="Solaris"/>
+- <xsd:enumeration value="Solaris_64"/>
+- <xsd:enumeration value="OpenSolaris"/>
+- <xsd:enumeration value="OpenSolaris_64"/>
+- <xsd:enumeration value="QNX"/>
+- <xsd:enumeration value="MacOS"/>
+- <xsd:enumeration value="MacOS_64"/>
+- <xsd:enumeration value="JRockitVE"/>
++ <xsd:enumeration value="GNU"/>
++ <xsd:enumeration value="GNU_64"/>
++ <xsd:enumeration value="GNUHurd"/>
++ <xsd:enumeration value="GNULinux"/>
++ <xsd:enumeration value="GNULinux_64"/>
++ <xsd:enumeration value="Parabola"/>
++ <xsd:enumeration value="Parabola_64"/>
++ <xsd:enumeration value="gNewSense"/>
++ <xsd:enumeration value="gNewSense_64"/>
++ <xsd:enumeration value="Blag"/>
++ <xsd:enumeration value="Blag_64"/>
++ <xsd:enumeration value="Dragora"/>
++ <xsd:enumeration value="Dragora_64"/>
++ <xsd:enumeration value="Ututo"/>
++ <xsd:enumeration value="Ututo_64"/>
++ <xsd:enumeration value="Musix"/>
++ <xsd:enumeration value="Musix_64"/>
++ <xsd:enumeration value="Trisquel"/>
++ <xsd:enumeration value="Trisquel_64"/>
++ <xsd:enumeration value="Dynebolic"/>
++ <xsd:enumeration value="Venenux"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-25 15:40:56.733096866 -0300
++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-25 15:40:56.796426519 -0300
+@@ -1,75 +1,27 @@
+ <!DOCTYPE RCC><RCC version="1.0">
+ <qresource prefix="/">
+- <file alias="os_archlinux.png">images/os_archlinux.png</file>
+- <file alias="os_archlinux_64.png">images/os_archlinux_64.png</file>
+- <file alias="os_debian.png">images/os_debian.png</file>
+- <file alias="os_debian_64.png">images/os_debian_64.png</file>
+- <file alias="os_dos.png">images/os_dos.png</file>
+- <file alias="os_fedora.png">images/os_fedora.png</file>
+- <file alias="os_fedora_64.png">images/os_fedora_64.png</file>
+- <file alias="os_freebsd.png">images/os_freebsd.png</file>
+- <file alias="os_freebsd_64.png">images/os_freebsd_64.png</file>
+- <file alias="os_gentoo.png">images/os_gentoo.png</file>
+- <file alias="os_gentoo_64.png">images/os_gentoo_64.png</file>
+- <file alias="os_jrockitve.png">images/os_jrockitve.png</file>
+- <file alias="os_l4.png">images/os_l4.png</file>
+- <file alias="os_linux_other.png">images/os_linux_other.png</file>
+- <file alias="os_linux22.png">images/os_linux22.png</file>
+- <file alias="os_linux24.png">images/os_linux24.png</file>
+- <file alias="os_linux24_64.png">images/os_linux24_64.png</file>
+- <file alias="os_linux26.png">images/os_linux26.png</file>
+- <file alias="os_linux26_64.png">images/os_linux26_64.png</file>
+- <file alias="os_mandriva.png">images/os_mandriva.png</file>
+- <file alias="os_mandriva_64.png">images/os_mandriva_64.png</file>
+- <file alias="os_netbsd.png">images/os_netbsd.png</file>
+- <file alias="os_netbsd_64.png">images/os_netbsd_64.png</file>
+- <file alias="os_netware.png">images/os_netware.png</file>
+- <file alias="os_openbsd.png">images/os_openbsd.png</file>
+- <file alias="os_openbsd_64.png">images/os_openbsd_64.png</file>
+- <file alias="os_oraclesolaris.png">images/os_oraclesolaris.png</file>
+- <file alias="os_oraclesolaris_64.png">images/os_oraclesolaris_64.png</file>
+- <file alias="os_opensuse.png">images/os_opensuse.png</file>
+- <file alias="os_opensuse_64.png">images/os_opensuse_64.png</file>
+- <file alias="os_os2_other.png">images/os_os2_other.png</file>
+- <file alias="os_os2ecs.png">images/os_os2ecs.png</file>
+- <file alias="os_os2warp3.png">images/os_os2warp3.png</file>
+- <file alias="os_os2warp4.png">images/os_os2warp4.png</file>
+- <file alias="os_os2warp45.png">images/os_os2warp45.png</file>
++ <file alias="os_parabola.png">images/os_parabola.png</file>
++ <file alias="os_parabola_64.png">images/os_parabola_64.png</file>
++ <file alias="os_gnewsense.png">images/os_gnewsense.png</file>
++ <file alias="os_gnewsense_64.png">images/os_gnewsense_64.png</file>
++ <file alias="os_blag.png">images/os_blag.png</file>
++ <file alias="os_blag_64.png">images/os_blag_64.png</file>
++ <file alias="os_ututo.png">images/os_ututo.png</file>
++ <file alias="os_ututo_64.png">images/os_ututo_64.png</file>
++ <file alias="os_gnu.png">images/os_gnu.png</file>
++ <file alias="os_gnu_64.png">images/os_gnu_64.png</file>
++ <file alias="os_gnuhurd.png">images/os_gnuhurd.png</file>
++ <file alias="os_gnulinux.png">images/os_gnulinux.png</file>
++ <file alias="os_gnulinux_64.png">images/os_gnulinux_64.png</file>
++ <file alias="os_musix.png">images/os_musix.png</file>
++ <file alias="os_musix_64.png">images/os_musix_64.png</file>
++ <file alias="os_dragora.png">images/os_dragora.png</file>
++ <file alias="os_dragora_64.png">images/os_dragora_64.png</file>
+ <file alias="os_other.png">images/os_other.png</file>
+- <file alias="os_qnx.png">images/os_qnx.png</file>
+- <file alias="os_redhat.png">images/os_redhat.png</file>
+- <file alias="os_redhat_64.png">images/os_redhat_64.png</file>
+- <file alias="os_turbolinux.png">images/os_turbolinux.png</file>
+- <file alias="os_turbolinux_64.png">images/os_turbolinux_64.png</file>
+- <file alias="os_solaris.png">images/os_solaris.png</file>
+- <file alias="os_solaris_64.png">images/os_solaris_64.png</file>
+- <file alias="os_ubuntu.png">images/os_ubuntu.png</file>
+- <file alias="os_ubuntu_64.png">images/os_ubuntu_64.png</file>
+- <file alias="os_win_other.png">images/os_win_other.png</file>
+- <file alias="os_win2k.png">images/os_win2k.png</file>
+- <file alias="os_win2k3.png">images/os_win2k3.png</file>
+- <file alias="os_win2k3_64.png">images/os_win2k3_64.png</file>
+- <file alias="os_win2k8.png">images/os_win2k8.png</file>
+- <file alias="os_win2k8_64.png">images/os_win2k8_64.png</file>
+- <file alias="os_win31.png">images/os_win31.png</file>
+- <file alias="os_win7.png">images/os_win7.png</file>
+- <file alias="os_win7_64.png">images/os_win7_64.png</file>
+- <file alias="os_win8.png">images/os_win8.png</file>
+- <file alias="os_win8_64.png">images/os_win8_64.png</file>
+- <file alias="os_win95.png">images/os_win95.png</file>
+- <file alias="os_win98.png">images/os_win98.png</file>
+- <file alias="os_winme.png">images/os_winme.png</file>
+- <file alias="os_winnt4.png">images/os_winnt4.png</file>
+- <file alias="os_winvista.png">images/os_winvista.png</file>
+- <file alias="os_winvista_64.png">images/os_winvista_64.png</file>
+- <file alias="os_winxp.png">images/os_winxp.png</file>
+- <file alias="os_winxp_64.png">images/os_winxp_64.png</file>
+- <file alias="os_xandros.png">images/os_xandros.png</file>
+- <file alias="os_xandros_64.png">images/os_xandros_64.png</file>
+- <file alias="os_oracle.png">images/os_oracle.png</file>
+- <file alias="os_oracle_64.png">images/os_oracle_64.png</file>
+- <file alias="os_macosx.png">images/os_macosx.png</file>
+- <file alias="os_macosx_64.png">images/os_macosx_64.png</file>
++ <file alias="os_dynebolic.png">images/os_dynebolic.png</file>
++ <file alias="os_venenux.png">images/os_venenux.png</file>
++ <file alias="os_trisquel.png">images/os_trisquel.png</file>
++ <file alias="os_trisquel_64.png">images/os_trisquel_64.png</file>
+ <file alias="hd_16px.png">images/hd_16px.png</file>
+ <file alias="hd_disabled_16px.png">images/hd_disabled_16px.png</file>
+ <file alias="hd_32px.png">images/hd_32px.png</file>
+--- VirtualBox-4.1.20.orig/src/VBox/Main/src-all/Global.cpp 2012-08-20 11:36:24.000000000 -0300
++++ VirtualBox-4.1.20/src/VBox/Main/src-all/Global.cpp 2012-08-21 14:22:29.148190849 -0300
+@@ -35,284 +35,90 @@
+ VBOXOSTYPE_Unknown, VBOXOSHINT_NONE,
+ 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows31, "Windows 3.1",
+- VBOXOSTYPE_Win31, VBOXOSHINT_NONE,
+- 32, 4, 1 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_SB16 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows95, "Windows 95",
+- VBOXOSTYPE_Win95, VBOXOSHINT_NONE,
+- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows98, "Windows 98",
+- VBOXOSTYPE_Win98, VBOXOSHINT_NONE,
+- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsMe, "Windows Me",
+- VBOXOSTYPE_WinMe, VBOXOSHINT_NONE,
+- 64, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsNT4, "Windows NT 4",
+- VBOXOSTYPE_WinNT4, VBOXOSHINT_NONE,
+- 128, 16, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2000, "Windows 2000",
+- VBOXOSTYPE_Win2k, VBOXOSHINT_USBTABLET,
+- 168, 16, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsXP, "Windows XP",
+- VBOXOSTYPE_WinXP, VBOXOSHINT_USBTABLET,
+- 192, 16, 10 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsXP_64, "Windows XP (64 bit)",
+- VBOXOSTYPE_WinXP_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
+- 192, 16, 10 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2003, "Windows 2003",
+- VBOXOSTYPE_Win2k3, VBOXOSHINT_USBTABLET,
+- 256, 16, 20 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2003_64, "Windows 2003 (64 bit)",
+- VBOXOSTYPE_Win2k3_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
+- 256, 16, 20 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsVista, "Windows Vista",
+- VBOXOSTYPE_WinVista, VBOXOSHINT_USBTABLET,
+- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsVista_64, "Windows Vista (64 bit)",
+- VBOXOSTYPE_WinVista_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
+- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2008, "Windows 2008",
+- VBOXOSTYPE_Win2k8, VBOXOSHINT_USBTABLET,
+- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2008_64, "Windows 2008 (64 bit)",
+- VBOXOSTYPE_Win2k8_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
+- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows7, "Windows 7",
+- VBOXOSTYPE_Win7, VBOXOSHINT_USBTABLET,
+- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows7_64, "Windows 7 (64 bit)",
+- VBOXOSTYPE_Win7_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
+- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows8, "Windows 8",
+- VBOXOSTYPE_Win8, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET | VBOXOSHINT_PAE,
+- 1024,128, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows8_64, "Windows 8 (64 bit)",
+- VBOXOSTYPE_Win8_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
+- 1536,128, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
+- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsNT, "Other Windows",
+- VBOXOSTYPE_WinNT, VBOXOSHINT_NONE,
+- 512, 16, 20 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux22, "Linux 2.2",
+- VBOXOSTYPE_Linux22, VBOXOSHINT_RTCUTC,
+- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux24, "Linux 2.4",
+- VBOXOSTYPE_Linux24, VBOXOSHINT_RTCUTC,
+- 128, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux24_64, "Linux 2.4 (64 bit)",
+- VBOXOSTYPE_Linux24_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC,
+- 128, 4, 4 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
++ { "GNU", "GNU", SchemaDefs_OSTypeId_GNU, "GNU",
++ VBOXOSTYPE_GNU, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
++ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
++ { "GNU", "GNU", SchemaDefs_OSTypeId_GNU_64, "GNU (64 bit)",
++ VBOXOSTYPE_GNU_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
++ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
++ { "GNU-Hurd", "GNU-Hurd", SchemaDefs_OSTypeId_GNUHurd, "GNU-Hurd",
++ VBOXOSTYPE_GNUHurd, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux26, "Linux 2.6",
+- VBOXOSTYPE_Linux26, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_GNULinux, "GNU/Linux",
++ VBOXOSTYPE_GNULinux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux26_64, "Linux 2.6 (64 bit)",
+- VBOXOSTYPE_Linux26_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_GNULinux_64, "GNU/Linux (64 bit)",
++ VBOXOSTYPE_GNULinux_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_ArchLinux, "Arch Linux",
+- VBOXOSTYPE_ArchLinux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Parabola, "Parabola GNU/Linux-libre",
++ VBOXOSTYPE_Parabola, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_ArchLinux_64, "Arch Linux (64 bit)",
+- VBOXOSTYPE_ArchLinux_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Parabola_64, "Parabola GNU/Linux-libre (64 bit)",
++ VBOXOSTYPE_Parabola_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Debian, "Debian",
+- VBOXOSTYPE_Debian, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_gNewSense, "gNewSense",
++ VBOXOSTYPE_gNewSense, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Debian_64, "Debian (64 bit)",
+- VBOXOSTYPE_Debian_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_gNewSense_64, "gNewSense (64 bit)",
++ VBOXOSTYPE_gNewSense_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97},
+- { "Linux", "Linux", SchemaDefs_OSTypeId_OpenSUSE, "openSUSE",
+- VBOXOSTYPE_OpenSUSE, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_OpenSUSE_64, "openSUSE (64 bit)",
+- VBOXOSTYPE_OpenSUSE_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Fedora, "Fedora",
+- VBOXOSTYPE_FedoraCore, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Blag, "Blag Linux and GNU",
++ VBOXOSTYPE_Blag, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 768, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Fedora_64, "Fedora (64 bit)",
+- VBOXOSTYPE_FedoraCore_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Blag_64, "Blag Linux and GNU (64 bit)",
++ VBOXOSTYPE_Blag_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 768, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Gentoo, "Gentoo",
+- VBOXOSTYPE_Gentoo, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Dragora, "Dragora",
++ VBOXOSTYPE_Dragora, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Gentoo_64, "Gentoo (64 bit)",
+- VBOXOSTYPE_Gentoo_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Dragora_64, "Dragora (64 bit)",
++ VBOXOSTYPE_Dragora_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Mandriva, "Mandriva",
+- VBOXOSTYPE_Mandriva, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Mandriva_64, "Mandriva (64 bit)",
+- VBOXOSTYPE_Mandriva_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_RedHat, "Red Hat",
+- VBOXOSTYPE_RedHat, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE,
+- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Ututo, "Ututo XS",
++ VBOXOSTYPE_Ututo, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_RedHat_64, "Red Hat (64 bit)",
+- VBOXOSTYPE_RedHat_x64, VBOXOSHINT_64BIT | VBOXOSHINT_PAE | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC,
+- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Ututo_64, "Ututo XS (64 bit)",
++ VBOXOSTYPE_Ututo_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Turbolinux, "Turbolinux",
+- VBOXOSTYPE_Turbolinux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Musix, "Musix",
++ VBOXOSTYPE_Musix, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Turbolinux, "Turbolinux (64 bit)",
+- VBOXOSTYPE_Turbolinux_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Musix_64, "Musix (64 bit)",
++ VBOXOSTYPE_Musix_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Ubuntu, "Ubuntu",
+- VBOXOSTYPE_Ubuntu, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE | VBOXOSHINT_USBTABLET,
++ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97},
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Trisquel, "Trisquel",
++ VBOXOSTYPE_Trisquel, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE | VBOXOSHINT_USBTABLET,
+ 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Ubuntu_64, "Ubuntu (64 bit)",
+- VBOXOSTYPE_Ubuntu_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Trisquel_64, "Trisquel (64 bit)",
++ VBOXOSTYPE_Trisquel_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Xandros, "Xandros",
+- VBOXOSTYPE_Xandros, VBOXOSHINT_RTCUTC,
+- 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Dynebolic, "Dyne:bolic",
++ VBOXOSTYPE_Dynebolic, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Xandros_64, "Xandros (64 bit)",
+- VBOXOSTYPE_Xandros_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC,
+- 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Venenux, "Venenux",
++ VBOXOSTYPE_Venenux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
++ 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Oracle, "Oracle",
+- VBOXOSTYPE_Oracle, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE,
+- 512, 12, 12 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Oracle_64, "Oracle (64 bit)",
+- VBOXOSTYPE_Oracle_x64, VBOXOSHINT_64BIT | VBOXOSHINT_PAE | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC,
+- 512, 12, 12 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux, "Other Linux",
+- VBOXOSTYPE_Linux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+- 256, 12, 8 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Solaris", "Solaris", SchemaDefs_OSTypeId_Solaris, "Oracle Solaris 10 5/09 and earlier",
+- VBOXOSTYPE_Solaris, VBOXOSHINT_NONE,
+- 768, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Solaris", "Solaris", SchemaDefs_OSTypeId_Solaris_64, "Oracle Solaris 10 5/09 and earlier (64 bit)",
+- VBOXOSTYPE_Solaris_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC,
+- 1536, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Solaris", "Solaris", SchemaDefs_OSTypeId_OpenSolaris, "Oracle Solaris 10 10/09 and later",
+- VBOXOSTYPE_OpenSolaris, VBOXOSHINT_USBTABLET,
+- 768, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Solaris", "Solaris", SchemaDefs_OSTypeId_OpenSolaris_64, "Oracle Solaris 10 10/09 and later (64 bit)",
+- VBOXOSTYPE_OpenSolaris_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
+- 1536, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
+- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "BSD", "BSD", SchemaDefs_OSTypeId_FreeBSD, "FreeBSD",
+- VBOXOSTYPE_FreeBSD, VBOXOSHINT_NONE,
+- 128, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "BSD", "BSD", SchemaDefs_OSTypeId_FreeBSD_64, "FreeBSD (64 bit)",
+- VBOXOSTYPE_FreeBSD_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC,
+- 128, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "BSD", "BSD", SchemaDefs_OSTypeId_OpenBSD, "OpenBSD",
+- VBOXOSTYPE_OpenBSD, VBOXOSHINT_HWVIRTEX,
+- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "BSD", "BSD", SchemaDefs_OSTypeId_OpenBSD_64, "OpenBSD (64 bit)",
+- VBOXOSTYPE_OpenBSD_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC,
+- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "BSD", "BSD", SchemaDefs_OSTypeId_NetBSD, "NetBSD",
+- VBOXOSTYPE_NetBSD, VBOXOSHINT_NONE,
+- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "BSD", "BSD", SchemaDefs_OSTypeId_NetBSD_64, "NetBSD (64 bit)",
+- VBOXOSTYPE_NetBSD_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC,
+- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2Warp3, "OS/2 Warp 3",
+- VBOXOSTYPE_OS2Warp3, VBOXOSHINT_HWVIRTEX,
+- 48, 4, 1 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2Warp4, "OS/2 Warp 4",
+- VBOXOSTYPE_OS2Warp4, VBOXOSHINT_HWVIRTEX,
+- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2Warp45, "OS/2 Warp 4.5",
+- VBOXOSTYPE_OS2Warp45, VBOXOSHINT_HWVIRTEX,
+- 96, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2eCS, "eComStation",
+- VBOXOSTYPE_ECS, VBOXOSHINT_HWVIRTEX,
+- 96, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2, "Other OS/2",
+- VBOXOSTYPE_OS2, VBOXOSHINT_HWVIRTEX,
+- 96, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "MacOS", "Mac OS X", SchemaDefs_OSTypeId_MacOS, "Mac OS X Server",
+- VBOXOSTYPE_MacOS, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_EFI | VBOXOSHINT_PAE | VBOXOSHINT_USBHID | VBOXOSHINT_HPET | VBOXOSHINT_USBTABLET,
+- 1024, 4, 20 * _1G64, NetworkAdapterType_I82543GC, 0,
+- StorageControllerType_ICH6, StorageBus_IDE, StorageControllerType_IntelAhci, StorageBus_SATA,
+- ChipsetType_ICH9, AudioControllerType_HDA },
+- { "MacOS", "Mac OS X", SchemaDefs_OSTypeId_MacOS_64, "Mac OS X Server (64 bit)",
+- VBOXOSTYPE_MacOS_x64, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_EFI | VBOXOSHINT_PAE | VBOXOSHINT_64BIT | VBOXOSHINT_USBHID | VBOXOSHINT_HPET | VBOXOSHINT_USBTABLET,
+- 1024, 4, 20 * _1G64, NetworkAdapterType_I82543GC, 0,
+- StorageControllerType_ICH6, StorageBus_IDE, StorageControllerType_IntelAhci, StorageBus_SATA,
+- ChipsetType_ICH9, AudioControllerType_HDA },
+- { "Other", "Other", SchemaDefs_OSTypeId_DOS, "DOS",
+- VBOXOSTYPE_DOS, VBOXOSHINT_NONE,
+- 32, 4, 500 * _1M, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_SB16 },
+- { "Other", "Other", SchemaDefs_OSTypeId_Netware, "Netware",
+- VBOXOSTYPE_Netware, VBOXOSHINT_HWVIRTEX,
+- 512, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Other", "Other", SchemaDefs_OSTypeId_L4, "L4",
+- VBOXOSTYPE_L4, VBOXOSHINT_NONE,
+- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Other", "Other", SchemaDefs_OSTypeId_QNX, "QNX",
+- VBOXOSTYPE_QNX, VBOXOSHINT_HWVIRTEX,
+- 512, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
+- { "Other", "Other", SchemaDefs_OSTypeId_JRockitVE, "JRockitVE",
+- VBOXOSTYPE_JRockitVE, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_PAE,
+- 1024, 4, 8 * _1G64, NetworkAdapterType_I82545EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
+- StorageControllerType_BusLogic, StorageBus_SCSI, ChipsetType_PIIX3, AudioControllerType_AC97 },
+ };
+
+ /**
+--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp 2012-07-25 21:44:01.290876720 -0300
++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp 2012-07-25 22:00:57.819380802 -0300
+@@ -4875,75 +4875,27 @@
+ static const char *kOSTypeIcons [][2] =
+ {
+ {"Other", ":/os_other.png"},
+- {"DOS", ":/os_dos.png"},
+- {"Netware", ":/os_netware.png"},
+- {"L4", ":/os_l4.png"},
+- {"Windows31", ":/os_win31.png"},
+- {"Windows95", ":/os_win95.png"},
+- {"Windows98", ":/os_win98.png"},
+- {"WindowsMe", ":/os_winme.png"},
+- {"WindowsNT4", ":/os_winnt4.png"},
+- {"Windows2000", ":/os_win2k.png"},
+- {"WindowsXP", ":/os_winxp.png"},
+- {"WindowsXP_64", ":/os_winxp_64.png"},
+- {"Windows2003", ":/os_win2k3.png"},
+- {"Windows2003_64", ":/os_win2k3_64.png"},
+- {"WindowsVista", ":/os_winvista.png"},
+- {"WindowsVista_64", ":/os_winvista_64.png"},
+- {"Windows2008", ":/os_win2k8.png"},
+- {"Windows2008_64", ":/os_win2k8_64.png"},
+- {"Windows7", ":/os_win7.png"},
+- {"Windows7_64", ":/os_win7_64.png"},
+- {"Windows8", ":/os_win8.png"},
+- {"Windows8_64", ":/os_win8_64.png"},
+- {"WindowsNT", ":/os_win_other.png"},
+- {"OS2Warp3", ":/os_os2warp3.png"},
+- {"OS2Warp4", ":/os_os2warp4.png"},
+- {"OS2Warp45", ":/os_os2warp45.png"},
+- {"OS2eCS", ":/os_os2ecs.png"},
+- {"OS2", ":/os_os2_other.png"},
+- {"Linux22", ":/os_linux22.png"},
+- {"Linux24", ":/os_linux24.png"},
+- {"Linux24_64", ":/os_linux24_64.png"},
+- {"Linux26", ":/os_linux26.png"},
+- {"Linux26_64", ":/os_linux26_64.png"},
+- {"ArchLinux", ":/os_archlinux.png"},
+- {"ArchLinux_64", ":/os_archlinux_64.png"},
+- {"Debian", ":/os_debian.png"},
+- {"Debian_64", ":/os_debian_64.png"},
+- {"OpenSUSE", ":/os_opensuse.png"},
+- {"OpenSUSE_64", ":/os_opensuse_64.png"},
+- {"Fedora", ":/os_fedora.png"},
+- {"Fedora_64", ":/os_fedora_64.png"},
+- {"Gentoo", ":/os_gentoo.png"},
+- {"Gentoo_64", ":/os_gentoo_64.png"},
+- {"Mandriva", ":/os_mandriva.png"},
+- {"Mandriva_64", ":/os_mandriva_64.png"},
+- {"RedHat", ":/os_redhat.png"},
+- {"RedHat_64", ":/os_redhat_64.png"},
+- {"Turbolinux", ":/os_turbolinux.png"},
+- {"Turbolinux_64", ":/os_turbolinux_64.png"},
+- {"Ubuntu", ":/os_ubuntu.png"},
+- {"Ubuntu_64", ":/os_ubuntu_64.png"},
+- {"Xandros", ":/os_xandros.png"},
+- {"Xandros_64", ":/os_xandros_64.png"},
+- {"Oracle", ":/os_oracle.png"},
+- {"Oracle_64", ":/os_oracle_64.png"},
+- {"Linux", ":/os_linux_other.png"},
+- {"FreeBSD", ":/os_freebsd.png"},
+- {"FreeBSD_64", ":/os_freebsd_64.png"},
+- {"OpenBSD", ":/os_openbsd.png"},
+- {"OpenBSD_64", ":/os_openbsd_64.png"},
+- {"NetBSD", ":/os_netbsd.png"},
+- {"NetBSD_64", ":/os_netbsd_64.png"},
+- {"Solaris", ":/os_solaris.png"},
+- {"Solaris_64", ":/os_solaris_64.png"},
+- {"OpenSolaris", ":/os_oraclesolaris.png"},
+- {"OpenSolaris_64", ":/os_oraclesolaris_64.png"},
+- {"QNX", ":/os_qnx.png"},
+- {"MacOS", ":/os_macosx.png"},
+- {"MacOS_64", ":/os_macosx_64.png"},
+- {"JRockitVE", ":/os_jrockitve.png"},
++ {"GNU", ":/os_gnu.png"},
++ {"GNU_64", ":/os_gnu_64.png"},
++ {"GNUHurd", ":/os_gnuhurd.png"},
++ {"GNULinux", ":/os_gnulinux.png"},
++ {"GNULinux_64", ":/os_gnulinux_64.png"},
++ {"Parabola", ":/os_parabola.png"},
++ {"Parabola_64", ":/os_parabola_64.png"},
++ {"gNewSense", ":/os_gnewsense.png"},
++ {"gNewSense_64", ":/os_gnewsense_64.png"},
++ {"Blag", ":/os_blag.png"},
++ {"Blag_64", ":/os_blag_64.png"},
++ {"Dragora", ":/os_dragora.png"},
++ {"Dragora_64", ":/os_dragora_64.png"},
++ {"Ututo", ":/os_ututo.png"},
++ {"Ututo_64", ":/os_ututo_64.png"},
++ {"Musix", ":/os_musix.png"},
++ {"Musix_64", ":/os_musix_64.png"},
++ {"Trisquel", ":/os_trisquel.png"},
++ {"Trisquel_64", ":/os_trisquel_64.png"},
++ {"Dynebolic", ":/os_dynebolic.png"},
++ {"Venenux", ":/os_venenux.png"},
+ };
+ for (uint n = 0; n < SIZEOF_ARRAY (kOSTypeIcons); ++ n)
+ {
+--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/src/widgets/VBoxOSTypeSelectorWidget.cpp.orig 2012-06-20 10:16:38.000000000 -0300
++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/src/widgets/VBoxOSTypeSelectorWidget.cpp 2012-07-25 22:07:51.232436783 -0300
+@@ -192,17 +192,10 @@
+ if (typeIndex != -1)
+ mCbType->setCurrentIndex (typeIndex);
+ }
+- /* Or select WinXP item for Windows family as default */
+- else if (familyId == "Windows")
++ /* Or select Parabola GNU/Linux-libre item for GNU/Linux family as default */
++ else if (familyId == "GNU/Linux")
+ {
+- int xpIndex = mCbType->findData ("WindowsXP", RoleTypeID);
+- if (xpIndex != -1)
+- mCbType->setCurrentIndex (xpIndex);
+- }
+- /* Or select Ubuntu item for Linux family as default */
+- else if (familyId == "Linux")
+- {
+- int ubIndex = mCbType->findData ("Ubuntu", RoleTypeID);
++ int ubIndex = mCbType->findData ("Parabola", RoleTypeID);
+ if (ubIndex != -1)
+ mCbType->setCurrentIndex (ubIndex);
+ }
+--- VirtualBox-4.1.18.orig/include/VBox/ostypes.h 2012-06-20 10:07:51.000000000 -0300
++++ VirtualBox-4.1.18/include/VBox/ostypes.h 2012-07-25 23:20:57.322757456 -0300
+@@ -43,77 +43,27 @@
+ typedef enum VBOXOSTYPE
+ {
+ VBOXOSTYPE_Unknown = 0,
+- VBOXOSTYPE_DOS = 0x10000,
+- VBOXOSTYPE_Win31 = 0x15000,
+- VBOXOSTYPE_Win9x = 0x20000,
+- VBOXOSTYPE_Win95 = 0x21000,
+- VBOXOSTYPE_Win98 = 0x22000,
+- VBOXOSTYPE_WinMe = 0x23000,
+- VBOXOSTYPE_WinNT = 0x30000,
+- VBOXOSTYPE_WinNT4 = 0x31000,
+- VBOXOSTYPE_Win2k = 0x32000,
+- VBOXOSTYPE_WinXP = 0x33000,
+- VBOXOSTYPE_WinXP_x64 = 0x33100,
+- VBOXOSTYPE_Win2k3 = 0x34000,
+- VBOXOSTYPE_Win2k3_x64 = 0x34100,
+- VBOXOSTYPE_WinVista = 0x35000,
+- VBOXOSTYPE_WinVista_x64 = 0x35100,
+- VBOXOSTYPE_Win2k8 = 0x36000,
+- VBOXOSTYPE_Win2k8_x64 = 0x36100,
+- VBOXOSTYPE_Win7 = 0x37000,
+- VBOXOSTYPE_Win7_x64 = 0x37100,
+- VBOXOSTYPE_Win8 = 0x38000,
+- VBOXOSTYPE_Win8_x64 = 0x38100,
+- VBOXOSTYPE_OS2 = 0x40000,
+- VBOXOSTYPE_OS2Warp3 = 0x41000,
+- VBOXOSTYPE_OS2Warp4 = 0x42000,
+- VBOXOSTYPE_OS2Warp45 = 0x43000,
+- VBOXOSTYPE_ECS = 0x44000,
+- VBOXOSTYPE_Linux = 0x50000,
+- VBOXOSTYPE_Linux_x64 = 0x50100,
+- VBOXOSTYPE_Linux22 = 0x51000,
+- VBOXOSTYPE_Linux24 = 0x52000,
+- VBOXOSTYPE_Linux24_x64 = 0x52100,
+- VBOXOSTYPE_Linux26 = 0x53000,
+- VBOXOSTYPE_Linux26_x64 = 0x53100,
+- VBOXOSTYPE_ArchLinux = 0x54000,
+- VBOXOSTYPE_ArchLinux_x64 = 0x54100,
+- VBOXOSTYPE_Debian = 0x55000,
+- VBOXOSTYPE_Debian_x64 = 0x55100,
+- VBOXOSTYPE_OpenSUSE = 0x56000,
+- VBOXOSTYPE_OpenSUSE_x64 = 0x56100,
+- VBOXOSTYPE_FedoraCore = 0x57000,
+- VBOXOSTYPE_FedoraCore_x64 = 0x57100,
+- VBOXOSTYPE_Gentoo = 0x58000,
+- VBOXOSTYPE_Gentoo_x64 = 0x58100,
+- VBOXOSTYPE_Mandriva = 0x59000,
+- VBOXOSTYPE_Mandriva_x64 = 0x59100,
+- VBOXOSTYPE_RedHat = 0x5A000,
+- VBOXOSTYPE_RedHat_x64 = 0x5A100,
+- VBOXOSTYPE_Turbolinux = 0x5B000,
+- VBOXOSTYPE_Turbolinux_x64 = 0x5B100,
+- VBOXOSTYPE_Ubuntu = 0x5C000,
+- VBOXOSTYPE_Ubuntu_x64 = 0x5C100,
+- VBOXOSTYPE_Xandros = 0x5D000,
+- VBOXOSTYPE_Xandros_x64 = 0x5D100,
+- VBOXOSTYPE_Oracle = 0x5E000,
+- VBOXOSTYPE_Oracle_x64 = 0x5E100,
+- VBOXOSTYPE_FreeBSD = 0x60000,
+- VBOXOSTYPE_FreeBSD_x64 = 0x60100,
+- VBOXOSTYPE_OpenBSD = 0x61000,
+- VBOXOSTYPE_OpenBSD_x64 = 0x61100,
+- VBOXOSTYPE_NetBSD = 0x62000,
+- VBOXOSTYPE_NetBSD_x64 = 0x62100,
+- VBOXOSTYPE_Netware = 0x70000,
+- VBOXOSTYPE_Solaris = 0x80000,
+- VBOXOSTYPE_Solaris_x64 = 0x80100,
+- VBOXOSTYPE_OpenSolaris = 0x81000,
+- VBOXOSTYPE_OpenSolaris_x64 = 0x81100,
+- VBOXOSTYPE_L4 = 0x90000,
+- VBOXOSTYPE_QNX = 0xA0000,
+- VBOXOSTYPE_MacOS = 0xB0000,
+- VBOXOSTYPE_MacOS_x64 = 0xB0100,
+- VBOXOSTYPE_JRockitVE = 0xC0000,
++ VBOXOSTYPE_GNU = 0x10000,
++ VBOXOSTYPE_GNU_x64 = 0x10100,
++ VBOXOSTYPE_GNUHurd = 0x20000,
++ VBOXOSTYPE_GNULinux = 0x30000,
++ VBOXOSTYPE_GNULinux_x64 = 0x30100,
++ VBOXOSTYPE_Parabola = 0x31000,
++ VBOXOSTYPE_Parabola_x64 = 0x31100,
++ VBOXOSTYPE_gNewSense = 0x32000,
++ VBOXOSTYPE_gNewSense_x64 = 0x32100,
++ VBOXOSTYPE_Blag = 0x33000,
++ VBOXOSTYPE_Blag_x64 = 0x33100,
++ VBOXOSTYPE_Dragora = 0x34000,
++ VBOXOSTYPE_Dragora_x64 = 0x34100,
++ VBOXOSTYPE_Ututo = 0x35000,
++ VBOXOSTYPE_Ututo_x64 = 0x35100,
++ VBOXOSTYPE_Musix = 0x36000,
++ VBOXOSTYPE_Musix_x64 = 0x36100,
++ VBOXOSTYPE_Trisquel = 0x37000,
++ VBOXOSTYPE_Trisquel_x64 = 0x37100,
++ VBOXOSTYPE_Dynebolic = 0x38000,
++ VBOXOSTYPE_Venenux = 0x39000,
+ /** The bit number which indicates 64-bit or 32-bit. */
+ #define VBOXOSTYPE_x64_BIT 8
+ /** The mask which indicates 64-bit. */
+@@ -129,16 +79,11 @@
+ typedef enum VBOXOSFAMILY
+ {
+ VBOXOSFAMILY_Unknown = 0,
+- VBOXOSFAMILY_Windows32 = 1,
+- VBOXOSFAMILY_Windows64 = 2,
+- VBOXOSFAMILY_Linux32 = 3,
+- VBOXOSFAMILY_Linux64 = 4,
+- VBOXOSFAMILY_FreeBSD32 = 5,
+- VBOXOSFAMILY_FreeBSD64 = 6,
+- VBOXOSFAMILY_Solaris32 = 7,
+- VBOXOSFAMILY_Solaris64 = 8,
+- VBOXOSFAMILY_MacOSX32 = 9,
+- VBOXOSFAMILY_MacOSX64 = 10,
++ VBOXOSFAMILY_GNU32 = 1,
++ VBOXOSFAMILY_GNU64 = 2,
++ VBOXOSFAMILY_GNUHurd = 3,
++ VBOXOSFAMILY_GNULinux32 = 4,
++ VBOXOSFAMILY_GNULinux64 = 5,
+ /** The usual 32-bit hack. */
+ VBOXOSFAMILY_32BIT_HACK = 0x7fffffff
+ } VBOXOSFAMILY;
+--- VirtualBox-4.1.18.orig/src/VBox/Main/src-server/ApplianceImpl.cpp 2012-06-20 10:17:35.000000000 -0300
++++ VirtualBox-4.1.18/src/VBox/Main/src-server/ApplianceImpl.cpp 2012-07-26 01:28:50.033551279 -0300
+@@ -49,94 +49,33 @@
+ g_osTypes[] =
+ {
+ { ovf::CIMOSType_CIMOS_Unknown, SchemaDefs_OSTypeId_Other },
+- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2 },
+- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2Warp3 },
+- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2Warp4 },
+- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2Warp45 },
+- { ovf::CIMOSType_CIMOS_MSDOS, SchemaDefs_OSTypeId_DOS },
+- { ovf::CIMOSType_CIMOS_WIN3x, SchemaDefs_OSTypeId_Windows31 },
+- { ovf::CIMOSType_CIMOS_WIN95, SchemaDefs_OSTypeId_Windows95 },
+- { ovf::CIMOSType_CIMOS_WIN98, SchemaDefs_OSTypeId_Windows98 },
+- { ovf::CIMOSType_CIMOS_WINNT, SchemaDefs_OSTypeId_WindowsNT },
+- { ovf::CIMOSType_CIMOS_WINNT, SchemaDefs_OSTypeId_WindowsNT4 },
+- { ovf::CIMOSType_CIMOS_NetWare, SchemaDefs_OSTypeId_Netware },
+- { ovf::CIMOSType_CIMOS_NovellOES, SchemaDefs_OSTypeId_Netware },
+- { ovf::CIMOSType_CIMOS_Solaris, SchemaDefs_OSTypeId_Solaris },
+- { ovf::CIMOSType_CIMOS_SunOS, SchemaDefs_OSTypeId_Solaris },
+- { ovf::CIMOSType_CIMOS_FreeBSD, SchemaDefs_OSTypeId_FreeBSD },
+- { ovf::CIMOSType_CIMOS_NetBSD, SchemaDefs_OSTypeId_NetBSD },
+- { ovf::CIMOSType_CIMOS_QNX, SchemaDefs_OSTypeId_QNX },
+- { ovf::CIMOSType_CIMOS_Windows2000, SchemaDefs_OSTypeId_Windows2000 },
+- { ovf::CIMOSType_CIMOS_WindowsMe, SchemaDefs_OSTypeId_WindowsMe },
+- { ovf::CIMOSType_CIMOS_OpenBSD, SchemaDefs_OSTypeId_OpenBSD },
+- { ovf::CIMOSType_CIMOS_WindowsXP, SchemaDefs_OSTypeId_WindowsXP },
+- { ovf::CIMOSType_CIMOS_WindowsXPEmbedded, SchemaDefs_OSTypeId_WindowsXP },
+- { ovf::CIMOSType_CIMOS_WindowsEmbeddedforPointofService, SchemaDefs_OSTypeId_WindowsXP },
+- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2003, SchemaDefs_OSTypeId_Windows2003 },
+- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2003_64, SchemaDefs_OSTypeId_Windows2003_64 },
+- { ovf::CIMOSType_CIMOS_WindowsXP_64, SchemaDefs_OSTypeId_WindowsXP_64 },
+- { ovf::CIMOSType_CIMOS_WindowsVista, SchemaDefs_OSTypeId_WindowsVista },
+- { ovf::CIMOSType_CIMOS_WindowsVista_64, SchemaDefs_OSTypeId_WindowsVista_64 },
+- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2008, SchemaDefs_OSTypeId_Windows2008 },
+- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2008_64, SchemaDefs_OSTypeId_Windows2008_64 },
+- { ovf::CIMOSType_CIMOS_FreeBSD_64, SchemaDefs_OSTypeId_FreeBSD_64 },
+- { ovf::CIMOSType_CIMOS_MACOS, SchemaDefs_OSTypeId_MacOS },
+- { ovf::CIMOSType_CIMOS_MACOS, SchemaDefs_OSTypeId_MacOS_64 }, // there is no CIM 64-bit type for this
+-
+- // Linuxes
+- { ovf::CIMOSType_CIMOS_RedHatEnterpriseLinux, SchemaDefs_OSTypeId_RedHat },
+- { ovf::CIMOSType_CIMOS_RedHatEnterpriseLinux_64, SchemaDefs_OSTypeId_RedHat_64 },
+- { ovf::CIMOSType_CIMOS_Solaris_64, SchemaDefs_OSTypeId_Solaris_64 },
+- { ovf::CIMOSType_CIMOS_SUSE, SchemaDefs_OSTypeId_OpenSUSE },
+- { ovf::CIMOSType_CIMOS_SLES, SchemaDefs_OSTypeId_OpenSUSE },
+- { ovf::CIMOSType_CIMOS_NovellLinuxDesktop, SchemaDefs_OSTypeId_OpenSUSE },
+- { ovf::CIMOSType_CIMOS_SUSE_64, SchemaDefs_OSTypeId_OpenSUSE_64 },
+- { ovf::CIMOSType_CIMOS_SLES_64, SchemaDefs_OSTypeId_OpenSUSE_64 },
+- { ovf::CIMOSType_CIMOS_LINUX, SchemaDefs_OSTypeId_Linux },
+- { ovf::CIMOSType_CIMOS_LINUX, SchemaDefs_OSTypeId_Linux22 },
+- { ovf::CIMOSType_CIMOS_SunJavaDesktopSystem, SchemaDefs_OSTypeId_Linux },
+- { ovf::CIMOSType_CIMOS_TurboLinux, SchemaDefs_OSTypeId_Turbolinux },
+- { ovf::CIMOSType_CIMOS_TurboLinux_64, SchemaDefs_OSTypeId_Turbolinux_64 },
+- { ovf::CIMOSType_CIMOS_Mandriva, SchemaDefs_OSTypeId_Mandriva },
+- { ovf::CIMOSType_CIMOS_Mandriva_64, SchemaDefs_OSTypeId_Mandriva_64 },
+- { ovf::CIMOSType_CIMOS_Ubuntu, SchemaDefs_OSTypeId_Ubuntu },
+- { ovf::CIMOSType_CIMOS_Ubuntu_64, SchemaDefs_OSTypeId_Ubuntu_64 },
+- { ovf::CIMOSType_CIMOS_Debian, SchemaDefs_OSTypeId_Debian },
+- { ovf::CIMOSType_CIMOS_Debian_64, SchemaDefs_OSTypeId_Debian_64 },
+- { ovf::CIMOSType_CIMOS_Linux_2_4_x, SchemaDefs_OSTypeId_Linux24 },
+- { ovf::CIMOSType_CIMOS_Linux_2_4_x_64, SchemaDefs_OSTypeId_Linux24_64 },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Linux26 },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Linux26_64 },
+- { ovf::CIMOSType_CIMOS_Linux_64, SchemaDefs_OSTypeId_Linux26_64 },
+-
+- // types that we have support for but CIM doesn't
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_ArchLinux },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_ArchLinux_64 },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Fedora },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Fedora_64 },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Gentoo },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Gentoo_64 },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Xandros },
+- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Xandros_64 },
+- { ovf::CIMOSType_CIMOS_Solaris, SchemaDefs_OSTypeId_OpenSolaris },
+- { ovf::CIMOSType_CIMOS_Solaris_64, SchemaDefs_OSTypeId_OpenSolaris_64 },
+-
+- // types added with CIM 2.25.0 follow:
+- { ovf::CIMOSType_CIMOS_WindowsServer2008R2, SchemaDefs_OSTypeId_Windows2008 }, // duplicate, see above
+-// { ovf::CIMOSType_CIMOS_VMwareESXi = 104, // we can't run ESX in a VM
+- { ovf::CIMOSType_CIMOS_Windows7, SchemaDefs_OSTypeId_Windows7 },
+- { ovf::CIMOSType_CIMOS_Windows7, SchemaDefs_OSTypeId_Windows7_64 }, // there is no CIM 64-bit type for this
+- { ovf::CIMOSType_CIMOS_CentOS, SchemaDefs_OSTypeId_RedHat },
+- { ovf::CIMOSType_CIMOS_CentOS_64, SchemaDefs_OSTypeId_RedHat_64 },
+- { ovf::CIMOSType_CIMOS_OracleEnterpriseLinux, SchemaDefs_OSTypeId_Oracle },
+- { ovf::CIMOSType_CIMOS_OracleEnterpriseLinux_64, SchemaDefs_OSTypeId_Oracle_64 },
+- { ovf::CIMOSType_CIMOS_eComStation, SchemaDefs_OSTypeId_OS2eCS }
+-
+- // there are no CIM types for these, so these turn to "other" on export:
+- // SchemaDefs_OSTypeId_OpenBSD
+- // SchemaDefs_OSTypeId_OpenBSD_64
+- // SchemaDefs_OSTypeId_NetBSD
+- // SchemaDefs_OSTypeId_NetBSD_64
++
++ // Custom OS
++ { ovf::CIMOSType_CIMOS_GNU, SchemaDefs_OSTypeId_GNU },
++ { ovf::CIMOSType_CIMOS_GNU_64, SchemaDefs_OSTypeId_GNU_64 },
++ { ovf::CIMOSType_CIMOS_GNUHurd, SchemaDefs_OSTypeId_GNUHurd },
++ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_GNULinux },
++ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_GNULinux_64 },
++
++ // GNU/Linux free distros
++ { ovf::CIMOSType_CIMOS_gNewSense, SchemaDefs_OSTypeId_gNewSense },
++ { ovf::CIMOSType_CIMOS_gNewSense_64, SchemaDefs_OSTypeId_gNewSense_64 },
++ { ovf::CIMOSType_CIMOS_Dragora, SchemaDefs_OSTypeId_Dragora },
++ { ovf::CIMOSType_CIMOS_Dragora_64, SchemaDefs_OSTypeId_Dragora_64 },
++ { ovf::CIMOSType_CIMOS_Musix, SchemaDefs_OSTypeId_Musix },
++ { ovf::CIMOSType_CIMOS_Musix_64, SchemaDefs_OSTypeId_Musix_64 },
++ { ovf::CIMOSType_CIMOS_Trisquel, SchemaDefs_OSTypeId_Trisquel },
++ { ovf::CIMOSType_CIMOS_Trisquel_64, SchemaDefs_OSTypeId_Trisquel_64 },
++ { ovf::CIMOSType_CIMOS_Dynebolic, SchemaDefs_OSTypeId_Dynebolic },
++ { ovf::CIMOSType_CIMOS_Venenux, SchemaDefs_OSTypeId_Venenux },
++
++ // GNU/Linux free distros that we have support for but CIM doesn't
++ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_Parabola },
++ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_Parabola_64 },
++ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_Blag },
++ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_Blag_64 },
++ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_Ututo },
++ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_Ututo_64 },
+
+ };
+
+@@ -150,53 +89,34 @@
+ /* These are the 32-Bit ones. They are sorted by priority. */
+ static const osTypePattern g_osTypesPattern[] =
+ {
+- {"Windows NT", SchemaDefs_OSTypeId_WindowsNT4},
+- {"Windows XP", SchemaDefs_OSTypeId_WindowsXP},
+- {"Windows 2000", SchemaDefs_OSTypeId_Windows2000},
+- {"Windows 2003", SchemaDefs_OSTypeId_Windows2003},
+- {"Windows Vista", SchemaDefs_OSTypeId_WindowsVista},
+- {"Windows 2008", SchemaDefs_OSTypeId_Windows2008},
+- {"SUSE", SchemaDefs_OSTypeId_OpenSUSE},
+- {"Novell", SchemaDefs_OSTypeId_OpenSUSE},
+- {"Red Hat", SchemaDefs_OSTypeId_RedHat},
+- {"Mandriva", SchemaDefs_OSTypeId_Mandriva},
+- {"Ubuntu", SchemaDefs_OSTypeId_Ubuntu},
+- {"Debian", SchemaDefs_OSTypeId_Debian},
+- {"QNX", SchemaDefs_OSTypeId_QNX},
+- {"Linux 2.4", SchemaDefs_OSTypeId_Linux24},
+- {"Linux 2.6", SchemaDefs_OSTypeId_Linux26},
+- {"Linux", SchemaDefs_OSTypeId_Linux},
+- {"OpenSolaris", SchemaDefs_OSTypeId_OpenSolaris},
+- {"Solaris", SchemaDefs_OSTypeId_OpenSolaris},
+- {"FreeBSD", SchemaDefs_OSTypeId_FreeBSD},
+- {"NetBSD", SchemaDefs_OSTypeId_NetBSD},
+- {"Windows 95", SchemaDefs_OSTypeId_Windows95},
+- {"Windows 98", SchemaDefs_OSTypeId_Windows98},
+- {"Windows Me", SchemaDefs_OSTypeId_WindowsMe},
+- {"Windows 3.", SchemaDefs_OSTypeId_Windows31},
+- {"DOS", SchemaDefs_OSTypeId_DOS},
+- {"OS2", SchemaDefs_OSTypeId_OS2}
++
++ {"Parabola GNU/Linux-libre", SchemaDefs_OSTypeId_Parabola},
++ {"gNewSense", SchemaDefs_OSTypeId_gNewSense},
++ {"Blag Linux and GNU", SchemaDefs_OSTypeId_Blag},
++ {"Dragora", SchemaDefs_OSTypeId_Dragora},
++ {"Ututo XS", SchemaDefs_OSTypeId_Ututo},
++ {"Musix", SchemaDefs_OSTypeId_Musix},
++ {"Trisquel", SchemaDefs_OSTypeId_Trisquel},
++ {"Dyne:bolic", SchemaDefs_OSTypeId_Dynebolic},
++ {"Venenux", SchemaDefs_OSTypeId_Venenux},
++ {"GNU", SchemaDefs_OSTypeId_GNU},
++ {"GNU-Hurd", SchemaDefs_OSTypeId_GNUHurd},
++ {"GNU/Linux", SchemaDefs_OSTypeId_GNULinux},
++
+ };
+
+ /* These are the 64-Bit ones. They are sorted by priority. */
+ static const osTypePattern g_osTypesPattern64[] =
+ {
+- {"Windows XP", SchemaDefs_OSTypeId_WindowsXP_64},
+- {"Windows 2003", SchemaDefs_OSTypeId_Windows2003_64},
+- {"Windows Vista", SchemaDefs_OSTypeId_WindowsVista_64},
+- {"Windows 2008", SchemaDefs_OSTypeId_Windows2008_64},
+- {"SUSE", SchemaDefs_OSTypeId_OpenSUSE_64},
+- {"Novell", SchemaDefs_OSTypeId_OpenSUSE_64},
+- {"Red Hat", SchemaDefs_OSTypeId_RedHat_64},
+- {"Mandriva", SchemaDefs_OSTypeId_Mandriva_64},
+- {"Ubuntu", SchemaDefs_OSTypeId_Ubuntu_64},
+- {"Debian", SchemaDefs_OSTypeId_Debian_64},
+- {"Linux 2.4", SchemaDefs_OSTypeId_Linux24_64},
+- {"Linux 2.6", SchemaDefs_OSTypeId_Linux26_64},
+- {"Linux", SchemaDefs_OSTypeId_Linux26_64},
+- {"OpenSolaris", SchemaDefs_OSTypeId_OpenSolaris_64},
+- {"Solaris", SchemaDefs_OSTypeId_OpenSolaris_64},
+- {"FreeBSD", SchemaDefs_OSTypeId_FreeBSD_64},
++ {"Parabola GNU/Linux-libre", SchemaDefs_OSTypeId_Parabola_64},
++ {"gNewSense", SchemaDefs_OSTypeId_gNewSense_64},
++ {"Blag Linux and GNU", SchemaDefs_OSTypeId_Blag_64},
++ {"Dragora", SchemaDefs_OSTypeId_Dragora_64},
++ {"Ututo XS", SchemaDefs_OSTypeId_Ututo_64},
++ {"Musix", SchemaDefs_OSTypeId_Musix_64},
++ {"Trisquel", SchemaDefs_OSTypeId_Trisquel_64},
++ {"GNU", SchemaDefs_OSTypeId_GNU_64},
++ {"GNU/Linux", SchemaDefs_OSTypeId_GNULinux_64},
+ };
+
+ /**
+--- VirtualBox-4.1.18.orig/src/VBox/Main/include/ovfreader.h 2012-06-20 10:17:34.000000000 -0300
++++ VirtualBox-4.1.18/src/VBox/Main/include/ovfreader.h 2012-07-26 03:51:21.807619186 -0300
+@@ -34,119 +34,24 @@
+
+ enum CIMOSType_T
+ {
+- CIMOSType_CIMOS_Unknown = 0,
+- CIMOSType_CIMOS_Other = 1,
+- CIMOSType_CIMOS_MACOS = 2,
+- CIMOSType_CIMOS_ATTUNIX = 3,
+- CIMOSType_CIMOS_DGUX = 4,
+- CIMOSType_CIMOS_DECNT = 5,
+- CIMOSType_CIMOS_Tru64UNIX = 6,
+- CIMOSType_CIMOS_OpenVMS = 7,
+- CIMOSType_CIMOS_HPUX = 8,
+- CIMOSType_CIMOS_AIX = 9,
+- CIMOSType_CIMOS_MVS = 10,
+- CIMOSType_CIMOS_OS400 = 11,
+- CIMOSType_CIMOS_OS2 = 12,
+- CIMOSType_CIMOS_JavaVM = 13,
+- CIMOSType_CIMOS_MSDOS = 14,
+- CIMOSType_CIMOS_WIN3x = 15,
+- CIMOSType_CIMOS_WIN95 = 16,
+- CIMOSType_CIMOS_WIN98 = 17,
+- CIMOSType_CIMOS_WINNT = 18,
+- CIMOSType_CIMOS_WINCE = 19,
+- CIMOSType_CIMOS_NCR3000 = 20,
+- CIMOSType_CIMOS_NetWare = 21,
+- CIMOSType_CIMOS_OSF = 22,
+- CIMOSType_CIMOS_DCOS = 23,
+- CIMOSType_CIMOS_ReliantUNIX = 24,
+- CIMOSType_CIMOS_SCOUnixWare = 25,
+- CIMOSType_CIMOS_SCOOpenServer = 26,
+- CIMOSType_CIMOS_Sequent = 27,
+- CIMOSType_CIMOS_IRIX = 28,
+- CIMOSType_CIMOS_Solaris = 29,
+- CIMOSType_CIMOS_SunOS = 30,
+- CIMOSType_CIMOS_U6000 = 31,
+- CIMOSType_CIMOS_ASERIES = 32,
+- CIMOSType_CIMOS_HPNonStopOS = 33,
+- CIMOSType_CIMOS_HPNonStopOSS = 34,
+- CIMOSType_CIMOS_BS2000 = 35,
+- CIMOSType_CIMOS_LINUX = 36,
+- CIMOSType_CIMOS_Lynx = 37,
+- CIMOSType_CIMOS_XENIX = 38,
+- CIMOSType_CIMOS_VM = 39,
+- CIMOSType_CIMOS_InteractiveUNIX = 40,
+- CIMOSType_CIMOS_BSDUNIX = 41,
+- CIMOSType_CIMOS_FreeBSD = 42,
+- CIMOSType_CIMOS_NetBSD = 43,
+- CIMOSType_CIMOS_GNUHurd = 44,
+- CIMOSType_CIMOS_OS9 = 45,
+- CIMOSType_CIMOS_MACHKernel = 46,
+- CIMOSType_CIMOS_Inferno = 47,
+- CIMOSType_CIMOS_QNX = 48,
+- CIMOSType_CIMOS_EPOC = 49,
+- CIMOSType_CIMOS_IxWorks = 50,
+- CIMOSType_CIMOS_VxWorks = 51,
+- CIMOSType_CIMOS_MiNT = 52,
+- CIMOSType_CIMOS_BeOS = 53,
+- CIMOSType_CIMOS_HPMPE = 54,
+- CIMOSType_CIMOS_NextStep = 55,
+- CIMOSType_CIMOS_PalmPilot = 56,
+- CIMOSType_CIMOS_Rhapsody = 57,
+- CIMOSType_CIMOS_Windows2000 = 58,
+- CIMOSType_CIMOS_Dedicated = 59,
+- CIMOSType_CIMOS_OS390 = 60,
+- CIMOSType_CIMOS_VSE = 61,
+- CIMOSType_CIMOS_TPF = 62,
+- CIMOSType_CIMOS_WindowsMe = 63,
+- CIMOSType_CIMOS_CalderaOpenUNIX = 64,
+- CIMOSType_CIMOS_OpenBSD = 65,
+- CIMOSType_CIMOS_NotApplicable = 66,
+- CIMOSType_CIMOS_WindowsXP = 67,
+- CIMOSType_CIMOS_zOS = 68,
+- CIMOSType_CIMOS_MicrosoftWindowsServer2003 = 69,
+- CIMOSType_CIMOS_MicrosoftWindowsServer2003_64 = 70,
+- CIMOSType_CIMOS_WindowsXP_64 = 71,
+- CIMOSType_CIMOS_WindowsXPEmbedded = 72,
+- CIMOSType_CIMOS_WindowsVista = 73,
+- CIMOSType_CIMOS_WindowsVista_64 = 74,
+- CIMOSType_CIMOS_WindowsEmbeddedforPointofService = 75,
+- CIMOSType_CIMOS_MicrosoftWindowsServer2008 = 76,
+- CIMOSType_CIMOS_MicrosoftWindowsServer2008_64 = 77,
+- CIMOSType_CIMOS_FreeBSD_64 = 78,
+- CIMOSType_CIMOS_RedHatEnterpriseLinux = 79,
+- CIMOSType_CIMOS_RedHatEnterpriseLinux_64 = 80,
+- CIMOSType_CIMOS_Solaris_64 = 81,
+- CIMOSType_CIMOS_SUSE = 82,
+- CIMOSType_CIMOS_SUSE_64 = 83,
+- CIMOSType_CIMOS_SLES = 84,
+- CIMOSType_CIMOS_SLES_64 = 85,
+- CIMOSType_CIMOS_NovellOES = 86,
+- CIMOSType_CIMOS_NovellLinuxDesktop = 87,
+- CIMOSType_CIMOS_SunJavaDesktopSystem = 88,
+- CIMOSType_CIMOS_Mandriva = 89,
+- CIMOSType_CIMOS_Mandriva_64 = 90,
+- CIMOSType_CIMOS_TurboLinux = 91,
+- CIMOSType_CIMOS_TurboLinux_64 = 92,
+- CIMOSType_CIMOS_Ubuntu = 93,
+- CIMOSType_CIMOS_Ubuntu_64 = 94,
+- CIMOSType_CIMOS_Debian = 95,
+- CIMOSType_CIMOS_Debian_64 = 96,
+- CIMOSType_CIMOS_Linux_2_4_x = 97,
+- CIMOSType_CIMOS_Linux_2_4_x_64 = 98,
+- CIMOSType_CIMOS_Linux_2_6_x = 99,
+- CIMOSType_CIMOS_Linux_2_6_x_64 = 100,
+- CIMOSType_CIMOS_Linux_64 = 101,
+- CIMOSType_CIMOS_Other_64 = 102,
+- // types added with CIM 2.25.0 follow:
+- CIMOSType_CIMOS_WindowsServer2008R2 = 103,
+- CIMOSType_CIMOS_VMwareESXi = 104,
+- CIMOSType_CIMOS_Windows7 = 105,
+- CIMOSType_CIMOS_CentOS = 106,
+- CIMOSType_CIMOS_CentOS_64 = 107,
+- CIMOSType_CIMOS_OracleEnterpriseLinux = 108,
+- CIMOSType_CIMOS_OracleEnterpriseLinux_64 = 109,
+- CIMOSType_CIMOS_eComStation = 110
+- // no new types added with CIM 2.26.0
++ CIMOSType_CIMOS_Unknown = 0,
++ CIMOSType_CIMOS_Other = 1,
++ CIMOSType_CIMOS_Other_64 = 2,
++ CIMOSType_CIMOS_gNewSense = 3,
++ CIMOSType_CIMOS_gNewSense_64 = 4,
++ CIMOSType_CIMOS_Dragora = 5,
++ CIMOSType_CIMOS_Dragora_64 = 6,
++ CIMOSType_CIMOS_Musix = 7,
++ CIMOSType_CIMOS_Musix_64 = 8,
++ CIMOSType_CIMOS_Trisquel = 9,
++ CIMOSType_CIMOS_Trisquel_64 = 10,
++ CIMOSType_CIMOS_Dynebolic = 11,
++ CIMOSType_CIMOS_Venenux = 12,
++ CIMOSType_CIMOS_GNU = 13,
++ CIMOSType_CIMOS_GNU_64 = 14,
++ CIMOSType_CIMOS_GNUHurd = 15,
++ CIMOSType_CIMOS_GNULinux = 16,
++ CIMOSType_CIMOS_GNULinux_64 = 17
+ };
+
+
+--- VirtualBox-4.1.18.orig/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c 2012-06-20 10:09:01.000000000 -0300
++++ VirtualBox-4.1.18/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c 2012-07-26 15:32:55.309812685 -0300
+@@ -622,16 +622,16 @@
+ * Call the common device extension initializer.
+ */
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) && defined(RT_ARCH_X86)
+- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux26;
++ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux;
+ #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) && defined(RT_ARCH_AMD64)
+- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux26_x64;
++ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux_x64;
+ #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) && defined(RT_ARCH_X86)
+- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux24;
++ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux;
+ #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) && defined(RT_ARCH_AMD64)
+- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux24_x64;
++ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux_x64;
+ #else
+ # warning "huh? which arch + version is this?"
+- VBOXOSTYPE enmOsType = VBOXOSTYPE_Linux;
++ VBOXOSTYPE enmOsType = VBOXOSTYPE_GNULinux;
+ #endif
+ rc = VBoxGuestInitDevExt(&g_DevExt,
+ g_IOPortBase,
diff --git a/libre/virtualbox-libre/ipv6_vnc.patch b/libre/virtualbox-libre/ipv6_vnc.patch
new file mode 100644
index 000000000..8f50aba1c
--- /dev/null
+++ b/libre/virtualbox-libre/ipv6_vnc.patch
@@ -0,0 +1,20 @@
+diff -aur vanilla/VirtualBox-4.1.18/src/VBox/Frontends/VBoxHeadless/FramebufferVNC.cpp changed/VirtualBox-4.1.18/src/VBox/Frontends/VBoxHeadless/FramebufferVNC.cpp
+--- vanilla/VirtualBox-4.1.18/src/VBox/Frontends/VBoxHeadless/FramebufferVNC.cpp 2012-06-20 15:15:53.000000000 +0200
++++ changed/VirtualBox-4.1.18/src/VBox/Frontends/VBoxHeadless/FramebufferVNC.cpp 2012-07-16 16:24:22.448349886 +0200
+@@ -88,8 +88,16 @@
+
+ vncServer = rfbGetScreen(0, NULL, mWidth, mHeight, 8, 3, 1);
+ vncServer->screenData = (void*)this;
++#ifdef LIBVNCSERVER_IPv6
++ if (mVncPort) {
++ vncServer->port = mVncPort;
++ vncServer->ipv6port = mVncPort;
++ }
++#else
+ if (mVncPort)
+ vncServer->port = mVncPort;
++#endif
++
+ char *pszDesktopName;
+ rc = RTStrAPrintf(&pszDesktopName, "%s - VirtualBox", pszName);
+ if (rc >= 0)
diff --git a/libre/virtualbox-libre/libre.patch b/libre/virtualbox-libre/libre.patch
new file mode 100644
index 000000000..e51d0c0a7
--- /dev/null
+++ b/libre/virtualbox-libre/libre.patch
@@ -0,0 +1,5765 @@
+--- VirtualBox-4.1.18.orig/Config.kmk 2012-07-24 16:38:43.981310996 -0300
++++ VirtualBox-4.1.18/Config.kmk 2012-07-24 16:38:44.001309865 -0300
+@@ -56,9 +56,6 @@
+ PROPS_SYSMODS_ACCUMULATE_L += INTERMEDIATES
+ PROPS_MISCBINS_ACCUMULATE_L += INTERMEDIATES
+
+-# Misc names used bye the install paths below.
+-VBOX_PUEL_MANGLED_NAME := Oracle_VM_VirtualBox_Extension_Pack
+-
+ # Install paths
+ ## @todo This will change after 4.1 is branched off!
+ # What is now 'bin' and 'lib' will be moved down under 'staged/', except on
+@@ -125,9 +122,6 @@
+ endif
+
+ INST_DOC = doc/
+-INST_EXTPACK = $(INST_BIN)ExtensionPacks/
+-INST_EXTPACK_CERTS = $(INST_BIN)ExtPackCertificates/
+-INST_EXTPACK_PUEL = $(INST_EXTPACK)$(VBOX_PUEL_MANGLED_NAME)/
+ INST_PACKAGES = packages/
+
+ VBOX_PATH_SDK = $(patsubst %/,%,$(PATH_STAGE)/$(INST_SDK))
+@@ -136,7 +130,6 @@
+ VBOX_PATH_ADDITIONS = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS))
+ VBOX_PATH_ADDITIONS_ISO = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS_ISO))
+ VBOX_PATH_ADDITIONS_LIB = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS_LIB))
+-VBOX_PATH_EXTPACK_PUEL= $(patsubst %/,%,$(PATH_STAGE)/$(INST_EXTPACK_PUEL))
+ VBOX_PATH_PACKAGES = $(patsubst %/,%,$(PATH_STAGE)/$(INST_PACKAGES))
+
+
+@@ -208,7 +201,6 @@
+ export VBOX_ADDITIONS_SH_MODE = release
+ export VBOX_DOCUMENTATION_SH_MODE = release
+ export VBOX_EFI_SH_MODE = release
+- export VBOX_EXTPACKS_SH_MODE = release
+ endif
+
+ # Some info on the vendor
+@@ -361,8 +353,6 @@
+ VBOX_WITH_USB = 1
+ # Enable the USB 1.1 controller plus virtual USB HID devices.
+ VBOX_WITH_VUSB = 1
+-# Enable the USB 2.0 controller.
+-VBOX_WITH_EHCI = 1
+ # Enable the ISCSI feature.
+ VBOX_WITH_ISCSI = 1
+ # Enable INIP support in the ISCSI feature.
+@@ -430,9 +420,6 @@
+ ifdef VBOX_WITH_USB
+ VBOX_WITH_VUSB = 1
+ endif
+-ifdef VBOX_WITH_EHCI
+- VBOX_WITH_EHCI_IMPL = 1
+-endif
+ ifdef VBOX_WITH_PCI_PASSTHROUGH
+ VBOX_WITH_PCI_PASSTHROUGH_IMPL = 1
+ endif
+@@ -591,15 +578,6 @@
+ ## @}
+
+
+-## @name Extension pack
+-## @{
+-# Enables the extension pack feature.
+-VBOX_WITH_EXTPACK = 1
+-# Enables separating code into the Oracle VM VirtualBox Extension Pack, dubbed PUEL.
+-VBOX_WITH_EXTPACK_PUEL = 1
+-# Enables building+packing the Oracle VM VirtualBox Extension Pack, includes VBOX_WITH_EXTPACK_PUEL
+-VBOX_WITH_EXTPACK_PUEL_BUILD = 1
+-## @}
+
+ ## @name Misc
+ ## @{
+@@ -777,14 +755,6 @@
+ # Skip stuff.
+ #
+
+-ifdef VBOX_ONLY_EXTPACKS
+- # Clear some VBOX_WITH_XXX variables instead of adding ifdefs all over the place.
+- VBOX_WITH_DEBUGGER =
+- VBOX_WITH_ADDITIONS =
+- VBOX_WITH_VBOXDRV =
+- VBOX_WITH_TESTCASES =
+-endif
+-
+ # VBOX_QUICK can be used by core developers to speed to the build
+ ifdef VBOX_QUICK
+ # undefine variables by assigning blank.
+@@ -848,7 +818,6 @@
+ VBOX_WITH_TESTSUITE=
+ VBOX_WITH_QTGUI=
+ VBOX_WITH_USB=
+- VBOX_WITH_EHCI=
+ VBOX_WITH_DOCS=
+ VBOX_WITH_PDM_ASYNC_COMPLETION=
+ VBOX_WITH_KCHMVIEWER=
+@@ -870,7 +839,6 @@
+ VBOX_WITH_CROGL=
+ VBOX_WITH_DEBUGGER=
+ VBOX_WITH_DOCS=
+- VBOX_WITH_EHCI=
+ VBOX_WITH_HARDENING=
+ VBOX_WITH_HEADLESS=
+ VBOX_WITH_HGCM=
+@@ -952,9 +920,6 @@
+ #
+ ifdef VBOX_OSE
+ VBOX_WITH_VRDP=
+- VBOX_WITH_EHCI_IMPL=
+- VBOX_WITH_EXTPACK_PUEL=
+- VBOX_WITH_EXTPACK_PUEL_BUILD=
+ VBOX_WITH_PCI_PASSTHROUGH_IMPL=
+ VBOX_WITH_OS2_ADDITIONS_BIN=
+ VBOX_WITH_SECURELABEL=
+@@ -1082,10 +1047,6 @@
+ VBOX_WITH_KCHMVIEWER=
+ endif
+
+-ifdef VBOX_WITH_EXTPACK_PUEL_BUILD
+- VBOX_WITH_EXTPACK_PUEL = 1
+-endif
+-
+ #
+ # Mark OSE builds clearly, helps figuring out limitations more easily.
+ #
+@@ -1679,9 +1640,6 @@
+ # biossums (set BIOS checksums)
+ VBOX_BIOSSUMS ?= $(PATH_OBJ)/biossums/biossums$(HOSTSUFF_EXE)
+
+-# RTManifest (extension pack manifest utility)
+-VBOX_RTMANIFEST ?= $(PATH_OBJ)/bldRTManifest/bldRTManifest$(HOSTSUFF_EXE)
+-
+ # filesplitter (splits java files)
+ VBOX_FILESPLIT ?= $(PATH_OBJ)/filesplitter/filesplitter$(HOSTSUFF_EXE)
+
+@@ -2461,13 +2419,6 @@
+ SDK_VBOX_OPENSSL2_LIBS = $(NO_SUCH_VARIABLE)
+ endif
+
+-SDK_VBoxOpenSslExtPack = Internal use only.
+-SDK_VBoxOpenSslExtPack_INCS = $(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)
+-SDK_VBoxOpenSslExtPack_ORDERDEPS = $(crypto-headers_1_TARGET)
+-SDK_VBoxOpenSslExtPack_LIBS = \
+- $(PATH_STAGE_LIB)/VBoxExtPack-libssl$(VBOX_SUFF_LIB) \
+- $(PATH_STAGE_LIB)/VBoxExtPack-libcrypto$(VBOX_SUFF_LIB)
+-
+ SDK_VBOX_BLD_OPENSSL = .
+ SDK_VBOX_BLD_OPENSSL_EXTENDS = VBOX_OPENSSL
+ SDK_VBOX_BLD_OPENSSL_LIBS ?= \
+@@ -3817,100 +3768,6 @@
+ endif
+ TEMPLATE_VBOXMAINCLIENTDLL_LDFLAGS.darwin = $(filter-out -bind_at_load,$(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS.darwin))
+
+-
+-
+-#
+-# Templates used for building the extension packs.
+-#
+-ifdef VBOX_WITH_EXTPACK
+- # Base templates (native or portable).
+- TEMPLATE_VBoxR3ExtPack = For the ring-3 context extension pack modules.
+- if 1 # Native for now.
+- TEMPLATE_VBoxR3ExtPack_EXTENDS = VBOXR3DLLNOXCPT
+- TEMPLATE_VBoxR3ExtPack_DEFS = $(TEMPLATE_VBOXR3DLLNOXCPT_DEFS) VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R3
+- else
+- TEMPLATE_VBoxR3ExtPack_EXTENDS = VBOXNOCRTGCC
+- TEMPLATE_VBoxR3ExtPack_DEFS = $(TEMPLATE_VBOXNOCRTGCC_DEFS) VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R3 IPRT_NO_CRT IN_RING3
+- TEMPLATE_VBoxR3ExtPack_INCS = $(PATH_ROOT)/include/iprt/nocrt $(TEMPLATE_VBOXR3DLLNOXCPT_INCS)
+- endif
+- ifneq ($(KBUILD_TARGET),win)
+- TEMPLATE_VBoxR3ExtPack_CXXFLAGS = $(TEMPLATE_VBOXR3DLLNOXCPT_CXXFLAGS) -fno-rtti
+- endif
+- TEMPLATE_VBoxR3ExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
+- ifeq ($(KBUILD_TARGET),linux)
+- TEMPLATE_VBoxR3ExtPack_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)', $(TEMPLATE_VBOXR3DLLNOXCPT_LDFLAGS))
+- else
+- if !defined(VBOX_WITH_RUNPATH) && defined(VBOX_WITH_RELATIVE_RUNPATH)
+- TEMPLATE_VBoxR3ExtPack_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/../../..' $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)', $(TEMPLATE_VBOXR3DLLNOXCPT_LDFLAGS))
+- endif
+- endif
+- ifdef VBOX_ONLY_EXTPACKS_USE_IMPLIBS
+- if1of ($(KBUILD_TARGET), win os2)
+- TEMPLATE_VBoxR3ExtPack_LIBS = \
+- $(TEMPLATE_LIBS_VBOXR3) \
+- $(PATH_STAGE_LIB)/VMMR3Imp$(VBOX_SUFF_LIB) \
+- $(PATH_STAGE_LIB)/VBoxRTImp$(VBOX_SUFF_LIB)
+- else
+- TEMPLATE_VBoxR3ExtPack_LIBS = \
+- $(TEMPLATE_LIBS_VBOXR3) \
+- $(PATH_STAGE_LIB)/VMMR3Imp$(VBOX_SUFF_DLL) \
+- $(PATH_STAGE_LIB)/VBoxRTImp$(VBOX_SUFF_DLL)
+- endif
+- else
+- TEMPLATE_VBoxR3ExtPack_LIBS = \
+- $(TEMPLATE_LIBS_VBOXR3) \
+- $(LIB_RUNTIME) \
+- $(LIB_VMM)
+- endif
+-
+- TEMPLATE_VBoxR0ExtPack = For the ring-0 context extension pack modules.
+- TEMPLATE_VBoxR0ExtPack_EXTENDS = VBoxR0
+- TEMPLATE_VBoxR0ExtPack_EXTENDS_BY = appending
+- TEMPLATE_VBoxR0ExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
+- TEMPLATE_VBoxR0ExtPack_DEFS = VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R0
+- if1of ($(VBOX_LDR_FMT), pe lx)
+- TEMPLATE_VBoxR0ExtPack_LIBS = \
+- $(PATH_STAGE_LIB)/VMMR0Imp$(VBOX_SUFF_LIB) \
+- $(PATH_STAGE_LIB)/SUPR0$(VBOX_SUFF_LIB)
+- endif
+-
+- TEMPLATE_VBoxRcExtPack = For the raw-mode context extension pack modules.
+- TEMPLATE_VBoxRcExtPack_EXTENDS = VBoxRc
+- TEMPLATE_VBoxRcExtPack_EXTENDS_BY = appending
+- TEMPLATE_VBoxRcExtPack_SYSSUFF = .rc
+- TEMPLATE_VBoxRcExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
+- TEMPLATE_VBoxRcExtPack_DEFS = VBOX_IN_EXTPACK VBOX_IN_EXTPACK_RC
+- if1of ($(VBOX_LDR_FMT32), pe lx)
+- TEMPLATE_VBoxRcExtPack_LIBS = \
+- $(PATH_STAGE_LIB)/VMMRCBuiltin$(VBOX_SUFF_LIB) \
+- $(PATH_STAGE_LIB)/VMMRCImp$(VBOX_SUFF_LIB)
+- endif
+-
+- TEMPLATE_VBoxInsExtPack = For the install targets of an extension pack.
+- TEMPLATE_VBoxInsExtPack_MODE = 0644
+- TEMPLATE_VBoxInsExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
+-
+- # For each individual extension pack
+- ifdef VBOX_WITH_EXTPACK_PUEL
+- TEMPLATE_VBoxR3ExtPackPuel = For the ring-3 context modules in the PUEL extension pack.
+- TEMPLATE_VBoxR3ExtPackPuel_EXTENDS = VBoxR3ExtPack
+- TEMPLATE_VBoxR3ExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/
+-
+- TEMPLATE_VBoxR0ExtPackPuel = For the ring-0 context modules in the PUEL extension pack.
+- TEMPLATE_VBoxR0ExtPackPuel_EXTENDS = VBoxR0ExtPack
+- TEMPLATE_VBoxR0ExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/
+-
+- TEMPLATE_VBoxRcExtPackPuel = For the raw-mode context modules in the PUEL extension pack.
+- TEMPLATE_VBoxRcExtPackPuel_EXTENDS = VBoxRcExtPack
+- TEMPLATE_VBoxRcExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/
+-
+- TEMPLATE_VBoxInsExtPackPuel = For the install targets of an extension pack.
+- TEMPLATE_VBoxInsExtPackPuel_EXTENDS = VBoxR0ExtPack
+- TEMPLATE_VBoxInsExtPackPuel_INST = $(INST_EXTPACK_PUEL)
+-endif
+-endif # VBOX_WITH_EXTPACK
+-
+-
+ #
+ # Qt 4
+ # Qt 4
+--- VirtualBox-4.1.18.orig/Makefile.kmk 2012-07-24 17:16:47.078929150 -0300
++++ VirtualBox-4.1.18/Makefile.kmk 2012-07-24 17:16:47.125592981 -0300
+@@ -446,7 +446,6 @@
+ include/VBox \
+ include/VBox/vmm \
+ include/VBox/com \
+- include/VBox/ExtPack \
+ include/VBox/HostServices \
+ include/VBox/GuestHost \
+ include/VBox/HGSMI \
+@@ -862,191 +861,6 @@
+ additions-build-linux.x86.combined \
+ additions-packing
+
+-
+-#
+-# Build the extension packs, all of them.
+-#
+-# This is tailored (hardcoded) for the extension pack build box.
+-#
+-# The fetching must be done in serial fashion, while the building should be
+-# more flexible wrt to -jN.
+-#
+-extpacks-fetch:
+- + $(KMK) -C tools fetch VBOX_ONLY_EXTPACKS=1
+- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=darwin BUILD_TARGET_ARCH=amd64 BUILD_TARGET=darwin VBOX_ONLY_EXTPACKS=1
+- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=darwin BUILD_TARGET_ARCH=x86 BUILD_TARGET=darwin VBOX_ONLY_EXTPACKS=1
+-# + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=freebsd BUILD_TARGET_ARCH=amd64 BUILD_TARGET=freebsd VBOX_ONLY_EXTPACKS=1
+-# + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=freebsd BUILD_TARGET_ARCH=x86 BUILD_TARGET=freebsd VBOX_ONLY_EXTPACKS=1
+- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=linux BUILD_TARGET_ARCH=amd64 BUILD_TARGET=linux VBOX_ONLY_EXTPACKS=1
+- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=linux BUILD_TARGET_ARCH=x86 BUILD_TARGET=linux VBOX_ONLY_EXTPACKS=1
+-# + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=os2 BUILD_TARGET_ARCH=x86 BUILD_TARGET=os2 VBOX_ONLY_EXTPACKS=1
+- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=solaris BUILD_TARGET_ARCH=amd64 BUILD_TARGET=solaris VBOX_ONLY_EXTPACKS=1
+- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=solaris BUILD_TARGET_ARCH=x86 BUILD_TARGET=solaris VBOX_ONLY_EXTPACKS=1
+- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=win BUILD_TARGET_ARCH=amd64 BUILD_TARGET=win VBOX_ONLY_EXTPACKS=1
+- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=win BUILD_TARGET_ARCH=x86 BUILD_TARGET=win VBOX_ONLY_EXTPACKS=1
+-
+-
+-extpacks-build: \
+- extpacks-build-win.amd64 \
+- extpacks-build-win.x86 \
+- extpacks-build-solaris.amd64 \
+- extpacks-build-solaris.x86 \
+- extpacks-build-os2.x86 \
+- extpacks-build-linux.amd64 \
+- extpacks-build-linux.x86 \
+- extpacks-build-darwin.amd64 \
+- extpacks-build-darwin.x86 \
+- extpacks-build-freebsd.amd64 \
+- extpacks-build-freebsd.x86
+-
+-VBOX_EXTPACKS_BUILD.amd64 = VBOX_ONLY_EXTPACKS=1 \
+- KBUILD_TYPE=$(KBUILD_TYPE) BUILD_TYPE=$(KBUILD_TYPE) \
+- KBUILD_TARGET_ARCH=amd64 BUILD_TARGET_ARCH=amd64 \
+- VBOX_SVN_REV=$(VBOX_SVN_REV)
+-
+-VBOX_EXTPACKS_BUILD.x86 = VBOX_ONLY_EXTPACKS=1 \
+- KBUILD_TYPE=$(KBUILD_TYPE) BUILD_TYPE=$(KBUILD_TYPE) \
+- KBUILD_TARGET_ARCH=x86 BUILD_TARGET_ARCH=x86 \
+- VBOX_SVN_REV=$(VBOX_SVN_REV)
+-
+-# Automatically determine the extpack build subdir name. Used for figuring out
+-# directory names inside the extension pack building VMs.
+-VBOX_EXTPACKS_BUILD_SUBDIRNAME := $(lastword $(subst /, ,$(PATH_ROOT)))
+-
+-# When building in parallel on a Windows host, make sure we finish the host
+-# bit before kicking off any UNIX guest or we'll run into file sharing issues.
+-ifeq ($(KBUILD_TARGET),win)
+-VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST = extpacks-build-win.x86 extpacks-build-win.amd64
+-else
+-VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST =
+-endif
+-
+-extpacks-build-win.amd64:
+-ifeq ($(KBUILD_TARGET),win)
+- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-else
+- $(call MSG_L1,Building Windows/amd64 extension packs)
+- $(VBOX_KMK_TIME) ssh vbox@192.168.27.6 " echo $@ && cd e:/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh kmk $(VBOX_EXTPACKS_BUILD.amd64) all"
+-endif
+-
+-extpacks-build-win.x86:
+-ifeq ($(KBUILD_TARGET),win)
+- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-else
+- $(call MSG_L1,Building Windows/x86 extension packs)
+- $(VBOX_KMK_TIME) ssh vbox@192.168.27.16 " echo $@ && cd e:/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh kmk $(VBOX_EXTPACKS_BUILD.x86) all"
+-endif
+-
+-ifeq ($(KBUILD_TARGET),solaris)
+-extpacks-build-solaris.amd64:
+- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-
+-extpacks-build-solaris.x86: extpacks-build-solaris.amd64
+- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) VBOX_WITH_COMBINED_SOLARIS_GUEST_PACKAGE=1 all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-
+-else
+-# Serialize 32-bit and 64-bit ASSUMING the same VM builds both.
+-extpacks-build-solaris.rsync-into-vm: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
+- $(VBOX_KMK_TIME) $(call VBOX_RSYNC_IN_FN,solaris,*) . 192.168.27.4:/mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)
+-
+-extpacks-build-solaris.build-it: extpacks-build-solaris.rsync-into-vm
+- $(call MSG_L1,Building Solaris/amd64 extension packs)
+- $(VBOX_KMK_TIME) ssh vbox@192.168.27.4 " echo $@/amd64 && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all"
+- $(call MSG_L1,Building Solaris/x86 extension packs)
+- $(VBOX_KMK_TIME) ssh vbox@192.168.27.4 " echo $@/x86 && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all"
+-
+-extpacks-build-solaris.rsync-out-of-vm: extpacks-build-solaris.build-it
+- $(VBOX_KMK_TIME) rsync -a --delete 192.168.27.4:/mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/solaris.x86 out/
+- $(VBOX_KMK_TIME) rsync -a --delete 192.168.27.4:/mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/solaris.amd64 out/
+-
+-.NOTPARALLEL: extpacks-build-solaris.rsync-out-of-vm extpacks-build-solaris.rsync-into-vm
+-.PHONY: extpacks-build-solaris.rsync-out-of-vm extpacks-build-solaris.rsync-into-vm extpacks-build-solaris.build-it
+-
+-extpacks-build-solaris.amd64: extpacks-build-solaris.rsync-out-of-vm
+-extpacks-build-solaris.x86: extpacks-build-solaris.rsync-out-of-vm
+-endif
+-
+-extpacks-build-os2.x86:
+-#ifeq ($(KBUILD_TARGET),os2)
+-# + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-#else
+-# $(VBOX_KMK_TIME) ssh vbox@192.168.27.3 " cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) "
+-#endif
+-
+-extpacks-build-linux.amd64: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
+-ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),linux.amd64)
+- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-else
+- $(call MSG_L1,Building Linux/amd64 extension packs)
+- $(VBOX_KMK_TIME) ssh vbox@192.168.27.12 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all"
+-endif
+-
+-extpacks-build-linux.x86: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
+-ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),linux.x86)
+- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-else
+- $(call MSG_L1,Building Linux/x86 extension packs)
+- $(VBOX_KMK_TIME) ssh vbox@192.168.27.11 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all"
+-endif
+-
+-extpacks-build-freebsd.amd64: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
+-#ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),freebsd.amd64)
+-# + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-#else
+-# $(call MSG_L1,Building FreeBSD/amd64 extension packs)
+-# $(VBOX_KMK_TIME) ssh vbox@192.168.27.17 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all"
+-#endif
+-
+-extpacks-build-freebsd.x86: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
+-#ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),freebsd.x86)
+-# + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-#else
+-# $(call MSG_L1,Building FreeBSD/x86 extension packs)
+-# $(VBOX_KMK_TIME) ssh vbox@192.168.27.7 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all"
+-#endif
+-
+-extpacks-build-darwin.amd64: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
+-ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),darwin.amd64)
+- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-else
+- $(call MSG_L1,Building Darwin/amd64 extension packs)
+- $(VBOX_KMK_TIME) $(call VBOX_RSYNC_IN_FN,darwin,amd64) . 192.168.27.15:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)
+- $(VBOX_KMK_TIME) ssh vbox@192.168.27.15 " echo $@ && cd /Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all"
+- $(VBOX_KMK_TIME) rsync -am -v --delete 192.168.27.15:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/darwin.amd64 out/
+-endif
+-
+-extpacks-build-darwin.x86: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
+-ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),darwin.x86)
+- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
+-else
+- $(call MSG_L1,Building Darwin/x86 extension packs)
+- $(VBOX_KMK_TIME) $(call VBOX_RSYNC_IN_FN,darwin,x86) . 192.168.27.5:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)
+- $(VBOX_KMK_TIME) ssh vbox@192.168.27.5 " echo $@ && cd /Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all"
+- $(VBOX_KMK_TIME) rsync -am -v --delete 192.168.27.5:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/darwin.x86 out/
+-endif
+-
+-
+-extpacks-packing:
+- + $(KMK) VBOX_ONLY_EXTPACKS=1 \
+- VBOX_WITH_EXTPACK_OS_ARCHS="darwin.amd64 darwin.x86 linux.amd64 linux.x86 solaris.amd64 solaris.x86 win.amd64 win.x86" \
+- packing
+-# +++ freebsd.amd64 freebsd.x86 os2.x86 ^^^
+-
+-.PHONY: \
+- extpacks-build-win.x86 \
+- extpacks-build-win.amd64 \
+- extpacks-build-solaris.amd64 \
+- extpacks-build-solaris.x86 \
+- extpacks-build-os2.x86 \
+- extpacks-build-linux.amd64 \
+- extpacks-build-linux.x86 \
+- extpacks-build-freebsd.amd64 \
+- extpacks-build-freebsd.x86 \
+- extpacks-build-darwin.amd64 \
+- extpacks-build-darwin.x86 \
+- extpacks-packing
+-
+-
+ #
+ # Build the test suite, all of it.
+ #
+--- VirtualBox-4.1.18.orig/src/VBox/Devices/build/VBoxDD.cpp 2012-06-20 10:15:51.000000000 -0300
++++ VirtualBox-4.1.18/src/VBox/Devices/build/VBoxDD.cpp 2012-07-24 16:18:03.964493454 -0300
+@@ -132,11 +132,6 @@
+ if (RT_FAILURE(rc))
+ return rc;
+ #endif
+-#ifdef VBOX_WITH_EHCI_IMPL
+- rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceEHCI);
+- if (RT_FAILURE(rc))
+- return rc;
+-#endif
+ #ifdef VBOX_ACPI
+ rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceACPI);
+ if (RT_FAILURE(rc))
+--- VirtualBox-4.1.18.orig/src/VBox/Devices/build/VBoxDD.h 2012-06-20 10:15:51.000000000 -0300
++++ VirtualBox-4.1.18/src/VBox/Devices/build/VBoxDD.h 2012-07-24 16:20:35.939205389 -0300
+@@ -62,7 +62,6 @@
+ extern const PDMDEVREG g_DeviceICH6_HDA;
+ extern const PDMDEVREG g_DeviceAudioSniffer;
+ extern const PDMDEVREG g_DeviceOHCI;
+-extern const PDMDEVREG g_DeviceEHCI;
+ extern const PDMDEVREG g_DeviceACPI;
+ extern const PDMDEVREG g_DeviceDMA;
+ extern const PDMDEVREG g_DeviceFloppyController;
+--- VirtualBox-4.1.18.orig/src/VBox/Main/include/ExtPackManagerImpl.h 2012-06-20 10:17:33.000000000 -0300
++++ /dev/null 2012-07-24 14:48:18.638572110 -0300
+@@ -1,245 +0,0 @@
+-/* $Id: ExtPackManagerImpl.h $ */
+-/** @file
+- * VirtualBox Main - interface for Extension Packs, VBoxSVC & VBoxC.
+- */
+-
+-/*
+- * Copyright (C) 2010 Oracle Corporation
+- *
+- * This file is part of VirtualBox Open Source Edition (OSE), as
+- * available from http://www.virtualbox.org. This file is free software;
+- * you can redistribute it and/or modify it under the terms of the GNU
+- * General Public License (GPL) as published by the Free Software
+- * Foundation, in version 2 as it comes in the "COPYING" file of the
+- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+- */
+-
+-#ifndef ____H_EXTPACKMANAGERIMPL
+-#define ____H_EXTPACKMANAGERIMPL
+-
+-#include "VirtualBoxBase.h"
+-#include <VBox/ExtPack/ExtPack.h>
+-#include <iprt/fs.h>
+-
+-/**
+- * An extension pack file.
+- */
+-class ATL_NO_VTABLE ExtPackFile :
+- public VirtualBoxBase,
+- VBOX_SCRIPTABLE_IMPL(IExtPackFile)
+-{
+-public:
+- /** @name COM and internal init/term/mapping cruft.
+- * @{ */
+- VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(ExtPackFile, IExtPackFile)
+- DECLARE_NOT_AGGREGATABLE(ExtPackFile)
+- DECLARE_PROTECT_FINAL_CONSTRUCT()
+- BEGIN_COM_MAP(ExtPackFile)
+- VBOX_DEFAULT_INTERFACE_ENTRIES(IExtPackFile)
+- COM_INTERFACE_ENTRY(IExtPackBase)
+- END_COM_MAP()
+- DECLARE_EMPTY_CTOR_DTOR(ExtPackFile)
+-
+- HRESULT FinalConstruct();
+- void FinalRelease();
+- HRESULT initWithFile(const char *a_pszFile, const char *a_pszDigest, class ExtPackManager *a_pExtPackMgr, VirtualBox *a_pVirtualBox);
+- void uninit();
+- RTMEMEF_NEW_AND_DELETE_OPERATORS();
+- /** @} */
+-
+- /** @name IExtPackBase interfaces
+- * @{ */
+- STDMETHOD(COMGETTER(Name))(BSTR *a_pbstrName);
+- STDMETHOD(COMGETTER(Description))(BSTR *a_pbstrDescription);
+- STDMETHOD(COMGETTER(Version))(BSTR *a_pbstrVersion);
+- STDMETHOD(COMGETTER(Revision))(ULONG *a_puRevision);
+- STDMETHOD(COMGETTER(VRDEModule))(BSTR *a_pbstrVrdeModule);
+- STDMETHOD(COMGETTER(PlugIns))(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns));
+- STDMETHOD(COMGETTER(Usable))(BOOL *a_pfUsable);
+- STDMETHOD(COMGETTER(WhyUnusable))(BSTR *a_pbstrWhy);
+- STDMETHOD(COMGETTER(ShowLicense))(BOOL *a_pfShowIt);
+- STDMETHOD(COMGETTER(License))(BSTR *a_pbstrHtmlLicense);
+- STDMETHOD(QueryLicense)(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage,
+- IN_BSTR a_bstrFormat, BSTR *a_pbstrLicense);
+- /** @} */
+-
+- /** @name IExtPackFile interfaces
+- * @{ */
+- STDMETHOD(COMGETTER(FilePath))(BSTR *a_pbstrPath);
+- STDMETHOD(Install)(BOOL a_fReplace, IN_BSTR a_bstrDisplayInfo, IProgress **a_ppProgress);
+- /** @} */
+-
+-private:
+- /** @name Misc init helpers
+- * @{ */
+- HRESULT initFailed(const char *a_pszWhyFmt, ...);
+- /** @} */
+-
+-private:
+- struct Data;
+- /** Pointer to the private instance. */
+- Data *m;
+-
+- friend class ExtPackManager;
+-};
+-
+-
+-/**
+- * An installed extension pack.
+- */
+-class ATL_NO_VTABLE ExtPack :
+- public VirtualBoxBase,
+- VBOX_SCRIPTABLE_IMPL(IExtPack)
+-{
+-public:
+- /** @name COM and internal init/term/mapping cruft.
+- * @{ */
+- VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(ExtPack, IExtPack)
+- DECLARE_NOT_AGGREGATABLE(ExtPack)
+- DECLARE_PROTECT_FINAL_CONSTRUCT()
+- BEGIN_COM_MAP(ExtPack)
+- VBOX_DEFAULT_INTERFACE_ENTRIES(IExtPack)
+- COM_INTERFACE_ENTRY(IExtPackBase)
+- END_COM_MAP()
+- DECLARE_EMPTY_CTOR_DTOR(ExtPack)
+-
+- HRESULT FinalConstruct();
+- void FinalRelease();
+- HRESULT initWithDir(VBOXEXTPACKCTX a_enmContext, const char *a_pszName, const char *a_pszDir);
+- void uninit();
+- RTMEMEF_NEW_AND_DELETE_OPERATORS();
+- /** @} */
+-
+- /** @name IExtPackBase interfaces
+- * @{ */
+- STDMETHOD(COMGETTER(Name))(BSTR *a_pbstrName);
+- STDMETHOD(COMGETTER(Description))(BSTR *a_pbstrDescription);
+- STDMETHOD(COMGETTER(Version))(BSTR *a_pbstrVersion);
+- STDMETHOD(COMGETTER(Revision))(ULONG *a_puRevision);
+- STDMETHOD(COMGETTER(VRDEModule))(BSTR *a_pbstrVrdeModule);
+- STDMETHOD(COMGETTER(PlugIns))(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns));
+- STDMETHOD(COMGETTER(Usable))(BOOL *a_pfUsable);
+- STDMETHOD(COMGETTER(WhyUnusable))(BSTR *a_pbstrWhy);
+- STDMETHOD(COMGETTER(ShowLicense))(BOOL *a_pfShowIt);
+- STDMETHOD(COMGETTER(License))(BSTR *a_pbstrHtmlLicense);
+- STDMETHOD(QueryLicense)(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage,
+- IN_BSTR a_bstrFormat, BSTR *a_pbstrLicense);
+- /** @} */
+-
+- /** @name IExtPack interfaces
+- * @{ */
+- STDMETHOD(QueryObject)(IN_BSTR a_bstrObjectId, IUnknown **a_ppUnknown);
+- /** @} */
+-
+- /** @name Internal interfaces used by ExtPackManager.
+- * @{ */
+- bool callInstalledHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock, PRTERRINFO pErrInfo);
+- HRESULT callUninstallHookAndClose(IVirtualBox *a_pVirtualBox, bool a_fForcedRemoval);
+- bool callVirtualBoxReadyHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock);
+- bool callConsoleReadyHook(IConsole *a_pConsole, AutoWriteLock *a_pLock);
+- bool callVmCreatedHook(IVirtualBox *a_pVirtualBox, IMachine *a_pMachine, AutoWriteLock *a_pLock);
+- bool callVmConfigureVmmHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc);
+- bool callVmPowerOnHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc);
+- bool callVmPowerOffHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock);
+- HRESULT checkVrde(void);
+- HRESULT getVrdpLibraryName(Utf8Str *a_pstrVrdeLibrary);
+- bool wantsToBeDefaultVrde(void) const;
+- HRESULT refresh(bool *pfCanDelete);
+- /** @} */
+-
+-protected:
+- /** @name Internal helper methods.
+- * @{ */
+- void probeAndLoad(void);
+- bool findModule(const char *a_pszName, const char *a_pszExt, VBOXEXTPACKMODKIND a_enmKind,
+- Utf8Str *a_ppStrFound, bool *a_pfNative, PRTFSOBJINFO a_pObjInfo) const;
+- static bool objinfoIsEqual(PCRTFSOBJINFO pObjInfo1, PCRTFSOBJINFO pObjInfo2);
+- /** @} */
+-
+- /** @name Extension Pack Helpers
+- * @{ */
+- static DECLCALLBACK(int) hlpFindModule(PCVBOXEXTPACKHLP pHlp, const char *pszName, const char *pszExt,
+- VBOXEXTPACKMODKIND enmKind, char *pszFound, size_t cbFound, bool *pfNative);
+- static DECLCALLBACK(int) hlpGetFilePath(PCVBOXEXTPACKHLP pHlp, const char *pszFilename, char *pszPath, size_t cbPath);
+- static DECLCALLBACK(VBOXEXTPACKCTX) hlpGetContext(PCVBOXEXTPACKHLP pHlp);
+- static DECLCALLBACK(int) hlpReservedN(PCVBOXEXTPACKHLP pHlp);
+- /** @} */
+-
+-private:
+- struct Data;
+- /** Pointer to the private instance. */
+- Data *m;
+-
+- friend class ExtPackManager;
+-};
+-
+-
+-/**
+- * Extension pack manager.
+- */
+-class ATL_NO_VTABLE ExtPackManager :
+- public VirtualBoxBase,
+- VBOX_SCRIPTABLE_IMPL(IExtPackManager)
+-{
+- /** @name COM and internal init/term/mapping cruft.
+- * @{ */
+- VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(ExtPackManager, IExtPackManager)
+- DECLARE_NOT_AGGREGATABLE(ExtPackManager)
+- DECLARE_PROTECT_FINAL_CONSTRUCT()
+- BEGIN_COM_MAP(ExtPackManager)
+- VBOX_DEFAULT_INTERFACE_ENTRIES(IExtPackManager)
+- END_COM_MAP()
+- DECLARE_EMPTY_CTOR_DTOR(ExtPackManager)
+-
+- HRESULT FinalConstruct();
+- void FinalRelease();
+- HRESULT initExtPackManager(VirtualBox *a_pVirtualBox, VBOXEXTPACKCTX a_enmContext);
+- void uninit();
+- RTMEMEF_NEW_AND_DELETE_OPERATORS();
+- /** @} */
+-
+- /** @name IExtPack interfaces
+- * @{ */
+- STDMETHOD(COMGETTER(InstalledExtPacks))(ComSafeArrayOut(IExtPack *, a_paExtPacks));
+- STDMETHOD(Find)(IN_BSTR a_bstrName, IExtPack **a_pExtPack);
+- STDMETHOD(OpenExtPackFile)(IN_BSTR a_bstrTarball, IExtPackFile **a_ppExtPackFile);
+- STDMETHOD(Uninstall)(IN_BSTR a_bstrName, BOOL a_fForcedRemoval, IN_BSTR a_bstrDisplayInfo, IProgress **a_ppProgress);
+- STDMETHOD(Cleanup)(void);
+- STDMETHOD(QueryAllPlugInsForFrontend)(IN_BSTR a_bstrFrontend, ComSafeArrayOut(BSTR, a_pabstrPlugInModules));
+- STDMETHOD(IsExtPackUsable(IN_BSTR a_bstrExtPack, BOOL *aUsable));
+- /** @} */
+-
+- /** @name Internal interfaces used by other Main classes.
+- * @{ */
+- static DECLCALLBACK(int) doInstallThreadProc(RTTHREAD hThread, void *pvJob);
+- HRESULT doInstall(ExtPackFile *a_pExtPackFile, bool a_fReplace, Utf8Str const *a_pstrDisplayInfo);
+- static DECLCALLBACK(int) doUninstallThreadProc(RTTHREAD hThread, void *pvJob);
+- HRESULT doUninstall(const Utf8Str *a_pstrName, bool a_fForcedRemoval, const Utf8Str *a_pstrDisplayInfo);
+- void callAllVirtualBoxReadyHooks(void);
+- void callAllConsoleReadyHooks(IConsole *a_pConsole);
+- void callAllVmCreatedHooks(IMachine *a_pMachine);
+- int callAllVmConfigureVmmHooks(IConsole *a_pConsole, PVM a_pVM);
+- int callAllVmPowerOnHooks(IConsole *a_pConsole, PVM a_pVM);
+- void callAllVmPowerOffHooks(IConsole *a_pConsole, PVM a_pVM);
+- HRESULT checkVrdeExtPack(Utf8Str const *a_pstrExtPack);
+- int getVrdeLibraryPathForExtPack(Utf8Str const *a_pstrExtPack, Utf8Str *a_pstrVrdeLibrary);
+- HRESULT getDefaultVrdeExtPack(Utf8Str *a_pstrExtPack);
+- bool isExtPackUsable(const char *a_pszExtPack);
+- void dumpAllToReleaseLog(void);
+- /** @} */
+-
+-private:
+- HRESULT runSetUidToRootHelper(Utf8Str const *a_pstrDisplayInfo, const char *a_pszCommand, ...);
+- ExtPack *findExtPack(const char *a_pszName);
+- void removeExtPack(const char *a_pszName);
+- HRESULT refreshExtPack(const char *a_pszName, bool a_fUnsuableIsError, ExtPack **a_ppExtPack);
+-
+-private:
+- struct Data;
+- /** Pointer to the private instance. */
+- Data *m;
+-};
+-
+-#endif
+-/* vi: set tabstop=4 shiftwidth=4 expandtab: */
+--- VirtualBox-4.1.18.orig/src/VBox/Main/include/ExtPackUtil.h 2012-06-20 10:17:33.000000000 -0300
++++ /dev/null 2012-07-24 14:48:18.638572110 -0300
+@@ -1,137 +0,0 @@
+-/* $Id: ExtPackUtil.h $ */
+-/** @file
+- * VirtualBox Main - Extension Pack Utilities and definitions, VBoxC, VBoxSVC, ++.
+- */
+-
+-/*
+- * Copyright (C) 2010 Oracle Corporation
+- *
+- * This file is part of VirtualBox Open Source Edition (OSE), as
+- * available from http://www.virtualbox.org. This file is free software;
+- * you can redistribute it and/or modify it under the terms of the GNU
+- * General Public License (GPL) as published by the Free Software
+- * Foundation, in version 2 as it comes in the "COPYING" file of the
+- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+- */
+-
+-#ifndef ____H_EXTPACKUTIL
+-#define ____H_EXTPACKUTIL
+-
+-#include <iprt/cpp/ministring.h>
+-#include <iprt/fs.h>
+-#include <iprt/vfs.h>
+-
+-
+-/** @name VBOX_EXTPACK_DESCRIPTION_NAME
+- * The name of the description file in an extension pack. */
+-#define VBOX_EXTPACK_DESCRIPTION_NAME "ExtPack.xml"
+-/** @name VBOX_EXTPACK_DESCRIPTION_NAME
+- * The name of the manifest file in an extension pack. */
+-#define VBOX_EXTPACK_MANIFEST_NAME "ExtPack.manifest"
+-/** @name VBOX_EXTPACK_SIGNATURE_NAME
+- * The name of the signature file in an extension pack. */
+-#define VBOX_EXTPACK_SIGNATURE_NAME "ExtPack.signature"
+-/** @name VBOX_EXTPACK_LICENSE_NAME_PREFIX
+- * The name prefix of a license file in an extension pack. There can be
+- * several license files in a pack, the variations being on locale, language
+- * and format (HTML, RTF, plain text). All extension packages shall include
+- * a */
+-#define VBOX_EXTPACK_LICENSE_NAME_PREFIX "ExtPack-license"
+-/** @name VBOX_EXTPACK_SUFFIX
+- * The suffix of a extension pack tarball. */
+-#define VBOX_EXTPACK_SUFFIX ".vbox-extpack"
+-
+-/** The minimum length (strlen) of a extension pack name. */
+-#define VBOX_EXTPACK_NAME_MIN_LEN 3
+-/** The max length (strlen) of a extension pack name. */
+-#define VBOX_EXTPACK_NAME_MAX_LEN 64
+-
+-/** The architecture-dependent application data subdirectory where the
+- * extension packs are installed. Relative to RTPathAppPrivateArch. */
+-#define VBOX_EXTPACK_INSTALL_DIR "ExtensionPacks"
+-/** The architecture-independent application data subdirectory where the
+- * certificates are installed. Relative to RTPathAppPrivateNoArch. */
+-#define VBOX_EXTPACK_CERT_DIR "ExtPackCertificates"
+-
+-/** The maximum entry name length.
+- * Play short and safe. */
+-#define VBOX_EXTPACK_MAX_MEMBER_NAME_LENGTH 128
+-
+-
+-/**
+- * Plug-in descriptor.
+- */
+-typedef struct VBOXEXTPACKPLUGINDESC
+-{
+- /** The name. */
+- RTCString strName;
+- /** The module name. */
+- RTCString strModule;
+- /** The description. */
+- RTCString strDescription;
+- /** The frontend or component which it plugs into. */
+- RTCString strFrontend;
+-} VBOXEXTPACKPLUGINDESC;
+-/** Pointer to a plug-in descriptor. */
+-typedef VBOXEXTPACKPLUGINDESC *PVBOXEXTPACKPLUGINDESC;
+-
+-/**
+- * Extension pack descriptor
+- *
+- * This is the internal representation of the ExtPack.xml.
+- */
+-typedef struct VBOXEXTPACKDESC
+-{
+- /** The name. */
+- RTCString strName;
+- /** The description. */
+- RTCString strDescription;
+- /** The version string. */
+- RTCString strVersion;
+- /** The edition string. */
+- RTCString strEdition;
+- /** The internal revision number. */
+- uint32_t uRevision;
+- /** The name of the main module. */
+- RTCString strMainModule;
+- /** The name of the VRDE module, empty if none. */
+- RTCString strVrdeModule;
+- /** The number of plug-in descriptors. */
+- uint32_t cPlugIns;
+- /** Pointer to an array of plug-in descriptors. */
+- PVBOXEXTPACKPLUGINDESC paPlugIns;
+- /** Whether to show the license prior to installation. */
+- bool fShowLicense;
+-} VBOXEXTPACKDESC;
+-
+-/** Pointer to a extension pack descriptor. */
+-typedef VBOXEXTPACKDESC *PVBOXEXTPACKDESC;
+-/** Pointer to a const extension pack descriptor. */
+-typedef VBOXEXTPACKDESC const *PCVBOXEXTPACKDESC;
+-
+-
+-void VBoxExtPackInitDesc(PVBOXEXTPACKDESC a_pExtPackDesc);
+-RTCString *VBoxExtPackLoadDesc(const char *a_pszDir, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo);
+-RTCString *VBoxExtPackLoadDescFromVfsFile(RTVFSFILE hVfsFile, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo);
+-RTCString *VBoxExtPackExtractNameFromTarballPath(const char *pszTarball);
+-void VBoxExtPackFreeDesc(PVBOXEXTPACKDESC a_pExtPackDesc);
+-bool VBoxExtPackIsValidName(const char *pszName);
+-bool VBoxExtPackIsValidMangledName(const char *pszMangledName, size_t cchMax = RTSTR_MAX);
+-RTCString *VBoxExtPackMangleName(const char *pszName);
+-RTCString *VBoxExtPackUnmangleName(const char *pszMangledName, size_t cbMax);
+-int VBoxExtPackCalcDir(char *pszExtPackDir, size_t cbExtPackDir, const char *pszParentDir, const char *pszName);
+-bool VBoxExtPackIsValidVersionString(const char *pszVersion);
+-bool VBoxExtPackIsValidEditionString(const char *pszEdition);
+-bool VBoxExtPackIsValidModuleString(const char *pszModule);
+-
+-int VBoxExtPackValidateMember(const char *pszName, RTVFSOBJTYPE enmType, RTVFSOBJ hVfsObj, char *pszError, size_t cbError);
+-int VBoxExtPackOpenTarFss(RTFILE hTarballFile, char *pszError, size_t cbError, PRTVFSFSSTREAM phTarFss, PRTMANIFEST phFileManifest);
+-int VBoxExtPackValidateTarball(RTFILE hTarballFile, const char *pszExtPackName,
+- const char *pszTarball, const char *pszTarballDigest,
+- char *pszError, size_t cbError,
+- PRTMANIFEST phValidManifest, PRTVFSFILE phXmlFile, RTCString *pStrDigest);
+-
+-
+-#endif
+-
+--- VirtualBox-4.1.18.orig/src/VBox/Main/src-all/ExtPackManagerImpl.cpp 2012-06-20 10:17:34.000000000 -0300
++++ /dev/null 2012-07-24 14:48:18.638572110 -0300
+@@ -1,3126 +0,0 @@
+-/* $Id: ExtPackManagerImpl.cpp $ */
+-/** @file
+- * VirtualBox Main - interface for Extension Packs, VBoxSVC & VBoxC.
+- */
+-
+-/*
+- * Copyright (C) 2010 Oracle Corporation
+- *
+- * This file is part of VirtualBox Open Source Edition (OSE), as
+- * available from http://www.virtualbox.org. This file is free software;
+- * you can redistribute it and/or modify it under the terms of the GNU
+- * General Public License (GPL) as published by the Free Software
+- * Foundation, in version 2 as it comes in the "COPYING" file of the
+- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+- */
+-
+-
+-/*******************************************************************************
+-* Header Files *
+-*******************************************************************************/
+-#include "ExtPackManagerImpl.h"
+-#include "ExtPackUtil.h"
+-
+-#include <iprt/buildconfig.h>
+-#include <iprt/ctype.h>
+-#include <iprt/dir.h>
+-#include <iprt/env.h>
+-#include <iprt/file.h>
+-#include <iprt/ldr.h>
+-#include <iprt/manifest.h>
+-#include <iprt/param.h>
+-#include <iprt/path.h>
+-#include <iprt/pipe.h>
+-#include <iprt/process.h>
+-#include <iprt/string.h>
+-
+-#include <VBox/com/array.h>
+-#include <VBox/com/ErrorInfo.h>
+-#include <VBox/err.h>
+-#include <VBox/log.h>
+-#include <VBox/sup.h>
+-#include <VBox/version.h>
+-#include "AutoCaller.h"
+-#include "Global.h"
+-#include "ProgressImpl.h"
+-#include "SystemPropertiesImpl.h"
+-#include "VirtualBoxImpl.h"
+-
+-
+-/*******************************************************************************
+-* Defined Constants And Macros *
+-*******************************************************************************/
+-/** @name VBOX_EXTPACK_HELPER_NAME
+- * The name of the utility application we employ to install and uninstall the
+- * extension packs. This is a set-uid-to-root binary on unixy platforms, which
+- * is why it has to be a separate application.
+- */
+-#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
+-# define VBOX_EXTPACK_HELPER_NAME "VBoxExtPackHelperApp.exe"
+-#else
+-# define VBOX_EXTPACK_HELPER_NAME "VBoxExtPackHelperApp"
+-#endif
+-
+-
+-/*******************************************************************************
+-* Structures and Typedefs *
+-*******************************************************************************/
+-struct ExtPackBaseData
+-{
+-public:
+- /** The extension pack descriptor (loaded from the XML, mostly). */
+- VBOXEXTPACKDESC Desc;
+- /** The file system object info of the XML file.
+- * This is for detecting changes and save time in refresh(). */
+- RTFSOBJINFO ObjInfoDesc;
+- /** Whether it's usable or not. */
+- bool fUsable;
+- /** Why it is unusable. */
+- Utf8Str strWhyUnusable;
+-};
+-
+-/**
+- * Private extension pack data.
+- */
+-struct ExtPackFile::Data : public ExtPackBaseData
+-{
+-public:
+- /** The path to the tarball. */
+- Utf8Str strExtPackFile;
+- /** The SHA-256 hash of the file (as string). */
+- Utf8Str strDigest;
+- /** The file handle of the extension pack file. */
+- RTFILE hExtPackFile;
+- /** Our manifest for the tarball. */
+- RTMANIFEST hOurManifest;
+- /** Pointer to the extension pack manager. */
+- ComObjPtr<ExtPackManager> ptrExtPackMgr;
+- /** Pointer to the VirtualBox object so we can create a progress object. */
+- VirtualBox *pVirtualBox;
+-
+- RTMEMEF_NEW_AND_DELETE_OPERATORS();
+-};
+-
+-/**
+- * Private extension pack data.
+- */
+-struct ExtPack::Data : public ExtPackBaseData
+-{
+-public:
+- /** Where the extension pack is located. */
+- Utf8Str strExtPackPath;
+- /** The file system object info of the extension pack directory.
+- * This is for detecting changes and save time in refresh(). */
+- RTFSOBJINFO ObjInfoExtPack;
+- /** The full path to the main module. */
+- Utf8Str strMainModPath;
+- /** The file system object info of the main module.
+- * This is used to determin whether to bother try reload it. */
+- RTFSOBJINFO ObjInfoMainMod;
+- /** The module handle of the main extension pack module. */
+- RTLDRMOD hMainMod;
+-
+- /** The helper callbacks for the extension pack. */
+- VBOXEXTPACKHLP Hlp;
+- /** Pointer back to the extension pack object (for Hlp methods). */
+- ExtPack *pThis;
+- /** The extension pack registration structure. */
+- PCVBOXEXTPACKREG pReg;
+- /** The current context. */
+- VBOXEXTPACKCTX enmContext;
+- /** Set if we've made the pfnVirtualBoxReady or pfnConsoleReady call. */
+- bool fMadeReadyCall;
+-
+- RTMEMEF_NEW_AND_DELETE_OPERATORS();
+-};
+-
+-/** List of extension packs. */
+-typedef std::list< ComObjPtr<ExtPack> > ExtPackList;
+-
+-/**
+- * Private extension pack manager data.
+- */
+-struct ExtPackManager::Data
+-{
+- /** The directory where the extension packs are installed. */
+- Utf8Str strBaseDir;
+- /** The directory where the certificates this installation recognizes are
+- * stored. */
+- Utf8Str strCertificatDirPath;
+- /** The list of installed extension packs. */
+- ExtPackList llInstalledExtPacks;
+- /** Pointer to the VirtualBox object, our parent. */
+- VirtualBox *pVirtualBox;
+- /** The current context. */
+- VBOXEXTPACKCTX enmContext;
+-#if !defined(RT_OS_WINDOWS) && !defined(RT_OS_DARWIN)
+- /** File handle for the VBoxVMM libary which we slurp because ExtPacks depend on it. */
+- RTLDRMOD hVBoxVMM;
+-#endif
+-
+- RTMEMEF_NEW_AND_DELETE_OPERATORS();
+-};
+-
+-/**
+- * Extension pack installation job.
+- */
+-typedef struct EXTPACKINSTALLJOB
+-{
+- /** Smart pointer to the extension pack file. */
+- ComPtr<ExtPackFile> ptrExtPackFile;
+- /** The replace argument. */
+- bool fReplace;
+- /** The display info argument. */
+- Utf8Str strDisplayInfo;
+- /** Smart pointer to the extension manager. */
+- ComPtr<ExtPackManager> ptrExtPackMgr;
+- /** Smart pointer to the progress object for this job. */
+- ComObjPtr<Progress> ptrProgress;
+-} EXTPACKINSTALLJOB;
+-/** Pointer to an extension pack installation job. */
+-typedef EXTPACKINSTALLJOB *PEXTPACKINSTALLJOB;
+-
+-/**
+- * Extension pack uninstallation job.
+- */
+-typedef struct EXTPACKUNINSTALLJOB
+-{
+- /** Smart pointer to the extension manager. */
+- ComPtr<ExtPackManager> ptrExtPackMgr;
+- /** The name of the extension pack. */
+- Utf8Str strName;
+- /** The replace argument. */
+- bool fForcedRemoval;
+- /** The display info argument. */
+- Utf8Str strDisplayInfo;
+- /** Smart pointer to the progress object for this job. */
+- ComObjPtr<Progress> ptrProgress;
+-} EXTPACKUNINSTALLJOB;
+-/** Pointer to an extension pack uninstallation job. */
+-typedef EXTPACKUNINSTALLJOB *PEXTPACKUNINSTALLJOB;
+-
+-
+-DEFINE_EMPTY_CTOR_DTOR(ExtPackFile)
+-
+-/**
+- * Called by ComObjPtr::createObject when creating the object.
+- *
+- * Just initialize the basic object state, do the rest in initWithDir().
+- *
+- * @returns S_OK.
+- */
+-HRESULT ExtPackFile::FinalConstruct()
+-{
+- m = NULL;
+- return BaseFinalConstruct();
+-}
+-
+-/**
+- * Initializes the extension pack by reading its file.
+- *
+- * @returns COM status code.
+- * @param a_pszFile The path to the extension pack file.
+- * @param a_pszDigest The SHA-256 digest of the file. Or an empty string.
+- * @param a_pExtPackMgr Pointer to the extension pack manager.
+- * @param a_pVirtualBox Pointer to the VirtualBox object.
+- */
+-HRESULT ExtPackFile::initWithFile(const char *a_pszFile, const char *a_pszDigest, ExtPackManager *a_pExtPackMgr, VirtualBox *a_pVirtualBox)
+-{
+- AutoInitSpan autoInitSpan(this);
+- AssertReturn(autoInitSpan.isOk(), E_FAIL);
+-
+- /*
+- * Allocate + initialize our private data.
+- */
+- m = new ExtPackFile::Data;
+- VBoxExtPackInitDesc(&m->Desc);
+- RT_ZERO(m->ObjInfoDesc);
+- m->fUsable = false;
+- m->strWhyUnusable = tr("ExtPack::init failed");
+- m->strExtPackFile = a_pszFile;
+- m->strDigest = a_pszDigest;
+- m->hExtPackFile = NIL_RTFILE;
+- m->hOurManifest = NIL_RTMANIFEST;
+- m->ptrExtPackMgr = a_pExtPackMgr;
+- m->pVirtualBox = a_pVirtualBox;
+-
+- RTCString *pstrTarName = VBoxExtPackExtractNameFromTarballPath(a_pszFile);
+- if (pstrTarName)
+- {
+- m->Desc.strName = *pstrTarName;
+- delete pstrTarName;
+- pstrTarName = NULL;
+- }
+-
+- autoInitSpan.setSucceeded();
+-
+- /*
+- * Try open the extension pack and check that it is a regular file.
+- */
+- int vrc = RTFileOpen(&m->hExtPackFile, a_pszFile,
+- RTFILE_O_READ | RTFILE_O_DENY_WRITE | RTFILE_O_OPEN);
+- if (RT_FAILURE(vrc))
+- {
+- if (vrc == VERR_FILE_NOT_FOUND || vrc == VERR_PATH_NOT_FOUND)
+- return initFailed(tr("'%s' file not found"), a_pszFile);
+- return initFailed(tr("RTFileOpen('%s',,) failed with %Rrc"), a_pszFile, vrc);
+- }
+-
+- RTFSOBJINFO ObjInfo;
+- vrc = RTFileQueryInfo(m->hExtPackFile, &ObjInfo, RTFSOBJATTRADD_UNIX);
+- if (RT_FAILURE(vrc))
+- return initFailed(tr("RTFileQueryInfo failed with %Rrc on '%s'"), vrc, a_pszFile);
+- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode))
+- return initFailed(tr("Not a regular file: %s"), a_pszFile);
+-
+- /*
+- * Validate the tarball and extract the XML file.
+- */
+- char szError[8192];
+- RTVFSFILE hXmlFile;
+- vrc = VBoxExtPackValidateTarball(m->hExtPackFile, NULL /*pszExtPackName*/, a_pszFile, a_pszDigest,
+- szError, sizeof(szError), &m->hOurManifest, &hXmlFile, &m->strDigest);
+- if (RT_FAILURE(vrc))
+- return initFailed(tr("%s"), szError);
+-
+- /*
+- * Parse the XML.
+- */
+- RTCString strSavedName(m->Desc.strName);
+- RTCString *pStrLoadErr = VBoxExtPackLoadDescFromVfsFile(hXmlFile, &m->Desc, &m->ObjInfoDesc);
+- RTVfsFileRelease(hXmlFile);
+- if (pStrLoadErr != NULL)
+- {
+- m->strWhyUnusable.printf(tr("Failed to the xml file: %s"), pStrLoadErr->c_str());
+- m->Desc.strName = strSavedName;
+- delete pStrLoadErr;
+- return S_OK;
+- }
+-
+- /*
+- * Match the tarball name with the name from the XML.
+- */
+- /** @todo drop this restriction after the old install interface is
+- * dropped. */
+- if (!strSavedName.equalsIgnoreCase(m->Desc.strName))
+- return initFailed(tr("Extension pack name mismatch between the downloaded file and the XML inside it (xml='%s' file='%s')"),
+- m->Desc.strName.c_str(), strSavedName.c_str());
+-
+- m->fUsable = true;
+- m->strWhyUnusable.setNull();
+- return S_OK;
+-}
+-
+-/**
+- * Protected helper that formats the strWhyUnusable value.
+- *
+- * @returns S_OK
+- * @param a_pszWhyFmt Why it failed, format string.
+- * @param ... The format arguments.
+- */
+-HRESULT ExtPackFile::initFailed(const char *a_pszWhyFmt, ...)
+-{
+- va_list va;
+- va_start(va, a_pszWhyFmt);
+- m->strWhyUnusable.printfV(a_pszWhyFmt, va);
+- va_end(va);
+- return S_OK;
+-}
+-
+-/**
+- * COM cruft.
+- */
+-void ExtPackFile::FinalRelease()
+-{
+- uninit();
+- BaseFinalRelease();
+-}
+-
+-/**
+- * Do the actual cleanup.
+- */
+-void ExtPackFile::uninit()
+-{
+- /* Enclose the state transition Ready->InUninit->NotReady */
+- AutoUninitSpan autoUninitSpan(this);
+- if (!autoUninitSpan.uninitDone() && m != NULL)
+- {
+- VBoxExtPackFreeDesc(&m->Desc);
+- RTFileClose(m->hExtPackFile);
+- m->hExtPackFile = NIL_RTFILE;
+- RTManifestRelease(m->hOurManifest);
+- m->hOurManifest = NIL_RTMANIFEST;
+-
+- delete m;
+- m = NULL;
+- }
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(Name)(BSTR *a_pbstrName)
+-{
+- CheckComArgOutPointerValid(a_pbstrName);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- Bstr str(m->Desc.strName);
+- str.cloneTo(a_pbstrName);
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(Description)(BSTR *a_pbstrDescription)
+-{
+- CheckComArgOutPointerValid(a_pbstrDescription);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- Bstr str(m->Desc.strDescription);
+- str.cloneTo(a_pbstrDescription);
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(Version)(BSTR *a_pbstrVersion)
+-{
+- CheckComArgOutPointerValid(a_pbstrVersion);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- /* HACK ALERT: This is for easing backporting to 4.1. The edition stuff
+- will be changed into a separate */
+- if (m->Desc.strEdition.isEmpty())
+- {
+- Bstr str(m->Desc.strVersion);
+- str.cloneTo(a_pbstrVersion);
+- }
+- else
+- {
+- RTCString strHack(m->Desc.strVersion);
+- strHack.append('-');
+- strHack.append(m->Desc.strEdition);
+-
+- Bstr str(strHack);
+- str.cloneTo(a_pbstrVersion);
+- }
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(Revision)(ULONG *a_puRevision)
+-{
+- CheckComArgOutPointerValid(a_puRevision);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- *a_puRevision = m->Desc.uRevision;
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(VRDEModule)(BSTR *a_pbstrVrdeModule)
+-{
+- CheckComArgOutPointerValid(a_pbstrVrdeModule);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- Bstr str(m->Desc.strVrdeModule);
+- str.cloneTo(a_pbstrVrdeModule);
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(PlugIns)(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns))
+-{
+- /** @todo implement plug-ins. */
+-#ifdef VBOX_WITH_XPCOM
+- NOREF(a_paPlugIns);
+- NOREF(a_paPlugInsSize);
+-#endif
+- ReturnComNotImplemented();
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(Usable)(BOOL *a_pfUsable)
+-{
+- CheckComArgOutPointerValid(a_pfUsable);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- *a_pfUsable = m->fUsable;
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(WhyUnusable)(BSTR *a_pbstrWhy)
+-{
+- CheckComArgOutPointerValid(a_pbstrWhy);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- m->strWhyUnusable.cloneTo(a_pbstrWhy);
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(ShowLicense)(BOOL *a_pfShowIt)
+-{
+- CheckComArgOutPointerValid(a_pfShowIt);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- *a_pfShowIt = m->Desc.fShowLicense;
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(License)(BSTR *a_pbstrHtmlLicense)
+-{
+- Bstr bstrHtml("html");
+- return QueryLicense(Bstr::Empty.raw(), Bstr::Empty.raw(), bstrHtml.raw(), a_pbstrHtmlLicense);
+-}
+-
+-/* Same as ExtPack::QueryLicense, should really explore the subject of base classes here... */
+-STDMETHODIMP ExtPackFile::QueryLicense(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage, IN_BSTR a_bstrFormat,
+- BSTR *a_pbstrLicense)
+-{
+- /*
+- * Validate input.
+- */
+- CheckComArgOutPointerValid(a_pbstrLicense);
+- CheckComArgNotNull(a_bstrPreferredLocale);
+- CheckComArgNotNull(a_bstrPreferredLanguage);
+- CheckComArgNotNull(a_bstrFormat);
+-
+- Utf8Str strPreferredLocale(a_bstrPreferredLocale);
+- if (strPreferredLocale.length() != 2 && strPreferredLocale.length() != 0)
+- return setError(E_FAIL, tr("The preferred locale is a two character string or empty."));
+-
+- Utf8Str strPreferredLanguage(a_bstrPreferredLanguage);
+- if (strPreferredLanguage.length() != 2 && strPreferredLanguage.length() != 0)
+- return setError(E_FAIL, tr("The preferred lanuage is a two character string or empty."));
+-
+- Utf8Str strFormat(a_bstrFormat);
+- if ( !strFormat.equals("html")
+- && !strFormat.equals("rtf")
+- && !strFormat.equals("txt"))
+- return setError(E_FAIL, tr("The license format can only have the values 'html', 'rtf' and 'txt'."));
+-
+- /*
+- * Combine the options to form a file name before locking down anything.
+- */
+- char szName[sizeof(VBOX_EXTPACK_LICENSE_NAME_PREFIX "-de_DE.html") + 2];
+- if (strPreferredLocale.isNotEmpty() && strPreferredLanguage.isNotEmpty())
+- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s_%s.%s",
+- strPreferredLocale.c_str(), strPreferredLanguage.c_str(), strFormat.c_str());
+- else if (strPreferredLocale.isNotEmpty())
+- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s.%s", strPreferredLocale.c_str(), strFormat.c_str());
+- else if (strPreferredLanguage.isNotEmpty())
+- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-_%s.%s", strPreferredLocale.c_str(), strFormat.c_str());
+- else
+- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX ".%s", strFormat.c_str());
+-
+- /*
+- * Lock the extension pack. We need a write lock here as there must not be
+- * concurrent accesses to the tar file handle.
+- */
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- /*
+- * Do not permit this query on a pack that isn't considered usable (could
+- * be marked so because of bad license files).
+- */
+- if (!m->fUsable)
+- hrc = setError(E_FAIL, tr("%s"), m->strWhyUnusable.c_str());
+- else
+- {
+- /*
+- * Look it up in the manifest before scanning the tarball for it
+- */
+- if (RTManifestEntryExists(m->hOurManifest, szName))
+- {
+- RTVFSFSSTREAM hTarFss;
+- char szError[8192];
+- int vrc = VBoxExtPackOpenTarFss(m->hExtPackFile, szError, sizeof(szError), &hTarFss, NULL);
+- if (RT_SUCCESS(vrc))
+- {
+- for (;;)
+- {
+- /* Get the first/next. */
+- char *pszName;
+- RTVFSOBJ hVfsObj;
+- RTVFSOBJTYPE enmType;
+- vrc = RTVfsFsStrmNext(hTarFss, &pszName, &enmType, &hVfsObj);
+- if (RT_FAILURE(vrc))
+- {
+- if (vrc != VERR_EOF)
+- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTVfsFsStrmNext failed: %Rrc"), vrc);
+- else
+- hrc = setError(E_UNEXPECTED, tr("'%s' was found in the manifest but not in the tarball"), szName);
+- break;
+- }
+-
+- /* Is this it? */
+- const char *pszAdjName = pszName[0] == '.' && pszName[1] == '/' ? &pszName[2] : pszName;
+- if ( !strcmp(pszAdjName, szName)
+- && ( enmType == RTVFSOBJTYPE_IO_STREAM
+- || enmType == RTVFSOBJTYPE_FILE))
+- {
+- RTVFSIOSTREAM hVfsIos = RTVfsObjToIoStream(hVfsObj);
+- RTVfsObjRelease(hVfsObj);
+- RTStrFree(pszName);
+-
+- /* Load the file into memory. */
+- RTFSOBJINFO ObjInfo;
+- vrc = RTVfsIoStrmQueryInfo(hVfsIos, &ObjInfo, RTFSOBJATTRADD_NOTHING);
+- if (RT_SUCCESS(vrc))
+- {
+- size_t cbFile = (size_t)ObjInfo.cbObject;
+- void *pvFile = RTMemAllocZ(cbFile + 1);
+- if (pvFile)
+- {
+- vrc = RTVfsIoStrmRead(hVfsIos, pvFile, cbFile, true /*fBlocking*/, NULL);
+- if (RT_SUCCESS(vrc))
+- {
+- /* try translate it into a string we can return. */
+- Bstr bstrLicense((const char *)pvFile, cbFile);
+- if (bstrLicense.isNotEmpty())
+- {
+- bstrLicense.detachTo(a_pbstrLicense);
+- hrc = S_OK;
+- }
+- else
+- hrc = setError(VBOX_E_IPRT_ERROR,
+- tr("The license file '%s' is empty or contains invalid UTF-8 encoding"),
+- szName);
+- }
+- else
+- hrc = setError(VBOX_E_IPRT_ERROR, tr("Failed to read '%s': %Rrc"), szName, vrc);
+- RTMemFree(pvFile);
+- }
+- else
+- hrc = setError(E_OUTOFMEMORY, tr("Failed to allocate %zu bytes for '%s'"), cbFile, szName);
+- }
+- else
+- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTVfsIoStrmQueryInfo on '%s': %Rrc"), szName, vrc);
+- RTVfsIoStrmRelease(hVfsIos);
+- break;
+- }
+-
+- /* Release current. */
+- RTVfsObjRelease(hVfsObj);
+- RTStrFree(pszName);
+- }
+- RTVfsFsStrmRelease(hTarFss);
+- }
+- else
+- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("%s"), szError);
+- }
+- else
+- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("The license file '%s' was not found in '%s'"),
+- szName, m->strExtPackFile.c_str());
+- }
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::COMGETTER(FilePath)(BSTR *a_pbstrPath)
+-{
+- CheckComArgOutPointerValid(a_pbstrPath);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- m->strExtPackFile.cloneTo(a_pbstrPath);
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackFile::Install(BOOL a_fReplace, IN_BSTR a_bstrDisplayInfo, IProgress **a_ppProgress)
+-{
+- if (a_ppProgress)
+- *a_ppProgress = NULL;
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- if (m->fUsable)
+- {
+- PEXTPACKINSTALLJOB pJob = NULL;
+- try
+- {
+- pJob = new EXTPACKINSTALLJOB;
+- pJob->ptrExtPackFile = this;
+- pJob->fReplace = a_fReplace != FALSE;
+- pJob->strDisplayInfo = a_bstrDisplayInfo;
+- pJob->ptrExtPackMgr = m->ptrExtPackMgr;
+- hrc = pJob->ptrProgress.createObject();
+- if (SUCCEEDED(hrc))
+- {
+- Bstr bstrDescription = tr("Installing extension pack");
+- hrc = pJob->ptrProgress->init(
+-#ifndef VBOX_COM_INPROC
+- m->pVirtualBox,
+-#endif
+- static_cast<IExtPackFile *>(this),
+- bstrDescription.raw(),
+- FALSE /*aCancelable*/,
+- NULL /*aId*/);
+- }
+- if (SUCCEEDED(hrc))
+- {
+- ComPtr<Progress> ptrProgress = pJob->ptrProgress;
+- int vrc = RTThreadCreate(NULL /*phThread*/, ExtPackManager::doInstallThreadProc, pJob, 0,
+- RTTHREADTYPE_DEFAULT, 0 /*fFlags*/, "ExtPackInst");
+- if (RT_SUCCESS(vrc))
+- {
+- pJob = NULL; /* the thread deletes it */
+- ptrProgress.queryInterfaceTo(a_ppProgress);
+- }
+- else
+- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTThreadCreate failed with %Rrc"), vrc);
+- }
+- }
+- catch (std::bad_alloc)
+- {
+- hrc = E_OUTOFMEMORY;
+- }
+- if (pJob)
+- delete pJob;
+- }
+- else
+- hrc = setError(E_FAIL, "%s", m->strWhyUnusable.c_str());
+- }
+- return hrc;
+-}
+-
+-
+-
+-
+-
+-DEFINE_EMPTY_CTOR_DTOR(ExtPack)
+-
+-/**
+- * Called by ComObjPtr::createObject when creating the object.
+- *
+- * Just initialize the basic object state, do the rest in initWithDir().
+- *
+- * @returns S_OK.
+- */
+-HRESULT ExtPack::FinalConstruct()
+-{
+- m = NULL;
+- return S_OK;
+-}
+-
+-/**
+- * Initializes the extension pack by reading its file.
+- *
+- * @returns COM status code.
+- * @param a_enmContext The context we're in.
+- * @param a_pszName The name of the extension pack. This is also the
+- * name of the subdirector under @a a_pszParentDir
+- * where the extension pack is installed.
+- * @param a_pszDir The extension pack directory name.
+- */
+-HRESULT ExtPack::initWithDir(VBOXEXTPACKCTX a_enmContext, const char *a_pszName, const char *a_pszDir)
+-{
+- AutoInitSpan autoInitSpan(this);
+- AssertReturn(autoInitSpan.isOk(), E_FAIL);
+-
+- static const VBOXEXTPACKHLP s_HlpTmpl =
+- {
+- /* u32Version = */ VBOXEXTPACKHLP_VERSION,
+- /* uVBoxFullVersion = */ VBOX_FULL_VERSION,
+- /* uVBoxVersionRevision = */ 0,
+- /* u32Padding = */ 0,
+- /* pszVBoxVersion = */ "",
+- /* pfnFindModule = */ ExtPack::hlpFindModule,
+- /* pfnGetFilePath = */ ExtPack::hlpGetFilePath,
+- /* pfnGetContext = */ ExtPack::hlpGetContext,
+- /* pfnReserved1 = */ ExtPack::hlpReservedN,
+- /* pfnReserved2 = */ ExtPack::hlpReservedN,
+- /* pfnReserved3 = */ ExtPack::hlpReservedN,
+- /* pfnReserved4 = */ ExtPack::hlpReservedN,
+- /* pfnReserved5 = */ ExtPack::hlpReservedN,
+- /* pfnReserved6 = */ ExtPack::hlpReservedN,
+- /* pfnReserved7 = */ ExtPack::hlpReservedN,
+- /* pfnReserved8 = */ ExtPack::hlpReservedN,
+- /* pfnReserved9 = */ ExtPack::hlpReservedN,
+- /* u32EndMarker = */ VBOXEXTPACKHLP_VERSION
+- };
+-
+- /*
+- * Allocate + initialize our private data.
+- */
+- m = new Data;
+- VBoxExtPackInitDesc(&m->Desc);
+- m->Desc.strName = a_pszName;
+- RT_ZERO(m->ObjInfoDesc);
+- m->fUsable = false;
+- m->strWhyUnusable = tr("ExtPack::init failed");
+- m->strExtPackPath = a_pszDir;
+- RT_ZERO(m->ObjInfoExtPack);
+- m->strMainModPath.setNull();
+- RT_ZERO(m->ObjInfoMainMod);
+- m->hMainMod = NIL_RTLDRMOD;
+- m->Hlp = s_HlpTmpl;
+- m->Hlp.pszVBoxVersion = RTBldCfgVersion();
+- m->Hlp.uVBoxInternalRevision = RTBldCfgRevision();
+- m->pThis = this;
+- m->pReg = NULL;
+- m->enmContext = a_enmContext;
+- m->fMadeReadyCall = false;
+-
+- /*
+- * Probe the extension pack (this code is shared with refresh()).
+- */
+- probeAndLoad();
+-
+- autoInitSpan.setSucceeded();
+- return S_OK;
+-}
+-
+-/**
+- * COM cruft.
+- */
+-void ExtPack::FinalRelease()
+-{
+- uninit();
+-}
+-
+-/**
+- * Do the actual cleanup.
+- */
+-void ExtPack::uninit()
+-{
+- /* Enclose the state transition Ready->InUninit->NotReady */
+- AutoUninitSpan autoUninitSpan(this);
+- if (!autoUninitSpan.uninitDone() && m != NULL)
+- {
+- if (m->hMainMod != NIL_RTLDRMOD)
+- {
+- AssertPtr(m->pReg);
+- if (m->pReg->pfnUnload != NULL)
+- m->pReg->pfnUnload(m->pReg);
+-
+- RTLdrClose(m->hMainMod);
+- m->hMainMod = NIL_RTLDRMOD;
+- m->pReg = NULL;
+- }
+-
+- VBoxExtPackFreeDesc(&m->Desc);
+-
+- delete m;
+- m = NULL;
+- }
+-}
+-
+-
+-/**
+- * Calls the installed hook.
+- *
+- * @returns true if we left the lock, false if we didn't.
+- * @param a_pVirtualBox The VirtualBox interface.
+- * @param a_pLock The write lock held by the caller.
+- * @param pErrInfo Where to return error information.
+- */
+-bool ExtPack::callInstalledHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock, PRTERRINFO pErrInfo)
+-{
+- if ( m != NULL
+- && m->hMainMod != NIL_RTLDRMOD)
+- {
+- if (m->pReg->pfnInstalled)
+- {
+- ComPtr<ExtPack> ptrSelfRef = this;
+- a_pLock->release();
+- pErrInfo->rc = m->pReg->pfnInstalled(m->pReg, a_pVirtualBox, pErrInfo);
+- a_pLock->acquire();
+- return true;
+- }
+- }
+- pErrInfo->rc = VINF_SUCCESS;
+- return false;
+-}
+-
+-/**
+- * Calls the uninstall hook and closes the module.
+- *
+- * @returns S_OK or COM error status with error information.
+- * @param a_pVirtualBox The VirtualBox interface.
+- * @param a_fForcedRemoval When set, we'll ignore complaints from the
+- * uninstall hook.
+- * @remarks The caller holds the manager's write lock, not released.
+- */
+-HRESULT ExtPack::callUninstallHookAndClose(IVirtualBox *a_pVirtualBox, bool a_fForcedRemoval)
+-{
+- HRESULT hrc = S_OK;
+-
+- if ( m != NULL
+- && m->hMainMod != NIL_RTLDRMOD)
+- {
+- if (m->pReg->pfnUninstall && !a_fForcedRemoval)
+- {
+- int vrc = m->pReg->pfnUninstall(m->pReg, a_pVirtualBox);
+- if (RT_FAILURE(vrc))
+- {
+- LogRel(("ExtPack pfnUninstall returned %Rrc for %s\n", vrc, m->Desc.strName.c_str()));
+- if (!a_fForcedRemoval)
+- hrc = setError(E_FAIL, tr("pfnUninstall returned %Rrc"), vrc);
+- }
+- }
+- if (SUCCEEDED(hrc))
+- {
+- RTLdrClose(m->hMainMod);
+- m->hMainMod = NIL_RTLDRMOD;
+- m->pReg = NULL;
+- }
+- }
+-
+- return hrc;
+-}
+-
+-/**
+- * Calls the pfnVirtualBoxReady hook.
+- *
+- * @returns true if we left the lock, false if we didn't.
+- * @param a_pVirtualBox The VirtualBox interface.
+- * @param a_pLock The write lock held by the caller.
+- */
+-bool ExtPack::callVirtualBoxReadyHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock)
+-{
+- if ( m != NULL
+- && m->fUsable
+- && !m->fMadeReadyCall)
+- {
+- m->fMadeReadyCall = true;
+- if (m->pReg->pfnVirtualBoxReady)
+- {
+- ComPtr<ExtPack> ptrSelfRef = this;
+- a_pLock->release();
+- m->pReg->pfnVirtualBoxReady(m->pReg, a_pVirtualBox);
+- a_pLock->acquire();
+- return true;
+- }
+- }
+- return false;
+-}
+-
+-/**
+- * Calls the pfnConsoleReady hook.
+- *
+- * @returns true if we left the lock, false if we didn't.
+- * @param a_pConsole The Console interface.
+- * @param a_pLock The write lock held by the caller.
+- */
+-bool ExtPack::callConsoleReadyHook(IConsole *a_pConsole, AutoWriteLock *a_pLock)
+-{
+- if ( m != NULL
+- && m->fUsable
+- && !m->fMadeReadyCall)
+- {
+- m->fMadeReadyCall = true;
+- if (m->pReg->pfnConsoleReady)
+- {
+- ComPtr<ExtPack> ptrSelfRef = this;
+- a_pLock->release();
+- m->pReg->pfnConsoleReady(m->pReg, a_pConsole);
+- a_pLock->acquire();
+- return true;
+- }
+- }
+- return false;
+-}
+-
+-/**
+- * Calls the pfnVMCreate hook.
+- *
+- * @returns true if we left the lock, false if we didn't.
+- * @param a_pVirtualBox The VirtualBox interface.
+- * @param a_pMachine The machine interface of the new VM.
+- * @param a_pLock The write lock held by the caller.
+- */
+-bool ExtPack::callVmCreatedHook(IVirtualBox *a_pVirtualBox, IMachine *a_pMachine, AutoWriteLock *a_pLock)
+-{
+- if ( m != NULL
+- && m->fUsable)
+- {
+- if (m->pReg->pfnVMCreated)
+- {
+- ComPtr<ExtPack> ptrSelfRef = this;
+- a_pLock->release();
+- m->pReg->pfnVMCreated(m->pReg, a_pVirtualBox, a_pMachine);
+- a_pLock->acquire();
+- return true;
+- }
+- }
+- return false;
+-}
+-
+-/**
+- * Calls the pfnVMConfigureVMM hook.
+- *
+- * @returns true if we left the lock, false if we didn't.
+- * @param a_pConsole The console interface.
+- * @param a_pVM The VM handle.
+- * @param a_pLock The write lock held by the caller.
+- * @param a_pvrc Where to return the status code of the
+- * callback. This is always set. LogRel is
+- * called on if a failure status is returned.
+- */
+-bool ExtPack::callVmConfigureVmmHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc)
+-{
+- *a_pvrc = VINF_SUCCESS;
+- if ( m != NULL
+- && m->fUsable)
+- {
+- if (m->pReg->pfnVMConfigureVMM)
+- {
+- ComPtr<ExtPack> ptrSelfRef = this;
+- a_pLock->release();
+- int vrc = m->pReg->pfnVMConfigureVMM(m->pReg, a_pConsole, a_pVM);
+- *a_pvrc = vrc;
+- a_pLock->acquire();
+- if (RT_FAILURE(vrc))
+- LogRel(("ExtPack pfnVMConfigureVMM returned %Rrc for %s\n", vrc, m->Desc.strName.c_str()));
+- return true;
+- }
+- }
+- return false;
+-}
+-
+-/**
+- * Calls the pfnVMPowerOn hook.
+- *
+- * @returns true if we left the lock, false if we didn't.
+- * @param a_pConsole The console interface.
+- * @param a_pVM The VM handle.
+- * @param a_pLock The write lock held by the caller.
+- * @param a_pvrc Where to return the status code of the
+- * callback. This is always set. LogRel is
+- * called on if a failure status is returned.
+- */
+-bool ExtPack::callVmPowerOnHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc)
+-{
+- *a_pvrc = VINF_SUCCESS;
+- if ( m != NULL
+- && m->fUsable)
+- {
+- if (m->pReg->pfnVMPowerOn)
+- {
+- ComPtr<ExtPack> ptrSelfRef = this;
+- a_pLock->release();
+- int vrc = m->pReg->pfnVMPowerOn(m->pReg, a_pConsole, a_pVM);
+- *a_pvrc = vrc;
+- a_pLock->acquire();
+- if (RT_FAILURE(vrc))
+- LogRel(("ExtPack pfnVMPowerOn returned %Rrc for %s\n", vrc, m->Desc.strName.c_str()));
+- return true;
+- }
+- }
+- return false;
+-}
+-
+-/**
+- * Calls the pfnVMPowerOff hook.
+- *
+- * @returns true if we left the lock, false if we didn't.
+- * @param a_pConsole The console interface.
+- * @param a_pVM The VM handle.
+- * @param a_pLock The write lock held by the caller.
+- */
+-bool ExtPack::callVmPowerOffHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock)
+-{
+- if ( m != NULL
+- && m->fUsable)
+- {
+- if (m->pReg->pfnVMPowerOff)
+- {
+- ComPtr<ExtPack> ptrSelfRef = this;
+- a_pLock->release();
+- m->pReg->pfnVMPowerOff(m->pReg, a_pConsole, a_pVM);
+- a_pLock->acquire();
+- return true;
+- }
+- }
+- return false;
+-}
+-
+-/**
+- * Check if the extension pack is usable and has an VRDE module.
+- *
+- * @returns S_OK or COM error status with error information.
+- *
+- * @remarks Caller holds the extension manager lock for reading, no locking
+- * necessary.
+- */
+-HRESULT ExtPack::checkVrde(void)
+-{
+- HRESULT hrc;
+- if ( m != NULL
+- && m->fUsable)
+- {
+- if (m->Desc.strVrdeModule.isNotEmpty())
+- hrc = S_OK;
+- else
+- hrc = setError(E_FAIL, tr("The extension pack '%s' does not include a VRDE module"), m->Desc.strName.c_str());
+- }
+- else
+- hrc = setError(E_FAIL, tr("%s"), m->strWhyUnusable.c_str());
+- return hrc;
+-}
+-
+-/**
+- * Same as checkVrde(), except that it also resolves the path to the module.
+- *
+- * @returns S_OK or COM error status with error information.
+- * @param a_pstrVrdeLibrary Where to return the path on success.
+- *
+- * @remarks Caller holds the extension manager lock for reading, no locking
+- * necessary.
+- */
+-HRESULT ExtPack::getVrdpLibraryName(Utf8Str *a_pstrVrdeLibrary)
+-{
+- HRESULT hrc = checkVrde();
+- if (SUCCEEDED(hrc))
+- {
+- if (findModule(m->Desc.strVrdeModule.c_str(), NULL, VBOXEXTPACKMODKIND_R3,
+- a_pstrVrdeLibrary, NULL /*a_pfNative*/, NULL /*a_pObjInfo*/))
+- hrc = S_OK;
+- else
+- hrc = setError(E_FAIL, tr("Failed to locate the VRDE module '%s' in extension pack '%s'"),
+- m->Desc.strVrdeModule.c_str(), m->Desc.strName.c_str());
+- }
+- return hrc;
+-}
+-
+-/**
+- * Check if this extension pack wishes to be the default VRDE provider.
+- *
+- * @returns @c true if it wants to and it is in a usable state, otherwise
+- * @c false.
+- *
+- * @remarks Caller holds the extension manager lock for reading, no locking
+- * necessary.
+- */
+-bool ExtPack::wantsToBeDefaultVrde(void) const
+-{
+- return m->fUsable
+- && m->Desc.strVrdeModule.isNotEmpty();
+-}
+-
+-/**
+- * Refreshes the extension pack state.
+- *
+- * This is called by the manager so that the on disk changes are picked up.
+- *
+- * @returns S_OK or COM error status with error information.
+- *
+- * @param a_pfCanDelete Optional can-delete-this-object output indicator.
+- *
+- * @remarks Caller holds the extension manager lock for writing.
+- * @remarks Only called in VBoxSVC.
+- */
+-HRESULT ExtPack::refresh(bool *a_pfCanDelete)
+-{
+- if (a_pfCanDelete)
+- *a_pfCanDelete = false;
+-
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); /* for the COMGETTERs */
+-
+- /*
+- * Has the module been deleted?
+- */
+- RTFSOBJINFO ObjInfoExtPack;
+- int vrc = RTPathQueryInfoEx(m->strExtPackPath.c_str(), &ObjInfoExtPack, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK);
+- if ( RT_FAILURE(vrc)
+- || !RTFS_IS_DIRECTORY(ObjInfoExtPack.Attr.fMode))
+- {
+- if (a_pfCanDelete)
+- *a_pfCanDelete = true;
+- return S_OK;
+- }
+-
+- /*
+- * We've got a directory, so try query file system object info for the
+- * files we are interested in as well.
+- */
+- RTFSOBJINFO ObjInfoDesc;
+- char szDescFilePath[RTPATH_MAX];
+- vrc = RTPathJoin(szDescFilePath, sizeof(szDescFilePath), m->strExtPackPath.c_str(), VBOX_EXTPACK_DESCRIPTION_NAME);
+- if (RT_SUCCESS(vrc))
+- vrc = RTPathQueryInfoEx(szDescFilePath, &ObjInfoDesc, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK);
+- if (RT_FAILURE(vrc))
+- RT_ZERO(ObjInfoDesc);
+-
+- RTFSOBJINFO ObjInfoMainMod;
+- if (m->strMainModPath.isNotEmpty())
+- vrc = RTPathQueryInfoEx(m->strMainModPath.c_str(), &ObjInfoMainMod, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK);
+- if (m->strMainModPath.isEmpty() || RT_FAILURE(vrc))
+- RT_ZERO(ObjInfoMainMod);
+-
+- /*
+- * If we have a usable module already, just verify that things haven't
+- * changed since we loaded it.
+- */
+- if (m->fUsable)
+- {
+- if (m->hMainMod == NIL_RTLDRMOD)
+- probeAndLoad();
+- else if ( !objinfoIsEqual(&ObjInfoDesc, &m->ObjInfoDesc)
+- || !objinfoIsEqual(&ObjInfoMainMod, &m->ObjInfoMainMod)
+- || !objinfoIsEqual(&ObjInfoExtPack, &m->ObjInfoExtPack) )
+- {
+- /** @todo not important, so it can wait. */
+- }
+- }
+- /*
+- * Ok, it is currently not usable. If anything has changed since last time
+- * reprobe the extension pack.
+- */
+- else if ( !objinfoIsEqual(&ObjInfoDesc, &m->ObjInfoDesc)
+- || !objinfoIsEqual(&ObjInfoMainMod, &m->ObjInfoMainMod)
+- || !objinfoIsEqual(&ObjInfoExtPack, &m->ObjInfoExtPack) )
+- probeAndLoad();
+-
+- return S_OK;
+-}
+-
+-/**
+- * Probes the extension pack, loading the main dll and calling its registration
+- * entry point.
+- *
+- * This updates the state accordingly, the strWhyUnusable and fUnusable members
+- * being the most important ones.
+- */
+-void ExtPack::probeAndLoad(void)
+-{
+- m->fUsable = false;
+- m->fMadeReadyCall = false;
+-
+- /*
+- * Query the file system info for the extension pack directory. This and
+- * all other file system info we save is for the benefit of refresh().
+- */
+- int vrc = RTPathQueryInfoEx(m->strExtPackPath.c_str(), &m->ObjInfoExtPack, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK);
+- if (RT_FAILURE(vrc))
+- {
+- m->strWhyUnusable.printf(tr("RTPathQueryInfoEx on '%s' failed: %Rrc"), m->strExtPackPath.c_str(), vrc);
+- return;
+- }
+- if (!RTFS_IS_DIRECTORY(m->ObjInfoExtPack.Attr.fMode))
+- {
+- if (RTFS_IS_SYMLINK(m->ObjInfoExtPack.Attr.fMode))
+- m->strWhyUnusable.printf(tr("'%s' is a symbolic link, this is not allowed"), m->strExtPackPath.c_str(), vrc);
+- else if (RTFS_IS_FILE(m->ObjInfoExtPack.Attr.fMode))
+- m->strWhyUnusable.printf(tr("'%s' is a symbolic file, not a directory"), m->strExtPackPath.c_str(), vrc);
+- else
+- m->strWhyUnusable.printf(tr("'%s' is not a directory (fMode=%#x)"), m->strExtPackPath.c_str(), m->ObjInfoExtPack.Attr.fMode);
+- return;
+- }
+-
+- RTERRINFOSTATIC ErrInfo;
+- RTErrInfoInitStatic(&ErrInfo);
+- vrc = SUPR3HardenedVerifyDir(m->strExtPackPath.c_str(), true /*fRecursive*/, true /*fCheckFiles*/, &ErrInfo.Core);
+- if (RT_FAILURE(vrc))
+- {
+- m->strWhyUnusable.printf(tr("%s (rc=%Rrc)"), ErrInfo.Core.pszMsg, vrc);
+- return;
+- }
+-
+- /*
+- * Read the description file.
+- */
+- RTCString strSavedName(m->Desc.strName);
+- RTCString *pStrLoadErr = VBoxExtPackLoadDesc(m->strExtPackPath.c_str(), &m->Desc, &m->ObjInfoDesc);
+- if (pStrLoadErr != NULL)
+- {
+- m->strWhyUnusable.printf(tr("Failed to load '%s/%s': %s"),
+- m->strExtPackPath.c_str(), VBOX_EXTPACK_DESCRIPTION_NAME, pStrLoadErr->c_str());
+- m->Desc.strName = strSavedName;
+- delete pStrLoadErr;
+- return;
+- }
+-
+- /*
+- * Make sure the XML name and directory matches.
+- */
+- if (!m->Desc.strName.equalsIgnoreCase(strSavedName))
+- {
+- m->strWhyUnusable.printf(tr("The description name ('%s') and directory name ('%s') does not match"),
+- m->Desc.strName.c_str(), strSavedName.c_str());
+- m->Desc.strName = strSavedName;
+- return;
+- }
+-
+- /*
+- * Load the main DLL and call the predefined entry point.
+- */
+- bool fIsNative;
+- if (!findModule(m->Desc.strMainModule.c_str(), NULL /* default extension */, VBOXEXTPACKMODKIND_R3,
+- &m->strMainModPath, &fIsNative, &m->ObjInfoMainMod))
+- {
+- m->strWhyUnusable.printf(tr("Failed to locate the main module ('%s')"), m->Desc.strMainModule.c_str());
+- return;
+- }
+-
+- vrc = SUPR3HardenedVerifyPlugIn(m->strMainModPath.c_str(), &ErrInfo.Core);
+- if (RT_FAILURE(vrc))
+- {
+- m->strWhyUnusable.printf(tr("%s"), ErrInfo.Core.pszMsg);
+- return;
+- }
+-
+- if (fIsNative)
+- {
+- vrc = SUPR3HardenedLdrLoadPlugIn(m->strMainModPath.c_str(), &m->hMainMod, &ErrInfo.Core);
+- if (RT_FAILURE(vrc))
+- {
+- m->hMainMod = NIL_RTLDRMOD;
+- m->strWhyUnusable.printf(tr("Failed to load the main module ('%s'): %Rrc - %s"),
+- m->strMainModPath.c_str(), vrc, ErrInfo.Core.pszMsg);
+- return;
+- }
+- }
+- else
+- {
+- m->strWhyUnusable.printf(tr("Only native main modules are currently supported"));
+- return;
+- }
+-
+- /*
+- * Resolve the predefined entry point.
+- */
+- PFNVBOXEXTPACKREGISTER pfnRegistration;
+- vrc = RTLdrGetSymbol(m->hMainMod, VBOX_EXTPACK_MAIN_MOD_ENTRY_POINT, (void **)&pfnRegistration);
+- if (RT_SUCCESS(vrc))
+- {
+- RTErrInfoClear(&ErrInfo.Core);
+- vrc = pfnRegistration(&m->Hlp, &m->pReg, &ErrInfo.Core);
+- if ( RT_SUCCESS(vrc)
+- && !RTErrInfoIsSet(&ErrInfo.Core)
+- && VALID_PTR(m->pReg))
+- {
+- if ( VBOXEXTPACK_IS_MAJOR_VER_EQUAL(m->pReg->u32Version, VBOXEXTPACKREG_VERSION)
+- && m->pReg->u32EndMarker == m->pReg->u32Version)
+- {
+- if ( (!m->pReg->pfnInstalled || RT_VALID_PTR(m->pReg->pfnInstalled))
+- && (!m->pReg->pfnUninstall || RT_VALID_PTR(m->pReg->pfnUninstall))
+- && (!m->pReg->pfnVirtualBoxReady || RT_VALID_PTR(m->pReg->pfnVirtualBoxReady))
+- && (!m->pReg->pfnConsoleReady || RT_VALID_PTR(m->pReg->pfnConsoleReady))
+- && (!m->pReg->pfnUnload || RT_VALID_PTR(m->pReg->pfnUnload))
+- && (!m->pReg->pfnVMCreated || RT_VALID_PTR(m->pReg->pfnVMCreated))
+- && (!m->pReg->pfnVMConfigureVMM || RT_VALID_PTR(m->pReg->pfnVMConfigureVMM))
+- && (!m->pReg->pfnVMPowerOn || RT_VALID_PTR(m->pReg->pfnVMPowerOn))
+- && (!m->pReg->pfnVMPowerOff || RT_VALID_PTR(m->pReg->pfnVMPowerOff))
+- && (!m->pReg->pfnQueryObject || RT_VALID_PTR(m->pReg->pfnQueryObject))
+- )
+- {
+- /*
+- * We're good!
+- */
+- m->fUsable = true;
+- m->strWhyUnusable.setNull();
+- return;
+- }
+-
+- m->strWhyUnusable = tr("The registration structure contains on or more invalid function pointers");
+- }
+- else
+- m->strWhyUnusable.printf(tr("Unsupported registration structure version %u.%u"),
+- RT_HIWORD(m->pReg->u32Version), RT_LOWORD(m->pReg->u32Version));
+- }
+- else
+- m->strWhyUnusable.printf(tr("%s returned %Rrc, pReg=%p ErrInfo='%s'"),
+- VBOX_EXTPACK_MAIN_MOD_ENTRY_POINT, vrc, m->pReg, ErrInfo.Core.pszMsg);
+- m->pReg = NULL;
+- }
+- else
+- m->strWhyUnusable.printf(tr("Failed to resolve exported symbol '%s' in the main module: %Rrc"),
+- VBOX_EXTPACK_MAIN_MOD_ENTRY_POINT, vrc);
+-
+- RTLdrClose(m->hMainMod);
+- m->hMainMod = NIL_RTLDRMOD;
+-}
+-
+-/**
+- * Finds a module.
+- *
+- * @returns true if found, false if not.
+- * @param a_pszName The module base name (no extension).
+- * @param a_pszExt The extension. If NULL we use default
+- * extensions.
+- * @param a_enmKind The kind of module to locate.
+- * @param a_pStrFound Where to return the path to the module we've
+- * found.
+- * @param a_pfNative Where to return whether this is a native module
+- * or an agnostic one. Optional.
+- * @param a_pObjInfo Where to return the file system object info for
+- * the module. Optional.
+- */
+-bool ExtPack::findModule(const char *a_pszName, const char *a_pszExt, VBOXEXTPACKMODKIND a_enmKind,
+- Utf8Str *a_pStrFound, bool *a_pfNative, PRTFSOBJINFO a_pObjInfo) const
+-{
+- /*
+- * Try the native path first.
+- */
+- char szPath[RTPATH_MAX];
+- int vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), RTBldCfgTargetDotArch());
+- AssertLogRelRCReturn(vrc, false);
+- vrc = RTPathAppend(szPath, sizeof(szPath), a_pszName);
+- AssertLogRelRCReturn(vrc, false);
+- if (!a_pszExt)
+- {
+- const char *pszDefExt;
+- switch (a_enmKind)
+- {
+- case VBOXEXTPACKMODKIND_RC: pszDefExt = ".rc"; break;
+- case VBOXEXTPACKMODKIND_R0: pszDefExt = ".r0"; break;
+- case VBOXEXTPACKMODKIND_R3: pszDefExt = RTLdrGetSuff(); break;
+- default:
+- AssertFailedReturn(false);
+- }
+- vrc = RTStrCat(szPath, sizeof(szPath), pszDefExt);
+- AssertLogRelRCReturn(vrc, false);
+- }
+-
+- RTFSOBJINFO ObjInfo;
+- if (!a_pObjInfo)
+- a_pObjInfo = &ObjInfo;
+- vrc = RTPathQueryInfo(szPath, a_pObjInfo, RTFSOBJATTRADD_UNIX);
+- if (RT_SUCCESS(vrc) && RTFS_IS_FILE(a_pObjInfo->Attr.fMode))
+- {
+- if (a_pfNative)
+- *a_pfNative = true;
+- *a_pStrFound = szPath;
+- return true;
+- }
+-
+- /*
+- * Try the platform agnostic modules.
+- */
+- /* gcc.x86/module.rel */
+- char szSubDir[32];
+- RTStrPrintf(szSubDir, sizeof(szSubDir), "%s.%s", RTBldCfgCompiler(), RTBldCfgTargetArch());
+- vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), szSubDir);
+- AssertLogRelRCReturn(vrc, false);
+- vrc = RTPathAppend(szPath, sizeof(szPath), a_pszName);
+- AssertLogRelRCReturn(vrc, false);
+- if (!a_pszExt)
+- {
+- vrc = RTStrCat(szPath, sizeof(szPath), ".rel");
+- AssertLogRelRCReturn(vrc, false);
+- }
+- vrc = RTPathQueryInfo(szPath, a_pObjInfo, RTFSOBJATTRADD_UNIX);
+- if (RT_SUCCESS(vrc) && RTFS_IS_FILE(a_pObjInfo->Attr.fMode))
+- {
+- if (a_pfNative)
+- *a_pfNative = false;
+- *a_pStrFound = szPath;
+- return true;
+- }
+-
+- /* x86/module.rel */
+- vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), RTBldCfgTargetArch());
+- AssertLogRelRCReturn(vrc, false);
+- vrc = RTPathAppend(szPath, sizeof(szPath), a_pszName);
+- AssertLogRelRCReturn(vrc, false);
+- if (!a_pszExt)
+- {
+- vrc = RTStrCat(szPath, sizeof(szPath), ".rel");
+- AssertLogRelRCReturn(vrc, false);
+- }
+- vrc = RTPathQueryInfo(szPath, a_pObjInfo, RTFSOBJATTRADD_UNIX);
+- if (RT_SUCCESS(vrc) && RTFS_IS_FILE(a_pObjInfo->Attr.fMode))
+- {
+- if (a_pfNative)
+- *a_pfNative = false;
+- *a_pStrFound = szPath;
+- return true;
+- }
+-
+- return false;
+-}
+-
+-/**
+- * Compares two file system object info structures.
+- *
+- * @returns true if equal, false if not.
+- * @param pObjInfo1 The first.
+- * @param pObjInfo2 The second.
+- * @todo IPRT should do this, really.
+- */
+-/* static */ bool ExtPack::objinfoIsEqual(PCRTFSOBJINFO pObjInfo1, PCRTFSOBJINFO pObjInfo2)
+-{
+- if (!RTTimeSpecIsEqual(&pObjInfo1->ModificationTime, &pObjInfo2->ModificationTime))
+- return false;
+- if (!RTTimeSpecIsEqual(&pObjInfo1->ChangeTime, &pObjInfo2->ChangeTime))
+- return false;
+- if (!RTTimeSpecIsEqual(&pObjInfo1->BirthTime, &pObjInfo2->BirthTime))
+- return false;
+- if (pObjInfo1->cbObject != pObjInfo2->cbObject)
+- return false;
+- if (pObjInfo1->Attr.fMode != pObjInfo2->Attr.fMode)
+- return false;
+- if (pObjInfo1->Attr.enmAdditional == pObjInfo2->Attr.enmAdditional)
+- {
+- switch (pObjInfo1->Attr.enmAdditional)
+- {
+- case RTFSOBJATTRADD_UNIX:
+- if (pObjInfo1->Attr.u.Unix.uid != pObjInfo2->Attr.u.Unix.uid)
+- return false;
+- if (pObjInfo1->Attr.u.Unix.gid != pObjInfo2->Attr.u.Unix.gid)
+- return false;
+- if (pObjInfo1->Attr.u.Unix.INodeIdDevice != pObjInfo2->Attr.u.Unix.INodeIdDevice)
+- return false;
+- if (pObjInfo1->Attr.u.Unix.INodeId != pObjInfo2->Attr.u.Unix.INodeId)
+- return false;
+- if (pObjInfo1->Attr.u.Unix.GenerationId != pObjInfo2->Attr.u.Unix.GenerationId)
+- return false;
+- break;
+- default:
+- break;
+- }
+- }
+- return true;
+-}
+-
+-
+-/**
+- * @interface_method_impl{VBOXEXTPACKHLP,pfnFindModule}
+- */
+-/*static*/ DECLCALLBACK(int)
+-ExtPack::hlpFindModule(PCVBOXEXTPACKHLP pHlp, const char *pszName, const char *pszExt, VBOXEXTPACKMODKIND enmKind,
+- char *pszFound, size_t cbFound, bool *pfNative)
+-{
+- /*
+- * Validate the input and get our bearings.
+- */
+- AssertPtrReturn(pszName, VERR_INVALID_POINTER);
+- AssertPtrNullReturn(pszExt, VERR_INVALID_POINTER);
+- AssertPtrReturn(pszFound, VERR_INVALID_POINTER);
+- AssertPtrNullReturn(pfNative, VERR_INVALID_POINTER);
+- AssertReturn(enmKind > VBOXEXTPACKMODKIND_INVALID && enmKind < VBOXEXTPACKMODKIND_END, VERR_INVALID_PARAMETER);
+-
+- AssertPtrReturn(pHlp, VERR_INVALID_POINTER);
+- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VERR_INVALID_POINTER);
+- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp);
+- AssertPtrReturn(m, VERR_INVALID_POINTER);
+- ExtPack *pThis = m->pThis;
+- AssertPtrReturn(pThis, VERR_INVALID_POINTER);
+-
+- /*
+- * This is just a wrapper around findModule.
+- */
+- Utf8Str strFound;
+- if (pThis->findModule(pszName, pszExt, enmKind, &strFound, pfNative, NULL))
+- return RTStrCopy(pszFound, cbFound, strFound.c_str());
+- return VERR_FILE_NOT_FOUND;
+-}
+-
+-/*static*/ DECLCALLBACK(int)
+-ExtPack::hlpGetFilePath(PCVBOXEXTPACKHLP pHlp, const char *pszFilename, char *pszPath, size_t cbPath)
+-{
+- /*
+- * Validate the input and get our bearings.
+- */
+- AssertPtrReturn(pszFilename, VERR_INVALID_POINTER);
+- AssertPtrReturn(pszPath, VERR_INVALID_POINTER);
+- AssertReturn(cbPath > 0, VERR_BUFFER_OVERFLOW);
+-
+- AssertPtrReturn(pHlp, VERR_INVALID_POINTER);
+- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VERR_INVALID_POINTER);
+- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp);
+- AssertPtrReturn(m, VERR_INVALID_POINTER);
+- ExtPack *pThis = m->pThis;
+- AssertPtrReturn(pThis, VERR_INVALID_POINTER);
+-
+- /*
+- * This is a simple RTPathJoin, no checking if things exists or anything.
+- */
+- int vrc = RTPathJoin(pszPath, cbPath, pThis->m->strExtPackPath.c_str(), pszFilename);
+- if (RT_FAILURE(vrc))
+- RT_BZERO(pszPath, cbPath);
+- return vrc;
+-}
+-
+-/*static*/ DECLCALLBACK(VBOXEXTPACKCTX)
+-ExtPack::hlpGetContext(PCVBOXEXTPACKHLP pHlp)
+-{
+- /*
+- * Validate the input and get our bearings.
+- */
+- AssertPtrReturn(pHlp, VBOXEXTPACKCTX_INVALID);
+- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VBOXEXTPACKCTX_INVALID);
+- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp);
+- AssertPtrReturn(m, VBOXEXTPACKCTX_INVALID);
+- ExtPack *pThis = m->pThis;
+- AssertPtrReturn(pThis, VBOXEXTPACKCTX_INVALID);
+-
+- return pThis->m->enmContext;
+-}
+-
+-/*static*/ DECLCALLBACK(int)
+-ExtPack::hlpReservedN(PCVBOXEXTPACKHLP pHlp)
+-{
+- /*
+- * Validate the input and get our bearings.
+- */
+- AssertPtrReturn(pHlp, VERR_INVALID_POINTER);
+- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VERR_INVALID_POINTER);
+- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp);
+- AssertPtrReturn(m, VERR_INVALID_POINTER);
+- ExtPack *pThis = m->pThis;
+- AssertPtrReturn(pThis, VERR_INVALID_POINTER);
+-
+- return VERR_NOT_IMPLEMENTED;
+-}
+-
+-
+-
+-
+-
+-STDMETHODIMP ExtPack::COMGETTER(Name)(BSTR *a_pbstrName)
+-{
+- CheckComArgOutPointerValid(a_pbstrName);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- Bstr str(m->Desc.strName);
+- str.cloneTo(a_pbstrName);
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(Description)(BSTR *a_pbstrDescription)
+-{
+- CheckComArgOutPointerValid(a_pbstrDescription);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- Bstr str(m->Desc.strDescription);
+- str.cloneTo(a_pbstrDescription);
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(Version)(BSTR *a_pbstrVersion)
+-{
+- CheckComArgOutPointerValid(a_pbstrVersion);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- /* HACK ALERT: This is for easing backporting to 4.1. The edition stuff
+- will be changed into a separate */
+- if (m->Desc.strEdition.isEmpty())
+- {
+- Bstr str(m->Desc.strVersion);
+- str.cloneTo(a_pbstrVersion);
+- }
+- else
+- {
+- RTCString strHack(m->Desc.strVersion);
+- strHack.append('-');
+- strHack.append(m->Desc.strEdition);
+-
+- Bstr str(strHack);
+- str.cloneTo(a_pbstrVersion);
+- }
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(Revision)(ULONG *a_puRevision)
+-{
+- CheckComArgOutPointerValid(a_puRevision);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- *a_puRevision = m->Desc.uRevision;
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(VRDEModule)(BSTR *a_pbstrVrdeModule)
+-{
+- CheckComArgOutPointerValid(a_pbstrVrdeModule);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- Bstr str(m->Desc.strVrdeModule);
+- str.cloneTo(a_pbstrVrdeModule);
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(PlugIns)(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns))
+-{
+- /** @todo implement plug-ins. */
+-#ifdef VBOX_WITH_XPCOM
+- NOREF(a_paPlugIns);
+- NOREF(a_paPlugInsSize);
+-#endif
+- ReturnComNotImplemented();
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(Usable)(BOOL *a_pfUsable)
+-{
+- CheckComArgOutPointerValid(a_pfUsable);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- *a_pfUsable = m->fUsable;
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(WhyUnusable)(BSTR *a_pbstrWhy)
+-{
+- CheckComArgOutPointerValid(a_pbstrWhy);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- m->strWhyUnusable.cloneTo(a_pbstrWhy);
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(ShowLicense)(BOOL *a_pfShowIt)
+-{
+- CheckComArgOutPointerValid(a_pfShowIt);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- *a_pfShowIt = m->Desc.fShowLicense;
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPack::COMGETTER(License)(BSTR *a_pbstrHtmlLicense)
+-{
+- Bstr bstrHtml("html");
+- return QueryLicense(Bstr::Empty.raw(), Bstr::Empty.raw(), bstrHtml.raw(), a_pbstrHtmlLicense);
+-}
+-
+-STDMETHODIMP ExtPack::QueryLicense(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage, IN_BSTR a_bstrFormat,
+- BSTR *a_pbstrLicense)
+-{
+- /*
+- * Validate input.
+- */
+- CheckComArgOutPointerValid(a_pbstrLicense);
+- CheckComArgNotNull(a_bstrPreferredLocale);
+- CheckComArgNotNull(a_bstrPreferredLanguage);
+- CheckComArgNotNull(a_bstrFormat);
+-
+- Utf8Str strPreferredLocale(a_bstrPreferredLocale);
+- if (strPreferredLocale.length() != 2 && strPreferredLocale.length() != 0)
+- return setError(E_FAIL, tr("The preferred locale is a two character string or empty."));
+-
+- Utf8Str strPreferredLanguage(a_bstrPreferredLanguage);
+- if (strPreferredLanguage.length() != 2 && strPreferredLanguage.length() != 0)
+- return setError(E_FAIL, tr("The preferred lanuage is a two character string or empty."));
+-
+- Utf8Str strFormat(a_bstrFormat);
+- if ( !strFormat.equals("html")
+- && !strFormat.equals("rtf")
+- && !strFormat.equals("txt"))
+- return setError(E_FAIL, tr("The license format can only have the values 'html', 'rtf' and 'txt'."));
+-
+- /*
+- * Combine the options to form a file name before locking down anything.
+- */
+- char szName[sizeof(VBOX_EXTPACK_LICENSE_NAME_PREFIX "-de_DE.html") + 2];
+- if (strPreferredLocale.isNotEmpty() && strPreferredLanguage.isNotEmpty())
+- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s_%s.%s",
+- strPreferredLocale.c_str(), strPreferredLanguage.c_str(), strFormat.c_str());
+- else if (strPreferredLocale.isNotEmpty())
+- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s.%s", strPreferredLocale.c_str(), strFormat.c_str());
+- else if (strPreferredLanguage.isNotEmpty())
+- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-_%s.%s", strPreferredLocale.c_str(), strFormat.c_str());
+- else
+- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX ".%s", strFormat.c_str());
+-
+- /*
+- * Effectuate the query.
+- */
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); /* paranoia */
+-
+- if (!m->fUsable)
+- hrc = setError(E_FAIL, tr("%s"), m->strWhyUnusable.c_str());
+- else
+- {
+- char szPath[RTPATH_MAX];
+- int vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), szName);
+- if (RT_SUCCESS(vrc))
+- {
+- void *pvFile;
+- size_t cbFile;
+- vrc = RTFileReadAllEx(szPath, 0, RTFOFF_MAX, RTFILE_RDALL_O_DENY_READ, &pvFile, &cbFile);
+- if (RT_SUCCESS(vrc))
+- {
+- Bstr bstrLicense((const char *)pvFile, cbFile);
+- if (bstrLicense.isNotEmpty())
+- {
+- bstrLicense.detachTo(a_pbstrLicense);
+- hrc = S_OK;
+- }
+- else
+- hrc = setError(VBOX_E_IPRT_ERROR, tr("The license file '%s' is empty or contains invalid UTF-8 encoding"),
+- szPath);
+- RTFileReadAllFree(pvFile, cbFile);
+- }
+- else if (vrc == VERR_FILE_NOT_FOUND || vrc == VERR_PATH_NOT_FOUND)
+- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("The license file '%s' was not found in extension pack '%s'"),
+- szName, m->Desc.strName.c_str());
+- else
+- hrc = setError(VBOX_E_FILE_ERROR, tr("Failed to open the license file '%s': %Rrc"), szPath, vrc);
+- }
+- else
+- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTPathJoin failed: %Rrc"), vrc);
+- }
+- }
+- return hrc;
+-}
+-
+-
+-STDMETHODIMP ExtPack::QueryObject(IN_BSTR a_bstrObjectId, IUnknown **a_ppUnknown)
+-{
+- com::Guid ObjectId;
+- CheckComArgGuid(a_bstrObjectId, ObjectId);
+- CheckComArgOutPointerValid(a_ppUnknown);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- if ( m->pReg
+- && m->pReg->pfnQueryObject)
+- {
+- void *pvUnknown = m->pReg->pfnQueryObject(m->pReg, ObjectId.raw());
+- if (pvUnknown)
+- *a_ppUnknown = (IUnknown *)pvUnknown;
+- else
+- hrc = E_NOINTERFACE;
+- }
+- else
+- hrc = E_NOINTERFACE;
+- }
+- return hrc;
+-}
+-
+-
+-
+-
+-DEFINE_EMPTY_CTOR_DTOR(ExtPackManager)
+-
+-/**
+- * Called by ComObjPtr::createObject when creating the object.
+- *
+- * Just initialize the basic object state, do the rest in init().
+- *
+- * @returns S_OK.
+- */
+-HRESULT ExtPackManager::FinalConstruct()
+-{
+- m = NULL;
+- return S_OK;
+-}
+-
+-/**
+- * Initializes the extension pack manager.
+- *
+- * @returns COM status code.
+- * @param a_pVirtualBox Pointer to the VirtualBox object.
+- * @param a_enmContext The context we're in.
+- */
+-HRESULT ExtPackManager::initExtPackManager(VirtualBox *a_pVirtualBox, VBOXEXTPACKCTX a_enmContext)
+-{
+- AutoInitSpan autoInitSpan(this);
+- AssertReturn(autoInitSpan.isOk(), E_FAIL);
+-
+- /*
+- * Figure some stuff out before creating the instance data.
+- */
+- char szBaseDir[RTPATH_MAX];
+- int rc = RTPathAppPrivateArchTop(szBaseDir, sizeof(szBaseDir));
+- AssertLogRelRCReturn(rc, E_FAIL);
+- rc = RTPathAppend(szBaseDir, sizeof(szBaseDir), VBOX_EXTPACK_INSTALL_DIR);
+- AssertLogRelRCReturn(rc, E_FAIL);
+-
+- char szCertificatDir[RTPATH_MAX];
+- rc = RTPathAppPrivateNoArch(szCertificatDir, sizeof(szCertificatDir));
+- AssertLogRelRCReturn(rc, E_FAIL);
+- rc = RTPathAppend(szCertificatDir, sizeof(szCertificatDir), VBOX_EXTPACK_CERT_DIR);
+- AssertLogRelRCReturn(rc, E_FAIL);
+-
+- /*
+- * Allocate and initialize the instance data.
+- */
+- m = new Data;
+- m->strBaseDir = szBaseDir;
+- m->strCertificatDirPath = szCertificatDir;
+- m->pVirtualBox = a_pVirtualBox;
+- m->enmContext = a_enmContext;
+-
+- /*
+- * Slurp in VBoxVMM which is used by VBoxPuelMain.
+- */
+-#if !defined(RT_OS_WINDOWS) && !defined(RT_OS_DARWIN)
+- if (a_enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON)
+- {
+- int vrc = SUPR3HardenedLdrLoadAppPriv("VBoxVMM", &m->hVBoxVMM, RTLDRLOAD_FLAGS_GLOBAL, NULL);
+- if (RT_FAILURE(vrc))
+- m->hVBoxVMM = NIL_RTLDRMOD;
+- /* cleanup in ::uninit()? */
+- }
+-#endif
+-
+- /*
+- * Go looking for extensions. The RTDirOpen may fail if nothing has been
+- * installed yet, or if root is paranoid and has revoked our access to them.
+- *
+- * We ASSUME that there are no files, directories or stuff in the directory
+- * that exceed the max name length in RTDIRENTRYEX.
+- */
+- HRESULT hrc = S_OK;
+- PRTDIR pDir;
+- int vrc = RTDirOpen(&pDir, szBaseDir);
+- if (RT_SUCCESS(vrc))
+- {
+- for (;;)
+- {
+- RTDIRENTRYEX Entry;
+- vrc = RTDirReadEx(pDir, &Entry, NULL /*pcbDirEntry*/, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
+- if (RT_FAILURE(vrc))
+- {
+- AssertLogRelMsg(vrc == VERR_NO_MORE_FILES, ("%Rrc\n", vrc));
+- break;
+- }
+- if ( RTFS_IS_DIRECTORY(Entry.Info.Attr.fMode)
+- && strcmp(Entry.szName, ".") != 0
+- && strcmp(Entry.szName, "..") != 0
+- && VBoxExtPackIsValidMangledName(Entry.szName) )
+- {
+- /*
+- * All directories are extensions, the shall be nothing but
+- * extensions in this subdirectory.
+- */
+- char szExtPackDir[RTPATH_MAX];
+- vrc = RTPathJoin(szExtPackDir, sizeof(szExtPackDir), m->strBaseDir.c_str(), Entry.szName);
+- AssertLogRelRC(vrc);
+- if (RT_SUCCESS(vrc))
+- {
+- RTCString *pstrName = VBoxExtPackUnmangleName(Entry.szName, RTSTR_MAX);
+- AssertLogRel(pstrName);
+- if (pstrName)
+- {
+- ComObjPtr<ExtPack> NewExtPack;
+- HRESULT hrc2 = NewExtPack.createObject();
+- if (SUCCEEDED(hrc2))
+- hrc2 = NewExtPack->initWithDir(a_enmContext, pstrName->c_str(), szExtPackDir);
+- delete pstrName;
+- if (SUCCEEDED(hrc2))
+- m->llInstalledExtPacks.push_back(NewExtPack);
+- else if (SUCCEEDED(rc))
+- hrc = hrc2;
+- }
+- else
+- hrc = E_UNEXPECTED;
+- }
+- else
+- hrc = E_UNEXPECTED;
+- }
+- }
+- RTDirClose(pDir);
+- }
+- /* else: ignore, the directory probably does not exist or something. */
+-
+- if (SUCCEEDED(hrc))
+- autoInitSpan.setSucceeded();
+- return hrc;
+-}
+-
+-/**
+- * COM cruft.
+- */
+-void ExtPackManager::FinalRelease()
+-{
+- uninit();
+-}
+-
+-/**
+- * Do the actual cleanup.
+- */
+-void ExtPackManager::uninit()
+-{
+- /* Enclose the state transition Ready->InUninit->NotReady */
+- AutoUninitSpan autoUninitSpan(this);
+- if (!autoUninitSpan.uninitDone() && m != NULL)
+- {
+- delete m;
+- m = NULL;
+- }
+-}
+-
+-
+-STDMETHODIMP ExtPackManager::COMGETTER(InstalledExtPacks)(ComSafeArrayOut(IExtPack *, a_paExtPacks))
+-{
+- CheckComArgOutSafeArrayPointerValid(a_paExtPacks);
+- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- SafeIfaceArray<IExtPack> SaExtPacks(m->llInstalledExtPacks);
+- SaExtPacks.detachTo(ComSafeArrayOutArg(a_paExtPacks));
+- }
+-
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackManager::Find(IN_BSTR a_bstrName, IExtPack **a_pExtPack)
+-{
+- CheckComArgNotNull(a_bstrName);
+- CheckComArgOutPointerValid(a_pExtPack);
+- Utf8Str strName(a_bstrName);
+- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- ComPtr<ExtPack> ptrExtPack = findExtPack(strName.c_str());
+- if (!ptrExtPack.isNull())
+- ptrExtPack.queryInterfaceTo(a_pExtPack);
+- else
+- hrc = VBOX_E_OBJECT_NOT_FOUND;
+- }
+-
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackManager::OpenExtPackFile(IN_BSTR a_bstrTarballAndDigest, IExtPackFile **a_ppExtPackFile)
+-{
+- CheckComArgNotNull(a_bstrTarballAndDigest);
+- CheckComArgOutPointerValid(a_ppExtPackFile);
+- AssertReturn(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON, E_UNEXPECTED);
+-
+- /* The API can optionally take a ::SHA-256=<hex-digest> attribute at the
+- end of the file name. This is just a temporary measure for
+- backporting, in 4.2 we'll add another parameter to the method. */
+- Utf8Str strTarball;
+- Utf8Str strDigest;
+- Utf8Str strTarballAndDigest(a_bstrTarballAndDigest);
+- size_t offSha256 = strTarballAndDigest.find("::SHA-256=");
+- if (offSha256 == Utf8Str::npos)
+- strTarball = strTarballAndDigest;
+- else
+- {
+- strTarball = strTarballAndDigest.substr(0, offSha256);
+- strDigest = strTarballAndDigest.substr(offSha256 + sizeof("::SHA-256=") - 1);
+- }
+-
+- ComObjPtr<ExtPackFile> NewExtPackFile;
+- HRESULT hrc = NewExtPackFile.createObject();
+- if (SUCCEEDED(hrc))
+- hrc = NewExtPackFile->initWithFile(strTarball.c_str(), strDigest.c_str(), this, m->pVirtualBox);
+- if (SUCCEEDED(hrc))
+- NewExtPackFile.queryInterfaceTo(a_ppExtPackFile);
+-
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackManager::Uninstall(IN_BSTR a_bstrName, BOOL a_fForcedRemoval, IN_BSTR a_bstrDisplayInfo,
+- IProgress **a_ppProgress)
+-{
+- CheckComArgNotNull(a_bstrName);
+- if (a_ppProgress)
+- *a_ppProgress = NULL;
+- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- PEXTPACKUNINSTALLJOB pJob = NULL;
+- try
+- {
+- pJob = new EXTPACKUNINSTALLJOB;
+- pJob->ptrExtPackMgr = this;
+- pJob->strName = a_bstrName;
+- pJob->fForcedRemoval = a_fForcedRemoval != FALSE;
+- pJob->strDisplayInfo = a_bstrDisplayInfo;
+- hrc = pJob->ptrProgress.createObject();
+- if (SUCCEEDED(hrc))
+- {
+- Bstr bstrDescription = tr("Uninstalling extension pack");
+- hrc = pJob->ptrProgress->init(
+-#ifndef VBOX_COM_INPROC
+- m->pVirtualBox,
+-#endif
+- static_cast<IExtPackManager *>(this),
+- bstrDescription.raw(),
+- FALSE /*aCancelable*/,
+- NULL /*aId*/);
+- }
+- if (SUCCEEDED(hrc))
+- {
+- ComPtr<Progress> ptrProgress = pJob->ptrProgress;
+- int vrc = RTThreadCreate(NULL /*phThread*/, ExtPackManager::doUninstallThreadProc, pJob, 0,
+- RTTHREADTYPE_DEFAULT, 0 /*fFlags*/, "ExtPackUninst");
+- if (RT_SUCCESS(vrc))
+- {
+- pJob = NULL; /* the thread deletes it */
+- ptrProgress.queryInterfaceTo(a_ppProgress);
+- }
+- else
+- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTThreadCreate failed with %Rrc"), vrc);
+- }
+- }
+- catch (std::bad_alloc)
+- {
+- hrc = E_OUTOFMEMORY;
+- }
+- if (pJob)
+- delete pJob;
+- }
+-
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackManager::Cleanup(void)
+-{
+- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- /*
+- * Run the set-uid-to-root binary that performs the cleanup.
+- *
+- * Take the write lock to prevent conflicts with other calls to this
+- * VBoxSVC instance.
+- */
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+- hrc = runSetUidToRootHelper(NULL,
+- "cleanup",
+- "--base-dir", m->strBaseDir.c_str(),
+- (const char *)NULL);
+- }
+-
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackManager::QueryAllPlugInsForFrontend(IN_BSTR a_bstrFrontend, ComSafeArrayOut(BSTR, a_pabstrPlugInModules))
+-{
+- CheckComArgNotNull(a_bstrFrontend);
+- Utf8Str strName(a_bstrFrontend);
+- CheckComArgOutSafeArrayPointerValid(a_pabstrPlugInModules);
+- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- com::SafeArray<BSTR> saPaths((size_t)0);
+- /** @todo implement plug-ins */
+- saPaths.detachTo(ComSafeArrayOutArg(a_pabstrPlugInModules));
+- }
+- return hrc;
+-}
+-
+-STDMETHODIMP ExtPackManager::IsExtPackUsable(IN_BSTR a_bstrExtPack, BOOL *aUsable)
+-{
+- CheckComArgNotNull(a_bstrExtPack);
+- Utf8Str strExtPack(a_bstrExtPack);
+- *aUsable = isExtPackUsable(strExtPack.c_str());
+- return S_OK;
+-}
+-
+-/**
+- * Finds the success indicator string in the stderr output ofr hte helper app.
+- *
+- * @returns Pointer to the indicator.
+- * @param psz The stderr output string. Can be NULL.
+- * @param cch The size of the string.
+- */
+-static char *findSuccessIndicator(char *psz, size_t cch)
+-{
+- static const char s_szSuccessInd[] = "rcExit=RTEXITCODE_SUCCESS";
+- Assert(!cch || strlen(psz) == cch);
+- if (cch < sizeof(s_szSuccessInd) - 1)
+- return NULL;
+- char *pszInd = &psz[cch - sizeof(s_szSuccessInd) + 1];
+- if (strcmp(s_szSuccessInd, pszInd))
+- return NULL;
+- return pszInd;
+-}
+-
+-/**
+- * Runs the helper application that does the privileged operations.
+- *
+- * @returns S_OK or a failure status with error information set.
+- * @param a_pstrDisplayInfo Platform specific display info hacks.
+- * @param a_pszCommand The command to execute.
+- * @param ... The argument strings that goes along with the
+- * command. Maximum is about 16. Terminated by a
+- * NULL.
+- */
+-HRESULT ExtPackManager::runSetUidToRootHelper(Utf8Str const *a_pstrDisplayInfo, const char *a_pszCommand, ...)
+-{
+- /*
+- * Calculate the path to the helper application.
+- */
+- char szExecName[RTPATH_MAX];
+- int vrc = RTPathAppPrivateArch(szExecName, sizeof(szExecName));
+- AssertLogRelRCReturn(vrc, E_UNEXPECTED);
+-
+- vrc = RTPathAppend(szExecName, sizeof(szExecName), VBOX_EXTPACK_HELPER_NAME);
+- AssertLogRelRCReturn(vrc, E_UNEXPECTED);
+-
+- /*
+- * Convert the variable argument list to a RTProcCreate argument vector.
+- */
+- const char *apszArgs[20];
+- unsigned cArgs = 0;
+-
+- LogRel(("ExtPack: Executing '%s'", szExecName));
+- apszArgs[cArgs++] = &szExecName[0];
+-
+- if ( a_pstrDisplayInfo
+- && a_pstrDisplayInfo->isNotEmpty())
+- {
+- LogRel((" '--display-info-hack' '%s'", a_pstrDisplayInfo->c_str()));
+- apszArgs[cArgs++] = "--display-info-hack";
+- apszArgs[cArgs++] = a_pstrDisplayInfo->c_str();
+- }
+-
+- LogRel(("'%s'", a_pszCommand));
+- apszArgs[cArgs++] = a_pszCommand;
+-
+- va_list va;
+- va_start(va, a_pszCommand);
+- const char *pszLastArg;
+- for (;;)
+- {
+- AssertReturn(cArgs < RT_ELEMENTS(apszArgs) - 1, E_UNEXPECTED);
+- pszLastArg = va_arg(va, const char *);
+- if (!pszLastArg)
+- break;
+- LogRel((" '%s'", pszLastArg));
+- apszArgs[cArgs++] = pszLastArg;
+- };
+- va_end(va);
+-
+- LogRel(("\n"));
+- apszArgs[cArgs] = NULL;
+-
+- /*
+- * Create a PIPE which we attach to stderr so that we can read the error
+- * message on failure and report it back to the caller.
+- */
+- RTPIPE hPipeR;
+- RTHANDLE hStdErrPipe;
+- hStdErrPipe.enmType = RTHANDLETYPE_PIPE;
+- vrc = RTPipeCreate(&hPipeR, &hStdErrPipe.u.hPipe, RTPIPE_C_INHERIT_WRITE);
+- AssertLogRelRCReturn(vrc, E_UNEXPECTED);
+-
+- /*
+- * Spawn the process.
+- */
+- HRESULT hrc;
+- RTPROCESS hProcess;
+- vrc = RTProcCreateEx(szExecName,
+- apszArgs,
+- RTENV_DEFAULT,
+- 0 /*fFlags*/,
+- NULL /*phStdIn*/,
+- NULL /*phStdOut*/,
+- &hStdErrPipe,
+- NULL /*pszAsUser*/,
+- NULL /*pszPassword*/,
+- &hProcess);
+- if (RT_SUCCESS(vrc))
+- {
+- vrc = RTPipeClose(hStdErrPipe.u.hPipe);
+- hStdErrPipe.u.hPipe = NIL_RTPIPE;
+-
+- /*
+- * Read the pipe output until the process completes.
+- */
+- RTPROCSTATUS ProcStatus = { -42, RTPROCEXITREASON_ABEND };
+- size_t cbStdErrBuf = 0;
+- size_t offStdErrBuf = 0;
+- char *pszStdErrBuf = NULL;
+- do
+- {
+- /*
+- * Service the pipe. Block waiting for output or the pipe breaking
+- * when the process terminates.
+- */
+- if (hPipeR != NIL_RTPIPE)
+- {
+- char achBuf[1024];
+- size_t cbRead;
+- vrc = RTPipeReadBlocking(hPipeR, achBuf, sizeof(achBuf), &cbRead);
+- if (RT_SUCCESS(vrc))
+- {
+- /* grow the buffer? */
+- size_t cbBufReq = offStdErrBuf + cbRead + 1;
+- if ( cbBufReq > cbStdErrBuf
+- && cbBufReq < _256K)
+- {
+- size_t cbNew = RT_ALIGN_Z(cbBufReq, 16); // 1024
+- void *pvNew = RTMemRealloc(pszStdErrBuf, cbNew);
+- if (pvNew)
+- {
+- pszStdErrBuf = (char *)pvNew;
+- cbStdErrBuf = cbNew;
+- }
+- }
+-
+- /* append if we've got room. */
+- if (cbBufReq <= cbStdErrBuf)
+- {
+- memcpy(&pszStdErrBuf[offStdErrBuf], achBuf, cbRead);
+- offStdErrBuf = offStdErrBuf + cbRead;
+- pszStdErrBuf[offStdErrBuf] = '\0';
+- }
+- }
+- else
+- {
+- AssertLogRelMsg(vrc == VERR_BROKEN_PIPE, ("%Rrc\n", vrc));
+- RTPipeClose(hPipeR);
+- hPipeR = NIL_RTPIPE;
+- }
+- }
+-
+- /*
+- * Service the process. Block if we have no pipe.
+- */
+- if (hProcess != NIL_RTPROCESS)
+- {
+- vrc = RTProcWait(hProcess,
+- hPipeR == NIL_RTPIPE ? RTPROCWAIT_FLAGS_BLOCK : RTPROCWAIT_FLAGS_NOBLOCK,
+- &ProcStatus);
+- if (RT_SUCCESS(vrc))
+- hProcess = NIL_RTPROCESS;
+- else
+- AssertLogRelMsgStmt(vrc == VERR_PROCESS_RUNNING, ("%Rrc\n", vrc), hProcess = NIL_RTPROCESS);
+- }
+- } while ( hPipeR != NIL_RTPIPE
+- || hProcess != NIL_RTPROCESS);
+-
+- LogRel(("ExtPack: enmReason=%d iStatus=%d stderr='%s'\n",
+- ProcStatus.enmReason, ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : ""));
+-
+- /*
+- * Look for rcExit=RTEXITCODE_SUCCESS at the end of the error output,
+- * cut it as it is only there to attest the success.
+- */
+- if (offStdErrBuf > 0)
+- {
+- RTStrStripR(pszStdErrBuf);
+- offStdErrBuf = strlen(pszStdErrBuf);
+- }
+-
+- char *pszSuccessInd = findSuccessIndicator(pszStdErrBuf, offStdErrBuf);
+- if (pszSuccessInd)
+- {
+- *pszSuccessInd = '\0';
+- offStdErrBuf = pszSuccessInd - pszStdErrBuf;
+- }
+- else if ( ProcStatus.enmReason == RTPROCEXITREASON_NORMAL
+- && ProcStatus.iStatus == 0)
+- ProcStatus.iStatus = offStdErrBuf ? 667 : 666;
+-
+- /*
+- * Compose the status code and, on failure, error message.
+- */
+- if ( ProcStatus.enmReason == RTPROCEXITREASON_NORMAL
+- && ProcStatus.iStatus == 0)
+- hrc = S_OK;
+- else if (ProcStatus.enmReason == RTPROCEXITREASON_NORMAL)
+- {
+- AssertMsg(ProcStatus.iStatus != 0, ("%s\n", pszStdErrBuf));
+- hrc = setError(E_FAIL, tr("The installer failed with exit code %d: %s"),
+- ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : "");
+- }
+- else if (ProcStatus.enmReason == RTPROCEXITREASON_SIGNAL)
+- hrc = setError(E_UNEXPECTED, tr("The installer was killed by signal #d (stderr: %s)"),
+- ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : "");
+- else if (ProcStatus.enmReason == RTPROCEXITREASON_ABEND)
+- hrc = setError(E_UNEXPECTED, tr("The installer aborted abnormally (stderr: %s)"),
+- offStdErrBuf ? pszStdErrBuf : "");
+- else
+- hrc = setError(E_UNEXPECTED, tr("internal error: enmReason=%d iStatus=%d stderr='%s'"),
+- ProcStatus.enmReason, ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : "");
+-
+- RTMemFree(pszStdErrBuf);
+- }
+- else
+- hrc = setError(VBOX_E_IPRT_ERROR, tr("Failed to launch the helper application '%s' (%Rrc)"), szExecName, vrc);
+-
+- RTPipeClose(hPipeR);
+- RTPipeClose(hStdErrPipe.u.hPipe);
+-
+- return hrc;
+-}
+-
+-/**
+- * Finds an installed extension pack.
+- *
+- * @returns Pointer to the extension pack if found, NULL if not. (No reference
+- * counting problem here since the caller must be holding the lock.)
+- * @param a_pszName The name of the extension pack.
+- */
+-ExtPack *ExtPackManager::findExtPack(const char *a_pszName)
+-{
+- size_t cchName = strlen(a_pszName);
+-
+- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin();
+- it != m->llInstalledExtPacks.end();
+- it++)
+- {
+- ExtPack::Data *pExtPackData = (*it)->m;
+- if ( pExtPackData
+- && pExtPackData->Desc.strName.length() == cchName
+- && pExtPackData->Desc.strName.equalsIgnoreCase(a_pszName))
+- return (*it);
+- }
+- return NULL;
+-}
+-
+-/**
+- * Removes an installed extension pack from the internal list.
+- *
+- * The package is expected to exist!
+- *
+- * @param a_pszName The name of the extension pack.
+- */
+-void ExtPackManager::removeExtPack(const char *a_pszName)
+-{
+- size_t cchName = strlen(a_pszName);
+-
+- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin();
+- it != m->llInstalledExtPacks.end();
+- it++)
+- {
+- ExtPack::Data *pExtPackData = (*it)->m;
+- if ( pExtPackData
+- && pExtPackData->Desc.strName.length() == cchName
+- && pExtPackData->Desc.strName.equalsIgnoreCase(a_pszName))
+- {
+- m->llInstalledExtPacks.erase(it);
+- return;
+- }
+- }
+- AssertMsgFailed(("%s\n", a_pszName));
+-}
+-
+-/**
+- * Refreshes the specified extension pack.
+- *
+- * This may remove the extension pack from the list, so any non-smart pointers
+- * to the extension pack object may become invalid.
+- *
+- * @returns S_OK and *a_ppExtPack on success, COM status code and error
+- * message on failure. Note that *a_ppExtPack can be NULL.
+- *
+- * @param a_pszName The extension to update..
+- * @param a_fUnusableIsError If @c true, report an unusable extension pack
+- * as an error.
+- * @param a_ppExtPack Where to store the pointer to the extension
+- * pack of it is still around after the refresh.
+- * This is optional.
+- *
+- * @remarks Caller holds the extension manager lock.
+- * @remarks Only called in VBoxSVC.
+- */
+-HRESULT ExtPackManager::refreshExtPack(const char *a_pszName, bool a_fUnusableIsError, ExtPack **a_ppExtPack)
+-{
+- Assert(m->pVirtualBox != NULL); /* Only called from VBoxSVC. */
+-
+- HRESULT hrc;
+- ExtPack *pExtPack = findExtPack(a_pszName);
+- if (pExtPack)
+- {
+- /*
+- * Refresh existing object.
+- */
+- bool fCanDelete;
+- hrc = pExtPack->refresh(&fCanDelete);
+- if (SUCCEEDED(hrc))
+- {
+- if (fCanDelete)
+- {
+- removeExtPack(a_pszName);
+- pExtPack = NULL;
+- }
+- }
+- }
+- else
+- {
+- /*
+- * Do this check here, otherwise VBoxExtPackCalcDir() will fail with a strange
+- * error.
+- */
+- bool fValid = VBoxExtPackIsValidName(a_pszName);
+- if (!fValid)
+- return setError(E_FAIL, "Invalid extension pack name specified");
+-
+- /*
+- * Does the dir exist? Make some special effort to deal with case
+- * sensitivie file systems (a_pszName is case insensitive and mangled).
+- */
+- char szDir[RTPATH_MAX];
+- int vrc = VBoxExtPackCalcDir(szDir, sizeof(szDir), m->strBaseDir.c_str(), a_pszName);
+- AssertLogRelRCReturn(vrc, E_FAIL);
+-
+- RTDIRENTRYEX Entry;
+- RTFSOBJINFO ObjInfo;
+- vrc = RTPathQueryInfoEx(szDir, &ObjInfo, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
+- bool fExists = RT_SUCCESS(vrc) && RTFS_IS_DIRECTORY(ObjInfo.Attr.fMode);
+- if (!fExists)
+- {
+- PRTDIR pDir;
+- vrc = RTDirOpen(&pDir, m->strBaseDir.c_str());
+- if (RT_SUCCESS(vrc))
+- {
+- const char *pszMangledName = RTPathFilename(szDir);
+- for (;;)
+- {
+- vrc = RTDirReadEx(pDir, &Entry, NULL /*pcbDirEntry*/, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
+- if (RT_FAILURE(vrc))
+- {
+- AssertLogRelMsg(vrc == VERR_NO_MORE_FILES, ("%Rrc\n", vrc));
+- break;
+- }
+- if ( RTFS_IS_DIRECTORY(Entry.Info.Attr.fMode)
+- && !RTStrICmp(Entry.szName, pszMangledName))
+- {
+- /*
+- * The installed extension pack has a uses different case.
+- * Update the name and directory variables.
+- */
+- vrc = RTPathJoin(szDir, sizeof(szDir), m->strBaseDir.c_str(), Entry.szName); /* not really necessary */
+- AssertLogRelRCReturnStmt(vrc, RTDirClose(pDir), E_UNEXPECTED);
+- a_pszName = Entry.szName;
+- fExists = true;
+- break;
+- }
+- }
+- RTDirClose(pDir);
+- }
+- }
+- if (fExists)
+- {
+- /*
+- * We've got something, create a new extension pack object for it.
+- */
+- ComObjPtr<ExtPack> ptrNewExtPack;
+- hrc = ptrNewExtPack.createObject();
+- if (SUCCEEDED(hrc))
+- hrc = ptrNewExtPack->initWithDir(m->enmContext, a_pszName, szDir);
+- if (SUCCEEDED(hrc))
+- {
+- m->llInstalledExtPacks.push_back(ptrNewExtPack);
+- if (ptrNewExtPack->m->fUsable)
+- LogRel(("ExtPackManager: Found extension pack '%s'.\n", a_pszName));
+- else
+- LogRel(("ExtPackManager: Found bad extension pack '%s': %s\n",
+- a_pszName, ptrNewExtPack->m->strWhyUnusable.c_str() ));
+- pExtPack = ptrNewExtPack;
+- }
+- }
+- else
+- hrc = S_OK;
+- }
+-
+- /*
+- * Report error if not usable, if that is desired.
+- */
+- if ( SUCCEEDED(hrc)
+- && pExtPack
+- && a_fUnusableIsError
+- && !pExtPack->m->fUsable)
+- hrc = setError(E_FAIL, "%s", pExtPack->m->strWhyUnusable.c_str());
+-
+- if (a_ppExtPack)
+- *a_ppExtPack = pExtPack;
+- return hrc;
+-}
+-
+-/**
+- * Thread wrapper around doInstall.
+- *
+- * @returns VINF_SUCCESS (ignored)
+- * @param hThread The thread handle (ignored).
+- * @param pvJob The job structure.
+- */
+-/*static*/ DECLCALLBACK(int) ExtPackManager::doInstallThreadProc(RTTHREAD hThread, void *pvJob)
+-{
+- PEXTPACKINSTALLJOB pJob = (PEXTPACKINSTALLJOB)pvJob;
+- HRESULT hrc = pJob->ptrExtPackMgr->doInstall(pJob->ptrExtPackFile, pJob->fReplace, &pJob->strDisplayInfo);
+- pJob->ptrProgress->notifyComplete(hrc);
+- delete pJob;
+-
+- NOREF(hThread);
+- return VINF_SUCCESS;
+-}
+-
+-/**
+- * Worker for IExtPackFile::Install.
+- *
+- * Called on a worker thread via doInstallThreadProc.
+- *
+- * @returns COM status code.
+- * @param a_pExtPackFile The extension pack file, caller checks that
+- * it's usable.
+- * @param a_fReplace Whether to replace any existing extpack or just
+- * fail.
+- * @param a_pstrDisplayInfo Host specific display information hacks.
+- * @param a_ppProgress Where to return a progress object some day. Can
+- * be NULL.
+- */
+-HRESULT ExtPackManager::doInstall(ExtPackFile *a_pExtPackFile, bool a_fReplace, Utf8Str const *a_pstrDisplayInfo)
+-{
+- AssertReturn(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON, E_UNEXPECTED);
+- RTCString const * const pStrName = &a_pExtPackFile->m->Desc.strName;
+- RTCString const * const pStrTarball = &a_pExtPackFile->m->strExtPackFile;
+- RTCString const * const pStrTarballDigest = &a_pExtPackFile->m->strDigest;
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- /*
+- * Refresh the data we have on the extension pack as it
+- * may be made stale by direct meddling or some other user.
+- */
+- ExtPack *pExtPack;
+- hrc = refreshExtPack(pStrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack);
+- if (SUCCEEDED(hrc))
+- {
+- if (pExtPack && a_fReplace)
+- hrc = pExtPack->callUninstallHookAndClose(m->pVirtualBox, false /*a_ForcedRemoval*/);
+- else if (pExtPack)
+- hrc = setError(E_FAIL,
+- tr("Extension pack '%s' is already installed."
+- " In case of a reinstallation, please uninstall it first"),
+- pStrName->c_str());
+- }
+- if (SUCCEEDED(hrc))
+- {
+- /*
+- * Run the privileged helper binary that performs the actual
+- * installation. Then create an object for the packet (we do this
+- * even on failure, to be on the safe side).
+- */
+- hrc = runSetUidToRootHelper(a_pstrDisplayInfo,
+- "install",
+- "--base-dir", m->strBaseDir.c_str(),
+- "--cert-dir", m->strCertificatDirPath.c_str(),
+- "--name", pStrName->c_str(),
+- "--tarball", pStrTarball->c_str(),
+- "--sha-256", pStrTarballDigest->c_str(),
+- pExtPack ? "--replace" : (const char *)NULL,
+- (const char *)NULL);
+- if (SUCCEEDED(hrc))
+- {
+- hrc = refreshExtPack(pStrName->c_str(), true /*a_fUnusableIsError*/, &pExtPack);
+- if (SUCCEEDED(hrc) && pExtPack)
+- {
+- RTERRINFOSTATIC ErrInfo;
+- RTErrInfoInitStatic(&ErrInfo);
+- pExtPack->callInstalledHook(m->pVirtualBox, &autoLock, &ErrInfo.Core);
+- if (RT_SUCCESS(ErrInfo.Core.rc))
+- LogRel(("ExtPackManager: Successfully installed extension pack '%s'.\n", pStrName->c_str()));
+- else
+- {
+- LogRel(("ExtPackManager: Installated hook for '%s' failed: %Rrc - %s\n",
+- pStrName->c_str(), ErrInfo.Core.rc, ErrInfo.Core.pszMsg));
+-
+- /*
+- * Uninstall the extpack if the error indicates that.
+- */
+- if (ErrInfo.Core.rc == VERR_EXTPACK_UNSUPPORTED_HOST_UNINSTALL)
+- runSetUidToRootHelper(a_pstrDisplayInfo,
+- "uninstall",
+- "--base-dir", m->strBaseDir.c_str(),
+- "--name", pStrName->c_str(),
+- "--forced",
+- (const char *)NULL);
+- hrc = setError(E_FAIL, tr("The installation hook failed: %Rrc - %s"),
+- ErrInfo.Core.rc, ErrInfo.Core.pszMsg);
+- }
+- }
+- else if (SUCCEEDED(hrc))
+- hrc = setError(E_FAIL, tr("Installing extension pack '%s' failed under mysterious circumstances"),
+- pStrName->c_str());
+- }
+- else
+- {
+- ErrorInfoKeeper Eik;
+- refreshExtPack(pStrName->c_str(), false /*a_fUnusableIsError*/, NULL);
+- }
+- }
+-
+- /*
+- * Do VirtualBoxReady callbacks now for any freshly installed
+- * extension pack (old ones will not be called).
+- */
+- if (m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON)
+- {
+- autoLock.release();
+- callAllVirtualBoxReadyHooks();
+- }
+- }
+-
+- return hrc;
+-}
+-
+-/**
+- * Thread wrapper around doUninstall.
+- *
+- * @returns VINF_SUCCESS (ignored)
+- * @param hThread The thread handle (ignored).
+- * @param pvJob The job structure.
+- */
+-/*static*/ DECLCALLBACK(int) ExtPackManager::doUninstallThreadProc(RTTHREAD hThread, void *pvJob)
+-{
+- PEXTPACKUNINSTALLJOB pJob = (PEXTPACKUNINSTALLJOB)pvJob;
+- HRESULT hrc = pJob->ptrExtPackMgr->doUninstall(&pJob->strName, pJob->fForcedRemoval, &pJob->strDisplayInfo);
+- pJob->ptrProgress->notifyComplete(hrc);
+- delete pJob;
+-
+- NOREF(hThread);
+- return VINF_SUCCESS;
+-}
+-
+-/**
+- * Worker for IExtPackManager::Uninstall.
+- *
+- * Called on a worker thread via doUninstallThreadProc.
+- *
+- * @returns COM status code.
+- * @param a_pstrName The name of the extension pack to uninstall.
+- * @param a_fForcedRemoval Whether to be skip and ignore certain bits of
+- * the extpack feedback. To deal with misbehaving
+- * extension pack hooks.
+- * @param a_pstrDisplayInfo Host specific display information hacks.
+- */
+-HRESULT ExtPackManager::doUninstall(Utf8Str const *a_pstrName, bool a_fForcedRemoval, Utf8Str const *a_pstrDisplayInfo)
+-{
+- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON);
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- /*
+- * Refresh the data we have on the extension pack as it may be made
+- * stale by direct meddling or some other user.
+- */
+- ExtPack *pExtPack;
+- hrc = refreshExtPack(a_pstrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack);
+- if (SUCCEEDED(hrc))
+- {
+- if (!pExtPack)
+- {
+- LogRel(("ExtPackManager: Extension pack '%s' is not installed, so nothing to uninstall.\n", a_pstrName->c_str()));
+- hrc = S_OK; /* nothing to uninstall */
+- }
+- else
+- {
+- /*
+- * Call the uninstall hook and unload the main dll.
+- */
+- hrc = pExtPack->callUninstallHookAndClose(m->pVirtualBox, a_fForcedRemoval);
+- if (SUCCEEDED(hrc))
+- {
+- /*
+- * Run the set-uid-to-root binary that performs the
+- * uninstallation. Then refresh the object.
+- *
+- * This refresh is theorically subject to races, but it's of
+- * the don't-do-that variety.
+- */
+- const char *pszForcedOpt = a_fForcedRemoval ? "--forced" : NULL;
+- hrc = runSetUidToRootHelper(a_pstrDisplayInfo,
+- "uninstall",
+- "--base-dir", m->strBaseDir.c_str(),
+- "--name", a_pstrName->c_str(),
+- pszForcedOpt, /* Last as it may be NULL. */
+- (const char *)NULL);
+- if (SUCCEEDED(hrc))
+- {
+- hrc = refreshExtPack(a_pstrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack);
+- if (SUCCEEDED(hrc))
+- {
+- if (!pExtPack)
+- LogRel(("ExtPackManager: Successfully uninstalled extension pack '%s'.\n", a_pstrName->c_str()));
+- else
+- hrc = setError(E_FAIL,
+- tr("Uninstall extension pack '%s' failed under mysterious circumstances"),
+- a_pstrName->c_str());
+- }
+- }
+- else
+- {
+- ErrorInfoKeeper Eik;
+- refreshExtPack(a_pstrName->c_str(), false /*a_fUnusableIsError*/, NULL);
+- }
+- }
+- }
+- }
+-
+- /*
+- * Do VirtualBoxReady callbacks now for any freshly installed
+- * extension pack (old ones will not be called).
+- */
+- if (m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON)
+- {
+- autoLock.release();
+- callAllVirtualBoxReadyHooks();
+- }
+- }
+-
+- return hrc;
+-}
+-
+-
+-/**
+- * Calls the pfnVirtualBoxReady hook for all working extension packs.
+- *
+- * @remarks The caller must not hold any locks.
+- */
+-void ExtPackManager::callAllVirtualBoxReadyHooks(void)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (FAILED(hrc))
+- return;
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+- ComPtr<ExtPackManager> ptrSelfRef = this;
+-
+- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin();
+- it != m->llInstalledExtPacks.end();
+- /* advancing below */)
+- {
+- if ((*it)->callVirtualBoxReadyHook(m->pVirtualBox, &autoLock))
+- it = m->llInstalledExtPacks.begin();
+- else
+- it++;
+- }
+-}
+-
+-/**
+- * Calls the pfnConsoleReady hook for all working extension packs.
+- *
+- * @param a_pConsole The console interface.
+- * @remarks The caller must not hold any locks.
+- */
+-void ExtPackManager::callAllConsoleReadyHooks(IConsole *a_pConsole)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (FAILED(hrc))
+- return;
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+- ComPtr<ExtPackManager> ptrSelfRef = this;
+-
+- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin();
+- it != m->llInstalledExtPacks.end();
+- /* advancing below */)
+- {
+- if ((*it)->callConsoleReadyHook(a_pConsole, &autoLock))
+- it = m->llInstalledExtPacks.begin();
+- else
+- it++;
+- }
+-}
+-
+-/**
+- * Calls the pfnVMCreated hook for all working extension packs.
+- *
+- * @param a_pMachine The machine interface of the new VM.
+- */
+-void ExtPackManager::callAllVmCreatedHooks(IMachine *a_pMachine)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (FAILED(hrc))
+- return;
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */
+- ExtPackList llExtPacks = m->llInstalledExtPacks;
+-
+- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++)
+- (*it)->callVmCreatedHook(m->pVirtualBox, a_pMachine, &autoLock);
+-}
+-
+-/**
+- * Calls the pfnVMConfigureVMM hook for all working extension packs.
+- *
+- * @returns VBox status code. Stops on the first failure, expecting the caller
+- * to signal this to the caller of the CFGM constructor.
+- * @param a_pConsole The console interface for the VM.
+- * @param a_pVM The VM handle.
+- */
+-int ExtPackManager::callAllVmConfigureVmmHooks(IConsole *a_pConsole, PVM a_pVM)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (FAILED(hrc))
+- return Global::vboxStatusCodeFromCOM(hrc);
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */
+- ExtPackList llExtPacks = m->llInstalledExtPacks;
+-
+- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++)
+- {
+- int vrc;
+- (*it)->callVmConfigureVmmHook(a_pConsole, a_pVM, &autoLock, &vrc);
+- if (RT_FAILURE(vrc))
+- return vrc;
+- }
+-
+- return VINF_SUCCESS;
+-}
+-
+-/**
+- * Calls the pfnVMPowerOn hook for all working extension packs.
+- *
+- * @returns VBox status code. Stops on the first failure, expecting the caller
+- * to not power on the VM.
+- * @param a_pConsole The console interface for the VM.
+- * @param a_pVM The VM handle.
+- */
+-int ExtPackManager::callAllVmPowerOnHooks(IConsole *a_pConsole, PVM a_pVM)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (FAILED(hrc))
+- return Global::vboxStatusCodeFromCOM(hrc);
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */
+- ExtPackList llExtPacks = m->llInstalledExtPacks;
+-
+- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++)
+- {
+- int vrc;
+- (*it)->callVmPowerOnHook(a_pConsole, a_pVM, &autoLock, &vrc);
+- if (RT_FAILURE(vrc))
+- return vrc;
+- }
+-
+- return VINF_SUCCESS;
+-}
+-
+-/**
+- * Calls the pfnVMPowerOff hook for all working extension packs.
+- *
+- * @param a_pConsole The console interface for the VM.
+- * @param a_pVM The VM handle. Can be NULL.
+- */
+-void ExtPackManager::callAllVmPowerOffHooks(IConsole *a_pConsole, PVM a_pVM)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (FAILED(hrc))
+- return;
+- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */
+- ExtPackList llExtPacks = m->llInstalledExtPacks;
+-
+- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++)
+- (*it)->callVmPowerOffHook(a_pConsole, a_pVM, &autoLock);
+-}
+-
+-
+-/**
+- * Checks that the specified extension pack contains a VRDE module and that it
+- * is shipshape.
+- *
+- * @returns S_OK if ok, appropriate failure status code with details.
+- * @param a_pstrExtPack The name of the extension pack.
+- */
+-HRESULT ExtPackManager::checkVrdeExtPack(Utf8Str const *a_pstrExtPack)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- ExtPack *pExtPack = findExtPack(a_pstrExtPack->c_str());
+- if (pExtPack)
+- hrc = pExtPack->checkVrde();
+- else
+- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("No extension pack by the name '%s' was found"), a_pstrExtPack->c_str());
+- }
+-
+- return hrc;
+-}
+-
+-/**
+- * Gets the full path to the VRDE library of the specified extension pack.
+- *
+- * This will do extacly the same as checkVrdeExtPack and then resolve the
+- * library path.
+- *
+- * @returns S_OK if a path is returned, COM error status and message return if
+- * not.
+- * @param a_pstrExtPack The extension pack.
+- * @param a_pstrVrdeLibrary Where to return the path.
+- */
+-int ExtPackManager::getVrdeLibraryPathForExtPack(Utf8Str const *a_pstrExtPack, Utf8Str *a_pstrVrdeLibrary)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- ExtPack *pExtPack = findExtPack(a_pstrExtPack->c_str());
+- if (pExtPack)
+- hrc = pExtPack->getVrdpLibraryName(a_pstrVrdeLibrary);
+- else
+- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("No extension pack by the name '%s' was found"), a_pstrExtPack->c_str());
+- }
+-
+- return hrc;
+-}
+-
+-/**
+- * Gets the name of the default VRDE extension pack.
+- *
+- * @returns S_OK or some COM error status on red tape failure.
+- * @param a_pstrExtPack Where to return the extension pack name. Returns
+- * empty if no extension pack wishes to be the default
+- * VRDP provider.
+- */
+-HRESULT ExtPackManager::getDefaultVrdeExtPack(Utf8Str *a_pstrExtPack)
+-{
+- a_pstrExtPack->setNull();
+-
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (SUCCEEDED(hrc))
+- {
+- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin();
+- it != m->llInstalledExtPacks.end();
+- it++)
+- {
+- if ((*it)->wantsToBeDefaultVrde())
+- {
+- *a_pstrExtPack = (*it)->m->Desc.strName;
+- break;
+- }
+- }
+- }
+- return hrc;
+-}
+-
+-/**
+- * Checks if an extension pack is (present and) usable.
+- *
+- * @returns @c true if it is, otherwise @c false.
+- * @param a_pszExtPack The name of the extension pack.
+- */
+-bool ExtPackManager::isExtPackUsable(const char *a_pszExtPack)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (FAILED(hrc))
+- return false;
+- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- ExtPack *pExtPack = findExtPack(a_pszExtPack);
+- return pExtPack != NULL
+- && pExtPack->m->fUsable;
+-}
+-
+-/**
+- * Dumps all extension packs to the release log.
+- */
+-void ExtPackManager::dumpAllToReleaseLog(void)
+-{
+- AutoCaller autoCaller(this);
+- HRESULT hrc = autoCaller.rc();
+- if (FAILED(hrc))
+- return;
+- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
+-
+- LogRel(("Installed Extension Packs:\n"));
+- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin();
+- it != m->llInstalledExtPacks.end();
+- it++)
+- {
+- ExtPack::Data *pExtPackData = (*it)->m;
+- if (pExtPackData)
+- {
+- if (pExtPackData->fUsable)
+- LogRel((" %s (Version: %s r%u%s%s; VRDE Module: %s)\n",
+- pExtPackData->Desc.strName.c_str(),
+- pExtPackData->Desc.strVersion.c_str(),
+- pExtPackData->Desc.uRevision,
+- pExtPackData->Desc.strEdition.isEmpty() ? "" : " ",
+- pExtPackData->Desc.strEdition.c_str(),
+- pExtPackData->Desc.strVrdeModule.c_str() ));
+- else
+- LogRel((" %s (Version: %s r%u%s%s; VRDE Module: %s unusable because of '%s')\n",
+- pExtPackData->Desc.strName.c_str(),
+- pExtPackData->Desc.strVersion.c_str(),
+- pExtPackData->Desc.uRevision,
+- pExtPackData->Desc.strEdition.isEmpty() ? "" : " ",
+- pExtPackData->Desc.strEdition.c_str(),
+- pExtPackData->Desc.strVrdeModule.c_str(),
+- pExtPackData->strWhyUnusable.c_str() ));
+- }
+- else
+- LogRel((" pExtPackData is NULL\n"));
+- }
+-
+- if (!m->llInstalledExtPacks.size())
+- LogRel((" None installed!\n"));
+-}
+-
+-/* vi: set tabstop=4 shiftwidth=4 expandtab: */
+--- VirtualBox-4.1.18.orig/src/VBox/Main/src-all/ExtPackUtil.cpp 2012-06-20 10:17:34.000000000 -0300
++++ /dev/null 2012-07-24 14:48:18.638572110 -0300
+@@ -1,1385 +0,0 @@
+-/* $Id: ExtPackUtil.cpp $ */
+-/** @file
+- * VirtualBox Main - Extension Pack Utilities and definitions, VBoxC, VBoxSVC, ++.
+- */
+-
+-/*
+- * Copyright (C) 2010-2012 Oracle Corporation
+- *
+- * This file is part of VirtualBox Open Source Edition (OSE), as
+- * available from http://www.virtualbox.org. This file is free software;
+- * you can redistribute it and/or modify it under the terms of the GNU
+- * General Public License (GPL) as published by the Free Software
+- * Foundation, in version 2 as it comes in the "COPYING" file of the
+- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+- */
+-
+-
+-/*******************************************************************************
+-* Header Files *
+-*******************************************************************************/
+-#include "../include/ExtPackUtil.h"
+-
+-#include <iprt/ctype.h>
+-#include <iprt/dir.h>
+-#include <iprt/file.h>
+-#include <iprt/manifest.h>
+-#include <iprt/param.h>
+-#include <iprt/path.h>
+-#include <iprt/sha.h>
+-#include <iprt/string.h>
+-#include <iprt/vfs.h>
+-#include <iprt/tar.h>
+-#include <iprt/zip.h>
+-#include <iprt/cpp/xml.h>
+-
+-#include <VBox/log.h>
+-
+-
+-/**
+- * Worker for VBoxExtPackLoadDesc that loads the plug-in descriptors.
+- *
+- * @returns Same as VBoxExtPackLoadDesc.
+- * @param pVBoxExtPackElm
+- * @param pcPlugIns Where to return the number of plug-ins in the
+- * array.
+- * @param paPlugIns Where to return the plug-in descriptor array.
+- * (RTMemFree it even on failure)
+- */
+-static RTCString *
+-vboxExtPackLoadPlugInDescs(const xml::ElementNode *pVBoxExtPackElm,
+- uint32_t *pcPlugIns, PVBOXEXTPACKPLUGINDESC *paPlugIns)
+-{
+- *pcPlugIns = 0;
+- *paPlugIns = NULL;
+-
+- /** @todo plug-ins */
+- NOREF(pVBoxExtPackElm);
+-
+- return NULL;
+-}
+-
+-/**
+- * Clears the extension pack descriptor.
+- *
+- * @param a_pExtPackDesc The descriptor to clear.
+- */
+-static void vboxExtPackClearDesc(PVBOXEXTPACKDESC a_pExtPackDesc)
+-{
+- a_pExtPackDesc->strName.setNull();
+- a_pExtPackDesc->strDescription.setNull();
+- a_pExtPackDesc->strVersion.setNull();
+- a_pExtPackDesc->strEdition.setNull();
+- a_pExtPackDesc->uRevision = 0;
+- a_pExtPackDesc->strMainModule.setNull();
+- a_pExtPackDesc->strVrdeModule.setNull();
+- a_pExtPackDesc->cPlugIns = 0;
+- a_pExtPackDesc->paPlugIns = NULL;
+- a_pExtPackDesc->fShowLicense = false;
+-}
+-
+-/**
+- * Initializes an extension pack descriptor so that it's safe to call free on
+- * it whatever happens later on.
+- *
+- * @param a_pExtPackDesc The descirptor to initialize.
+- */
+-void VBoxExtPackInitDesc(PVBOXEXTPACKDESC a_pExtPackDesc)
+-{
+- vboxExtPackClearDesc(a_pExtPackDesc);
+-}
+-
+-
+-/**
+- * Load the extension pack descriptor from an XML document.
+- *
+- * @returns NULL on success, pointer to an error message on failure (caller
+- * deletes it).
+- * @param a_pDoc Pointer to the the XML document.
+- * @param a_pExtPackDesc Where to store the extension pack descriptor.
+- */
+-static RTCString *vboxExtPackLoadDescFromDoc(xml::Document *a_pDoc, PVBOXEXTPACKDESC a_pExtPackDesc)
+-{
+- /*
+- * Get the main element and check its version.
+- */
+- const xml::ElementNode *pVBoxExtPackElm = a_pDoc->getRootElement();
+- if ( !pVBoxExtPackElm
+- || strcmp(pVBoxExtPackElm->getName(), "VirtualBoxExtensionPack") != 0)
+- return new RTCString("No VirtualBoxExtensionPack element");
+-
+- RTCString strFormatVersion;
+- if (!pVBoxExtPackElm->getAttributeValue("version", strFormatVersion))
+- return new RTCString("Missing format version");
+- if (!strFormatVersion.equals("1.0"))
+- return &(new RTCString("Unsupported format version: "))->append(strFormatVersion);
+-
+- /*
+- * Read and validate mandatory bits.
+- */
+- const xml::ElementNode *pNameElm = pVBoxExtPackElm->findChildElement("Name");
+- if (!pNameElm)
+- return new RTCString("The 'Name' element is missing");
+- const char *pszName = pNameElm->getValue();
+- if (!VBoxExtPackIsValidName(pszName))
+- return &(new RTCString("Invalid name: "))->append(pszName);
+-
+- const xml::ElementNode *pDescElm = pVBoxExtPackElm->findChildElement("Description");
+- if (!pDescElm)
+- return new RTCString("The 'Description' element is missing");
+- const char *pszDesc = pDescElm->getValue();
+- if (!pszDesc || *pszDesc == '\0')
+- return new RTCString("The 'Description' element is empty");
+- if (strpbrk(pszDesc, "\n\r\t\v\b") != NULL)
+- return new RTCString("The 'Description' must not contain control characters");
+-
+- const xml::ElementNode *pVersionElm = pVBoxExtPackElm->findChildElement("Version");
+- if (!pVersionElm)
+- return new RTCString("The 'Version' element is missing");
+- const char *pszVersion = pVersionElm->getValue();
+- if (!pszVersion || *pszVersion == '\0')
+- return new RTCString("The 'Version' element is empty");
+- if (!VBoxExtPackIsValidVersionString(pszVersion))
+- return &(new RTCString("Invalid version string: "))->append(pszVersion);
+-
+- uint32_t uRevision;
+- if (!pVersionElm->getAttributeValue("revision", uRevision))
+- uRevision = 0;
+-
+- const char *pszEdition;
+- if (!pVersionElm->getAttributeValue("edition", pszEdition))
+- pszEdition = "";
+- if (!VBoxExtPackIsValidEditionString(pszEdition))
+- return &(new RTCString("Invalid edition string: "))->append(pszEdition);
+-
+- const xml::ElementNode *pMainModuleElm = pVBoxExtPackElm->findChildElement("MainModule");
+- if (!pMainModuleElm)
+- return new RTCString("The 'MainModule' element is missing");
+- const char *pszMainModule = pMainModuleElm->getValue();
+- if (!pszMainModule || *pszMainModule == '\0')
+- return new RTCString("The 'MainModule' element is empty");
+- if (!VBoxExtPackIsValidModuleString(pszMainModule))
+- return &(new RTCString("Invalid main module string: "))->append(pszMainModule);
+-
+- /*
+- * The VRDE module, optional.
+- * Accept both none and empty as tokens of no VRDE module.
+- */
+- const char *pszVrdeModule = NULL;
+- const xml::ElementNode *pVrdeModuleElm = pVBoxExtPackElm->findChildElement("VRDEModule");
+- if (pVrdeModuleElm)
+- {
+- pszVrdeModule = pVrdeModuleElm->getValue();
+- if (!pszVrdeModule || *pszVrdeModule == '\0')
+- pszVrdeModule = NULL;
+- else if (!VBoxExtPackIsValidModuleString(pszVrdeModule))
+- return &(new RTCString("Invalid VRDE module string: "))->append(pszVrdeModule);
+- }
+-
+- /*
+- * Whether to show the license, optional. (presense is enough here)
+- */
+- const xml::ElementNode *pShowLicenseElm = pVBoxExtPackElm->findChildElement("ShowLicense");
+- bool fShowLicense = pShowLicenseElm != NULL;
+-
+- /*
+- * Parse plug-in descriptions (last because of the manual memory management).
+- */
+- uint32_t cPlugIns = 0;
+- PVBOXEXTPACKPLUGINDESC paPlugIns = NULL;
+- RTCString *pstrRet = vboxExtPackLoadPlugInDescs(pVBoxExtPackElm, &cPlugIns, &paPlugIns);
+- if (pstrRet)
+- {
+- RTMemFree(paPlugIns);
+- return pstrRet;
+- }
+-
+- /*
+- * Everything seems fine, fill in the return values and return successfully.
+- */
+- a_pExtPackDesc->strName = pszName;
+- a_pExtPackDesc->strDescription = pszDesc;
+- a_pExtPackDesc->strVersion = pszVersion;
+- a_pExtPackDesc->strEdition = pszEdition;
+- a_pExtPackDesc->uRevision = uRevision;
+- a_pExtPackDesc->strMainModule = pszMainModule;
+- a_pExtPackDesc->strVrdeModule = pszVrdeModule;
+- a_pExtPackDesc->cPlugIns = cPlugIns;
+- a_pExtPackDesc->paPlugIns = paPlugIns;
+- a_pExtPackDesc->fShowLicense = fShowLicense;
+-
+- return NULL;
+-}
+-
+-/**
+- * Reads the extension pack descriptor.
+- *
+- * @returns NULL on success, pointer to an error message on failure (caller
+- * deletes it).
+- * @param a_pszDir The directory containing the description file.
+- * @param a_pExtPackDesc Where to store the extension pack descriptor.
+- * @param a_pObjInfo Where to store the object info for the file (unix
+- * attribs). Optional.
+- */
+-RTCString *VBoxExtPackLoadDesc(const char *a_pszDir, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo)
+-{
+- vboxExtPackClearDesc(a_pExtPackDesc);
+-
+- /*
+- * Validate, open and parse the XML file.
+- */
+- char szFilePath[RTPATH_MAX];
+- int vrc = RTPathJoin(szFilePath, sizeof(szFilePath), a_pszDir, VBOX_EXTPACK_DESCRIPTION_NAME);
+- if (RT_FAILURE(vrc))
+- return new RTCString("RTPathJoin failed with %Rrc", vrc);
+-
+- RTFSOBJINFO ObjInfo;
+- vrc = RTPathQueryInfoEx(szFilePath, &ObjInfo, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK);
+- if (RT_FAILURE(vrc))
+- return &(new RTCString())->printf("RTPathQueryInfoEx failed with %Rrc", vrc);
+- if (a_pObjInfo)
+- *a_pObjInfo = ObjInfo;
+- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode))
+- {
+- if (RTFS_IS_SYMLINK(ObjInfo.Attr.fMode))
+- return new RTCString("The XML file is symlinked, that is not allowed");
+- return &(new RTCString)->printf("The XML file is not a file (fMode=%#x)", ObjInfo.Attr.fMode);
+- }
+-
+- xml::Document Doc;
+- {
+- xml::XmlFileParser Parser;
+- try
+- {
+- Parser.read(szFilePath, Doc);
+- }
+- catch (xml::XmlError Err)
+- {
+- return new RTCString(Err.what());
+- }
+- }
+-
+- /*
+- * Hand the xml doc over to the common code.
+- */
+- return vboxExtPackLoadDescFromDoc(&Doc, a_pExtPackDesc);
+-}
+-
+-/**
+- * Reads the extension pack descriptor.
+- *
+- * @returns NULL on success, pointer to an error message on failure (caller
+- * deletes it).
+- * @param a_pszDir The directory containing the description file.
+- * @param a_pExtPackDesc Where to store the extension pack descriptor.
+- * @param a_pObjInfo Where to store the object info for the file (unix
+- * attribs). Optional.
+- */
+-RTCString *VBoxExtPackLoadDescFromVfsFile(RTVFSFILE hVfsFile, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo)
+-{
+- vboxExtPackClearDesc(a_pExtPackDesc);
+-
+- /*
+- * Query the object info.
+- */
+- RTFSOBJINFO ObjInfo;
+- int rc = RTVfsFileQueryInfo(hVfsFile, &ObjInfo, RTFSOBJATTRADD_UNIX);
+- if (RT_FAILURE(rc))
+- return &(new RTCString)->printf("RTVfsFileQueryInfo failed: %Rrc", rc);
+- if (a_pObjInfo)
+- *a_pObjInfo = ObjInfo;
+-
+- /*
+- * The simple approach, read the whole thing into memory and pass this to
+- * the XML parser.
+- */
+-
+- /* Check the file size. */
+- if (ObjInfo.cbObject > _1M || ObjInfo.cbObject < 0)
+- return &(new RTCString)->printf("The XML file is too large (%'RU64 bytes)", ObjInfo.cbObject);
+- size_t const cbFile = (size_t)ObjInfo.cbObject;
+-
+- /* Rewind to the start of the file. */
+- rc = RTVfsFileSeek(hVfsFile, 0, RTFILE_SEEK_BEGIN, NULL);
+- if (RT_FAILURE(rc))
+- return &(new RTCString)->printf("RTVfsFileSeek(,0,BEGIN) failed: %Rrc", rc);
+-
+- /* Allocate memory and read the file content into it. */
+- void *pvFile = RTMemTmpAlloc(cbFile);
+- if (!pvFile)
+- return &(new RTCString)->printf("RTMemTmpAlloc(%zu) failed", cbFile);
+-
+- RTCString *pstrErr = NULL;
+- rc = RTVfsFileRead(hVfsFile, pvFile, cbFile, NULL);
+- if (RT_FAILURE(rc))
+- pstrErr = &(new RTCString)->printf("RTVfsFileRead failed: %Rrc", rc);
+-
+- /*
+- * Parse the file.
+- */
+- xml::Document Doc;
+- if (RT_SUCCESS(rc))
+- {
+- xml::XmlMemParser Parser;
+- RTCString strFileName = VBOX_EXTPACK_DESCRIPTION_NAME;
+- try
+- {
+- Parser.read(pvFile, cbFile, strFileName, Doc);
+- }
+- catch (xml::XmlError Err)
+- {
+- pstrErr = new RTCString(Err.what());
+- rc = VERR_PARSE_ERROR;
+- }
+- }
+- RTMemTmpFree(pvFile);
+-
+- /*
+- * Hand the xml doc over to the common code.
+- */
+- if (RT_SUCCESS(rc))
+- pstrErr = vboxExtPackLoadDescFromDoc(&Doc, a_pExtPackDesc);
+-
+- return pstrErr;
+-}
+-
+-/**
+- * Frees all resources associated with a extension pack descriptor.
+- *
+- * @param a_pExtPackDesc The extension pack descriptor which members
+- * should be freed.
+- */
+-void VBoxExtPackFreeDesc(PVBOXEXTPACKDESC a_pExtPackDesc)
+-{
+- if (!a_pExtPackDesc)
+- return;
+-
+- a_pExtPackDesc->strName.setNull();
+- a_pExtPackDesc->strDescription.setNull();
+- a_pExtPackDesc->strVersion.setNull();
+- a_pExtPackDesc->strEdition.setNull();
+- a_pExtPackDesc->uRevision = 0;
+- a_pExtPackDesc->strMainModule.setNull();
+- a_pExtPackDesc->strVrdeModule.setNull();
+- a_pExtPackDesc->cPlugIns = 0;
+- RTMemFree(a_pExtPackDesc->paPlugIns);
+- a_pExtPackDesc->paPlugIns = NULL;
+- a_pExtPackDesc->fShowLicense = false;
+-}
+-
+-/**
+- * Extract the extension pack name from the tarball path.
+- *
+- * @returns String containing the name on success, the caller must delete it.
+- * NULL if no valid name was found or if we ran out of memory.
+- * @param pszTarball The path to the tarball.
+- */
+-RTCString *VBoxExtPackExtractNameFromTarballPath(const char *pszTarball)
+-{
+- /*
+- * Skip ahead to the filename part and count the number of characters
+- * that matches the criteria for a mangled extension pack name.
+- */
+- const char *pszSrc = RTPathFilename(pszTarball);
+- if (!pszSrc)
+- return NULL;
+-
+- size_t off = 0;
+- while (RT_C_IS_ALNUM(pszSrc[off]) || pszSrc[off] == '_')
+- off++;
+-
+- /*
+- * Check min and max name limits.
+- */
+- if ( off > VBOX_EXTPACK_NAME_MAX_LEN
+- || off < VBOX_EXTPACK_NAME_MIN_LEN)
+- return NULL;
+-
+- /*
+- * Return the unmangled name.
+- */
+- return VBoxExtPackUnmangleName(pszSrc, off);
+-}
+-
+-/**
+- * Validates the extension pack name.
+- *
+- * @returns true if valid, false if not.
+- * @param pszName The name to validate.
+- * @sa VBoxExtPackExtractNameFromTarballPath
+- */
+-bool VBoxExtPackIsValidName(const char *pszName)
+-{
+- if (!pszName)
+- return false;
+-
+- /*
+- * Check the characters making up the name, only english alphabet
+- * characters, decimal digits and spaces are allowed.
+- */
+- size_t off = 0;
+- while (pszName[off])
+- {
+- if (!RT_C_IS_ALNUM(pszName[off]) && pszName[off] != ' ')
+- return false;
+- off++;
+- }
+-
+- /*
+- * Check min and max name limits.
+- */
+- if ( off > VBOX_EXTPACK_NAME_MAX_LEN
+- || off < VBOX_EXTPACK_NAME_MIN_LEN)
+- return false;
+-
+- return true;
+-}
+-
+-/**
+- * Checks if an alledged manged extension pack name.
+- *
+- * @returns true if valid, false if not.
+- * @param pszMangledName The mangled name to validate.
+- * @param cchMax The max number of chars to test.
+- * @sa VBoxExtPackMangleName
+- */
+-bool VBoxExtPackIsValidMangledName(const char *pszMangledName, size_t cchMax /*= RTSTR_MAX*/)
+-{
+- if (!pszMangledName)
+- return false;
+-
+- /*
+- * Check the characters making up the name, only english alphabet
+- * characters, decimal digits and underscores (=space) are allowed.
+- */
+- size_t off = 0;
+- while (off < cchMax && pszMangledName[off])
+- {
+- if (!RT_C_IS_ALNUM(pszMangledName[off]) && pszMangledName[off] != '_')
+- return false;
+- off++;
+- }
+-
+- /*
+- * Check min and max name limits.
+- */
+- if ( off > VBOX_EXTPACK_NAME_MAX_LEN
+- || off < VBOX_EXTPACK_NAME_MIN_LEN)
+- return false;
+-
+- return true;
+-}
+-
+-/**
+- * Mangle an extension pack name so it can be used by a directory or file name.
+- *
+- * @returns String containing the mangled name on success, the caller must
+- * delete it. NULL on failure.
+- * @param pszName The unmangled name.
+- * @sa VBoxExtPackUnmangleName, VBoxExtPackIsValidMangledName
+- */
+-RTCString *VBoxExtPackMangleName(const char *pszName)
+-{
+- AssertReturn(VBoxExtPackIsValidName(pszName), NULL);
+-
+- char szTmp[VBOX_EXTPACK_NAME_MAX_LEN + 1];
+- size_t off = 0;
+- char ch;
+- while ((ch = pszName[off]) != '\0')
+- {
+- if (ch == ' ')
+- ch = '_';
+- szTmp[off++] = ch;
+- }
+- szTmp[off] = '\0';
+- Assert(VBoxExtPackIsValidMangledName(szTmp));
+-
+- return new RTCString(szTmp, off);
+-}
+-
+-/**
+- * Unmangle an extension pack name (reverses VBoxExtPackMangleName).
+- *
+- * @returns String containing the mangled name on success, the caller must
+- * delete it. NULL on failure.
+- * @param pszMangledName The mangled name.
+- * @param cchMax The max name length. RTSTR_MAX is fine.
+- * @sa VBoxExtPackMangleName, VBoxExtPackIsValidMangledName
+- */
+-RTCString *VBoxExtPackUnmangleName(const char *pszMangledName, size_t cchMax)
+-{
+- AssertReturn(VBoxExtPackIsValidMangledName(pszMangledName, cchMax), NULL);
+-
+- char szTmp[VBOX_EXTPACK_NAME_MAX_LEN + 1];
+- size_t off = 0;
+- char ch;
+- while ( off < cchMax
+- && (ch = pszMangledName[off]) != '\0')
+- {
+- if (ch == '_')
+- ch = ' ';
+- else
+- AssertReturn(RT_C_IS_ALNUM(ch) || ch == ' ', NULL);
+- szTmp[off++] = ch;
+- }
+- szTmp[off] = '\0';
+- AssertReturn(VBoxExtPackIsValidName(szTmp), NULL);
+-
+- return new RTCString(szTmp, off);
+-}
+-
+-/**
+- * Constructs the extension pack directory path.
+- *
+- * A combination of RTPathJoin and VBoxExtPackMangleName.
+- *
+- * @returns IPRT status code like RTPathJoin.
+- * @param pszExtPackDir Where to return the directory path.
+- * @param cbExtPackDir The size of the return buffer.
+- * @param pszParentDir The parent directory (".../Extensions").
+- * @param pszName The extension pack name, unmangled.
+- */
+-int VBoxExtPackCalcDir(char *pszExtPackDir, size_t cbExtPackDir, const char *pszParentDir, const char *pszName)
+-{
+- AssertReturn(VBoxExtPackIsValidName(pszName), VERR_INTERNAL_ERROR_5);
+-
+- RTCString *pstrMangledName = VBoxExtPackMangleName(pszName);
+- if (!pstrMangledName)
+- return VERR_INTERNAL_ERROR_4;
+-
+- int vrc = RTPathJoin(pszExtPackDir, cbExtPackDir, pszParentDir, pstrMangledName->c_str());
+- delete pstrMangledName;
+-
+- return vrc;
+-}
+-
+-
+-/**
+- * Validates the extension pack version string.
+- *
+- * @returns true if valid, false if not.
+- * @param pszVersion The version string to validate.
+- */
+-bool VBoxExtPackIsValidVersionString(const char *pszVersion)
+-{
+- if (!pszVersion || *pszVersion == '\0')
+- return false;
+-
+- /* 1.x.y.z... */
+- for (;;)
+- {
+- if (!RT_C_IS_DIGIT(*pszVersion))
+- return false;
+- do
+- pszVersion++;
+- while (RT_C_IS_DIGIT(*pszVersion));
+- if (*pszVersion != '.')
+- break;
+- pszVersion++;
+- }
+-
+- /* upper case string + numbers indicating the build type */
+- if (*pszVersion == '-' || *pszVersion == '_')
+- {
+- /** @todo Should probably restrict this to known build types (alpha,
+- * beta, rc, ++). */
+- do
+- pszVersion++;
+- while ( RT_C_IS_DIGIT(*pszVersion)
+- || RT_C_IS_UPPER(*pszVersion)
+- || *pszVersion == '-'
+- || *pszVersion == '_');
+- }
+-
+- return *pszVersion == '\0';
+-}
+-
+-/**
+- * Validates the extension pack edition string.
+- *
+- * @returns true if valid, false if not.
+- * @param pszEdition The edition string to validate.
+- */
+-bool VBoxExtPackIsValidEditionString(const char *pszEdition)
+-{
+- if (*pszEdition)
+- {
+- if (!RT_C_IS_UPPER(*pszEdition))
+- return false;
+-
+- do
+- pszEdition++;
+- while ( RT_C_IS_UPPER(*pszEdition)
+- || RT_C_IS_DIGIT(*pszEdition)
+- || *pszEdition == '-'
+- || *pszEdition == '_');
+- }
+- return *pszEdition == '\0';
+-}
+-
+-/**
+- * Validates an extension pack module string.
+- *
+- * @returns true if valid, false if not.
+- * @param pszModule The module string to validate.
+- */
+-bool VBoxExtPackIsValidModuleString(const char *pszModule)
+-{
+- if (!pszModule || *pszModule == '\0')
+- return false;
+-
+- /* Restricted charset, no extensions (dots). */
+- while ( RT_C_IS_ALNUM(*pszModule)
+- || *pszModule == '-'
+- || *pszModule == '_')
+- pszModule++;
+-
+- return *pszModule == '\0';
+-}
+-
+-/**
+- * RTStrPrintfv wrapper.
+- *
+- * @returns @a rc
+- * @param rc The status code to return.
+- * @param pszError The error buffer.
+- * @param cbError The size of the buffer.
+- * @param pszFormat The error message format string.
+- * @param ... Format arguments.
+- */
+-static int vboxExtPackReturnError(int rc, char *pszError, size_t cbError, const char *pszFormat, ...)
+-{
+- va_list va;
+- va_start(va, pszFormat);
+- RTStrPrintfV(pszError, cbError, pszFormat, va);
+- va_end(va);
+- return rc;
+-}
+-
+-/**
+- * RTStrPrintfv wrapper.
+- *
+- * @param pszError The error buffer.
+- * @param cbError The size of the buffer.
+- * @param pszFormat The error message format string.
+- * @param ... Format arguments.
+- */
+-static void vboxExtPackSetError(char *pszError, size_t cbError, const char *pszFormat, ...)
+-{
+- va_list va;
+- va_start(va, pszFormat);
+- RTStrPrintfV(pszError, cbError, pszFormat, va);
+- va_end(va);
+-}
+-
+-/**
+- * Verifies the manifest and its signature.
+- *
+- * @returns VBox status code, failures with message.
+- * @param hManifestFile The xml from the extension pack.
+- * @param pszExtPackName The expected extension pack name. This can be
+- * NULL, in which we don't have any expectations.
+- * @param pszError Where to store an error message on failure.
+- * @param cbError The size of the buffer @a pszError points to.
+- */
+-static int vboxExtPackVerifyXml(RTVFSFILE hXmlFile, const char *pszExtPackName, char *pszError, size_t cbError)
+-{
+- /*
+- * Load the XML.
+- */
+- VBOXEXTPACKDESC ExtPackDesc;
+- RTCString *pstrErr = VBoxExtPackLoadDescFromVfsFile(hXmlFile, &ExtPackDesc, NULL);
+- if (pstrErr)
+- {
+- RTStrCopy(pszError, cbError, pstrErr->c_str());
+- delete pstrErr;
+- return VERR_PARSE_ERROR;
+- }
+-
+- /*
+- * Check the name.
+- */
+- /** @todo drop this restriction after the old install interface is
+- * dropped. */
+- int rc = VINF_SUCCESS;
+- if ( pszExtPackName
+- && !ExtPackDesc.strName.equalsIgnoreCase(pszExtPackName))
+- rc = vboxExtPackReturnError(VERR_NOT_EQUAL, pszError, cbError,
+- "The name of the downloaded file and the name stored inside the extension pack does not match"
+- " (xml='%s' file='%s')", ExtPackDesc.strName.c_str(), pszExtPackName);
+- return rc;
+-}
+-
+-/**
+- * Verifies the manifest and its signature.
+- *
+- * @returns VBox status code, failures with message.
+- * @param hOurManifest The manifest we compiled.
+- * @param hManifestFile The manifest file in the extension pack.
+- * @param hSignatureFile The manifest signature file.
+- * @param pszError Where to store an error message on failure.
+- * @param cbError The size of the buffer @a pszError points to.
+- */
+-static int vboxExtPackVerifyManifestAndSignature(RTMANIFEST hOurManifest, RTVFSFILE hManifestFile, RTVFSFILE hSignatureFile,
+- char *pszError, size_t cbError)
+-{
+- /*
+- * Read the manifest from the extension pack.
+- */
+- int rc = RTVfsFileSeek(hManifestFile, 0, RTFILE_SEEK_BEGIN, NULL);
+- if (RT_FAILURE(rc))
+- return vboxExtPackReturnError(rc, pszError, cbError, "RTVfsFileSeek failed: %Rrc", rc);
+-
+- RTMANIFEST hTheirManifest;
+- rc = RTManifestCreate(0 /*fFlags*/, &hTheirManifest);
+- if (RT_FAILURE(rc))
+- return vboxExtPackReturnError(rc, pszError, cbError, "RTManifestCreate failed: %Rrc", rc);
+-
+- RTVFSIOSTREAM hVfsIos = RTVfsFileToIoStream(hManifestFile);
+- rc = RTManifestReadStandard(hTheirManifest, hVfsIos);
+- RTVfsIoStrmRelease(hVfsIos);
+- if (RT_SUCCESS(rc))
+- {
+- /*
+- * Compare the manifests.
+- */
+- static const char *s_apszIgnoreEntries[] =
+- {
+- VBOX_EXTPACK_MANIFEST_NAME,
+- VBOX_EXTPACK_SIGNATURE_NAME,
+- "./" VBOX_EXTPACK_MANIFEST_NAME,
+- "./" VBOX_EXTPACK_SIGNATURE_NAME,
+- NULL
+- };
+- char szError[RTPATH_MAX];
+- rc = RTManifestEqualsEx(hOurManifest, hTheirManifest, &s_apszIgnoreEntries[0], NULL,
+- RTMANIFEST_EQUALS_IGN_MISSING_ATTRS /*fFlags*/,
+- szError, sizeof(szError));
+- if (RT_SUCCESS(rc))
+- {
+- /*
+- * Validate the manifest file signature.
+- */
+- /** @todo implement signature stuff */
+- NOREF(hSignatureFile);
+-
+- }
+- else if (rc == VERR_NOT_EQUAL && szError[0])
+- vboxExtPackSetError(pszError, cbError, "Manifest mismatch: %s", szError);
+- else
+- vboxExtPackSetError(pszError, cbError, "RTManifestEqualsEx failed: %Rrc", rc);
+-#if 0
+- RTVFSIOSTREAM hVfsIosStdOut = NIL_RTVFSIOSTREAM;
+- RTVfsIoStrmFromStdHandle(RTHANDLESTD_OUTPUT, RTFILE_O_WRITE, true, &hVfsIosStdOut);
+- RTVfsIoStrmWrite(hVfsIosStdOut, "Our:\n", sizeof("Our:\n") - 1, true, NULL);
+- RTManifestWriteStandard(hOurManifest, hVfsIosStdOut);
+- RTVfsIoStrmWrite(hVfsIosStdOut, "Their:\n", sizeof("Their:\n") - 1, true, NULL);
+- RTManifestWriteStandard(hTheirManifest, hVfsIosStdOut);
+-#endif
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "Error parsing '%s': %Rrc", VBOX_EXTPACK_MANIFEST_NAME, rc);
+-
+- RTManifestRelease(hTheirManifest);
+- return rc;
+-}
+-
+-
+-/**
+- * Verifies the file digest (if specified) and returns the SHA-256 of the file.
+- *
+- * @returns
+- * @param hFileManifest Manifest containing a SHA-256 digest of the file
+- * that was calculated as the file was processed.
+- * @param pszFileDigest SHA-256 digest of the file.
+- * @param pStrDigest Where to return the SHA-256 digest. Optional.
+- * @param pszError Where to write an error message on failure.
+- * @param cbError The size of the @a pszError buffer.
+- */
+-static int vboxExtPackVerifyFileDigest(RTMANIFEST hFileManifest, const char *pszFileDigest,
+- RTCString *pStrDigest, char *pszError, size_t cbError)
+-{
+- /*
+- * Extract the SHA-256 entry for the extpack file.
+- */
+- char szCalculatedDigest[RTSHA256_DIGEST_LEN + 1];
+- int rc = RTManifestEntryQueryAttr(hFileManifest, "extpack", NULL /*no name*/, RTMANIFEST_ATTR_SHA256,
+- szCalculatedDigest, sizeof(szCalculatedDigest), NULL);
+- if (RT_SUCCESS(rc))
+- {
+- /*
+- * Convert the two strings to binary form before comparing.
+- * We convert the calculated hash even if we don't have anything to
+- * compare with, just to validate it.
+- */
+- uint8_t abCalculatedHash[RTSHA256_HASH_SIZE];
+- rc = RTSha256FromString(szCalculatedDigest, abCalculatedHash);
+- if (RT_SUCCESS(rc))
+- {
+- if ( pszFileDigest
+- && *pszFileDigest != '\0')
+- {
+- uint8_t abFileHash[RTSHA256_HASH_SIZE];
+- rc = RTSha256FromString(pszFileDigest, abFileHash);
+- if (RT_SUCCESS(rc))
+- {
+- if (memcmp(abFileHash, abCalculatedHash, sizeof(abFileHash)))
+- {
+- vboxExtPackSetError(pszError, cbError, "The extension pack file has changed (SHA-256 mismatch)");
+- rc = VERR_NOT_EQUAL;
+- }
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "Bad SHA-256 '%s': %Rrc", szCalculatedDigest, rc);
+- }
+-
+- /*
+- * Set the output hash on success.
+- */
+- if (pStrDigest && RT_SUCCESS(rc))
+- {
+- try
+- {
+- *pStrDigest = szCalculatedDigest;
+- }
+- catch (std::bad_alloc)
+- {
+- rc = VERR_NO_MEMORY;
+- }
+- }
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "Bad SHA-256 '%s': %Rrc", szCalculatedDigest, rc);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTManifestEntryGetAttr: %Rrc", rc);
+- return rc;
+-}
+-
+-
+-
+-/**
+- * Validates a standard file.
+- *
+- * Generally all files are
+- *
+- * @returns VBox status code, failure message in @a pszError.
+- * @param pszAdjName The adjusted member name.
+- * @param enmType The VFS object type.
+- * @param phVfsObj The pointer to the VFS object handle variable.
+- * This is both input and output.
+- * @param phVfsFile Where to store the handle to the memorized
+- * file. This is NULL for license files.
+- * @param pszError Where to write an error message on failure.
+- * @param cbError The size of the @a pszError buffer.
+- */
+-static int VBoxExtPackValidateStandardFile(const char *pszAdjName, RTVFSOBJTYPE enmType,
+- PRTVFSOBJ phVfsObj, PRTVFSFILE phVfsFile, char *pszError, size_t cbError)
+-{
+- int rc;
+-
+- /*
+- * Make sure it's a file and that it isn't too large.
+- */
+- if (phVfsFile && *phVfsFile != NIL_RTVFSFILE)
+- rc = vboxExtPackReturnError(VERR_DUPLICATE, pszError, cbError,
+- "There can only be one '%s'", pszAdjName);
+- else if (enmType != RTVFSOBJTYPE_IO_STREAM && enmType != RTVFSOBJTYPE_FILE)
+- rc = vboxExtPackReturnError(VERR_NOT_A_FILE, pszError, cbError,
+- "Standard member '%s' is not a file", pszAdjName);
+- else
+- {
+- RTFSOBJINFO ObjInfo;
+- rc = RTVfsObjQueryInfo(*phVfsObj, &ObjInfo, RTFSOBJATTRADD_NOTHING);
+- if (RT_SUCCESS(rc))
+- {
+- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode))
+- rc = vboxExtPackReturnError(VERR_NOT_A_FILE, pszError, cbError,
+- "Standard member '%s' is not a file", pszAdjName);
+- else if (ObjInfo.cbObject >= _1M)
+- rc = vboxExtPackReturnError(VERR_OUT_OF_RANGE, pszError, cbError,
+- "Standard member '%s' is too large: %'RU64 bytes (max 1 MB)",
+- pszAdjName, (uint64_t)ObjInfo.cbObject);
+- else
+- {
+- /*
+- * Make an in memory copy of the stream and check that the file
+- * is UTF-8 clean.
+- */
+- RTVFSIOSTREAM hVfsIos = RTVfsObjToIoStream(*phVfsObj);
+- RTVFSFILE hVfsFile;
+- rc = RTVfsMemorizeIoStreamAsFile(hVfsIos, RTFILE_O_READ, &hVfsFile);
+- if (RT_SUCCESS(rc))
+- {
+- rc = RTVfsIoStrmValidateUtf8Encoding(hVfsIos,
+- RTVFS_VALIDATE_UTF8_BY_RTC_3629 | RTVFS_VALIDATE_UTF8_NO_NULL,
+- NULL);
+- if (RT_SUCCESS(rc))
+- {
+- /*
+- * Replace *phVfsObj with the memorized file.
+- */
+- rc = RTVfsFileSeek(hVfsFile, 0, RTFILE_SEEK_BEGIN, NULL);
+- if (RT_SUCCESS(rc))
+- {
+- RTVfsObjRelease(*phVfsObj);
+- *phVfsObj = RTVfsObjFromFile(hVfsFile);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTVfsFileSeek failed on '%s': %Rrc", pszAdjName, rc);
+- }
+-
+- if (phVfsFile && RT_SUCCESS(rc))
+- *phVfsFile = hVfsFile;
+- else
+- RTVfsFileRelease(hVfsFile);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTVfsMemorizeIoStreamAsFile failed on '%s': %Rrc", pszAdjName, rc);
+- RTVfsIoStrmRelease(hVfsIos);
+- }
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTVfsObjQueryInfo failed on '%s': %Rrc", pszAdjName, rc);
+- }
+- return rc;
+-}
+-
+-
+-/**
+- * Validates a name in an extension pack.
+- *
+- * We restrict the charset to try make sure the extension pack can be unpacked
+- * on all file systems.
+- *
+- * @returns VBox status code, failures with message.
+- * @param pszName The name to validate.
+- * @param pszError Where to store an error message on failure.
+- * @param cbError The size of the buffer @a pszError points to.
+- */
+-static int vboxExtPackValidateMemberName(const char *pszName, char *pszError, size_t cbError)
+-{
+- if (RTPathStartsWithRoot(pszName))
+- return vboxExtPackReturnError(VERR_PATH_IS_NOT_RELATIVE, pszError, cbError, "'%s': starts with root spec", pszName);
+-
+- const char *pszErr = NULL;
+- const char *psz = pszName;
+- int ch;
+- while ((ch = *psz) != '\0')
+- {
+- /* Character set restrictions. */
+- if (ch < 0 || ch >= 128)
+- {
+- pszErr = "Only 7-bit ASCII allowed";
+- break;
+- }
+- if (ch <= 31 || ch == 127)
+- {
+- pszErr = "No control characters are not allowed";
+- break;
+- }
+- if (ch == '\\')
+- {
+- pszErr = "Only backward slashes are not allowed";
+- break;
+- }
+- if (strchr("'\":;*?|[]<>(){}", ch))
+- {
+- pszErr = "The characters ', \", :, ;, *, ?, |, [, ], <, >, (, ), { and } are not allowed";
+- break;
+- }
+-
+- /* Take the simple way out and ban all ".." sequences. */
+- if ( ch == '.'
+- && psz[1] == '.')
+- {
+- pszErr = "Double dot sequence are not allowed";
+- break;
+- }
+-
+- /* Keep the tree shallow or the hardening checks will fail. */
+- if (psz - pszName > VBOX_EXTPACK_MAX_MEMBER_NAME_LENGTH)
+- {
+- pszErr = "Too long";
+- break;
+- }
+-
+- /* advance */
+- psz++;
+- }
+-
+- if (pszErr)
+- return vboxExtPackReturnError(VERR_INVALID_NAME, pszError, cbError,
+- "Bad member name '%s' (pos %zu): %s", pszName, (size_t)(psz - pszName), pszErr);
+- return RTEXITCODE_SUCCESS;
+-}
+-
+-
+-/**
+- * Validates a file in an extension pack.
+- *
+- * @returns VBox status code, failures with message.
+- * @param pszName The name of the file.
+- * @param hVfsObj The VFS object.
+- * @param pszError Where to store an error message on failure.
+- * @param cbError The size of the buffer @a pszError points to.
+- */
+-static int vboxExtPackValidateMemberFile(const char *pszName, RTVFSOBJ hVfsObj, char *pszError, size_t cbError)
+-{
+- int rc = vboxExtPackValidateMemberName(pszName, pszError, cbError);
+- if (RT_SUCCESS(rc))
+- {
+- RTFSOBJINFO ObjInfo;
+- rc = RTVfsObjQueryInfo(hVfsObj, &ObjInfo, RTFSOBJATTRADD_NOTHING);
+- if (RT_SUCCESS(rc))
+- {
+- if (ObjInfo.cbObject >= 9*_1G64)
+- rc = vboxExtPackReturnError(VERR_OUT_OF_RANGE, pszError, cbError,
+- "'%s': too large (%'RU64 bytes)",
+- pszName, (uint64_t)ObjInfo.cbObject);
+- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode))
+- rc = vboxExtPackReturnError(VERR_NOT_A_FILE, pszError, cbError,
+- "The alleged file '%s' has a mode mask stating otherwise (%RTfmode)",
+- pszName, ObjInfo.Attr.fMode);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTVfsObjQueryInfo failed on '%s': %Rrc", pszName, rc);
+- }
+- return rc;
+-}
+-
+-
+-/**
+- * Validates a directory in an extension pack.
+- *
+- * @returns VBox status code, failures with message.
+- * @param pszName The name of the directory.
+- * @param hVfsObj The VFS object.
+- * @param pszError Where to store an error message on failure.
+- * @param cbError The size of the buffer @a pszError points to.
+- */
+-static int vboxExtPackValidateMemberDir(const char *pszName, RTVFSOBJ hVfsObj, char *pszError, size_t cbError)
+-{
+- int rc = vboxExtPackValidateMemberName(pszName, pszError, cbError);
+- if (RT_SUCCESS(rc))
+- {
+- RTFSOBJINFO ObjInfo;
+- rc = RTVfsObjQueryInfo(hVfsObj, &ObjInfo, RTFSOBJATTRADD_NOTHING);
+- if (RT_SUCCESS(rc))
+- {
+- if (!RTFS_IS_DIRECTORY(ObjInfo.Attr.fMode))
+- rc = vboxExtPackReturnError(VERR_NOT_A_DIRECTORY, pszError, cbError,
+- "The alleged directory '%s' has a mode mask saying differently (%RTfmode)",
+- pszName, ObjInfo.Attr.fMode);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTVfsObjQueryInfo failed on '%s': %Rrc", pszName, rc);
+- }
+- return rc;
+-}
+-
+-/**
+- * Validates a member of an extension pack.
+- *
+- * @returns VBox status code, failures with message.
+- * @param pszName The name of the directory.
+- * @param enmType The object type.
+- * @param hVfsObj The VFS object.
+- * @param pszError Where to store an error message on failure.
+- * @param cbError The size of the buffer @a pszError points to.
+- */
+-int VBoxExtPackValidateMember(const char *pszName, RTVFSOBJTYPE enmType, RTVFSOBJ hVfsObj, char *pszError, size_t cbError)
+-{
+- Assert(cbError > 0);
+- *pszError = '\0';
+-
+- int rc;
+- if ( enmType == RTVFSOBJTYPE_FILE
+- || enmType == RTVFSOBJTYPE_IO_STREAM)
+- rc = vboxExtPackValidateMemberFile(pszName, hVfsObj, pszError, cbError);
+- else if ( enmType == RTVFSOBJTYPE_DIR
+- || enmType == RTVFSOBJTYPE_BASE)
+- rc = vboxExtPackValidateMemberDir(pszName, hVfsObj, pszError, cbError);
+- else
+- rc = vboxExtPackReturnError(VERR_UNEXPECTED_FS_OBJ_TYPE, pszError, cbError,
+- "'%s' is not a file or directory (enmType=%d)", pszName, enmType);
+- return rc;
+-}
+-
+-
+-/**
+- * Rewinds the tarball file handle and creates a gunzip | tar chain that
+- * results in a filesystem stream.
+- *
+- * @returns VBox status code, failures with message.
+- * @param hTarballFile The handle to the tarball file.
+- * @param pszError Where to store an error message on failure.
+- * @param cbError The size of the buffer @a pszError points to.
+- * @param phTarFss Where to return the filesystem stream handle.
+- * @param phFileManifest Where to return a manifest where the tarball is
+- * gettting hashed. The entry will be called
+- * "extpack" and be ready when the file system
+- * stream is at an end. Optional.
+- */
+-int VBoxExtPackOpenTarFss(RTFILE hTarballFile, char *pszError, size_t cbError, PRTVFSFSSTREAM phTarFss, PRTMANIFEST phFileManifest)
+-{
+- Assert(cbError > 0);
+- *pszError = '\0';
+- *phTarFss = NIL_RTVFSFSSTREAM;
+-
+- /*
+- * Rewind the file and set up a VFS chain for it.
+- */
+- int rc = RTFileSeek(hTarballFile, 0, RTFILE_SEEK_BEGIN, NULL);
+- if (RT_FAILURE(rc))
+- return vboxExtPackReturnError(rc, pszError, cbError, "Failed seeking to the start of the tarball: %Rrc", rc);
+-
+- RTVFSIOSTREAM hTarballIos;
+- rc = RTVfsIoStrmFromRTFile(hTarballFile, RTFILE_O_READ | RTFILE_O_DENY_WRITE | RTFILE_O_OPEN, true /*fLeaveOpen*/,
+- &hTarballIos);
+- if (RT_FAILURE(rc))
+- return vboxExtPackReturnError(rc, pszError, cbError, "RTVfsIoStrmFromRTFile failed: %Rrc", rc);
+-
+- RTMANIFEST hFileManifest = NIL_RTMANIFEST;
+- rc = RTManifestCreate(0 /*fFlags*/, &hFileManifest);
+- if (RT_SUCCESS(rc))
+- {
+- RTVFSIOSTREAM hPtIos;
+- rc = RTManifestEntryAddPassthruIoStream(hFileManifest, hTarballIos, "extpack", RTMANIFEST_ATTR_SHA256, true /*read*/, &hPtIos);
+- if (RT_SUCCESS(rc))
+- {
+- RTVFSIOSTREAM hGunzipIos;
+- rc = RTZipGzipDecompressIoStream(hPtIos, 0 /*fFlags*/, &hGunzipIos);
+- if (RT_SUCCESS(rc))
+- {
+- RTVFSFSSTREAM hTarFss;
+- rc = RTZipTarFsStreamFromIoStream(hGunzipIos, 0 /*fFlags*/, &hTarFss);
+- if (RT_SUCCESS(rc))
+- {
+- RTVfsIoStrmRelease(hPtIos);
+- RTVfsIoStrmRelease(hGunzipIos);
+- RTVfsIoStrmRelease(hTarballIos);
+- *phTarFss = hTarFss;
+- if (phFileManifest)
+- *phFileManifest = hFileManifest;
+- else
+- RTManifestRelease(hFileManifest);
+- return VINF_SUCCESS;
+- }
+-
+- vboxExtPackSetError(pszError, cbError, "RTZipTarFsStreamFromIoStream failed: %Rrc", rc);
+- RTVfsIoStrmRelease(hGunzipIos);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTZipGzipDecompressIoStream failed: %Rrc", rc);
+- RTVfsIoStrmRelease(hPtIos);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTManifestEntryAddPassthruIoStream failed: %Rrc", rc);
+- RTManifestRelease(hFileManifest);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTManifestCreate failed: %Rrc", rc);
+-
+- RTVfsIoStrmRelease(hTarballIos);
+- return rc;
+-}
+-
+-
+-/**
+- * Validates the extension pack tarball prior to unpacking.
+- *
+- * Operations performed:
+- * - Mandatory files.
+- * - Manifest check.
+- * - Manifest seal check.
+- * - XML check, match name.
+- *
+- * @returns VBox status code, failures with message.
+- * @param hTarballFile The handle to open the @a pszTarball file.
+- * @param pszExtPackName The name of the extension pack name. NULL if
+- * the name is not fixed.
+- * @param pszTarball The name of the tarball in case we have to
+- * complain about something.
+- * @param pszTarballDigest The SHA-256 digest of the tarball. Empty string
+- * if no digest available.
+- * @param pszError Where to store an error message on failure.
+- * @param cbError The size of the buffer @a pszError points to.
+- * @param phValidManifest Where to optionally return the handle to fully
+- * validated the manifest for the extension pack.
+- * This includes all files.
+- * @param phXmlFile Where to optionally return the memorized XML
+- * file.
+- * @param pStrDigest Where to return the digest of the file.
+- * Optional.
+- */
+-int VBoxExtPackValidateTarball(RTFILE hTarballFile, const char *pszExtPackName,
+- const char *pszTarball, const char *pszTarballDigest,
+- char *pszError, size_t cbError,
+- PRTMANIFEST phValidManifest, PRTVFSFILE phXmlFile, RTCString *pStrDigest)
+-{
+- /*
+- * Clear return values.
+- */
+- if (phValidManifest)
+- *phValidManifest = NIL_RTMANIFEST;
+- if (phXmlFile)
+- *phXmlFile = NIL_RTVFSFILE;
+- Assert(cbError > 1);
+- *pszError = '\0';
+- NOREF(pszTarball);
+-
+- /*
+- * Open the tar.gz filesystem stream and set up an manifest in-memory file.
+- */
+- RTMANIFEST hFileManifest;
+- RTVFSFSSTREAM hTarFss;
+- int rc = VBoxExtPackOpenTarFss(hTarballFile, pszError, cbError, &hTarFss, &hFileManifest);
+- if (RT_FAILURE(rc))
+- return rc;
+-
+- RTMANIFEST hOurManifest;
+- rc = RTManifestCreate(0 /*fFlags*/, &hOurManifest);
+- if (RT_SUCCESS(rc))
+- {
+- /*
+- * Process the tarball (would be nice to move this to a function).
+- */
+- RTVFSFILE hXmlFile = NIL_RTVFSFILE;
+- RTVFSFILE hManifestFile = NIL_RTVFSFILE;
+- RTVFSFILE hSignatureFile = NIL_RTVFSFILE;
+- for (;;)
+- {
+- /*
+- * Get the next stream object.
+- */
+- char *pszName;
+- RTVFSOBJ hVfsObj;
+- RTVFSOBJTYPE enmType;
+- rc = RTVfsFsStrmNext(hTarFss, &pszName, &enmType, &hVfsObj);
+- if (RT_FAILURE(rc))
+- {
+- if (rc != VERR_EOF)
+- vboxExtPackSetError(pszError, cbError, "RTVfsFsStrmNext failed: %Rrc", rc);
+- else
+- rc = VINF_SUCCESS;
+- break;
+- }
+- const char *pszAdjName = pszName[0] == '.' && pszName[1] == '/' ? &pszName[2] : pszName;
+-
+- /*
+- * Check the type & name validity, performing special tests on
+- * standard extension pack member files.
+- *
+- * N.B. We will always reach the end of the loop before breaking on
+- * failure - cleanup reasons.
+- */
+- rc = VBoxExtPackValidateMember(pszName, enmType, hVfsObj, pszError, cbError);
+- if (RT_SUCCESS(rc))
+- {
+- PRTVFSFILE phVfsFile = NULL;
+- if (!strcmp(pszAdjName, VBOX_EXTPACK_DESCRIPTION_NAME))
+- phVfsFile = &hXmlFile;
+- else if (!strcmp(pszAdjName, VBOX_EXTPACK_MANIFEST_NAME))
+- phVfsFile = &hManifestFile;
+- else if (!strcmp(pszAdjName, VBOX_EXTPACK_SIGNATURE_NAME))
+- phVfsFile = &hSignatureFile;
+- else if (!strncmp(pszAdjName, VBOX_EXTPACK_LICENSE_NAME_PREFIX, sizeof(VBOX_EXTPACK_LICENSE_NAME_PREFIX) - 1))
+- rc = VBoxExtPackValidateStandardFile(pszAdjName, enmType, &hVfsObj, NULL, pszError, cbError);
+- if (phVfsFile)
+- rc = VBoxExtPackValidateStandardFile(pszAdjName, enmType, &hVfsObj, phVfsFile, pszError, cbError);
+- }
+-
+- /*
+- * Add any I/O stream to the manifest
+- */
+- if ( RT_SUCCESS(rc)
+- && ( enmType == RTVFSOBJTYPE_FILE
+- || enmType == RTVFSOBJTYPE_IO_STREAM))
+- {
+- RTVFSIOSTREAM hVfsIos = RTVfsObjToIoStream(hVfsObj);
+- rc = RTManifestEntryAddIoStream(hOurManifest, hVfsIos, pszAdjName, RTMANIFEST_ATTR_SIZE | RTMANIFEST_ATTR_SHA256);
+- if (RT_FAILURE(rc))
+- vboxExtPackSetError(pszError, cbError, "RTManifestEntryAddIoStream failed on '%s': %Rrc", pszAdjName, rc);
+- RTVfsIoStrmRelease(hVfsIos);
+- }
+-
+- /*
+- * Clean up and break out on failure.
+- */
+- RTVfsObjRelease(hVfsObj);
+- RTStrFree(pszName);
+- if (RT_FAILURE(rc))
+- break;
+- }
+-
+- /*
+- * Check the integrity of the tarball file.
+- */
+- if (RT_SUCCESS(rc))
+- {
+- RTVfsFsStrmRelease(hTarFss);
+- hTarFss = NIL_RTVFSFSSTREAM;
+- rc = vboxExtPackVerifyFileDigest(hFileManifest, pszTarballDigest, pStrDigest, pszError, cbError);
+- }
+-
+- /*
+- * If we've successfully processed the tarball, verify that the
+- * mandatory files are present.
+- */
+- if (RT_SUCCESS(rc))
+- {
+- if (hXmlFile == NIL_RTVFSFILE)
+- rc = vboxExtPackReturnError(VERR_MISSING, pszError, cbError, "Mandator file '%s' is missing", VBOX_EXTPACK_DESCRIPTION_NAME);
+- if (hManifestFile == NIL_RTVFSFILE)
+- rc = vboxExtPackReturnError(VERR_MISSING, pszError, cbError, "Mandator file '%s' is missing", VBOX_EXTPACK_MANIFEST_NAME);
+- if (hSignatureFile == NIL_RTVFSFILE)
+- rc = vboxExtPackReturnError(VERR_MISSING, pszError, cbError, "Mandator file '%s' is missing", VBOX_EXTPACK_SIGNATURE_NAME);
+- }
+-
+- /*
+- * Check the manifest and it's signature.
+- */
+- if (RT_SUCCESS(rc))
+- rc = vboxExtPackVerifyManifestAndSignature(hOurManifest, hManifestFile, hSignatureFile, pszError, cbError);
+-
+- /*
+- * Check the XML.
+- */
+- if (RT_SUCCESS(rc))
+- rc = vboxExtPackVerifyXml(hXmlFile, pszExtPackName, pszError, cbError);
+-
+- /*
+- * Returns objects.
+- */
+- if (RT_SUCCESS(rc))
+- {
+- if (phValidManifest)
+- {
+- RTManifestRetain(hOurManifest);
+- *phValidManifest = hOurManifest;
+- }
+- if (phXmlFile)
+- {
+- RTVfsFileRetain(hXmlFile);
+- *phXmlFile = hXmlFile;
+- }
+- }
+-
+- /*
+- * Release our object references.
+- */
+- RTManifestRelease(hOurManifest);
+- RTVfsFileRelease(hXmlFile);
+- RTVfsFileRelease(hManifestFile);
+- RTVfsFileRelease(hSignatureFile);
+- }
+- else
+- vboxExtPackSetError(pszError, cbError, "RTManifestCreate failed: %Rrc", rc);
+- RTVfsFsStrmRelease(hTarFss);
+- RTManifestRelease(hFileManifest);
+-
+- return rc;
+-}
+-
+--- VirtualBox-4.1.18.orig/include/Makefile.kmk 2012-06-20 10:07:49.000000000 -0300
++++ VirtualBox-4.1.18/include/Makefile.kmk 2012-07-24 21:11:57.007068865 -0300
+@@ -51,7 +51,6 @@
+ VBox/vd-cache-plugin.h \
+ VBox/vmm/uvm.h \
+ VBox/vscsi.h \
+- $(wildcard VBox/ExtPack/*.h ) \
+ iprt/alloca.h \
+ iprt/tcp.h \
+ iprt/localipc.h \
+--- VirtualBox-4.1.18.orig/src/Makefile.kmk 2012-06-20 10:07:57.000000000 -0300
++++ VirtualBox-4.1.18/src/Makefile.kmk 2012-07-24 22:51:10.206996034 -0300
+@@ -26,14 +26,6 @@
+ include $(PATH_SUB_CURRENT)/VBox/Makefile.kmk
+ include $(PATH_SUB_CURRENT)/libs/Makefile.kmk
+
+-else if defined(VBOX_ONLY_EXTPACKS)
+- include $(PATH_SUB_CURRENT)/bldprogs/Makefile.kmk
+- include $(PATH_SUB_CURRENT)/VBox/Makefile.kmk
+- include $(PATH_SUB_CURRENT)/libs/Makefile.kmk
+- ifndef VBOX_ONLY_EXTPACKS_USE_IMPLIBS
+- include $(PATH_SUB_CURRENT)/recompiler/Makefile.kmk
+- endif
+-
+ else if defined(VBOX_ONLY_TESTSUITE)
+ include $(PATH_SUB_CURRENT)/libs/Makefile.kmk
+ include $(PATH_SUB_CURRENT)/VBox/Makefile.kmk
+--- VirtualBox-4.1.18.orig/src/VBox/Makefile.kmk 2012-07-24 21:19:55.565641784 -0300
++++ VirtualBox-4.1.18/src/VBox/Makefile.kmk 2012-07-24 22:12:55.429156962 -0300
+@@ -33,19 +33,6 @@
+ include $(PATH_SUB_CURRENT)/HostDrivers/Makefile.kmk
+ include $(PATH_SUB_CURRENT)/Frontends/Makefile.kmk
+
+-else ifdef VBOX_ONLY_EXTPACKS
+- include $(PATH_SUB_CURRENT)/Runtime/Makefile.kmk
+- include $(PATH_SUB_CURRENT)/Devices/Makefile.kmk
+- include $(PATH_SUB_CURRENT)/HostDrivers/Makefile.kmk
+- include $(PATH_SUB_CURRENT)/ExtPacks/Makefile.kmk
+- ifdef VBOX_WITH_VRDP
+- include $(PATH_SUB_CURRENT)/RDP/Makefile.kmk
+- endif
+- include $(PATH_SUB_CURRENT)/VMM/Makefile.kmk
+- ifndef VBOX_ONLY_EXTPACKS_USE_IMPLIBS
+- include $(PATH_SUB_CURRENT)/Disassembler/Makefile.kmk
+- endif
+-
+ else ifdef VBOX_ONLY_SDK
+ include $(PATH_SUB_CURRENT)/Main/Makefile.kmk
+ ifdef VBOX_WITH_VRDP
+@@ -92,9 +79,6 @@
+ if1of ($(KBUILD_TARGET_ARCH), amd64 x86)
+ include $(PATH_SUB_CURRENT)/NetworkServices/Makefile.kmk
+ endif
+- ifndef VBOX_OSE
+- include $(PATH_SUB_CURRENT)/ExtPacks/Makefile.kmk
+- endif
+ ifdef VBOX_WITH_INSTALLER
+ include $(PATH_SUB_CURRENT)/Installer/Makefile.kmk # Keep this last.
+ endif
+--- VirtualBox-4.1.18/src/libs/Makefile.kmk.orig 2012-07-24 21:23:26.938013023 -0300
++++ VirtualBox-4.1.18/src/libs/Makefile.kmk 2012-07-24 21:43:42.557911752 -0300
+@@ -48,13 +48,6 @@
+ include $(PATH_SUB_CURRENT)/kStuff/Makefile.kmk
+ endif
+
+-# OpenSSL.
+-if !defined(VBOX_ONLY_SDK) \
+- && ( "$(SDK_VBOX_OPENSSL_INCS)" == "$(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)" \
+- || defined(VBOX_WITH_EXTPACK_PUEL_BUILD))
+- include $(PATH_SUB_CURRENT)/openssl-0.9.8t/Makefile.kmk
+-endif
+-
+ # libjpeg for VRDP video redirection
+ if defined(VBOX_WITH_VRDP) && defined(VBOX_WITH_VRDP_VIDEO_CHANNEL)
+ include $(PATH_SUB_CURRENT)/jpeg-8a/Makefile.kmk
+--- VirtualBox-4.1.18.orig/src/VBox/Devices/Makefile.kmk 2012-07-24 23:06:45.916276235 -0300
++++ VirtualBox-4.1.18/src/VBox/Devices/Makefile.kmk 2012-07-24 23:17:00.202963228 -0300
+@@ -21,9 +21,7 @@
+
+ # Include sub-makefiles.
+ include $(PATH_SUB_CURRENT)/testcase/Makefile.kmk
+-if defined(VBOX_WITH_INTEL_PXE) || defined(VBOX_ONLY_EXTPACKS)
+- include $(PATH_SUB_CURRENT)/PC/PXE/Makefile.kmk
+-else if defined(VBOX_WITH_PXE_ROM) && !defined(VBOX_WITHOUT_ETHERBOOT)
++if defined(VBOX_WITH_PXE_ROM) && !defined(VBOX_WITHOUT_ETHERBOOT)
+ include $(PATH_SUB_CURRENT)/PC/Etherboot-src/Makefile.kmk
+ endif
+ if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file.
+@@ -57,9 +55,6 @@
+ ifdef VBOX_WITH_USB
+ VBoxDDU_DEFS += VBOX_WITH_USB IN_USBLIB
+ VBoxDDU_SDKS.win = WINPSDK W2K3DDK
+- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
+- VBoxDDU_DEFS += VBOX_WITH_EHCI_IMPL
+- endif
+ ifdef VBOX_WITH_NEW_USB_CODE_ON_DARWIN
+ VBoxDDU_DEFS.darwin += VBOX_WITH_NEW_USB_CODE_ON_DARWIN
+ endif
+@@ -122,9 +117,6 @@
+ VBoxDD_DEFS = VBOX_ACPI
+ ifdef VBOX_WITH_USB
+ VBoxDD_DEFS += VBOX_WITH_USB
+- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
+- VBoxDD_DEFS += VBOX_WITH_EHCI_IMPL
+- endif
+ endif
+ ifdef VBOX_WITH_VUSB
+ VBoxDD_DEFS += VBOX_WITH_VUSB
+@@ -446,11 +438,6 @@
+ endif
+ ifdef VBOX_WITH_USB
+ DevicesR3_DEFS += VBOX_WITH_USB
+- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
+- DevicesR3_DEFS += VBOX_WITH_EHCI_IMPL
+- DevicesR3_SOURCES += \
+- USB/DevEHCI.cpp
+- endif
+ endif
+ if defined(VBOX_WITH_PCI_PASSTHROUGH_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
+ DevicesR3_DEFS += VBOX_WITH_PCI_PASSTHROUGH_IMPL
+@@ -607,11 +594,6 @@
+
+ ifdef VBOX_WITH_USB
+ VBoxDDGC_DEFS += VBOX_WITH_USB
+- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
+- VBoxDDGC_DEFS += VBOX_WITH_EHCI_IMPL
+- VBoxDDGC_SOURCES += \
+- USB/DevEHCI.cpp
+- endif
+ endif
+
+ ifdef VBOX_WITH_VIDEOHWACCEL
+@@ -711,11 +693,6 @@
+ endif
+ ifdef VBOX_WITH_USB
+ VBoxDDR0_DEFS += VBOX_WITH_USB
+- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
+- VBoxDDR0_DEFS += VBOX_WITH_EHCI_IMPL
+- VBoxDDR0_SOURCES += \
+- USB/DevEHCI.cpp
+- endif
+ endif
+
+ if defined(VBOX_WITH_PCI_PASSTHROUGH_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
+@@ -1204,49 +1181,5 @@
+
+ endif # !VBOX_ONLY_EXTPACKS
+
+-if defined(VBOX_WITH_EXTPACK_PUEL) && defined(VBOX_WITH_EXTPACK_PUEL_BUILD)
+- #
+- # The EHCI (USB 2.0) Extension Pack Modules.
+- #
+- if defined(VBOX_WITH_USB)
+- DLLS += VBoxEhciR3
+- VBoxEhciR3_TEMPLATE = VBoxR3ExtPackPuel
+- VBoxEhciR3_SOURCES = USB/DevEHCI.cpp
+-
+- SYSMODS += VBoxEhciR0
+- VBoxEhciR0_TEMPLATE = VBoxR0ExtPackPuel
+- VBoxEhciR0_SOURCES = USB/DevEHCI.cpp
+-
+- ifdef VBOX_WITH_RAW_MODE
+- SYSMODS += VBoxEhciRC
+- VBoxEhciRC_TEMPLATE = VBoxRcExtPackPuel
+- VBoxEhciRC_SOURCES = USB/DevEHCI.cpp
+- endif
+- endif
+-
+- if defined(VBOX_WITH_PCI_PASSTHROUGH)
+- DLLS += VBoxPciRawR3
+- VBoxPciRawR3_TEMPLATE = VBoxR3ExtPackPuel
+- VBoxPciRawR3_SOURCES = Bus/DevPciRaw.cpp
+-
+- DLLS += VBoxPciRawDrv
+- VBoxPciRawDrv_TEMPLATE = VBoxR3ExtPackPuel
+- VBoxPciRawDrv_SOURCES = Bus/DrvPciRaw.cpp
+-
+- SYSMODS += VBoxPciRawR0
+- VBoxPciRawR0_TEMPLATE = VBoxR0ExtPackPuel
+- VBoxPciRawR0_SOURCES = Bus/DevPciRaw.cpp
+-
+- Bus/DevPciRaw.cpp_INCS = Bus
+- endif
+-
+- #
+- # The Intel PXE rom.
+- #
+- INSTALLS += VBoxExtPackPuelInsRoms
+- VBoxExtPackPuelInsRoms_TEMPLATE = VBoxInsExtPackPuel
+- VBoxExtPackPuelInsRoms_SOURCES = PC/PXE/PXE-Intel.rom=>PXE-Intel.rom
+-endif # VBOX_WITH_EXTPACK_PUEL
+-
+ include $(KBUILD_PATH)/subfooter.kmk
+
+--- VirtualBox-4.1.18.orig/src/VBox/Main/Makefile.kmk 2012-07-24 23:38:25.304126039 -0300
++++ VirtualBox-4.1.18/src/VBox/Main/Makefile.kmk 2012-07-24 23:38:25.350789964 -0300
+@@ -230,14 +230,12 @@
+ $(if $(VBOX_USB_WITH_SYSFS),VBOX_USB_WITH_SYSFS,) \
+ $(if $(VBOX_USB_WITH_INOTIFY),VBOX_USB_WITH_INOTIFY,) \
+ $(if $(VBOX_WITH_LIVE_MIGRATION),VBOX_WITH_LIVE_MIGRATION,) \
+- $(if $(VBOX_WITH_EXTPACK),VBOX_WITH_EXTPACK,) \
+ $(if $(VBOX_WITH_VUSB),VBOX_WITH_VUSB,) \
+ $(if $(VBOX_WITH_S3),VBOX_WITH_S3,) \
+ $(if $(VBOX_WITH_PCI_PASSTHROUGH),VBOX_WITH_PCI_PASSTHROUGH,)
+ ifdef VBOX_WITH_USB
+ VBoxSVC_DEFS += \
+ VBOX_WITH_USB \
+- $(if $(VBOX_WITH_EHCI),VBOX_WITH_EHCI,) \
+ $(if $(VBOX_WITH_NEW_USB_CODE_ON_DARWIN),VBOX_WITH_NEW_USB_CODE_ON_DARWIN,)
+ endif
+ VBoxSVC_DEFS.win += VBOX_COM_OUTOFPROC_MODULE
+@@ -290,7 +288,6 @@
+ src-all/SharedFolderImpl.cpp \
+ src-all/VirtualBoxBase.cpp \
+ src-all/VirtualBoxErrorInfoImpl.cpp \
+- $(if $(VBOX_WITH_EXTPACK),src-all/ExtPackManagerImpl.cpp src-all/ExtPackUtil.cpp,) \
+ src-server/ApplianceImpl.cpp \
+ src-server/ApplianceImplExport.cpp \
+ src-server/ApplianceImplImport.cpp \
+@@ -543,8 +540,6 @@
+ $(if $(VBOX_WITH_HGSMI),VBOX_WITH_HGSMI,) \
+ $(if $(VBOX_WITH_VIDEOHWACCEL),VBOX_WITH_VIDEOHWACCEL,) \
+ $(if $(VBOX_WITH_USB),VBOX_WITH_USB,) \
+- $(if-expr defined(VBOX_WITH_EHCI) && defined(VBOX_WITH_USB),VBOX_WITH_EHCI,) \
+- $(if $(VBOX_WITH_EXTPACK),VBOX_WITH_EXTPACK,) \
+ $(if $(VBOX_WITH_PCI_PASSTHROUGH),VBOX_WITH_PCI_PASSTHROUGH,)
+
+ VBoxC_DEFS.darwin.x86 = VBOX_WITH_2X_4GB_ADDR_SPACE
+@@ -602,7 +597,6 @@
+ src-all/SharedFolderImpl.cpp \
+ src-all/VirtualBoxBase.cpp \
+ src-all/VirtualBoxErrorInfoImpl.cpp \
+- $(if $(VBOX_WITH_EXTPACK),src-all/ExtPackManagerImpl.cpp src-all/ExtPackUtil.cpp,) \
+ $(if $(VBOX_WITH_USB_VIDEO),src-client/UsbWebcamInterface.cpp,) \
+ $(if $(VBOX_WITH_USB_CARDREADER),src-client/UsbCardReader.cpp,) \
+ src-client/AdditionsFacilityImpl.cpp \
+@@ -711,22 +705,6 @@
+ endif # !win
+
+
+-#
+-# The VBoxExtPackHelperApp.
+-#
+-ifdef VBOX_WITH_EXTPACK
+- PROGRAMS += VBoxExtPackHelperApp
+- VBoxExtPackHelperApp_TEMPLATE = VBoxR3SetUidToRoot
+- VBoxExtPackHelperApp_LDFLAGS.darwin = -framework Security
+- VBoxExtPackHelperApp_LDFLAGS.win = /SUBSYSTEM:windows
+- VBoxExtPackHelperApp_SOURCES = \
+- src-helper-apps/VBoxExtPackHelperApp.cpp \
+- src-all/ExtPackUtil.cpp
+- VBoxExtPackHelperApp_LIBS = \
+- $(LIB_RUNTIME)
+-endif # VBOX_WITH_EXTPACK
+-
+-
+ endif # !VBOX_ONLY_SDK (the ifndef is far above)
+
+
+--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/Makefile.kmk 2012-07-24 23:25:04.575825175 -0300
++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/Makefile.kmk 2012-07-24 23:25:04.619156084 -0300
+@@ -888,7 +888,6 @@
+ $(VBOX_MACOSX_ICON_FILE)=>Resources/virtualbox.icns \
+ $(VBOX_BRAND_GUI_VBOX_64PX_PNG)=>Resources/virtualbox.png \
+ $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-vbox.icns=>Resources/virtualbox-vbox.icns \
+- $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-vbox-extpack.icns=>Resources/virtualbox-vbox-extpack.icns \
+ $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-ovf.icns=>Resources/virtualbox-ovf.icns \
+ $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-ova.icns=>Resources/virtualbox-ova.icns \
+ $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-vdi.icns=>Resources/virtualbox-vdi.icns \
+--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-24 23:28:17.985011038 -0300
++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-24 23:28:18.051673913 -0300
+@@ -167,18 +167,6 @@
+ <file alias="status_check_32px.png">images/status_check_32px.png</file>
+ <file alias="status_error_16px.png">images/status_error_16px.png</file>
+ <file alias="status_error_32px.png">images/status_error_32px.png</file>
+- <file alias="extension_pack_16px.png">images/extension_pack_16px.png</file>
+- <file alias="extension_pack_disabled_16px.png">images/extension_pack_disabled_16px.png</file>
+- <file alias="extension_pack_32px.png">images/extension_pack_32px.png</file>
+- <file alias="extension_pack_disabled_32px.png">images/extension_pack_disabled_32px.png</file>
+- <file alias="extension_pack_install_16px.png">images/extension_pack_install_16px.png</file>
+- <file alias="extension_pack_install_disabled_16px.png">images/extension_pack_install_disabled_16px.png</file>
+- <file alias="extension_pack_install_32px.png">images/extension_pack_install_32px.png</file>
+- <file alias="extension_pack_install_disabled_32px.png">images/extension_pack_install_disabled_32px.png</file>
+- <file alias="extension_pack_uninstall_16px.png">images/extension_pack_uninstall_16px.png</file>
+- <file alias="extension_pack_uninstall_disabled_16px.png">images/extension_pack_uninstall_disabled_16px.png</file>
+- <file alias="extension_pack_uninstall_32px.png">images/extension_pack_uninstall_32px.png</file>
+- <file alias="extension_pack_uninstall_disabled_32px.png">images/extension_pack_uninstall_disabled_32px.png</file>
+ <file alias="proxy_16px.png">images/proxy_16px.png</file>
+ <file alias="proxy_disabled_16px.png">images/proxy_disabled_16px.png</file>
+ <file alias="proxy_32px.png">images/proxy_32px.png</file>
+--- VirtualBox-4.1.18.orig/src/VBox/Installer/linux/Makefile.kmk 2012-07-25 00:32:00.780012664 -0300
++++ VirtualBox-4.1.18/src/VBox/Installer/linux/Makefile.kmk 2012-07-25 00:32:00.806677728 -0300
+@@ -170,11 +170,6 @@
+ VBox.sh \
+ VBox.png
+
+-ifdef VBOX_WITH_EXTPACK
+- VBOX_LNX_STRIP_BIN += \
+- VBoxExtPackHelperApp
+-endif
+-
+ # Qt4 GUI
+ ifdef VBOX_WITH_QTGUI
+ include $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/nls/ApprovedLanguages.kmk
+@@ -286,7 +281,7 @@
+
+ VBOX_MIME_ICONS = \
+ $(addprefix $(PATH_ROOT)/src/VBox/Resources/other/,\
+- $(foreach f,ova ovf vbox vbox-extpack vdi vmdk vhd hdd, \
++ $(foreach f,ova ovf vbox vdi vmdk vhd hdd, \
+ $(foreach s,16 20 24 32 48 64 72 96 128 256,\
+ virtualbox-$(f)-$(s)px.png=>$(s)x$(s)/virtualbox-$(f).png)))
+
+--- VirtualBox-4.1.18.orig/src/VBox/Installer/win/Makefile.kmk 2012-07-25 00:34:52.253398525 -0300
++++ VirtualBox-4.1.18/src/VBox/Installer/win/Makefile.kmk 2012-07-25 00:34:52.300062531 -0300
+@@ -435,7 +435,6 @@
+ -E 'VBOX_WITH_DEBUGGER_GUI=$(if-expr defined(VBOX_WITH_DEBUGGER_GUI) && defined(VBOX_WITH_QTGUI),yes,no)' \
+ -E 'VBOX_WITH_DOCS_PACKING=$(if $(VBOX_WITH_DOCS_PACKING),yes,no)' \
+ -E 'VBOX_WITH_EFIFW_PACKING=$(if $(VBOX_WITH_EFIFW_PACKING),yes,no)' \
+- -E 'VBOX_WITH_EXTPACK=$(if $(VBOX_WITH_EXTPACK),yes,no)' \
+ -E 'VBOX_WITH_GUEST_CONTROL=$(if $(VBOX_WITH_GUEST_CONTROL),yes,no)' \
+ -E 'VBOX_WITH_GUEST_PROPS=$(if $(VBOX_WITH_GUEST_PROPS),yes,no)' \
+ -E 'VBOX_WITH_NETFLT=$(if $(VBOX_WITH_NETFLT),yes,no)' \
+--- VirtualBox-4.1.18.orig/src/VBox/Installer/darwin/Makefile.kmk 2012-07-25 00:36:55.929571374 -0300
++++ VirtualBox-4.1.18/src/VBox/Installer/darwin/Makefile.kmk 2012-07-25 00:36:55.959569630 -0300
+@@ -629,7 +629,6 @@
+ MacOS/VirtualBoxVM \
+ MacOS/VBoxNetAdpCtl \
+ MacOS/VBoxNetDHCP \
+- MacOS/VBoxExtPackHelperApp \
+ MacOS/VBoxBalloonCtrl
+ ifdef VBOX_WITH_WEBSERVICES
+ VBOX_DI_VBAPP_PROGS += \
+@@ -659,7 +658,6 @@
+ Resources/virtualbox.icns \
+ Resources/virtualbox.png \
+ Resources/virtualbox-vbox.icns \
+- Resources/virtualbox-vbox-extpack.icns \
+ Resources/virtualbox-ovf.icns \
+ Resources/virtualbox-ova.icns \
+ Resources/virtualbox-vdi.icns \
+--- VirtualBox-4.1.18/src/VBox/Installer/solaris/Makefile.kmk.orig 2012-07-25 00:38:48.476398293 -0300
++++ VirtualBox-4.1.18/src/VBox/Installer/solaris/Makefile.kmk 2012-07-25 00:38:48.516396159 -0300
+@@ -185,12 +185,12 @@
+
+ VBOX_MIME_ICONS = \
+ $(addprefix $(PATH_ROOT)/src/VBox/Resources/other/,\
+- $(foreach f,ova ovf vbox vbox-extpack vdi vmdk vhd hdd, \
++ $(foreach f,ova ovf vbox vdi vmdk vhd hdd, \
+ $(foreach s,16 20 24 32 48 64 72 96 128 256,\
+ virtualbox-$(f)-$(s)px.png=>$(s)x$(s)/mimetypes/virtualbox-$(f).png)))
+
+ SOLARIS_COMMON_ICONS = \
+- $(foreach f,ova ovf vbox vbox-extpack vdi vmdk vhd hdd, \
++ $(foreach f,ova ovf vbox vdi vmdk vhd hdd, \
+ $(foreach s,16 20 24 32 48 64 72 96 128 256,\
+ $(s)x$(s)/mimetypes/virtualbox-$(f).png))
+
+@@ -210,7 +210,6 @@
+ $(if $(VBOX_WITH_VBOXSDL),VBoxSDL,) \
+ $(if $(VBOX_WITH_NETADP),VBoxNetAdpCtl,) \
+ VBoxNetDHCP \
+- $(if $(VBOX_WITH_EXTPACK),VBoxExtPackHelperApp,) \
+ VBoxSVC \
+ $(if $(VBOX_WITH_CROGL),VBoxTestOGL,) \
+ VBoxXPCOMIPCD \
+--- VirtualBox-4.1.18.orig/src/VBox/Runtime/Makefile.kmk 2012-07-25 00:40:58.745522450 -0300
++++ VirtualBox-4.1.18/src/VBox/Runtime/Makefile.kmk 2012-07-25 00:40:58.782186960 -0300
+@@ -53,15 +53,6 @@
+ #
+ LIBRARIES += RuntimeR3 RuntimeBldProg
+
+-else ifdef VBOX_ONLY_EXTPACKS_USE_IMPLIBS
+- #
+- # Build docs only - need just regular R3 runtime.
+- #
+- LIBRARIES += RuntimeBldProg
+- LIBRARIES.solaris += RuntimeR0Stub
+- LIBRARIES.win += RuntimeR0Stub RuntimeRCStub
+- include $(PATH_SUB_CURRENT)/tools/Makefile.kmk
+-
+ else # !VBOX_ONLY_ADDITIONS && !VBOX_ONLY_TESTSUITE && !VBOX_ONLY_DOCS
+
+ #
diff --git a/libre/virtualbox-libre/os_blag.png b/libre/virtualbox-libre/os_blag.png
new file mode 100644
index 000000000..61995ca10
--- /dev/null
+++ b/libre/virtualbox-libre/os_blag.png
Binary files differ
diff --git a/libre/virtualbox-libre/os_blag_64.png b/libre/virtualbox-libre/os_blag_64.png
new file mode 100644
index 000000000..aa4463a97
--- /dev/null
+++ b/libre/virtualbox-libre/os_blag_64.png
Binary files differ
diff --git a/libre/virtualbox-libre/os_dragora.png b/libre/virtualbox-libre/os_dragora.png
new file mode 100644
index 000000000..d1df45880
--- /dev/null
+++ b/libre/virtualbox-libre/os_dragora.png
Binary files differ
diff --git a/libre/virtualbox-libre/os_dragora_64.png b/libre/virtualbox-libre/os_dragora_64.png
new file mode 100644
index 000000000..64bcecf20
--- /dev/null
+++ b/libre/virtualbox-libre/os_dragora_64.png
Binary files differ
diff --git a/libre/virtualbox-libre/os_dynebolic.png b/libre/virtualbox-libre/os_dynebolic.png
new file mode 100644
index 000000000..67b07d4c0
--- /dev/null
+++ b/libre/virtualbox-libre/os_dynebolic.png
Binary files differ
diff --git a/libre/virtualbox-libre/os_gnewsense.png b/libre/virtualbox-libre/os_gnewsense.png
new file mode 100644
index 000000000..76d9e38b3
--- /dev/null
+++ b/libre/virtualbox-libre/os_gnewsense.png
Binary files differ
diff --git a/libre/virtualbox-libre/os_gnewsense_64.png b/libre/virtualbox-libre/os_gnewsense_64.png
new file mode 100644
index 000000000..8859c34e8
--- /dev/null
+++ b/libre/virtualbox-libre/os_gnewsense_64.png
Binary files differ
diff --git a/libre/virtualbox-libre/os_gnu.png b/libre/virtualbox-libre/os_gnu.png
new file mode 100644
index 000000000..26c4550f9
--- /dev/null
+++ b/libre/virtualbox-libre/os_gnu.png
Binary files differ
diff --git a/libre/virtualbox-libre/os_gnu_64.png b/libre/virtualbox-libre/os_gnu_64.png
new file mode 100644
index 000000000..4161634e9
--- /dev/null
+++ b/libre/virtualbox-libre/os_gnu_64.png
Binary files differ
diff --git a/libre/virtualbox-libre/os_gnuhurd.png b/libre/virtualbox-libre/os_gnuhurd.png
new file mode 100644
index 000000000..26c4550f9
--- /dev/null
+++ b/libre/virtualbox-libre/os_gnuhurd.png
Binary files differ
diff --git a/libre/virtualbox-libre/os_gnulinux.png b/libre/virtualbox-libre/os_gnulinux.png
new file mode 100644
index 000000000..26c4550f9
--- /dev/null
+++ b/libre/virtualbox-libre/os_gnulinux.png
Binary files differ
diff --git a/libre/virtualbox-libre/os_gnulinux_64.png b/libre/virtualbox-libre/os_gnulinux_64.png
new file mode 100644
index 000000000..4161634e9
--- /dev/null
+++ b/libre/virtualbox-libre/os_gnulinux_64.png
Binary files differ
diff --git a/libre/virtualbox-libre/os_musix.png b/libre/virtualbox-libre/os_musix.png
new file mode 100644
index 000000000..fb7b94577
--- /dev/null
+++ b/libre/virtualbox-libre/os_musix.png
Binary files differ
diff --git a/libre/virtualbox-libre/os_musix_64.png b/libre/virtualbox-libre/os_musix_64.png
new file mode 100644
index 000000000..a1bbbbf3a
--- /dev/null
+++ b/libre/virtualbox-libre/os_musix_64.png
Binary files differ
diff --git a/libre/virtualbox-libre/os_os64base.png b/libre/virtualbox-libre/os_os64base.png
new file mode 100644
index 000000000..7aec20314
--- /dev/null
+++ b/libre/virtualbox-libre/os_os64base.png
Binary files differ
diff --git a/libre/virtualbox-libre/os_os64base.xcf b/libre/virtualbox-libre/os_os64base.xcf
new file mode 100644
index 000000000..d8e28e35e
--- /dev/null
+++ b/libre/virtualbox-libre/os_os64base.xcf
Binary files differ
diff --git a/libre/virtualbox-libre/os_osbase.png b/libre/virtualbox-libre/os_osbase.png
new file mode 100644
index 000000000..00f197fca
--- /dev/null
+++ b/libre/virtualbox-libre/os_osbase.png
Binary files differ
diff --git a/libre/virtualbox-libre/os_osbase.xcf b/libre/virtualbox-libre/os_osbase.xcf
new file mode 100644
index 000000000..c4463c857
--- /dev/null
+++ b/libre/virtualbox-libre/os_osbase.xcf
Binary files differ
diff --git a/libre/virtualbox-libre/os_parabola.png b/libre/virtualbox-libre/os_parabola.png
new file mode 100644
index 000000000..757abc484
--- /dev/null
+++ b/libre/virtualbox-libre/os_parabola.png
Binary files differ
diff --git a/libre/virtualbox-libre/os_parabola_64.png b/libre/virtualbox-libre/os_parabola_64.png
new file mode 100644
index 000000000..5ac7c2767
--- /dev/null
+++ b/libre/virtualbox-libre/os_parabola_64.png
Binary files differ
diff --git a/libre/virtualbox-libre/os_trisquel.png b/libre/virtualbox-libre/os_trisquel.png
new file mode 100644
index 000000000..c6f0d3d7a
--- /dev/null
+++ b/libre/virtualbox-libre/os_trisquel.png
Binary files differ
diff --git a/libre/virtualbox-libre/os_trisquel_64.png b/libre/virtualbox-libre/os_trisquel_64.png
new file mode 100644
index 000000000..ebca3dd43
--- /dev/null
+++ b/libre/virtualbox-libre/os_trisquel_64.png
Binary files differ
diff --git a/libre/virtualbox-libre/os_ututo.png b/libre/virtualbox-libre/os_ututo.png
new file mode 100644
index 000000000..e1dffb575
--- /dev/null
+++ b/libre/virtualbox-libre/os_ututo.png
Binary files differ
diff --git a/libre/virtualbox-libre/os_ututo_64.png b/libre/virtualbox-libre/os_ututo_64.png
new file mode 100644
index 000000000..158468e0a
--- /dev/null
+++ b/libre/virtualbox-libre/os_ututo_64.png
Binary files differ
diff --git a/libre/virtualbox-libre/os_venenux.png b/libre/virtualbox-libre/os_venenux.png
new file mode 100644
index 000000000..5e0c1585d
--- /dev/null
+++ b/libre/virtualbox-libre/os_venenux.png
Binary files differ
diff --git a/libre/virtualbox-libre/vboxbuild b/libre/virtualbox-libre/vboxbuild
index 4bc8e0c9d..27519950f 100644
--- a/libre/virtualbox-libre/vboxbuild
+++ b/libre/virtualbox-libre/vboxbuild
@@ -1,13 +1,23 @@
#!/bin/bash
-. /etc/rc.conf
-. /etc/rc.d/functions
. /etc/vbox/vbox.cfg
MODLIST=()
LOG="/var/log/vbox-install.log"
>| "$LOG"
+stat_busy() {
+ printf '==> %s ... ' "$1"
+}
+
+stat_done() {
+ echo 'done'
+}
+
+stat_fail() {
+ echo 'failed'
+}
+
if [[ $INSTALL_DIR ]]; then
VBOXMANAGE=$INSTALL_DIR/VBoxManage
BUILDVBOXDRV=$INSTALL_DIR/src/vboxdrv/build_in_tmp
@@ -25,16 +35,16 @@ if [[ -f /proc/modules ]]; then
fi
if (( ${#MODLIST[*]} )); then
- stat_busy "Unloading VirtualBox kernel modules"
+ stat_busy "Unloading VirtualBox kernel libre modules"
modprobe -ar "${MODLIST[@]}" && stat_done || stat_fail
fi
-for kdir in /lib/modules/[2-3]*; do
+for kdir in /usr/lib/modules/[2-3]*; do
if [[ ! -d $kdir/kernel ]]; then
# found a stale kernel
mods=("$kdir/extramodules"{drv,netadp,netflt,pci}.ko*)
if (( ${#mods[@]} )); then
- stat_busy "Removing all old VirtualBox kernel modules"
+ stat_busy "Removing all old VirtualBox kernel libre modules"
if rm -f "${mods[@]}" &&
rmdir -p --ignore-fail-on-non-empty "$kdir/extramodules" 2>/dev/null; then
stat_done
@@ -51,15 +61,15 @@ if (( ! $# )); then
fi
for kernver; do
- export KERN_DIR=/lib/modules/$kernver/build
- export MODULE_DIR=/lib/modules/$kernver/extramodules
+ export KERN_DIR=/usr/lib/modules/$kernver/build
+ export MODULE_DIR=/usr/lib/modules/$kernver/extramodules
if [[ ! -d $KERN_DIR ]]; then
- printf "error: \`%s' does not appear to be a valid kernel build directory.\n" \
+ printf "error: \`%s' does not appear to be a valid kernel libre build directory.\n" \
"$KERN_DIR"
continue
fi
- stat_busy "Recompiling VirtualBox kernel modules ($kernver)"
+ stat_busy "Recompiling VirtualBox kernel libre modules ($kernver)"
if ! $BUILDVBOXDRV \
--save-module-symvers /tmp/vboxdrv-Module.symvers \
--no-print-directory install >> $LOG 2>&1; then
@@ -80,6 +90,6 @@ for kernver; do
done
if (( ${#MODLIST[*]} )); then
- stat_busy "Reloading VirtualBox kernel modules"
+ stat_busy "Reloading VirtualBox kernel libre modules"
modprobe -a "${MODLIST[@]}" && stat_done || stat_fail
fi
diff --git a/libre/virtualbox-libre/vboxdrv-reference.patch b/libre/virtualbox-libre/vboxdrv-reference.patch
index 682175798..9599a3a49 100644
--- a/libre/virtualbox-libre/vboxdrv-reference.patch
+++ b/libre/virtualbox-libre/vboxdrv-reference.patch
@@ -1,47 +1,91 @@
diff -Nur VirtualBox-4.1.6_OSE.orig/src/VBox/Frontends/VirtualBox/src/main.cpp VirtualBox-4.1.6_OSE/src/VBox/Frontends/VirtualBox/src/main.cpp
--- VirtualBox-4.1.6_OSE.orig/src/VBox/Frontends/VirtualBox/src/main.cpp 2011-11-04 17:22:13.636083176 +0000
+++ VirtualBox-4.1.6_OSE/src/VBox/Frontends/VirtualBox/src/main.cpp 2011-11-04 17:48:58.915541368 +0000
-@@ -75,10 +75,9 @@
- "The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or "
+@@ -67,38 +67,34 @@
+
+ /* XXX Temporarily. Don't rely on the user to hack the Makefile himself! */
+ QString g_QStrHintLinuxNoMemory = QApplication::tr(
+- "This error means that the kernel driver was either not able to "
++ "This error means that the kernel libre driver was either not able to "
+ "allocate enough memory or that some mapping operation failed."
+ );
+
+ QString g_QStrHintLinuxNoDriver = QApplication::tr(
+- "The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or "
++ "The VirtualBox Linux-libre kernel driver (vboxdrv) is either not loaded or "
"there is a permission problem with /dev/vboxdrv. Please reinstall the kernel "
- "module by executing<br/><br/>"
+- "module by executing<br/><br/>"
- " <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>"
- "as root. If it is available in your distribution, you should install the "
- "DKMS package first. This package keeps track of Linux kernel changes and "
- "recompiles the vboxdrv kernel module if necessary."
-+ " <font color=blue>'pacman -S virtualbox-modules'</font><br/><br/>"
-+ "as root. If you don't use our stock kernel, install virtualbox-source and"
-+ "execute /usr/bin/vboxbuild ."
++ "libre module by executing<br/><br/>"
++ " <font color=blue>'pacman -S virtualbox-libre-modules'</font><br/><br/>"
++ "as root. If you don't use our stock kernel libre, install virtualbox-libre-source and "
++ "execute dkms install vboxhost/4.1.18 ."
);
QString g_QStrHintOtherWrongDriverVersion = QApplication::tr(
-@@ -90,11 +89,8 @@
-
+- "The VirtualBox kernel modules do not match this version of "
++ "The VirtualBox kernel libre modules do not match this version of "
+ "VirtualBox. The installation of VirtualBox was apparently not "
+ "successful. Please try completely uninstalling and reinstalling "
+ "VirtualBox."
+ );
+
QString g_QStrHintLinuxWrongDriverVersion = QApplication::tr(
- "The VirtualBox kernel modules do not match this version of "
+- "The VirtualBox kernel modules do not match this version of "
- "VirtualBox. The installation of VirtualBox was apparently not "
- "successful. Executing<br/><br/>"
- " <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>"
- "may correct this. Make sure that you do not mix the "
- "OSE version and the PUEL version of VirtualBox."
-+ "VirtualBox. Reload the modules or if you don't use our stock kernel execute<br/><br/> "
-+ " <font color=blue>'/usr/bin/vboxbuild'</font><br/><br/>"
++ "The VirtualBox kernel libre modules do not match this version of "
++ "VirtualBox. Reload the modules or if you don't use our stock kernel libre execute<br/><br/> "
++ " <font color=blue>'dkms install vboxhost/4.1.18'</font><br/><br/>"
);
-
+
QString g_QStrHintOtherNoDriver = QApplication::tr(
+- "Make sure the kernel module has been loaded successfully."
++ "Make sure the kernel libre module has been loaded successfully."
+ );
+
+ /* I hope this isn't (C), (TM) or (R) Microsoft support ;-) */
+@@ -590,7 +586,7 @@
+ case VERR_VM_DRIVER_NOT_INSTALLED:
+ case VERR_VM_DRIVER_LOAD_ERROR:
+ msgText += QApplication::tr (
+- "<b>Cannot access the kernel driver!</b><br/><br/>");
++ "<b>Cannot access the kernel libre driver!</b><br/><br/>");
+ # ifdef RT_OS_LINUX
+ msgText += g_QStrHintLinuxNoDriver;
+ # else
+@@ -603,7 +599,7 @@
+ break;
+ # endif
+ case VERR_VM_DRIVER_NOT_ACCESSIBLE:
+- msgText += QApplication::tr ("Kernel driver not accessible");
++ msgText += QApplication::tr ("Kernel libre driver not accessible");
+ break;
+ case VERR_VM_DRIVER_VERSION_MISMATCH:
+ # ifdef RT_OS_LINUX
diff -Nur VirtualBox-4.1.6_OSE.orig/src/VBox/Installer/linux/VBox.sh VirtualBox-4.1.6_OSE/src/VBox/Installer/linux/VBox.sh
--- VirtualBox-4.1.6_OSE.orig/src/VBox/Installer/linux/VBox.sh 2011-11-04 17:22:13.549415814 +0000
+++ VirtualBox-4.1.6_OSE/src/VBox/Installer/linux/VBox.sh 2011-11-04 17:56:50.735874087 +0000
-@@ -32,17 +32,18 @@
+@@ -30,19 +30,20 @@
+ SHUTDOWN="true"
+ elif ! lsmod|grep -q vboxdrv; then
cat << EOF
- WARNING: The vboxdrv kernel module is not loaded. Either there is no module
- available for the current kernel (`uname -r`) or it failed to
+-WARNING: The vboxdrv kernel module is not loaded. Either there is no module
+- available for the current kernel (`uname -r`) or it failed to
- load. Please recompile the kernel module and install it by
-+ load. Please reinstall the kernel module virtualbox-modules or
-+ if you don't use our stock kernel compile the modules with
++WARNING: The vboxdrv kernel libre module is not loaded. Either there is no module
++ available for the current kernel libre (`uname -r`) or it failed to
++ load. Please reinstall the kernel libre module virtualbox-libre-modules or
++ if you don't use our stock kernel libre compile the modules with
- sudo /etc/init.d/vboxdrv setup
-+ sudo /usr/bin/vboxbuild
++ sudo dkms install vboxhost/4.1.18
You will not be able to start VMs until this problem is fixed.
EOF
@@ -55,3 +99,14 @@ diff -Nur VirtualBox-4.1.6_OSE.orig/src/VBox/Installer/linux/VBox.sh VirtualBox-
and if that is not successful, try to re-install the package.
+@@ -52,9 +53,8 @@
+
+ if [ -f /etc/vbox/module_not_compiled ]; then
+ cat << EOF
+-WARNING: The compilation of the vboxdrv.ko kernel module failed during the
++WARNING: The compilation of the vboxdrv.ko kernel libre module failed during the
+ installation for some reason. Starting a VM will not be possible.
+- Please consult the User Manual for build instructions.
+ EOF
+ fi
+ \ No newline at end of file
diff --git a/libre/virtualbox-libre/vboxservice.conf b/libre/virtualbox-libre/vboxservice.conf
new file mode 100644
index 000000000..9d4ec629f
--- /dev/null
+++ b/libre/virtualbox-libre/vboxservice.conf
@@ -0,0 +1,2 @@
+# VBoxService -h
+VBOX_SERVICE_OPTION=""
diff --git a/libre/virtualbox-libre/vboxservice.rc b/libre/virtualbox-libre/vboxservice.rc
new file mode 100644
index 000000000..5a62d69a3
--- /dev/null
+++ b/libre/virtualbox-libre/vboxservice.rc
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+. /etc/conf.d/${0##*/}
+
+name=VBoxService
+PID=$(pidof -o %PPID $name)
+
+case "$1" in
+ start)
+ stat_busy 'Starting VirtualBox Guest Service'
+ [[ -z "$PID" ]] && ${name} $VBOX_SERVICE_OPTION &>/dev/null \
+ && { add_daemon ${0##*/}; stat_done; } \
+ || { stat_fail; exit 1; }
+ ;;
+ stop)
+ stat_busy 'Stopping VirtualBox Guest Service'
+ [[ -n "$PID" ]] && kill $PID &>/dev/null \
+ && { rm_daemon ${0##*/}; stat_done; } \
+ || { stat_fail; exit 1; }
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ status)
+ stat_busy 'Checking VirtualBox Guest Service status'
+ ck_status ${0##*/}
+ ;;
+ *)
+ echo "usage: ${0##*/} {start|stop|restart|status}" >&2
+ exit 1
+esac
+
+exit 0
+
+# vim:set ts=2 sw=2 ft=sh et:
diff --git a/libre/virtualbox-libre/vboxservice.service b/libre/virtualbox-libre/vboxservice.service
new file mode 100644
index 000000000..bbd61617d
--- /dev/null
+++ b/libre/virtualbox-libre/vboxservice.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=VirtualBox Guest Service
+ConditionVirtualization=oracle
+
+[Service]
+ExecStart=/usr/bin/VBoxService -f
+
+[Install]
+WantedBy=multi-user.target
diff --git a/libre/virtualbox-libre/vboxweb.conf b/libre/virtualbox-libre/vboxweb.conf
index 49d82d828..c36f6a143 100644
--- a/libre/virtualbox-libre/vboxweb.conf
+++ b/libre/virtualbox-libre/vboxweb.conf
@@ -3,9 +3,9 @@
# WebService Variables
#VBOXWEB_LOGFILE=
-#$VBOXWEB_HOST=
-#$VBOXWEB_PORT=
-#$VBOXWEB_TIMEOUT=
-#$VBOXWEB_CHECK_INTERVAL=
-#$VBOXWEB_THREADS=
-#$VBOXWEB_KEEPALIVE=
+#VBOXWEB_HOST=
+#VBOXWEB_PORT=
+#VBOXWEB_TIMEOUT=
+#VBOXWEB_CHECK_INTERVAL=
+#VBOXWEB_THREADS=
+#VBOXWEB_KEEPALIVE=
diff --git a/libre/virtualbox-libre/vboxweb.service b/libre/virtualbox-libre/vboxweb.service
new file mode 100644
index 000000000..303381597
--- /dev/null
+++ b/libre/virtualbox-libre/vboxweb.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=VirtualBox Web Service
+After=network.target
+
+[Service]
+Type=forking
+PIDFile=/run/vboxweb.pid
+ExecStart=/usr/bin/vboxwebsrv --pidfile /run/vboxweb.pid --background
+
+[Install]
+WantedBy=multi-user.target
diff --git a/libre/virtualbox-libre/virtualbox-libre-parabola-additions.install b/libre/virtualbox-libre/virtualbox-libre-parabola-additions.install
new file mode 100644
index 000000000..38bbe807d
--- /dev/null
+++ b/libre/virtualbox-libre/virtualbox-libre-parabola-additions.install
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+# arg 1: the new package version
+post_install() {
+ getent group vboxsf > /dev/null || groupadd -g 109 vboxsf
+ true
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ post_install "$1"
+ # rename /etc/rc.d/vboxservice
+ if [ "`vercmp $2 4.1.18-3`" -lt 0 ]; then
+ cat << EOF
+==> rc.d vbox-service script was renamed to vboxservice.
+EOF
+ fi
+ # fix gid of vboxsf
+ if [ "`vercmp $2 4.1.18-4`" -lt 0 ]; then
+ groupmod -g 109 vboxsf
+ fi
+ true
+}
+
+# arg 1: the old package version
+post_remove() {
+ groupdel vboxsf >/dev/null 2>&1 || true
+}
+
+# vim:set ts=2 sw=2 ft=sh et:
diff --git a/libre/virtualbox-libre/virtualbox-libre-parabola-source.install b/libre/virtualbox-libre/virtualbox-libre-parabola-source.install
new file mode 100644
index 000000000..966fb5681
--- /dev/null
+++ b/libre/virtualbox-libre/virtualbox-libre-parabola-source.install
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+# arg 1: the new package version
+post_install() {
+ cat << EOF
+==> To build and install your modules run dkms install vboxguest/${1%-*}
+==> To do this automatically at startup you can add dkms in your DAEMONS
+EOF
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+pre_upgrade() {
+ pre_remove "$2"
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ post_install "$1"
+}
+
+# arg 1: the old package version
+pre_remove() {
+ # Remove modules using dkms
+ [ -n "${1%-*}" ] && dkms remove vboxguest/${1%-*} --all >/dev/null || true
+}
+
+# vim:set ts=2 sw=2 ft=sh et:
diff --git a/libre/virtualbox-libre/virtualbox-libre-source.install b/libre/virtualbox-libre/virtualbox-libre-source.install
new file mode 100644
index 000000000..6a3994c8d
--- /dev/null
+++ b/libre/virtualbox-libre/virtualbox-libre-source.install
@@ -0,0 +1,29 @@
+#/bin/sh
+
+# arg 1: the new package version
+post_install() {
+ cat << EOF
+==> To build and install your modules run dkms install vboxhost/${1%-*}
+==> To do this automatically at startup you can add dkms in your DAEMONS
+EOF
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+pre_upgrade() {
+ pre_remove "$2"
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ post_install "$1"
+}
+
+# arg 1: the old package version
+pre_remove() {
+ # Remove modules using dkms
+ [ -n "${1%-*}" ] && dkms remove vboxhost/${1%-*} --all >/dev/null || true
+}
+
+# vim:set ts=2 sw=2 ft=sh et:
diff --git a/libre/virtualbox-libre/virtualbox-libre.install b/libre/virtualbox-libre/virtualbox-libre.install
new file mode 100644
index 000000000..3bce203ef
--- /dev/null
+++ b/libre/virtualbox-libre/virtualbox-libre.install
@@ -0,0 +1,57 @@
+#!/bin/sh
+
+utils() {
+ if [ -x usr/bin/update-mime-database ]; then
+ update-mime-database usr/share/mime > /dev/null 2>&1
+ fi
+
+ if [ -x usr/bin/xdg-icon-resource ]; then
+ xdg-icon-resource forceupdate --theme hicolor > /dev/null 2>&1
+ fi
+
+ if [ -x usr/bin/update-desktop-database ]; then
+ usr/bin/update-desktop-database -q
+ fi
+
+ if [ -x usr/bin/udevadm ]; then
+ usr/bin/udevadm control --reload
+ fi
+}
+
+# arg 1: the new package version
+post_install() {
+ cat << EOF
+ virtualbox-libre is a libre version of VirtualBox without Oracle VM VirtualBox
+ Extension Pack support and includes a modified list with free distros presets
+ endorsed by the Free Software Foundation for the virtual machine creation wizard.
+ Non-free distros and others OS presets were removed.
+
+ It could generate problems with virtual machines created on VirtualBox from
+ others distros or operating systems.
+
+ To solve it, read https://parabolagnulinux.org/news/virtualbox-libre-new-version
+EOF
+
+ getent group vboxusers >/dev/null || usr/sbin/groupadd -g 108 vboxusers
+ utils
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ post_install "$1"
+ if [ "$(vercmp $2 4.1.6-1)" -lt 0 ]; then
+ cat << EOF
+===> Starting with virtualbox-libre version 4.1.6-1, kernel libre modules handling is done by virtualbox-libre-modules.
+===> Use virtualbox-libre-source package if you don't use our stock linux-libre package.
+EOF
+ fi
+}
+
+# arg 1: the old package version
+post_remove() {
+ groupdel vboxusers >/dev/null 2>&1 || true
+ utils
+}
+
+# vim:set ts=2 sw=2 ft=sh et:
diff --git a/libre/virtualbox-modules-lts/PKGBUILD b/libre/virtualbox-modules-lts/PKGBUILD
index 80caec248..2daecb990 100644
--- a/libre/virtualbox-modules-lts/PKGBUILD
+++ b/libre/virtualbox-modules-lts/PKGBUILD
@@ -1,13 +1,13 @@
# $Id$
# Maintainer: Bartłomiej Piotrowski <nospam@bpiotrowski.pl>
-# Maintainer (Parabola): Márcio Silva <coadde@adinet.com.uy>
+# Maintainer (Parabola): Márcio Silva <coadde@lavabit.com>
# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
-# Maintainer (Parabola): Jorge López <jorginho@adinet.com.uy>
+# Maintainer (Parabola): Jorge López <jorginho@lavabit.com>
pkgbase=virtualbox-modules-lts
pkgname=('virtualbox-modules-lts' 'virtualbox-parabola-modules-lts')
pkgver=4.1.18
-pkgrel=1
+pkgrel=2
arch=('i686' 'x86_64' 'mips64el')
url='http://virtualbox.org'
license=('GPL')
@@ -20,9 +20,9 @@ md5sums=('38db0a87cba659b484af868b0c2bd3ac'
'ed1341881437455d9735875ddf455fbe')
_extramodules=extramodules-3.0-LIBRE-LTS
-_kernver=$(pacman -Ss linux-libre-lts | awk 'NR==1{print $2}')-LIBRE-LTS
+_kernver=$(pacman -Q linux-libre-lts | awk '{ printf "%s-LIBRE-LTS", $2; exit }')
-export KERN_DIR=/lib/modules/${_kernver}/build
+export KERN_DIR=/usr/lib/modules/${_kernver}/build
export KERN_INCL=/usr/src/linux-${_kernver}/include/
build() {
@@ -65,7 +65,7 @@ package_virtualbox-parabola-modules-lts(){
for module in vboxguest.ko vboxsf.ko vboxvideo.ko; do
install -D -m644 ${module} \
- "$pkgdir/lib/modules/${_extramodules}/${module}"
+ "$pkgdir/usr/lib/modules/${_extramodules}/${module}"
done
install -D -m 0644 "$srcdir/60-vboxguest.rules" \
@@ -86,16 +86,16 @@ package_virtualbox-modules-lts(){
cd "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/src"
install -D -m644 vboxdrv.ko \
- "$pkgdir/lib/modules/${_extramodules}/vboxdrv.ko"
+ "$pkgdir/usr/lib/modules/${_extramodules}/vboxdrv.ko"
install -D -m644 vboxnetadp.ko \
- "$pkgdir/lib/modules/${_extramodules}/vboxnetadp.ko"
+ "$pkgdir/usr/lib/modules/${_extramodules}/vboxnetadp.ko"
install -D -m644 vboxnetflt.ko \
- "$pkgdir/lib/modules/${_extramodules}/vboxnetflt.ko"
+ "$pkgdir/usr/lib/modules/${_extramodules}/vboxnetflt.ko"
install -D -m644 vboxpci.ko \
- "$pkgdir/lib/modules/${_extramodules}/vboxpci.ko"
+ "$pkgdir/usr/lib/modules/${_extramodules}/vboxpci.ko"
- find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \;
+ find "${pkgdir}" -name '*.ko' -exec gzip -9 {} +
}
diff --git a/libre/virtualbox-modules-lts/virtualbox-modules-lts.install b/libre/virtualbox-modules-lts/virtualbox-modules-lts.install
index 014fa0b88..5387563a6 100644
--- a/libre/virtualbox-modules-lts/virtualbox-modules-lts.install
+++ b/libre/virtualbox-modules-lts/virtualbox-modules-lts.install
@@ -5,14 +5,14 @@ post_install() {
===> You must load vboxdrv module before starting VirtualBox:
===> # modprobe vboxdrv
EOF
- depmod $(cat /lib/modules/$EXTRAMODULES/version)
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
}
post_upgrade() {
- depmod $(cat /lib/modules/$EXTRAMODULES/version)
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
echo 'In order to use the new version, reload all virtualbox modules manually.'
}
post_remove() {
- depmod $(cat /lib/modules/$EXTRAMODULES/version)
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
}
diff --git a/libre/virtualbox-modules-lts/virtualbox-parabola-modules-lts.install b/libre/virtualbox-modules-lts/virtualbox-parabola-modules-lts.install
index 80d966a9d..54a052390 100644
--- a/libre/virtualbox-modules-lts/virtualbox-parabola-modules-lts.install
+++ b/libre/virtualbox-modules-lts/virtualbox-parabola-modules-lts.install
@@ -4,13 +4,13 @@ post_install() {
cat << EOF
===> You may want to load vboxguest, vboxsf and vboxvideo
EOF
- depmod $(cat /lib/modules/$EXTRAMODULES/version)
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
}
post_upgrade() {
- depmod $(cat /lib/modules/$EXTRAMODULES/version)
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
}
post_remove() {
- depmod $(cat /lib/modules/$EXTRAMODULES/version)
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
}
diff --git a/libre/virtualbox-modules/PKGBUILD b/libre/virtualbox-modules/PKGBUILD
index 2e747105a..5e0feec6d 100644
--- a/libre/virtualbox-modules/PKGBUILD
+++ b/libre/virtualbox-modules/PKGBUILD
@@ -1,12 +1,12 @@
# $Id$
#Maintainer: Ionut Biru <ibiru@archlinux.org>
-#Maintainer (Parabola): Jorge López <jorginho@adinet.com.uy>
+#Maintainer (Parabola): Jorge López <jorginho@lavabit.com>
#Contributor (Parabola): André Silva <emulatorman@lavabit.com>
pkgbase=virtualbox-modules
pkgname=('virtualbox-modules' 'virtualbox-parabola-modules')
pkgver=4.1.18
-pkgrel=1
+pkgrel=5
arch=('i686' 'x86_64')
url='http://virtualbox.org'
license=('GPL')
@@ -18,10 +18,10 @@ md5sums=('38db0a87cba659b484af868b0c2bd3ac'
'4c88bd122677a35f68abd76eb01b378b'
'ed1341881437455d9735875ddf455fbe')
-_extramodules=extramodules-3.4-LIBRE
-_kernver="$(cat /lib/modules/${_extramodules}/version || true)"
+_extramodules=extramodules-3.5-LIBRE
+_kernver="$(cat /usr/lib/modules/${_extramodules}/version || true)"
-export KERN_DIR=/lib/modules/${_kernver}/build
+export KERN_DIR=/usr/lib/modules/${_kernver}/build
export KERN_INCL=/usr/src/linux-${_kernver}/include/
build() {
@@ -53,7 +53,7 @@ package_virtualbox-parabola-modules(){
pkgdesc="Additions only for Parabola guests (kernel modules)"
license=('GPL')
install=virtualbox-parabola-modules.install
- depends=('linux-libre>=3.4' 'linux-libre<3.5')
+ depends=('linux-libre>=3.5' 'linux-libre<3.6')
replaces=('virtualbox-archlinux-modules')
conflicts=('virtualbox-archlinux-modules')
provides=("virtualbox-archlinux-modules=$pkgver")
@@ -79,7 +79,7 @@ package_virtualbox-modules(){
pkgdesc="Kernel modules for VirtualBox"
license=('GPL')
install=virtualbox-modules.install
- depends=('linux-libre>=3.4' 'linux-libre<3.5')
+ depends=('linux-libre>=3.5' 'linux-libre<3.6')
source "$srcdir/VirtualBox-${pkgver}/env.sh"
@@ -87,18 +87,18 @@ package_virtualbox-modules(){
cd "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/src"
install -D -m644 vboxdrv.ko \
- "$pkgdir/lib/modules/${_extramodules}/vboxdrv.ko"
+ "$pkgdir/usr/lib/modules/${_extramodules}/vboxdrv.ko"
install -D -m644 vboxnetadp.ko \
- "$pkgdir/lib/modules/${_extramodules}/vboxnetadp.ko"
+ "$pkgdir/usr/lib/modules/${_extramodules}/vboxnetadp.ko"
install -D -m644 vboxnetflt.ko \
- "$pkgdir/lib/modules/${_extramodules}/vboxnetflt.ko"
+ "$pkgdir/usr/lib/modules/${_extramodules}/vboxnetflt.ko"
install -D -m644 vboxpci.ko \
- "$pkgdir/lib/modules/${_extramodules}/vboxpci.ko"
+ "$pkgdir/usr/lib/modules/${_extramodules}/vboxpci.ko"
- find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \;
+ find "${pkgdir}" -name '*.ko' -exec gzip -9 {} +
sed -i -e "s/EXTRAMODULES='.*'/EXTRAMODULES='${_extramodules}'/" "$startdir/virtualbox-modules.install"
}
diff --git a/libre/virtualbox-modules/virtualbox-modules.install b/libre/virtualbox-modules/virtualbox-modules.install
index 14242eaf4..3f2a12a3f 100644
--- a/libre/virtualbox-modules/virtualbox-modules.install
+++ b/libre/virtualbox-modules/virtualbox-modules.install
@@ -3,17 +3,17 @@ post_install() {
===> You must load vboxdrv module before starting VirtualBox:
===> # modprobe vboxdrv
EOF
- EXTRAMODULES='extramodules-3.4-LIBRE'
- depmod $(cat /lib/modules/$EXTRAMODULES/version)
+ EXTRAMODULES='extramodules-3.5-LIBRE'
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
}
post_upgrade() {
- EXTRAMODULES='extramodules-3.4-LIBRE'
- depmod $(cat /lib/modules/$EXTRAMODULES/version)
+ EXTRAMODULES='extramodules-3.5-LIBRE'
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
echo 'In order to use the new version, reload all virtualbox modules manually.'
}
post_remove() {
- EXTRAMODULES='extramodules-3.4-LIBRE'
- depmod $(cat /lib/modules/$EXTRAMODULES/version)
+ EXTRAMODULES='extramodules-3.5-LIBRE'
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
}
diff --git a/libre/virtualbox-modules/virtualbox-parabola-modules.install b/libre/virtualbox-modules/virtualbox-parabola-modules.install
index 0e101aedf..c3419c991 100644
--- a/libre/virtualbox-modules/virtualbox-parabola-modules.install
+++ b/libre/virtualbox-modules/virtualbox-parabola-modules.install
@@ -2,16 +2,16 @@ post_install() {
cat << EOF
===> You may want to load vboxguest, vboxsf and vboxvideo
EOF
- EXTRAMODULES='extramodules-3.4-LIBRE'
- depmod $(cat /lib/modules/$EXTRAMODULES/version)
+ EXTRAMODULES='extramodules-3.5-LIBRE'
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
}
post_upgrade() {
- EXTRAMODULES='extramodules-3.4-LIBRE'
- depmod $(cat /lib/modules/$EXTRAMODULES/version)
+ EXTRAMODULES='extramodules-3.5-LIBRE'
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
}
post_remove() {
- EXTRAMODULES='extramodules-3.4-LIBRE'
- depmod $(cat /lib/modules/$EXTRAMODULES/version)
+ EXTRAMODULES='extramodules-3.5-LIBRE'
+ depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
}
diff --git a/libre/xulrunner-libre/Bug-756390-Make-the-Reset-Firefox-feature-more-gener.patch b/libre/xulrunner-libre/Bug-756390-Make-the-Reset-Firefox-feature-more-gener.patch
index 4da03a569..240c3d4e8 100644
--- a/libre/xulrunner-libre/Bug-756390-Make-the-Reset-Firefox-feature-more-gener.patch
+++ b/libre/xulrunner-libre/Bug-756390-Make-the-Reset-Firefox-feature-more-gener.patch
@@ -2,35 +2,20 @@ From: Mike Hommey <mh@glandium.org>
Date: Tue, 5 Jun 2012 08:57:06 +0200
Subject: Bug 756390 - Make the "Reset Firefox" feature more generic
----
- browser/components/migration/content/migration.js | 15 ++++++++++-----
- browser/components/migration/content/migration.xul | 2 +-
- .../migration/src/BrowserProfileMigrators.manifest | 2 +-
- .../components/migration/src/FirefoxProfileMigrator.js | 2 +-
- browser/components/migration/src/ProfileMigrator.js | 4 ++++
- .../en-US/chrome/browser/migration/migration.dtd | 2 --
- .../en-US/chrome/browser/migration/migration.properties | 11 +++++------
- toolkit/content/aboutSupport.js | 8 ++++----
- toolkit/content/jar.mn | 2 +-
- toolkit/content/resetProfile.js | 6 ++----
- toolkit/profile/nsIProfileMigrator.idl | 10 +++++++++-
- toolkit/xre/nsAppRunner.cpp | 2 +-
- 83 files changed, 394 insertions(+), 382 deletions(-)
-
diff --git a/browser/components/migration/content/migration.js b/browser/components/migration/content/migration.js
-index ffb0c34..442a5ff 100644
+index 0e8ccf5..fa46c08 100644
--- a/browser/components/migration/content/migration.js
+++ b/browser/components/migration/content/migration.js
-@@ -314,7 +314,7 @@ var MigrationWizard = {
+@@ -249,7 +249,7 @@ var MigrationWizard = {
}
- var bundle = document.getElementById("brandBundle");
+ var brandBundle = document.getElementById("brandBundle");
- // These strings don't exist when not using official branding. If that's
+ // These strings may not exist when not using official branding. If that's
// the case, just skip this page.
try {
- var pageTitle = bundle.getString("homePageMigrationPageTitle");
-@@ -346,8 +346,8 @@ var MigrationWizard = {
+ var pageTitle = brandBundle.getString("homePageMigrationPageTitle");
+@@ -281,8 +281,8 @@ var MigrationWizard = {
case "chrome":
source = "sourceNameChrome";
break;
@@ -41,99 +26,131 @@ index ffb0c34..442a5ff 100644
break;
}
-@@ -357,8 +357,13 @@ var MigrationWizard = {
+@@ -292,7 +292,12 @@ var MigrationWizard = {
var oldHomePageURL = this._migrator.sourceHomePageURL;
if (oldHomePageURL && source) {
-- var bundle2 = document.getElementById("bundle");
-- var appName = bundle2.getString(source);
+- var appName = MigrationUtils.getLocalizedString(source);
+ var appName;
+ if (source == "brand") {
-+ appName = bundle.GetStringFromName("brandFullName");
++ appName = brandBundle.GetStringFromName("brandFullName");
+ } else {
-+ var bundle2 = document.getElementById("bundle");
-+ appName = bundle2.getString(source);
++ appName = MigrationUtils.getLocalizedString(source);
+ }
- var oldHomePageLabel = bundle.getFormattedString("homePageImport",
- [appName]);
+ var oldHomePageLabel =
+ brandBundle.getFormattedString("homePageImport", [appName]);
var oldHomePage = document.getElementById("oldHomePage");
diff --git a/browser/components/migration/content/migration.xul b/browser/components/migration/content/migration.xul
-index f8653b1..f3ac62a 100644
+index f030756..23e37ff 100644
--- a/browser/components/migration/content/migration.xul
+++ b/browser/components/migration/content/migration.xul
-@@ -76,7 +76,7 @@
- #endif
- #endif
+@@ -42,7 +42,7 @@
+ #elifdef XP_UNIX
<radio id="chrome" label="&importFromChrome.label;" accesskey="&importFromChrome.accesskey;"/>
+ #endif
- <radio id="firefox" label="&importFromFirefox.label;" accesskey="&importFromFirefox.accesskey;"/>
+ <radio id="self" hidden="true"/>
- <radio id="fromfile" label="&importFromHTMLFile.label;" accesskey="&importFromHTMLFile.accesskey;" hidden="true"/>
<radio id="nothing" label="&importFromNothing.label;" accesskey="&importFromNothing.accesskey;" hidden="true"/>
</radiogroup>
+ <label id="noSources" hidden="true">&noMigrationSources.label;</label>
diff --git a/browser/components/migration/src/BrowserProfileMigrators.manifest b/browser/components/migration/src/BrowserProfileMigrators.manifest
-index f49e481..e490ddf 100644
+index d7fec75..d531b83 100644
--- a/browser/components/migration/src/BrowserProfileMigrators.manifest
+++ b/browser/components/migration/src/BrowserProfileMigrators.manifest
-@@ -3,4 +3,4 @@ contract @mozilla.org/toolkit/profile-migrator;1 {6F8BB968-C14F-4D6F-9733-6C6737
+@@ -3,7 +3,7 @@ contract @mozilla.org/toolkit/profile-migrator;1 {6F8BB968-C14F-4D6F-9733-6C6737
component {4cec1de4-1671-4fc3-a53e-6c539dc77a26} ChromeProfileMigrator.js
contract @mozilla.org/profile/migrator;1?app=browser&type=chrome {4cec1de4-1671-4fc3-a53e-6c539dc77a26}
component {91185366-ba97-4438-acba-48deaca63386} FirefoxProfileMigrator.js
-contract @mozilla.org/profile/migrator;1?app=browser&type=firefox {91185366-ba97-4438-acba-48deaca63386}
+contract @mozilla.org/profile/migrator;1?app=browser&type=self {91185366-ba97-4438-acba-48deaca63386}
+ #ifdef HAS_IE_MIGRATOR
+ component {3d2532e3-4932-4774-b7ba-968f5899d3a4} IEProfileMigrator.js
+ contract @mozilla.org/profile/migrator;1?app=browser&type=ie {3d2532e3-4932-4774-b7ba-968f5899d3a4}
diff --git a/browser/components/migration/src/FirefoxProfileMigrator.js b/browser/components/migration/src/FirefoxProfileMigrator.js
-index 7b4a6e4..add5bc4 100644
+index a6598fe..8f83da8 100644
--- a/browser/components/migration/src/FirefoxProfileMigrator.js
+++ b/browser/components/migration/src/FirefoxProfileMigrator.js
-@@ -448,7 +448,7 @@ FirefoxProfileMigrator.prototype = {
- ]),
+@@ -88,7 +88,7 @@ Object.defineProperty(FirefoxProfileMigrator.prototype, "startupOnlyMigrator", {
- classDescription: "Firefox Profile Migrator",
-- contractID: "@mozilla.org/profile/migrator;1?app=browser&type=firefox",
-+ contractID: "@mozilla.org/profile/migrator;1?app=browser&type=self",
- classID: Components.ID("{91185366-ba97-4438-acba-48deaca63386}")
- };
-diff --git a/browser/components/migration/src/ProfileMigrator.js b/browser/components/migration/src/ProfileMigrator.js
-index ea66675..fe4df10 100644
---- a/browser/components/migration/src/ProfileMigrator.js
-+++ b/browser/components/migration/src/ProfileMigrator.js
-@@ -51,6 +51,10 @@ ProfileMigrator.prototype = {
- params);
+ FirefoxProfileMigrator.prototype.classDescription = "Firefox Profile Migrator";
+-FirefoxProfileMigrator.prototype.contractID = "@mozilla.org/profile/migrator;1?app=browser&type=firefox";
++FirefoxProfileMigrator.prototype.contractID = "@mozilla.org/profile/migrator;1?app=browser&type=self";
+ FirefoxProfileMigrator.prototype.classID = Components.ID("{91185366-ba97-4438-acba-48deaca63386}");
+
+ const NSGetFactory = XPCOMUtils.generateNSGetFactory([FirefoxProfileMigrator]);
+diff --git a/browser/components/migration/src/MigrationUtils.jsm b/browser/components/migration/src/MigrationUtils.jsm
+index 0669aa8..19552e3 100644
+--- a/browser/components/migration/src/MigrationUtils.jsm
++++ b/browser/components/migration/src/MigrationUtils.jsm
+@@ -403,11 +403,6 @@ let MigrationUtils = Object.freeze({
+ * @see nsIStringBundle
+ */
+ getLocalizedString: function MU_getLocalizedString(aKey, aReplacements) {
+- const OVERRIDES = {
+- "4_firefox": "4_firefox_history_and_bookmarks"
+- };
+- aKey = OVERRIDES[aKey] || aKey;
+-
+ if (aReplacements === undefined)
+ return getMigrationBundle().GetStringFromName(aKey);
+ return getMigrationBundle().formatStringFromName(
+@@ -622,6 +617,17 @@ let MigrationUtils = Object.freeze({
},
-+ canMigrate: function PM__canMigrate(aMigratorKey) {
+ /**
++ * Returns whether a given migration type is supported.
++ *
++ * @param aKey Migrator key
++ * @returns whether the migrator key is supported.
++ */
++ canMigrate:
++ function MU_canMigrate(aMigratorKey) {
+ return "@mozilla.org/profile/migrator;1?app=browser&type=" + aMigratorKey in Cc;
+ },
+
- _toCString: function PM__toCString(aStr) {
- let cstr = Cc["@mozilla.org/supports-cstring;1"].
- createInstance(Ci.nsISupportsCString);
++ /**
+ * Cleans up references to migrators and nsIProfileInstance instances.
+ */
+ finishMigration: function MU_finishMigration() {
+diff --git a/browser/components/migration/src/ProfileMigrator.js b/browser/components/migration/src/ProfileMigrator.js
+index 744f117..59e5a4c 100644
+--- a/browser/components/migration/src/ProfileMigrator.js
++++ b/browser/components/migration/src/ProfileMigrator.js
+@@ -12,6 +12,7 @@ function ProfileMigrator() {
+
+ ProfileMigrator.prototype = {
+ migrate: MigrationUtils.startupMigration.bind(MigrationUtils),
++ canMigrate: MigrationUtils.canMigrate.bind(MigrationUtils),
+ QueryInterface: XPCOMUtils.generateQI([Components.interfaces.nsIProfileMigrator]),
+ classDescription: "Profile Migrator",
+ contractID: "@mozilla.org/toolkit/profile-migrator;1",
diff --git a/browser/locales/en-US/chrome/browser/migration/migration.dtd b/browser/locales/en-US/chrome/browser/migration/migration.dtd
-index 86e9d0b..8df7864 100644
+index 21cf405..f3c1a6b 100644
--- a/browser/locales/en-US/chrome/browser/migration/migration.dtd
+++ b/browser/locales/en-US/chrome/browser/migration/migration.dtd
-@@ -13,8 +13,6 @@
+@@ -17,8 +17,6 @@
<!ENTITY importFromSafari.accesskey "S">
<!ENTITY importFromChrome.label "Chrome">
<!ENTITY importFromChrome.accesskey "C">
-<!ENTITY importFromFirefox.label "Firefox">
-<!ENTITY importFromFirefox.accesskey "X">
- <!ENTITY importFromHTMLFile.label "From an HTML File">
- <!ENTITY importFromHTMLFile.accesskey "F">
+
+ <!ENTITY noMigrationSources.label "No programs that contain bookmarks, history or password data could be found.">
diff --git a/browser/locales/en-US/chrome/browser/migration/migration.properties b/browser/locales/en-US/chrome/browser/migration/migration.properties
-index 495ed78..0272654 100644
+index ab82d85..915f6b8 100644
--- a/browser/locales/en-US/chrome/browser/migration/migration.properties
+++ b/browser/locales/en-US/chrome/browser/migration/migration.properties
-@@ -4,7 +4,6 @@ profileName_format=%S %S
+@@ -8,7 +8,6 @@ profileName_format=%S %S
sourceNameIE=Internet Explorer
sourceNameSafari=Safari
sourceNameChrome=Google Chrome
-sourceNameFirefox=Mozilla Firefox
importedBookmarksFolder=From %S
- importedSearchURLsFolder=Keyword Searches (From %S)
-@@ -21,27 +20,27 @@ importedSafariBookmarks=From Safari
+
+@@ -22,22 +21,22 @@ importedSafariReadingList=Reading List (From Safari)
2_ie=Cookies
2_safari=Cookies
2_chrome=Cookies
@@ -143,8 +160,8 @@ index 495ed78..0272654 100644
4_ie=Browsing History
4_safari=Browsing History
4_chrome=Browsing History
--4_firefox=Browsing History
-+4_self=Browsing History
+-4_firefox_history_and_bookmarks=Browsing History and Bookmarks
++4_self=Browsing History and Bookmarks
8_ie=Saved Form History
8_safari=Saved Form History
@@ -160,36 +177,14 @@ index 495ed78..0272654 100644
32_ie=Favorites
32_safari=Bookmarks
- 32_chrome=Bookmarks
--32_firefox=Bookmarks
-+32_self=Bookmarks
-
+@@ -46,4 +45,4 @@ importedSafariReadingList=Reading List (From Safari)
64_ie=Other Data
64_safari=Other Data
-diff --git a/toolkit/content/aboutSupport.js b/toolkit/content/aboutSupport.js
-index c86d80c..ff1ccfe 100644
---- a/toolkit/content/aboutSupport.js
-+++ b/toolkit/content/aboutSupport.js
-@@ -608,13 +608,13 @@ function populateResetBox() {
- .getService(Ci.nsIToolkitProfileService);
- let currentProfileDir = Services.dirsvc.get("ProfD", Ci.nsIFile);
-
--#expand const MOZ_APP_NAME = "__MOZ_APP_NAME__";
--#expand const MOZ_BUILD_APP = "__MOZ_BUILD_APP__";
--
- // Only show the reset box for the default profile if the self-migrator used for reset exists.
- try {
- if (!currentProfileDir.equals(profileService.selectedProfile.rootDir) ||
-- !("@mozilla.org/profile/migrator;1?app=" + MOZ_BUILD_APP + "&type=" + MOZ_APP_NAME in Cc))
-+ !("@mozilla.org/toolkit/profile-migrator;1" in Cc))
-+ return;
-+ let pm = Cc["@mozilla.org/toolkit/profile-migrator;1"].createInstance(Ci.nsIProfileMigrator);
-+ if (!("canMigrate" in pm) || !pm.canMigrate("self"))
- return;
- document.getElementById("reset-box").style.visibility = "visible";
- } catch (e) {
+ 64_chrome=Other Data
+-64_firefox=Bookmarks Backups
++64_self=Bookmarks Backups
diff --git a/toolkit/content/jar.mn b/toolkit/content/jar.mn
-index 6f0d2d6..da7342b 100644
+index 697b217..b6e1709 100644
--- a/toolkit/content/jar.mn
+++ b/toolkit/content/jar.mn
@@ -38,7 +38,7 @@ toolkit.jar:
@@ -199,40 +194,55 @@ index 6f0d2d6..da7342b 100644
-* content/global/resetProfile.js (resetProfile.js)
+ content/global/resetProfile.js (resetProfile.js)
* content/global/resetProfile.xul (resetProfile.xul)
+ * content/global/resetProfileProgress.xul (resetProfileProgress.xul)
* content/global/treeUtils.js (treeUtils.js)
- *+ content/global/viewZoomOverlay.js (viewZoomOverlay.js)
diff --git a/toolkit/content/resetProfile.js b/toolkit/content/resetProfile.js
-index 975a9ed..d8e46b1 100644
+index dcb4065..09c1146 100644
--- a/toolkit/content/resetProfile.js
+++ b/toolkit/content/resetProfile.js
-@@ -6,12 +6,10 @@ Components.utils.import("resource://gre/modules/Services.jsm");
+@@ -36,13 +36,13 @@ function resetSupported() {
+ getService(Ci.nsIToolkitProfileService);
+ let currentProfileDir = Services.dirsvc.get("ProfD", Ci.nsIFile);
- // based on onImportItemsPageShow from migration.js
- function onResetProfileLoad() {
--#expand const MOZ_BUILD_APP = "__MOZ_BUILD_APP__";
-#expand const MOZ_APP_NAME = "__MOZ_APP_NAME__";
- const MAX_MIGRATED_TYPES = 16;
-
- var migratedItems = document.getElementById("migratedItems");
-- var bundle = Services.strings.createBundle("chrome://" + MOZ_BUILD_APP +
-+ var bundle = Services.strings.createBundle("chrome://browser" +
- "/locale/migration/migration.properties");
+-#expand const MOZ_BUILD_APP = "__MOZ_BUILD_APP__";
+-
+ // Reset is only supported for the default profile if the self-migrator used for reset exists.
+ try {
+- return currentProfileDir.equals(profileService.selectedProfile.rootDir) &&
+- ("@mozilla.org/profile/migrator;1?app=" + MOZ_BUILD_APP + "&type=" + MOZ_APP_NAME in Cc);
++ if (currentProfileDir.equals(profileService.selectedProfile.rootDir) &&
++ "@mozilla.org/toolkit/profile-migrator;1" in Cc) {
++ let pm = Cc["@mozilla.org/toolkit/profile-migrator;1"].createInstance(Ci.nsIProfileMigrator);
++ return ("canMigrate" in pm) && pm.canMigrate("self");
++ }
+ } catch (e) {
+ // Catch exception when there is no selected profile.
+ Cu.reportError(e);
+@@ -53,9 +53,6 @@ function resetSupported() {
+ function getMigratedData() {
+ Components.utils.import("resource:///modules/MigrationUtils.jsm");
- // Loop over possible data to migrate to give the user a list of what will be preserved. This
-@@ -21,7 +19,7 @@ function onResetProfileLoad() {
- var itemID = Math.pow(2, i);
+-#expand const MOZ_BUILD_APP = "__MOZ_BUILD_APP__";
+-#expand const MOZ_APP_NAME = "__MOZ_APP_NAME__";
+-
+ // From migration.properties
+ const MIGRATED_TYPES = [
+ 4, // History and Bookmarks
+@@ -68,7 +65,7 @@ function getMigratedData() {
+ let dataTypes = [];
+ for (let itemID of MIGRATED_TYPES) {
try {
- var checkbox = document.createElement("label");
-- checkbox.setAttribute("value", bundle.GetStringFromName(itemID + "_" + MOZ_APP_NAME));
-+ checkbox.setAttribute("value", bundle.GetStringFromName(itemID + "_self"));
- migratedItems.appendChild(checkbox);
+- let typeName = MigrationUtils.getLocalizedString(itemID + "_" + MOZ_APP_NAME);
++ let typeName = MigrationUtils.getLocalizedString(itemID + "_self");
+ dataTypes.push(typeName);
} catch (x) {
- // Catch exceptions when the string for a data type doesn't exist because it's not migrated
+ // Catch exceptions when the string for a data type doesn't exist.
diff --git a/toolkit/profile/nsIProfileMigrator.idl b/toolkit/profile/nsIProfileMigrator.idl
-index e941336..5b264af 100644
+index f35c227..7062886 100644
--- a/toolkit/profile/nsIProfileMigrator.idl
+++ b/toolkit/profile/nsIProfileMigrator.idl
-@@ -69,7 +69,7 @@ interface nsIProfileStartup : nsISupports
+@@ -37,7 +37,7 @@ interface nsIProfileStartup : nsISupports
* @client Toolkit (Startup code)
* @obtainable service, contractid("@mozilla.org/toolkit/profile-migrator;1")
*/
@@ -241,7 +251,7 @@ index e941336..5b264af 100644
interface nsIProfileMigrator : nsISupports
{
/**
-@@ -92,6 +92,14 @@ interface nsIProfileMigrator : nsISupports
+@@ -60,6 +60,14 @@ interface nsIProfileMigrator : nsISupports
* @note The startup code ignores COM exceptions thrown from this method.
*/
void migrate(in nsIProfileStartup aStartup, in ACString aKey);
@@ -257,15 +267,15 @@ index e941336..5b264af 100644
%{C++
diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp
-index 32eef5c..dbe1580 100644
+index e5d3042..6de3390 100644
--- a/toolkit/xre/nsAppRunner.cpp
+++ b/toolkit/xre/nsAppRunner.cpp
-@@ -3561,7 +3561,7 @@ XRE_main(int argc, char* argv[], const nsXREAppData* aAppData)
- if (gDoProfileReset) {
- // Automatically migrate from the current application if we just
- // reset the profile.
-- aKey = MOZ_APP_NAME;
-+ aKey = "self";
- pm->Migrate(&dirProvider, aKey);
- // Set the new profile as the default after migration.
- rv = SetCurrentProfileAsDefault(profileSvc, profD);
+@@ -3650,7 +3650,7 @@ XREMain::XRE_mainRun()
+ if (gDoProfileReset) {
+ // Automatically migrate from the current application if we just
+ // reset the profile.
+- aKey = MOZ_APP_NAME;
++ aKey = "self";
+ }
+ pm->Migrate(&mDirProvider, aKey);
+ }
diff --git a/libre/xulrunner-libre/PKGBUILD b/libre/xulrunner-libre/PKGBUILD
index 001eb5f48..c4e72cfea 100644
--- a/libre/xulrunner-libre/PKGBUILD
+++ b/libre/xulrunner-libre/PKGBUILD
@@ -4,9 +4,9 @@
# With many changes from iceweasel-libre.
-# We're getting this from Debian Sid
+# We're getting this from Debian Experimental
_debname=iceweasel
-_debver=13.0
+_debver=15.0
_debrel=1
_debrepo=http://ftp.debian.org/debian/pool/main/
debfile() { echo $@|sed -r 's@(.).*@\1/&/&@'; }
@@ -23,7 +23,6 @@ makedepends=('zip' 'unzip' 'pkg-config' 'diffutils' 'wireless_tools' 'yasm' 'mes
url="http://wiki.mozilla.org/XUL:Xul_Runner"
source=("${_debrepo}/`debfile ${_debname}`_${_debver}.orig.tar.bz2"
"${_debrepo}/`debfile ${_debname}`_${_debver}-${_debrel}.debian.tar.gz"
- "${_debrepo}/`debfile ${_debname}`_${_debver}-${_debrel}.dsc"
mozconfig
mozilla-pkgconfig.patch
Bug-756390-Make-the-Reset-Firefox-feature-more-gener.patch)
@@ -31,15 +30,13 @@ options=('!emptydirs')
conflicts=('xulrunner')
provides=("xulrunner=${_debver}")
replaces=('xulrunner-oss' 'xulrunner')
-md5sums=('e440446bb92dc1c0311346c68024590b'
- 'cb8bfb543002a5d78db7e8661f9f87ec'
- 'a9848e41461776bc4bf8d2de824b1204'
+md5sums=('aa5a7f08f55a2b02a71c86f30ef75a25'
+ 'b93090724434e3801375730744e79950'
'f2f4f4a573f549e8b494e33b3ad226bc'
'27271ce647a83906ef7a24605e840d61'
- '41ce105f0c1877fe22e0c0ec45e09565')
+ 'c52fac65c1e06290a5108b75c31ace79')
-dpkg-source() {
- # This will simulate dpkg-source -x ${_debname}_${_debver}-${_debrel}.dsc
+build() {
export QUILT_PATCHES=debian/patches
export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index'
export QUILT_DIFF_ARGS='--no-timestamps'
@@ -47,31 +44,18 @@ dpkg-source() {
mv debian "${_debname}-${_debver}"
cd "${_debname}-${_debver}"
-# Doesn't apply and seems unimportant
+ # Doesn't apply and seems unimportant
rm -v debian/patches/l10n/Place-google-and-gmail-before-yandex.patch || true
-# This patch doesn't works in some parts due that has patches for others locales languages, source code doesn't has it
+ # This patch doesn't works in some parts due that has patches for others locales languages, source code doesn't has it
rm -v debian/patches/debian-hacks/Bug-756390-Make-the-Reset-Firefox-feature-more-gener.patch || true
quilt push -a
find .pc -name .timestamp -delete # why isn't "--no-timestamps" doing this?
- cd ..
-}
-
-build() {
-# Don't run this if we're using -e
-if [ $NOEXTRACT -eq 0 ]; then
- msg2 "Applying Debian patches..."
- cd "${srcdir}"
- dpkg-source -x ${_debname}_${_debver}-${_debrel}.dsc
-
- msg2 "Starting normal build..."
- mv "${_debname}-${_debver}" "$srcdir/mozilla-release"
- cd "$srcdir/mozilla-release"
cp "$srcdir/mozconfig" .mozconfig
-# Adding fixed Bug-756390-Make-the-Reset-Firefox-feature-more-gener.patch
+ # Adding fixed Bug-756390-Make-the-Reset-Firefox-feature-more-gener.patch
patch -Np1 -i "$srcdir/Bug-756390-Make-the-Reset-Firefox-feature-more-gener.patch"
# Fails, claiming the page size to have changed.
@@ -79,29 +63,28 @@ if [ $NOEXTRACT -eq 0 ]; then
#fix libdir/sdkdir - fedora
patch -Np1 -i "$srcdir/mozilla-pkgconfig.patch"
-fi
- export LDFLAGS="$LDFLAGS -Wl,-rpath,/usr/lib/xulrunner-${_debver}"
+ export LDFLAGS="$LDFLAGS -Wl,-rpath,/usr/lib/xulrunner-${_debver::4}"
export PYTHON="/usr/bin/python2"
make -j1 -f client.mk build MOZ_MAKE_FLAGS="$MAKEFLAGS"
}
package() {
- cd "$srcdir/mozilla-release"
+ cd "${_debname}-${_debver}"
make -j1 -f client.mk DESTDIR="$pkgdir" install
- rm -rf "$pkgdir"/usr/lib/xulrunner-$pkgver/{dictionaries,hyphenation}
- ln -sf /usr/share/hunspell "$pkgdir/usr/lib/xulrunner-${_debver}/dictionaries"
- ln -sf /usr/share/hyphen "$pkgdir/usr/lib/xulrunner-${_debver}/hyphenation"
+ rm -rf "$pkgdir"/usr/lib/xulrunner-${_debver::4}/{dictionaries,hyphenation}
+ ln -sf /usr/share/hunspell "$pkgdir/usr/lib/xulrunner-${_debver::4}/dictionaries"
+ ln -sf /usr/share/hyphen "$pkgdir/usr/lib/xulrunner-${_debver::4}/hyphenation"
# add xulrunner library path to ld.so.conf
install -d $pkgdir/etc/ld.so.conf.d
- echo "/usr/lib/xulrunner-${_debver}" > $pkgdir/etc/ld.so.conf.d/xulrunner.conf
+ echo "/usr/lib/xulrunner-${_debver::4}" > $pkgdir/etc/ld.so.conf.d/xulrunner.conf
- chmod +x "${pkgdir}/usr/lib/xulrunner-devel-${_debver}/sdk/bin/xpt.py"
- sed -i 's|!/usr/bin/env python|!/usr/bin/env python2|' "$pkgdir/usr/lib/xulrunner-devel-${_debver}/sdk/bin/xpt.py"
- sed -i 's|!/usr/bin/env python|!/usr/bin/env python2|' "$pkgdir/usr/lib/xulrunner-devel-${_debver}/sdk/bin/header.py"
- sed -i 's|!/usr/bin/env python|!/usr/bin/env python2|' "$pkgdir/usr/lib/xulrunner-devel-${_debver}/sdk/bin/typelib.py"
- sed -i 's|!/usr/bin/env python|!/usr/bin/env python2|' "$pkgdir/usr/lib/xulrunner-devel-${_debver}/sdk/bin/xpidl.py"
+ chmod +x "${pkgdir}/usr/lib/xulrunner-devel-${_debver::4}/sdk/bin/xpt.py"
+ sed -i 's|!/usr/bin/env python|!/usr/bin/env python2|' "$pkgdir/usr/lib/xulrunner-devel-${_debver::4}/sdk/bin/xpt.py"
+ sed -i 's|!/usr/bin/env python|!/usr/bin/env python2|' "$pkgdir/usr/lib/xulrunner-devel-${_debver::4}/sdk/bin/header.py"
+ sed -i 's|!/usr/bin/env python|!/usr/bin/env python2|' "$pkgdir/usr/lib/xulrunner-devel-${_debver::4}/sdk/bin/typelib.py"
+ sed -i 's|!/usr/bin/env python|!/usr/bin/env python2|' "$pkgdir/usr/lib/xulrunner-devel-${_debver::4}/sdk/bin/xpidl.py"
}
diff --git a/libre/your-freedom/your-freedom.install b/libre/your-freedom/your-freedom.install
index 50988f587..0786adabf 100644
--- a/libre/your-freedom/your-freedom.install
+++ b/libre/your-freedom/your-freedom.install
@@ -19,7 +19,7 @@ pre_install() {
* Etc.
Please report back to the Parabola Project on the usual channels:
- * https://bugs.parabolagnulinux.org
+ * https://labs.parabola.nu
* irc://freenode.net/#parabola
* mailto:dev@list.parabolagnulinux.org
EOM