summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Solano Gómez <daniel@solanogomez.org>2018-05-07 13:41:05 -0500
committerDaniel Solano Gómez <daniel@solanogomez.org>2018-05-07 13:41:05 -0500
commit9b7b6744ef9dd2a9e18938b639c38cee70de33bf (patch)
tree5bc3be76f0191e25466b8e3a79a6116e268a759d /app-emulation
parentAdd idea-ultimate-2018.1.2 (diff)
downloadsattvik-9b7b6744ef9dd2a9e18938b639c38cee70de33bf.tar.gz
sattvik-9b7b6744ef9dd2a9e18938b639c38cee70de33bf.tar.bz2
sattvik-9b7b6744ef9dd2a9e18938b639c38cee70de33bf.zip
Add update vmware packages
Diffstat (limited to 'app-emulation')
-rw-r--r--app-emulation/vmware-modules/files/329-00-vmmon-quick-workaround-for-objtool-warnings.patch45
-rw-r--r--app-emulation/vmware-modules/files/329-4.09-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch40
-rw-r--r--app-emulation/vmware-modules/files/329-4.10-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch32
-rw-r--r--app-emulation/vmware-modules/files/329-4.12-00-vmmon-use-standard-definition-of-MSR_MISC_FEATURES_E.patch54
-rw-r--r--app-emulation/vmware-modules/files/329-4.13-00-vmmon-use-standard-definition-of-CR3_PCID_MASK-if-av.patch39
-rw-r--r--app-emulation/vmware-modules/files/329-4.14-00-vsock-gcc-plugins-randstruct.patch84
-rw-r--r--app-emulation/vmware-modules/files/329-vmblock.patch461
-rw-r--r--app-emulation/vmware-modules/files/329-vmci.patch294
-rw-r--r--app-emulation/vmware-modules/files/329-vsock.patch266
-rw-r--r--app-emulation/vmware-modules/metadata.xml16
-rw-r--r--app-emulation/vmware-modules/vmware-modules-329.1.1-r1.ebuild145
-rw-r--r--app-emulation/vmware-workstation/Manifest10
-rw-r--r--app-emulation/vmware-workstation/files/configure-hostd.sh20
-rw-r--r--app-emulation/vmware-workstation/files/vmware-14.1.rc102
-rw-r--r--app-emulation/vmware-workstation/files/vmware-server-14.1.rc52
-rw-r--r--app-emulation/vmware-workstation/metadata.xml36
-rw-r--r--app-emulation/vmware-workstation/vmware-workstation-14.1.1.7528167-r2.ebuild700
17 files changed, 2396 insertions, 0 deletions
diff --git a/app-emulation/vmware-modules/files/329-00-vmmon-quick-workaround-for-objtool-warnings.patch b/app-emulation/vmware-modules/files/329-00-vmmon-quick-workaround-for-objtool-warnings.patch
new file mode 100644
index 0000000..8259c8b
--- /dev/null
+++ b/app-emulation/vmware-modules/files/329-00-vmmon-quick-workaround-for-objtool-warnings.patch
@@ -0,0 +1,45 @@
+From 182ac915372c798e400c9718499cae2cb1822ef1 Mon Sep 17 00:00:00 2001
+From: Michal Kubecek <mkubecek@suse.cz>
+Date: Sat, 30 Sep 2017 21:41:51 +0200
+Subject: [PATCH 6/6] vmmon: quick workaround for objtool warnings
+
+As discussed in
+
+ https://bugzilla.suse.com/show_bug.cgi?id=1059674
+
+the reason for multiple objtool warnings is the fact that vmmon module
+defines its own Panic() function which never returns. While it is marked as
+such which is used by the compiler for optimization, there is no way to
+find this from object file.
+
+While this seems innocuous, it might result in problems with unwinder
+later. The quickest way around is to replace vmmon's own Panic() with
+standard kernel panic() until a cleaner solution is found.
+---
+ vmmon-only/include/vm_assert.h | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/vmmon-only/include/vm_assert.h b/vmmon-only/include/vm_assert.h
+index 8cdbc93..b869def 100644
+--- a/vmmon-only/include/vm_assert.h
++++ b/vmmon-only/include/vm_assert.h
+@@ -67,6 +67,7 @@ extern "C" {
+ #if defined (VMKPANIC)
+ #include "vmk_assert.h"
+ #else /* !VMKPANIC */
++#include <linux/kernel.h>
+ #define _ASSERT_PANIC(name) \
+ Panic(_##name##Fmt "\n", __FILE__, __LINE__)
+ #define _ASSERT_PANIC_BUG(bug, name) \
+@@ -107,7 +108,7 @@ NORETURN void Panic_NoSave(const char *fmt, ...) PRINTF_DECL(1, 2);
+ } while(0)
+
+ #else
+-NORETURN void Panic(const char *fmt, ...) PRINTF_DECL(1, 2);
++#define Panic panic
+ #endif
+
+ void LogThrottled(uint32 *count, const char *fmt, ...) PRINTF_DECL(2, 3);
+--
+2.14.3
+
diff --git a/app-emulation/vmware-modules/files/329-4.09-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch b/app-emulation/vmware-modules/files/329-4.09-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch
new file mode 100644
index 0000000..d41c160
--- /dev/null
+++ b/app-emulation/vmware-modules/files/329-4.09-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch
@@ -0,0 +1,40 @@
+From 4d80590924550d0ee3fe470e027deea0ee43e6b6 Mon Sep 17 00:00:00 2001
+From: Michal Kubecek <mkubecek@suse.cz>
+Date: Tue, 18 Apr 2017 12:52:08 +0200
+Subject: [PATCH 1/6] vmnet: use standard definition of PCI_VENDOR_ID_VMWARE if
+ available
+
+The PCI_VENDOR_ID_VMWARE macro is defined in mainline pci_ids.h since
+commit 94e57fea6202 ("PCI: Move PCI_VENDOR_ID_VMWARE to pci_ids.h")
+in v3.18-rc1.
+---
+ vmnet-only/vm_device_version.h | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/vmnet-only/vm_device_version.h b/vmnet-only/vm_device_version.h
+index ab396bc..cafddd0 100644
+--- a/vmnet-only/vm_device_version.h
++++ b/vmnet-only/vm_device_version.h
+@@ -35,6 +35,8 @@
+ #endif
+ #endif
+
++#include <linux/pci_ids.h>
++
+ /* LSILogic 53C1030 Parallel SCSI controller
+ * LSILogic SAS1068 SAS controller
+ */
+@@ -53,7 +55,10 @@
+ * VMware HD Audio codec
+ * VMware HD Audio controller
+ */
++#ifndef PCI_VENDOR_ID_VMWARE
+ #define PCI_VENDOR_ID_VMWARE 0x15AD
++#endif
++
+ #define PCI_DEVICE_ID_VMWARE_SVGA2 0x0405
+ #define PCI_DEVICE_ID_VMWARE_SVGA 0x0710
+ #define PCI_DEVICE_ID_VMWARE_VGA 0x0711
+--
+2.14.3
+
diff --git a/app-emulation/vmware-modules/files/329-4.10-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch b/app-emulation/vmware-modules/files/329-4.10-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch
new file mode 100644
index 0000000..a97b987
--- /dev/null
+++ b/app-emulation/vmware-modules/files/329-4.10-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch
@@ -0,0 +1,32 @@
+From 7cb0c3beb4abde406d5334376106d68997f6fb51 Mon Sep 17 00:00:00 2001
+From: Michal Kubecek <mkubecek@suse.cz>
+Date: Tue, 18 Apr 2017 13:01:56 +0200
+Subject: [PATCH 2/6] vmnet: use standard definition of
+ PCI_VENDOR_ID_VMWARE_VMXNET3 if available
+
+The PCI_DEVICE_ID_VMWARE_VMXNET3 macro is defined in mainline pci_ids.h
+since commit b1226c7db1d9 ("vmxnet3: Move PCI Id to pci_ids.h") in
+v4.10-rc1.
+---
+ vmnet-only/vm_device_version.h | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/vmnet-only/vm_device_version.h b/vmnet-only/vm_device_version.h
+index cafddd0..9305ddb 100644
+--- a/vmnet-only/vm_device_version.h
++++ b/vmnet-only/vm_device_version.h
+@@ -75,7 +75,11 @@
+ #define PCI_DEVICE_ID_VMWARE_1394 0x0780
+ #define PCI_DEVICE_ID_VMWARE_BRIDGE 0x0790
+ #define PCI_DEVICE_ID_VMWARE_ROOTPORT 0x07A0
++
++#ifndef PCI_DEVICE_ID_VMWARE_VMXNET3
+ #define PCI_DEVICE_ID_VMWARE_VMXNET3 0x07B0
++#endif
++
+ #define PCI_DEVICE_ID_VMWARE_PVSCSI 0x07C0
+ #define PCI_DEVICE_ID_VMWARE_82574 0x07D0
+ #define PCI_DEVICE_ID_VMWARE_AHCI 0x07E0
+--
+2.14.3
+
diff --git a/app-emulation/vmware-modules/files/329-4.12-00-vmmon-use-standard-definition-of-MSR_MISC_FEATURES_E.patch b/app-emulation/vmware-modules/files/329-4.12-00-vmmon-use-standard-definition-of-MSR_MISC_FEATURES_E.patch
new file mode 100644
index 0000000..646190b
--- /dev/null
+++ b/app-emulation/vmware-modules/files/329-4.12-00-vmmon-use-standard-definition-of-MSR_MISC_FEATURES_E.patch
@@ -0,0 +1,54 @@
+From 53d6ccbeed4c519dc105f98552067ced2ecbd432 Mon Sep 17 00:00:00 2001
+From: Michal Kubecek <mkubecek@suse.cz>
+Date: Fri, 23 Jun 2017 09:29:24 +0200
+Subject: [PATCH 3/6] vmmon: use standard definition of
+ MSR_MISC_FEATURES_ENABLES if available
+
+The MSR_MISC_FEATURES_ENABLES macro is defined in mainline since commit
+ab6d9468631a ("x86/msr: Rename MISC_FEATURE_ENABLES to
+MISC_FEATURES_ENABLES") in v4.12-rc1.
+
+The MSR_MISC_FEATURES_ENABLES_CPUID_FAULT macro is defined in mainline
+since commit e9ea1e7f53b8 ("x86/arch_prctl: Add ARCH_[GET|SET]_CPUID") in
+v4.12-rc1.
+---
+ vmmon-only/include/x86msr.h | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/vmmon-only/include/x86msr.h b/vmmon-only/include/x86msr.h
+index 3a6bfe8..904d9e9 100644
+--- a/vmmon-only/include/x86msr.h
++++ b/vmmon-only/include/x86msr.h
+@@ -24,6 +24,7 @@
+
+ #ifndef _X86MSR_H_
+ #define _X86MSR_H_
++#include <asm/msr-index.h>
+ #define INCLUDE_ALLOW_USERLEVEL
+ #define INCLUDE_ALLOW_VMX
+
+@@ -112,7 +113,9 @@ MSRQuery;
+ #define MSR_TSC_AUX 0xc0000103
+ #define MSR_BD_TSC_RATIO 0xc0000104
+
++#ifndef MSR_MISC_FEATURES_ENABLES
+ #define MSR_MISC_FEATURES_ENABLES 0x140
++#endif
+
+ /* Intel Core Architecture and later: use only architected counters. */
+ #define IA32_MSR_PERF_CAPABILITIES 0x345
+@@ -612,7 +615,11 @@ typedef enum {
+ /*
+ * MISC_FEATURES_ENABLES bits
+ */
++#ifdef MSR_MISC_FEATURES_ENABLES_CPUID_FAULT
++#define MSR_MISC_FEATURES_ENABLES_CPUID_FAULTING MSR_MISC_FEATURES_ENABLES_CPUID_FAULT
++#else
+ #define MSR_MISC_FEATURES_ENABLES_CPUID_FAULTING 1
++#endif
+
+
+
+--
+2.14.3
+
diff --git a/app-emulation/vmware-modules/files/329-4.13-00-vmmon-use-standard-definition-of-CR3_PCID_MASK-if-av.patch b/app-emulation/vmware-modules/files/329-4.13-00-vmmon-use-standard-definition-of-CR3_PCID_MASK-if-av.patch
new file mode 100644
index 0000000..b52f0a9
--- /dev/null
+++ b/app-emulation/vmware-modules/files/329-4.13-00-vmmon-use-standard-definition-of-CR3_PCID_MASK-if-av.patch
@@ -0,0 +1,39 @@
+From 704be6e3f2143df35e99025caa3393b9c309fbc1 Mon Sep 17 00:00:00 2001
+From: Michal Kubecek <mkubecek@suse.cz>
+Date: Mon, 24 Jul 2017 10:08:55 +0200
+Subject: [PATCH 4/6] vmmon: use standard definition of CR3_PCID_MASK if
+ available
+
+The CR3_PCID_MASK is defined in mainline asm/processor-flags.h since
+commit 6c690ee1039b ("x86/mm: Split read_cr3() into read_cr3_pa() and
+__read_cr3()") in v4.13-rc1.
+---
+ vmmon-only/include/x86_basic_defs.h | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/vmmon-only/include/x86_basic_defs.h b/vmmon-only/include/x86_basic_defs.h
+index abfb0b8..8c7566f 100644
+--- a/vmmon-only/include/x86_basic_defs.h
++++ b/vmmon-only/include/x86_basic_defs.h
+@@ -35,6 +35,8 @@
+ #define INCLUDE_ALLOW_VMCORE
+ #include "includeCheck.h"
+
++#include <asm/processor-flags.h>
++
+ #define X86_MAX_INSTR_LEN 15 /* Max byte length of an x86 instruction. */
+
+ #define NUM_IDT_VECTORS 256
+@@ -75,7 +77,9 @@
+ #define CR3_PDB_MASK 0xfffff000
+ #define CR3_IGNORE 0xFFF
+ #define PAE_CR3_IGNORE 0x1F
++#ifndef CR3_PCID_MASK
+ #define CR3_PCID_MASK 0xFFF
++#endif
+ #define CR3_NO_FLUSH (1ULL << 63)
+
+ #define CR4_VME 0x00000001
+--
+2.14.3
+
diff --git a/app-emulation/vmware-modules/files/329-4.14-00-vsock-gcc-plugins-randstruct.patch b/app-emulation/vmware-modules/files/329-4.14-00-vsock-gcc-plugins-randstruct.patch
new file mode 100644
index 0000000..66ef8b9
--- /dev/null
+++ b/app-emulation/vmware-modules/files/329-4.14-00-vsock-gcc-plugins-randstruct.patch
@@ -0,0 +1,84 @@
+--- a/vsock-only/linux/notify.c 2017-10-03 06:52:10.953893050 +0300
++++ b/vsock-only/linux/notify.c 2017-10-03 05:42:48.642701836 +0300
+@@ -1193,20 +1193,20 @@ VSockVmciNotifyPktProcessNegotiate(struc
+
+
+ /* Socket control packet based operations. */
+-VSockVmciNotifyOps vSockVmciNotifyPktOps = {
+- VSockVmciNotifyPktSocketInit,
+- VSockVmciNotifyPktSocketDestruct,
+- VSockVmciNotifyPktPollIn,
+- VSockVmciNotifyPktPollOut,
+- VSockVmciNotifyPktHandlePkt,
+- VSockVmciNotifyPktRecvInit,
+- VSockVmciNotifyPktRecvPreBlock,
+- VSockVmciNotifyPktRecvPreDequeue,
+- VSockVmciNotifyPktRecvPostDequeue,
+- VSockVmciNotifyPktSendInit,
+- VSockVmciNotifyPktSendPreBlock,
+- VSockVmciNotifyPktSendPreEnqueue,
+- VSockVmciNotifyPktSendPostEnqueue,
+- VSockVmciNotifyPktProcessRequest,
+- VSockVmciNotifyPktProcessNegotiate,
++VSockVmciNotifyOps vSockVmciNotifyPktOps __refdata = {
++ .socketInit = VSockVmciNotifyPktSocketInit,
++ .socketDestruct = VSockVmciNotifyPktSocketDestruct,
++ .pollIn = VSockVmciNotifyPktPollIn,
++ .pollOut = VSockVmciNotifyPktPollOut,
++ .handleNotifyPkt = VSockVmciNotifyPktHandlePkt,
++ .recvInit = VSockVmciNotifyPktRecvInit,
++ .recvPreBlock = VSockVmciNotifyPktRecvPreBlock,
++ .recvPreDequeue = VSockVmciNotifyPktRecvPreDequeue,
++ .recvPostDequeue = VSockVmciNotifyPktRecvPostDequeue,
++ .sendInit = VSockVmciNotifyPktSendInit,
++ .sendPreBlock = VSockVmciNotifyPktSendPreBlock,
++ .sendPreEnqueue = VSockVmciNotifyPktSendPreEnqueue,
++ .sendPostEnqueue = VSockVmciNotifyPktSendPostEnqueue,
++ .processRequest = VSockVmciNotifyPktProcessRequest,
++ .processNegotiate = VSockVmciNotifyPktProcessNegotiate,
+ };
+diff -urp a/vsock-only/linux/notifyQState.c b/vsock-only/linux/notifyQState.c
+--- a/vsock-only/linux/notifyQState.c 2017-10-03 06:52:10.952893329 +0300
++++ b/vsock-only/linux/notifyQState.c 2017-10-03 05:43:02.950697125 +0300
+@@ -771,21 +770,24 @@ VSockVmciNotifyPktProcessNegotiate(struc
+ }
+
+
+-/* Socket always on control packet based operations. */
+-VSockVmciNotifyOps vSockVmciNotifyPktQStateOps = {
+- VSockVmciNotifyPktSocketInit,
+- VSockVmciNotifyPktSocketDestruct,
+- VSockVmciNotifyPktPollIn,
+- VSockVmciNotifyPktPollOut,
+- VSockVmciNotifyPktHandlePkt,
+- VSockVmciNotifyPktRecvInit,
+- VSockVmciNotifyPktRecvPreBlock,
+- NULL, /* recvPreDequeue */
+- VSockVmciNotifyPktRecvPostDequeue,
+- VSockVmciNotifyPktSendInit,
+- NULL, /* sendPreBlock */
+- NULL, /* sendPreEnqueue */
+- VSockVmciNotifyPktSendPostEnqueue,
+- VSockVmciNotifyPktProcessRequest,
+- VSockVmciNotifyPktProcessNegotiate,
++
++
++// Socket always on control packet based operations.
++VSockVmciNotifyOps vSockVmciNotifyPktQStateOps __refdata = {
++ .socketInit = VSockVmciNotifyPktSocketInit,
++ .socketDestruct = VSockVmciNotifyPktSocketDestruct,
++ .pollIn = VSockVmciNotifyPktPollIn,
++ .pollOut = VSockVmciNotifyPktPollOut,
++ .handleNotifyPkt = VSockVmciNotifyPktHandlePkt,
++ .recvInit = VSockVmciNotifyPktRecvInit,
++ .recvPreBlock = VSockVmciNotifyPktRecvPreBlock,
++ .recvPreDequeue = NULL,
++ .recvPostDequeue = VSockVmciNotifyPktRecvPostDequeue,
++ .sendInit = VSockVmciNotifyPktSendInit,
++ .sendPreBlock = NULL,
++ .sendPreEnqueue = NULL,
++ .sendPostEnqueue = VSockVmciNotifyPktSendPostEnqueue,
++ .processRequest = VSockVmciNotifyPktProcessRequest,
++ .processNegotiate = VSockVmciNotifyPktProcessNegotiate,
++
+ };
diff --git a/app-emulation/vmware-modules/files/329-vmblock.patch b/app-emulation/vmware-modules/files/329-vmblock.patch
new file mode 100644
index 0000000..bddb978
--- /dev/null
+++ b/app-emulation/vmware-modules/files/329-vmblock.patch
@@ -0,0 +1,461 @@
+diff --git a/vmblock-only/Makefile b/vmblock-only/Makefile
+index bbfe225..8ec1a86 100644
+--- a/vmblock-only/Makefile
++++ b/vmblock-only/Makefile
+@@ -43,7 +43,11 @@ INCLUDE += -I$(SRCROOT)/shared
+ endif
+
+
++ifdef KVERSION
++VM_UNAME = $(KVERSION)
++else
+ VM_UNAME = $(shell uname -r)
++endif
+
+ # Header directory for the running kernel
+ ifdef LINUXINCLUDE
+diff --git a/vmblock-only/Makefile.kernel b/vmblock-only/Makefile.kernel
+index ab7a727..e3ec9d2 100644
+--- a/vmblock-only/Makefile.kernel
++++ b/vmblock-only/Makefile.kernel
+@@ -19,7 +19,7 @@
+
+ INCLUDE += -I$(SRCROOT)/include
+
+-EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE)
++EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE) $(LINUXINCLUDE)
+
+ EXTRA_CFLAGS += $(call vm_check_build, $(AUTOCONF_DIR)/cachecreate.c, -DVMW_KMEMCR_HAS_DTOR, )
+ EXTRA_CFLAGS += $(call vm_check_build, $(AUTOCONF_DIR)/cachector.c, -DVMW_KMEMCR_CTOR_HAS_3_ARGS, )
+diff --git a/vmblock-only/linux/control.c b/vmblock-only/linux/control.c
+index 79716bd..5b6acb2 100644
+--- a/vmblock-only/linux/control.c
++++ b/vmblock-only/linux/control.c
+@@ -29,7 +29,7 @@
+ #include <linux/stat.h>
+ #include <linux/fs.h>
+
+-#include <asm/uaccess.h>
++#include <linux/uaccess.h>
+
+ #include "vmblockInt.h"
+ #include "block.h"
+@@ -208,9 +208,17 @@ SetupProcDevice(void)
+ VMBlockSetProcEntryOwner(controlProcMountpoint);
+
+ /* Create /proc/fs/vmblock/dev */
++ // create_proc_entry deprecated in 3.10
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
++ controlProcEntry = proc_create(VMBLOCK_CONTROL_DEVNAME,
++ VMBLOCK_CONTROL_MODE,
++ controlProcDirEntry,
++ &ControlFileOps);
++#else
+ controlProcEntry = create_proc_entry(VMBLOCK_CONTROL_DEVNAME,
+ VMBLOCK_CONTROL_MODE,
+ controlProcDirEntry);
++#endif
+ if (!controlProcEntry) {
+ Warning("SetupProcDevice: could not create " VMBLOCK_DEVICE "\n");
+ remove_proc_entry(VMBLOCK_CONTROL_MOUNTPOINT, controlProcDirEntry);
+@@ -218,7 +226,9 @@ SetupProcDevice(void)
+ return -EINVAL;
+ }
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) //Maybe 3.14? 3.13?
+ controlProcEntry->proc_fops = &ControlFileOps;
++#endif
+ return 0;
+ }
+
+@@ -272,17 +282,50 @@ CleanupProcDevice(void)
+ *----------------------------------------------------------------------------
+ */
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 13, 0)
++/* copy-paste from Lustre FS by pavlinux */
++static inline char *ll_getname(const char __user *filename)
++{
++ int ret = 0, len;
++ char *tmp = __getname();
++
++ if (!tmp)
++ return ERR_PTR(-ENOMEM);
++
++ len = strncpy_from_user(tmp, filename, PATH_MAX);
++ if (len == 0)
++ ret = -ENOENT;
++ else if (len > PATH_MAX)
++ ret = -ENAMETOOLONG;
++
++ if (ret) {
++ __putname(tmp);
++ tmp = ERR_PTR(ret);
++ }
++ return tmp;
++};
++#endif
++
+ static int
+ ExecuteBlockOp(const char __user *buf, // IN: buffer with name
+ const os_blocker_id_t blocker, // IN: blocker ID (file)
+ int (*blockOp)(const char *filename, // IN: block operation
+ const os_blocker_id_t blocker))
+ {
+- char *name;
++ struct filename *fn = NULL;
++ char *name = (char *)fn->name;
+ int i;
+ int retval;
+
+- name = getname(buf);
++ // Not sure what changed in 3.13 to neccessitate this.
++ // Gentoo uses __getname(), though.
++ // https://github.com/gentoo/vmware/blob/master/app-emulation/vmware-modules/files/308-3.10-02-control.patch#L36
++ // ~MK
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0)
++ name = (char *)getname(buf);
++#else
++ name = (char *)ll_getname(buf);
++#endif
+ if (IS_ERR(name)) {
+ return PTR_ERR(name);
+ }
+@@ -293,7 +336,13 @@ ExecuteBlockOp(const char __user *buf, // IN: buffer with name
+
+ retval = i < 0 ? -EINVAL : blockOp(name, blocker);
+
+- putname(name);
++ // I'm not sure what this does, but you seem to know what you're doing ~MK
++ if (fn->name != fn->iname) { /* add by pavlinux */
++ __putname(fn->name);
++ kvfree(fn);
++ } else {
++ __putname(fn);
++ }
+
+ return retval;
+ }
+diff --git a/vmblock-only/linux/dentry.c b/vmblock-only/linux/dentry.c
+index 05ea95a..1245358 100644
+--- a/vmblock-only/linux/dentry.c
++++ b/vmblock-only/linux/dentry.c
+@@ -32,7 +32,13 @@
+ #include "block.h"
+
+
+-static int DentryOpRevalidate(struct dentry *dentry, struct nameidata *nd);
++// From what I can tell, this should've always been an unsigned int?
++static int DentryOpRevalidate(struct dentry *dentry,
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0) // Maybe 3.14 or 3.13?
++ struct nameidata *nd);
++#else
++ unsigned int flags);
++#endif
+
+ struct dentry_operations LinkDentryOps = {
+ .d_revalidate = DentryOpRevalidate,
+@@ -60,7 +66,11 @@ struct dentry_operations LinkDentryOps = {
+
+ static int
+ DentryOpRevalidate(struct dentry *dentry, // IN: dentry revalidating
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0)
+ struct nameidata *nd) // IN: lookup flags & intent
++#else
++ unsigned int flags) // IN: lookup flags & intent
++#endif
+ {
+ VMBlockInodeInfo *iinfo;
+ struct nameidata actualNd;
+@@ -101,7 +111,11 @@ DentryOpRevalidate(struct dentry *dentry, // IN: dentry revalidating
+ if (actualDentry &&
+ actualDentry->d_op &&
+ actualDentry->d_op->d_revalidate) {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)
++ return actualDentry->d_op->d_revalidate(actualDentry, flags);
++#else
+ return actualDentry->d_op->d_revalidate(actualDentry, nd);
++#endif
+ }
+
+ if (compat_path_lookup(iinfo->name, 0, &actualNd)) {
+diff --git a/vmblock-only/linux/file.c b/vmblock-only/linux/file.c
+index d7ac1f6..c5e6604 100644
+--- a/vmblock-only/linux/file.c
++++ b/vmblock-only/linux/file.c
+@@ -39,6 +39,7 @@ typedef ino_t inode_num_t;
+ #endif
+
+ /* Specifically for our filldir_t callback */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0)
+ typedef struct FilldirInfo {
+ filldir_t filldir;
+ void *dirent;
+@@ -76,6 +77,7 @@ Filldir(void *buf, // IN: Dirent buffer passed from FileOpReaddir
+ /* Specify DT_LNK regardless */
+ return info->filldir(info->dirent, name, namelen, offset, ino, DT_LNK);
+ }
++#endif
+
+
+ /* File operations */
+@@ -132,7 +134,12 @@ FileOpOpen(struct inode *inode, // IN
+ * and that would try to acquire the inode's semaphore; if the two inodes
+ * are the same we'll deadlock.
+ */
++ // f_dentry is defined as f_path.dentry until 3.19
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,19,0)
+ if (actualFile->f_dentry && inode == actualFile->f_dentry->d_inode) {
++#else
++ if (actualFile->f_path.dentry && inode == actualFile->f_path.dentry->d_inode) {
++#endif
+ Warning("FileOpOpen: identical inode encountered, open cannot succeed.\n");
+ if (filp_close(actualFile, current->files) < 0) {
+ Warning("FileOpOpen: unable to close opened file.\n");
+@@ -164,13 +171,20 @@ FileOpOpen(struct inode *inode, // IN
+ *----------------------------------------------------------------------------
+ */
+
++// pavlinux's patch completely removes this bit for kernels older than 3.13
+ static int
+ FileOpReaddir(struct file *file, // IN
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0)
+ void *dirent, // IN
+ filldir_t filldir) // IN
++#else
++ struct dir_context* ctx) //IN
++#endif
+ {
+ int ret;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0)
+ FilldirInfo info;
++#endif
+ struct file *actualFile;
+
+ if (!file) {
+@@ -184,12 +198,20 @@ FileOpReaddir(struct file *file, // IN
+ return -EINVAL;
+ }
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0)
+ info.filldir = filldir;
+ info.dirent = dirent;
+
+ actualFile->f_pos = file->f_pos;
+ ret = vfs_readdir(actualFile, Filldir, &info);
+ file->f_pos = actualFile->f_pos;
++#else
++ /* Ricky Wong Yung Fei:
++ * Manipulation of pos is now handled internally by iterate_dir().
++ */
++ ret = iterate_dir(actualFile, ctx);
++ file->f_pos = actualFile->f_pos;
++#endif
+
+ return ret;
+ }
+@@ -236,8 +258,15 @@ FileOpRelease(struct inode *inode, // IN
+ }
+
+
++// pavlinux's patch drops FileOpReaddr for < 3.13
++// pavlinux's patch sets .owner = THIS_MODULE and .llseek = no_llseek
+ struct file_operations RootFileOps = {
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0)
+ .readdir = FileOpReaddir,
++#else
++ .iterate = FileOpReaddir,
++#endif
++ .owner = THIS_MODULE,
+ .open = FileOpOpen,
+ .release = FileOpRelease,
+ };
+diff --git a/vmblock-only/linux/inode.c b/vmblock-only/linux/inode.c
+index 098c94c..7aed6e7 100644
+--- a/vmblock-only/linux/inode.c
++++ b/vmblock-only/linux/inode.c
+@@ -28,20 +28,32 @@
+ #include <linux/fs.h>
+ #include <linux/time.h>
+ #include <linux/namei.h>
++#include <linux/cred.h>
+
+ #include "vmblockInt.h"
+ #include "filesystem.h"
+ #include "block.h"
+
+
+ /* Inode operations */
++// Again, it looks like last arg should've always been unsigned int ~MK
+ static struct dentry *InodeOpLookup(struct inode *dir,
+- struct dentry *dentry, struct nameidata *nd);
+-static int InodeOpReadlink(struct dentry *dentry, char __user *buffer, int buflen);
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
+-static void *InodeOpFollowlink(struct dentry *dentry, struct nameidata *nd);
++ struct dentry *dentry,
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) // Maybe 3.12 or 3.13?
++ struct nameidata *nd);
+ #else
++ unsigned int flags);
++#endif
++static int InodeOpReadlink(struct dentry *dentry, char __user *buffer, int buflen);
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 13)
+ static int InodeOpFollowlink(struct dentry *dentry, struct nameidata *nd);
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 99)
++static const char *InodeOpGetLink(struct dentry *dentry, struct inode *inode,
++ struct delayed_call *done);
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 99)
++static const char *InodeOpFollowlink(struct dentry *dentry, void **cookie);
++#else
++static void *InodeOpFollowlink(struct dentry *dentry, struct nameidata *nd);
+ #endif
+
+
+@@ -49,9 +60,13 @@ struct inode_operations RootInodeOps = {
+ .lookup = InodeOpLookup,
+ };
+
+-static struct inode_operations LinkInodeOps = {
++struct inode_operations LinkInodeOps = {
+ .readlink = InodeOpReadlink,
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 99)
++ .get_link = InodeOpGetLink,
++#else
+ .follow_link = InodeOpFollowlink,
++#endif
+ };
+
+
+@@ -75,7 +90,11 @@ static struct inode_operations LinkInodeOps = {
+ static struct dentry *
+ InodeOpLookup(struct inode *dir, // IN: parent directory's inode
+ struct dentry *dentry, // IN: dentry to lookup
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
+ struct nameidata *nd) // IN: lookup intent and information
++#else
++ unsigned int flags) // IN: lookup intent and information
++#endif
+ {
+ char *filename;
+ struct inode *inode;
+@@ -135,7 +154,16 @@ InodeOpLookup(struct inode *dir, // IN: parent directory's inode
+ inode->i_size = INODE_TO_IINFO(inode)->nameLen;
+ inode->i_version = 1;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0)
+ inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
++#else
++ inode->i_atime = inode->i_mtime = inode->i_ctime = current_kernel_time();
++#endif
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0)
+ inode->i_uid = inode->i_gid = 0;
++#else
++ inode->i_gid = make_kgid(current_user_ns(), 0);
++ inode->i_uid = make_kuid(current_user_ns(), 0);
++#endif
+ inode->i_op = &LinkInodeOps;
+
+ d_add(dentry, inode);
+@@ -176,8 +200,15 @@ InodeOpReadlink(struct dentry *dentry, // IN : dentry of symlink
+ if (!iinfo) {
+ return -EINVAL;
+ }
+-
++#if LINUX_VERSION_CODE <= KERNEL_VERSION(3, 14, 99)
+ return vfs_readlink(dentry, buffer, buflen, iinfo->name);
++#elif LINUX_VERSION_CODE <= KERNEL_VERSION(4, 6, 99)
++ return readlink_copy(buffer, buflen, iinfo->name);
++#elif LINUX_VERSION_CODE <= KERNEL_VERSION(4, 9, 99)
++ return generic_readlink(dentry, buffer, buflen);
++#else
++ return vfs_readlink(dentry, buffer, buflen);
++#endif
+ }
+
+
+@@ -198,30 +229,58 @@ InodeOpReadlink(struct dentry *dentry, // IN : dentry of symlink
+ *----------------------------------------------------------------------------
+ */
+
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
+-static void *
++static
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 13)
++int
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 99)
++const char *
+ #else
+-static int
++void *
+ #endif
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 99)
++InodeOpGetLink(struct dentry *dentry, struct inode *inode,
++ struct delayed_call *done)
++#else
+ InodeOpFollowlink(struct dentry *dentry, // IN : dentry of symlink
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 99)
++ void **cookie)
++#else
+ struct nameidata *nd) // OUT: stores result
++#endif
++#endif
+ {
+ int ret;
+ VMBlockInodeInfo *iinfo;
+
+ if (!dentry) {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 99)
++ ret = -ECHILD;
++#else
+ Warning("InodeOpReadlink: invalid args from kernel\n");
+ ret = -EINVAL;
++#endif
+ goto out;
+ }
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 99)
++ iinfo = INODE_TO_IINFO(inode);
++#else
+ iinfo = INODE_TO_IINFO(dentry->d_inode);
++#endif
+ if (!iinfo) {
+ ret = -EINVAL;
+ goto out;
+ }
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 12, 0)
+ ret = vfs_follow_link(nd, iinfo->name);
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 99)
++ return (char *)(iinfo->name);
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 99)
++ return *cookie = (char *)(iinfo->name);
++#else
++ nd_set_link(nd, iinfo->name);
++#endif
+
+ out:
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
+diff --git a/vmblock-only/shared/compat_namei.h b/vmblock-only/shared/compat_namei.h
+index f82dd49..426d40b 100644
+--- a/vmblock-only/shared/compat_namei.h
++++ b/vmblock-only/shared/compat_namei.h
+@@ -45,4 +45,20 @@
+ #define compat_path_lookup(name, flags, nd) path_lookup(name, flags, nd)
+ #endif
+
++/* nameidata struct for 4.2+ */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,2,0)
++struct nameidata {
++ struct path path;
++ struct qstr last;
++ struct path root;
++ struct inode *inode; /* path.dentry.d_inode */
++ unsigned int flags;
++ unsigned seq, m_seq;
++ int last_type;
++ unsigned depth;
++ struct file *base;
++ char *saved_names[MAX_NESTED_LINKS + 1];
++};
++#endif
++
+ #endif /* __COMPAT_NAMEI_H__ */
diff --git a/app-emulation/vmware-modules/files/329-vmci.patch b/app-emulation/vmware-modules/files/329-vmci.patch
new file mode 100644
index 0000000..764f858
--- /dev/null
+++ b/app-emulation/vmware-modules/files/329-vmci.patch
@@ -0,0 +1,294 @@
+diff --git a/vmci-only/Makefile b/vmci-only/Makefile
+index c630705..18357e5 100644
+--- a/vmci-only/Makefile
++++ b/vmci-only/Makefile
+@@ -43,7 +43,11 @@ INCLUDE += -I$(SRCROOT)/shared
+ endif
+
+
++ifdef KVERSION
++VM_UNAME = $(KVERSION)
++else
+ VM_UNAME = $(shell uname -r)
++endif
+
+ # Header directory for the running kernel
+ ifdef LINUXINCLUDE
+diff --git a/vmci-only/Makefile.kernel b/vmci-only/Makefile.kernel
+index 8e6e7d0..28eb503 100644
+--- a/vmci-only/Makefile.kernel
++++ b/vmci-only/Makefile.kernel
+@@ -21,7 +21,7 @@ CC_OPTS += -DVMCI
+
+ INCLUDE += -I$(SRCROOT)/shared -I$(SRCROOT)/common -I$(SRCROOT)/linux
+
+-EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE)
++EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE) $(LINUXINCLUDE)
+
+ obj-m += $(DRIVER).o
+
+diff --git a/vmci-only/linux/driver.c b/vmci-only/linux/driver.c
+index f676166..9e42f3f 100644
+--- a/vmci-only/linux/driver.c
++++ b/vmci-only/linux/driver.c
+@@ -26,6 +26,7 @@
+
+ #include <linux/file.h>
+ #include <linux/fs.h>
++#include <linux/vmalloc.h>
+ #include <linux/init.h>
+ #if defined(__x86_64__) && LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 12)
+ # include <linux/ioctl32.h>
+@@ -1466,12 +1467,19 @@ VMCIUserVALockPage(VA addr) // IN:
+ int retval;
+
+ down_read(&current->mm->mmap_sem);
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
+- retval = get_user_pages(addr, 1, 1, 0, &page, NULL);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 99)
++ retval = get_user_pages(addr,
+ #else
+ retval = get_user_pages(current, current->mm, addr,
+- 1, 1, 0, &page, NULL);
+ #endif
++ 1,
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 0)
++ 1, 0,
++#else
++ FOLL_WRITE,
++#endif
++ &page, NULL);
++
+ up_read(&current->mm->mmap_sem);
+
+ if (retval != 1) {
+@@ -1686,7 +1694,11 @@ vmci_guest_init(void)
+ /* This should be last to make sure we are done initializing. */
+ retval = pci_register_driver(&vmci_driver);
+ if (retval < 0) {
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0)
+ vfree(data_buffer);
++#else
++ kvfree(data_buffer);
++#endif
+ data_buffer = NULL;
+ return retval;
+ }
+@@ -1722,12 +1734,25 @@
+ vmci_dev.msix_entries[i].vector = i;
+ }
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0)
+ result = pci_enable_msix(pdev, vmci_dev.msix_entries, VMCI_MAX_INTRS);
+ if (!result) {
+ vmci_dev.exclusive_vectors = TRUE;
+ } else if (result > 0) {
+ result = pci_enable_msix(pdev, vmci_dev.msix_entries, 1);
+ }
++#else
++ result = pci_enable_msix_range(pdev, vmci_dev.msix_entries, VMCI_MAX_INTRS,
++ VMCI_MAX_INTRS);
++ if (result > 0) {
++ vmci_dev.exclusive_vectors = TRUE;
++ } else if (result == -ENOSPC) {
++ result = pci_enable_msix_range(pdev, vmci_dev.msix_entries, 1, 1);
++ }
++
++ if (result > 0)
++ result = 0;
++#endif
+ return result;
+ }
+
+@@ -2480,7 +2505,11 @@ vmci_exit(void)
+
+ if (guestDeviceInit) {
+ pci_unregister_driver(&vmci_driver);
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0)
+ vfree(data_buffer);
++#else
++ kvfree(data_buffer);
++#endif
+ data_buffer = NULL;
+ guestDeviceInit = FALSE;
+ }
+@@ -2490,7 +2519,7 @@ vmci_exit(void)
+
+ VMCI_HostCleanup();
+
+- retval = misc_deregister(&linuxState.misc);
++ retval = compat_misc_deregister(&linuxState.misc);
+ if (retval) {
+ Warning(LGPFX "Module %s: error unregistering\n", VMCI_MODULE_NAME);
+ } else {
+diff --git a/vmci-only/linux/vmciKernelIf.c b/vmci-only/linux/vmciKernelIf.c
+index 3fba8b6..1836442 100644
+--- a/vmci-only/linux/vmciKernelIf.c
++++ b/vmci-only/linux/vmciKernelIf.c
+@@ -40,6 +40,10 @@
+ #include <linux/socket.h> /* For memcpy_{to,from}iovec(). */
+ #include <linux/vmalloc.h>
+ #include <linux/wait.h>
++#include <linux/skbuff.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 99)
++#include <linux/sched/signal.h>
++#endif
+
+ #include "compat_highmem.h"
+ #include "compat_interrupt.h"
+@@ -1198,16 +1199,29 @@ __VMCIMemcpyToQueue(VMCIQueue *queue, // OUT:
+ }
+
+ if (isIovec) {
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
+ struct iovec *iov = (struct iovec *)src;
++#else
++ struct msghdr *msg = (struct msghdr *)src;
++#endif
+ int err;
+
+ /* The iovec will track bytesCopied internally. */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
+ err = memcpy_fromiovec((uint8 *)va + pageOffset, iov, toCopy);
++#else
++ err = memcpy_from_msg((uint8 *)va + pageOffset, msg, toCopy);
++#endif
+ if (err != 0) {
+ if (kernelIf->host) {
+ kunmap(kernelIf->u.h.page[pageIndex]);
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
+ }
+ return VMCI_ERROR_INVALID_ARGS;
++#else
++ return VMCI_ERROR_INVALID_ARGS;
++ }
++#endif
+ }
+ } else {
+ memcpy((uint8 *)va + pageOffset, (uint8 *)src + bytesCopied, toCopy);
+@@ -1273,11 +1287,19 @@ __VMCIMemcpyFromQueue(void *dest, // OUT:
+ }
+
+ if (isIovec) {
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
+ struct iovec *iov = (struct iovec *)dest;
++#else
++ struct msghdr *msg = (struct msghdr *)dest;
++#endif
+ int err;
+
+ /* The iovec will track bytesCopied internally. */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
+ err = memcpy_toiovec(iov, (uint8 *)va + pageOffset, toCopy);
++#else
++ err = memcpy_to_msg(msg, (uint8 *)va + pageOffset, toCopy);
++#endif
+ if (err != 0) {
+ if (kernelIf->host) {
+ kunmap(kernelIf->u.h.page[pageIndex]);
+@@ -1834,7 +1856,11 @@ VMCIReleasePages(struct page **pages, // IN
+ if (dirty) {
+ set_page_dirty(pages[i]);
+ }
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 99)
++ put_page(pages[i]);
++#else
+ page_cache_release(pages[i]);
++#endif
+ pages[i] = NULL;
+ }
+ }
+@@ -2048,21 +2074,22 @@ VMCIHost_GetUserMemory(VA64 produceUVA, // IN
+ int err = VMCI_SUCCESS;
+
+ down_write(&current->mm->mmap_sem);
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 99)
+ retval = get_user_pages((VA)produceUVA,
+- produceQ->kernelIf->numPages,
+- 1, 0,
+- produceQ->kernelIf->u.h.headerPage,
+- NULL);
+ #else
+ retval = get_user_pages(current,
+ current->mm,
+ (VA)produceUVA,
++#endif
+ produceQ->kernelIf->numPages,
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 0)
+ 1, 0,
++#else
++ FOLL_WRITE,
++#endif
+ produceQ->kernelIf->u.h.headerPage,
+ NULL);
+-#endif
++
+ if (retval < produceQ->kernelIf->numPages) {
+ Log("get_user_pages(produce) failed (retval=%d)\n", retval);
+ VMCIReleasePages(produceQ->kernelIf->u.h.headerPage, retval, FALSE);
+@@ -2070,11 +2097,19 @@ VMCIHost_GetUserMemory(VA64 produceUVA, // IN
+ goto out;
+ }
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 99)
++ retval = get_user_pages((VA)consumeUVA,
++#else
+ retval = get_user_pages(current,
+ current->mm,
+ (VA)consumeUVA,
++#endif
+ consumeQ->kernelIf->numPages,
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 0)
+ 1, 0,
++#else
++ FOLL_WRITE,
++#endif
+ consumeQ->kernelIf->u.h.headerPage,
+ NULL);
+ if (retval < consumeQ->kernelIf->numPages) {
+diff --git a/vmci-only/shared/compat_module.h b/vmci-only/shared/compat_module.h
+index 2af7372..729aedc 100644
+--- a/vmci-only/shared/compat_module.h
++++ b/vmci-only/shared/compat_module.h
+@@ -80,4 +80,13 @@ static const char __module_cat(tag, __LINE__)[] \
+ typedef int compat_mod_param_bool;
+ #endif
+
++/*
++ * Linux kernel >= 4.2.99 does not return anything from misc_deregister
++ */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 2, 99)
++#define compat_misc_deregister(misc) misc_deregister(misc)
++#else
++#define compat_misc_deregister(misc) ({misc_deregister(misc);0;})
++#endif
++
+ #endif /* __COMPAT_MODULE_H__ */
+diff --git a/vmci-only/shared/vm_device_version.h b/vmci-only/shared/vm_device_version.h
+index e2cb477..3dd7097 100644
+--- a/vmci-only/shared/vm_device_version.h
++++ b/vmci-only/shared/vm_device_version.h
+@@ -53,7 +53,9 @@
+ * VMware HD Audio codec
+ * VMware HD Audio controller
+ */
++#ifndef PCI_VENDOR_ID_VMWARE
+ #define PCI_VENDOR_ID_VMWARE 0x15AD
++#endif
+ #define PCI_DEVICE_ID_VMWARE_SVGA2 0x0405
+ #define PCI_DEVICE_ID_VMWARE_SVGA 0x0710
+ #define PCI_DEVICE_ID_VMWARE_VGA 0x0711
+diff --git a/vmci-only/shared/vmci_kernel_if.h b/vmci-only/shared/vmci_kernel_if.h
+index 9def671..082fe59 100644
+--- a/vmci-only/shared/vmci_kernel_if.h
++++ b/vmci-only/shared/vmci_kernel_if.h
+@@ -100,7 +100,7 @@
+ typedef Semaphore VMCIEvent;
+ typedef Semaphore VMCIMutex;
+ typedef World_ID VMCIHostVmID;
+- typedef uint32 VMCIHostUser;
++ typedef uint32_t VMCIHostUser;
+ typedef PPN *VMCIQPGuestMem;
+ #elif defined(__linux__)
+ typedef spinlock_t VMCILock;
diff --git a/app-emulation/vmware-modules/files/329-vsock.patch b/app-emulation/vmware-modules/files/329-vsock.patch
new file mode 100644
index 0000000..d77402a
--- /dev/null
+++ b/app-emulation/vmware-modules/files/329-vsock.patch
@@ -0,0 +1,266 @@
+diff --git a/vsock-only/Makefile b/vsock-only/Makefile
+index 5d92e9b..7d315e8 100644
+--- a/vsock-only/Makefile
++++ b/vsock-only/Makefile
+@@ -42,8 +42,11 @@ AUTOCONF_DIR := $(SRCROOT)/shared/autoconf
+ INCLUDE += -I$(SRCROOT)/shared
+ endif
+
+-
++ifdef KVERSION
++VM_UNAME = $(KVERSION)
++else
+ VM_UNAME = $(shell uname -r)
++endif
+
+ # Header directory for the running kernel
+ ifdef LINUXINCLUDE
+diff --git a/vsock-only/Makefile.kernel b/vsock-only/Makefile.kernel
+index 5218df2..374cc1f 100644
+--- a/vsock-only/Makefile.kernel
++++ b/vsock-only/Makefile.kernel
+@@ -25,7 +25,7 @@ INCLUDE += -I$(SRCROOT)/include
+ INCLUDE += -I$(SRCROOT)/linux
+ INCLUDE += -I$(SRCROOT)/common
+
+-EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE)
++EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE) $(LINUXINCLUDE)
+ EXTRA_CFLAGS += $(call vm_check_build, $(AUTOCONF_DIR)/netcreate_num_params.c, -DVMW_NETCREATE_KERNARG, )
+
+
+diff --git a/vsock-only/linux/af_vsock.c b/vsock-only/linux/af_vsock.c
+index bde1497..9f8f843 100644
+--- a/vsock-only/linux/af_vsock.c
++++ b/vsock-only/linux/af_vsock.c
+@@ -113,6 +113,9 @@
+ asmlinkage __attribute__((weak)) long
+ sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg);
+ #endif
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 99)
++#include <linux/sched/signal.h>
++#endif
+
+ #include "compat_cred.h"
+ #include "compat_module.h"
+@@ -213,7 +216,11 @@
+ struct sockaddr *addr, int addrLen, int flags);
+ static int VSockVmciStreamConnect(struct socket *sock,
+ struct sockaddr *addr, int addrLen, int flags);
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0)
+ static int VSockVmciAccept(struct socket *sock, struct socket *newsock, int flags);
++#else
++static int VSockVmciAccept(struct socket *sock, struct socket *newsock, int flags, bool kern);
++#endif
+ static int VSockVmciGetname(struct socket *sock,
+ struct sockaddr *addr, int *addrLen, int peer);
+ static unsigned int VSockVmciPoll(struct file *file,
+@@ -233,13 +240,29 @@ static int VSockVmciStreamSetsockopt(struct socket *sock, int level, int optname
+ static int VSockVmciStreamGetsockopt(struct socket *sock, int level, int optname,
+ char __user *optval, int __user * optlen);
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99)
+ static int VSockVmciDgramSendmsg(struct kiocb *kiocb,
++#else
++static int VSockVmciDgramSendmsg(
++#endif
+ struct socket *sock, struct msghdr *msg, size_t len);
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99)
+ static int VSockVmciDgramRecvmsg(struct kiocb *kiocb, struct socket *sock,
++#else
++static int VSockVmciDgramRecvmsg(struct socket *sock,
++#endif
+ struct msghdr *msg, size_t len, int flags);
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99)
+ static int VSockVmciStreamSendmsg(struct kiocb *kiocb,
++#else
++static int VSockVmciStreamSendmsg(
++#endif
+ struct socket *sock, struct msghdr *msg, size_t len);
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99)
+ static int VSockVmciStreamRecvmsg(struct kiocb *kiocb, struct socket *sock,
++#else
++static int VSockVmciStreamRecvmsg(struct socket *sock,
++#endif
+ struct msghdr *msg, size_t len, int flags);
+
+ static int VSockVmciCreate(
+@@ -2872,11 +2895,18 @@ __VSockVmciCreate(struct net *net, // IN: Network namespace
+ * From 2.6.9 to until 2.6.12 sk_alloc() used a cache in
+ * the protocol structure, but you still had to specify the size and cache
+ * yourself.
+- * Most recently (in 2.6.24), sk_alloc() was changed to expect the
++ * In 2.6.24, sk_alloc() was changed to expect the
+ * network namespace, and the option to zero the sock was dropped.
+ *
++ * In 4.2, another parameter was added to sk_alloc() allowing you to specify
++ * whether or not the socket is to be a kernel socket. Previously, we passed
++ * 1 to this new parameter, but following Gentoo's lead
++ * ( https://github.com/gentoo/vmware/blob/master/app-emulation/vmware-modules/files/308-4.02-01-sk_alloc.patch#L19 )
++ * we have switched to passing 0.
+ */
+-#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 12)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 99)
++ sk = sk_alloc(net, vsockVmciFamilyOps.family, priority, &vsockVmciProto, 0);
++#elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 12)
+ sk = sk_alloc(vsockVmciFamilyOps.family, priority,
+ vsockVmciProto.slab_obj_size, vsockVmciProto.slab);
+ #elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 24)
+@@ -3825,7 +3855,12 @@
+ static int
+ VSockVmciAccept(struct socket *sock, // IN
+ struct socket *newsock, // IN/OUT
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0)
+ int flags) // IN
++#else
++ int flags, // IN
++ bool kern)
++#endif
+ {
+ struct sock *listener;
+ int err;
+@@ -4260,7 +4295,11 @@ VSockVmciShutdown(struct socket *sock, // IN
+ */
+
+ static int
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99)
+ VSockVmciDgramSendmsg(struct kiocb *kiocb, // UNUSED
++#else
++VSockVmciDgramSendmsg(
++#endif
+ struct socket *sock, // IN: socket to send on
+ struct msghdr *msg, // IN: message to send
+ size_t len) // IN: length of message
+@@ -4352,7 +4391,11 @@ VSockVmciDgramSendmsg(struct kiocb *kiocb, // UNUSED
+ goto out;
+ }
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
+ memcpy_fromiovec(VMCI_DG_PAYLOAD(dg), msg->msg_iov, len);
++#else
++ memcpy_from_msg(VMCI_DG_PAYLOAD(dg), msg, len);
++#endif
+
+ dg->dst = VMCI_MAKE_HANDLE(remoteAddr->svm_cid, remoteAddr->svm_port);
+ dg->src = VMCI_MAKE_HANDLE(vsk->localAddr.svm_cid, vsk->localAddr.svm_port);
+@@ -4590,7 +4633,11 @@ VSockVmciStreamGetsockopt(struct socket *sock, // IN
+ */
+
+ static int
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99)
+ VSockVmciStreamSendmsg(struct kiocb *kiocb, // UNUSED
++#else
++VSockVmciStreamSendmsg(
++#endif
+ struct socket *sock, // IN: socket to send on
+ struct msghdr *msg, // IN: message to send
+ size_t len) // IN: length of message
+@@ -4712,7 +4759,11 @@ VSockVmciStreamSendmsg(struct kiocb *kiocb, // UNUSED
+ * able to send.
+ */
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
+ written = vmci_qpair_enquev(vsk->qpair, msg->msg_iov,
++#else
++ written = vmci_qpair_enquev(vsk->qpair, &msg->msg_iter.iov,
++#endif
+ len - totalWritten, 0);
+ if (written < 0) {
+ err = -ENOMEM;
+@@ -4759,7 +4810,11 @@ out:
+ */
+
+ static int
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99)
+ VSockVmciDgramRecvmsg(struct kiocb *kiocb, // UNUSED
++#else
++VSockVmciDgramRecvmsg(
++#endif
+ struct socket *sock, // IN: socket to receive from
+ struct msghdr *msg, // IN/OUT: message to receive into
+ size_t len, // IN: length of receive buffer
+@@ -4809,7 +4864,11 @@ VSockVmciDgramRecvmsg(struct kiocb *kiocb, // UNUSED
+ }
+
+ /* Place the datagram payload in the user's iovec. */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
+ err = skb_copy_datagram_iovec(skb, sizeof *dg, msg->msg_iov, payloadLen);
++#else
++ err = skb_copy_datagram_iter(skb, sizeof *dg, &msg->msg_iter, payloadLen);
++#endif
+ if (err) {
+ goto out;
+ }
+@@ -4850,7 +4909,11 @@ out:
+ */
+
+ static int
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99)
+ VSockVmciStreamRecvmsg(struct kiocb *kiocb, // UNUSED
++#else
++VSockVmciStreamRecvmsg(
++#endif
+ struct socket *sock, // IN: socket to receive from
+ struct msghdr *msg, // IN/OUT: message to receive into
+ size_t len, // IN: length of receive buffer
+@@ -4955,9 +5018,17 @@ VSockVmciStreamRecvmsg(struct kiocb *kiocb, // UNUSED
+ }
+
+ if (flags & MSG_PEEK) {
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
+ read = vmci_qpair_peekv(vsk->qpair, msg->msg_iov, len - copied, 0);
++#else
++ read = vmci_qpair_peekv(vsk->qpair, &msg->msg_iter.iov, len - copied, 0);
++#endif
+ } else {
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
+ read = vmci_qpair_dequev(vsk->qpair, msg->msg_iov, len - copied, 0);
++#else
++ read = vmci_qpair_dequev(vsk->qpair, &msg->msg_iter.iov, len - copied, 0);
++#endif
+ }
+
+ if (read < 0) {
+diff --git a/vsock-only/linux/notify.c b/vsock-only/linux/notify.c
+index 5b1e134..82d8738 100644
+--- a/vsock-only/linux/notify.c
++++ b/vsock-only/linux/notify.c
+@@ -516,7 +516,11 @@ VSockVmciHandleWrote(struct sock *sk, // IN
+ PKT_FIELD(vsk, sentWaitingRead) = FALSE;
+ #endif
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0)
+ sk->sk_data_ready(sk, 0);
++#else
++ sk->sk_data_ready(sk);
++#endif
+ }
+
+
+diff --git a/vsock-only/linux/notifyQState.c b/vsock-only/linux/notifyQState.c
+index 464454b..7933be7 100644
+--- a/vsock-only/linux/notifyQState.c
++++ b/vsock-only/linux/notifyQState.c
+@@ -164,7 +164,11 @@ VSockVmciHandleWrote(struct sock *sk, // IN
+ struct sockaddr_vm *dst, // IN: unused
+ struct sockaddr_vm *src) // IN: unused
+ {
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0)
+ sk->sk_data_ready(sk, 0);
++#else
++ sk->sk_data_ready(sk);
++#endif
+ }
+
+
+@@ -566,7 +570,11 @@ VSockVmciNotifyPktRecvPostDequeue(struct sock *sk, // IN
+ }
+
+ /* See the comment in VSockVmciNotifyPktSendPostEnqueue */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0)
+ sk->sk_data_ready(sk, 0);
++#else
++ sk->sk_data_ready(sk);
++#endif
+ }
+
+ return err;
diff --git a/app-emulation/vmware-modules/metadata.xml b/app-emulation/vmware-modules/metadata.xml
new file mode 100644
index 0000000..0f23e29
--- /dev/null
+++ b/app-emulation/vmware-modules/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>vmware@gentoo.org</email>
+ <name>Gentoo VMware Project</name>
+ </maintainer>
+ <longdescription>
+ VMware kernel modules.
+ </longdescription>
+ <use>
+ <flag name="vmblock">Build the WMware Blocking File System module; does not seem to be needed by recent Workstation versions</flag>
+ <flag name="vmci">Build the Virtual Machine Communication Interface module; disable this if you want to use the module from the mainline kernel</flag>
+ <flag name="vsock">Build the VMware VMCI transport for Virtual Sockets; disable this if you want to use the module from the mainline kernel</flag>
+ </use>
+</pkgmetadata>
diff --git a/app-emulation/vmware-modules/vmware-modules-329.1.1-r1.ebuild b/app-emulation/vmware-modules/vmware-modules-329.1.1-r1.ebuild
new file mode 100644
index 0000000..fee1a34
--- /dev/null
+++ b/app-emulation/vmware-modules/vmware-modules-329.1.1-r1.ebuild
@@ -0,0 +1,145 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+inherit eutils flag-o-matic linux-info linux-mod user versionator udev
+
+PV_MAJOR=$(get_major_version)
+PV_MINOR=$(get_version_component_range 2-3)
+
+DESCRIPTION="VMware kernel modules"
+HOMEPAGE="http://www.vmware.com/"
+
+SRC_URI=""
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64"
+IUSE="vmblock vmci vsock"
+REQUIRED_USE="!vsock? ( !vmci )"
+
+RDEPEND=""
+DEPEND="
+ =app-emulation/vmware-workstation-14.${PV_MINOR}*
+"
+
+S=${WORKDIR}
+
+pkg_setup() {
+ CONFIG_CHECK="~HIGH_RES_TIMERS"
+ if kernel_is ge 2 6 37 && kernel_is lt 2 6 39; then
+ CONFIG_CHECK="${CONFIG_CHECK} BKL"
+ fi
+ if use vmci ; then
+ CONFIG_CHECK="${CONFIG_CHECK} !VMWARE_VMCI"
+ else
+ CONFIG_CHECK="${CONFIG_CHECK} VMWARE_VMCI"
+ fi
+ if use vsock ; then
+ CONFIG_CHECK="${CONFIG_CHECK} !VMWARE_VMCI_VSOCKETS"
+ else
+ CONFIG_CHECK="${CONFIG_CHECK} VMWARE_VMCI_VSOCKETS"
+ fi
+
+ linux-info_pkg_setup
+
+ linux-mod_pkg_setup
+
+ VMWARE_GROUP=${VMWARE_GROUP:-vmware}
+
+ VMWARE_MODULE_LIST_ALL="vmblock vmmon vmnet vmci vsock"
+ VMWARE_MODULE_LIST="vmmon vmnet"
+ use vmci && VMWARE_MODULE_LIST="${VMWARE_MODULE_LIST} vmci"
+ use vsock && VMWARE_MODULE_LIST="${VMWARE_MODULE_LIST} vsock"
+ use vmblock && VMWARE_MODULE_LIST="${VMWARE_MODULE_LIST} vmblock"
+
+ VMWARE_MOD_DIR="${PN}-${PVR}"
+
+ BUILD_TARGETS="auto-build KERNEL_DIR=${KERNEL_DIR} KBUILD_OUTPUT=${KV_OUT_DIR}"
+
+ enewgroup "${VMWARE_GROUP}"
+
+ filter-flags -mfpmath=sse -mavx -mpclmul -maes
+ append-cflags -mno-sse # Found a problem similar to bug #492964
+
+ for mod in ${VMWARE_MODULE_LIST}; do
+ MODULE_NAMES="${MODULE_NAMES} ${mod}(misc:${S}/${mod}-only)"
+ done
+}
+
+src_unpack() {
+ cd "${S}"
+ for mod in ${VMWARE_MODULE_LIST_ALL}; do
+ tar -xf /opt/vmware/lib/vmware/modules/source/${mod}.tar
+ done
+}
+
+src_prepare() {
+ # from Arch Linux: https://aur.archlinux.org/packages/vmware-workstation/
+ if use vmblock; then
+ epatch "${FILESDIR}/${PV_MAJOR}-vmblock.patch"
+ fi
+ if use vmci; then
+ epatch "${FILESDIR}/${PV_MAJOR}-vmci.patch"
+ fi
+ if use vsock; then
+ epatch "${FILESDIR}/${PV_MAJOR}-vsock.patch"
+ epatch "${FILESDIR}/${PV_MAJOR}-4.14-00-vsock-gcc-plugins-randstruct.patch"
+ fi
+ # from https://github.com/mkubecek/vmware-host-modules/tree/workstation-14.0.0
+ epatch "${FILESDIR}/${PV_MAJOR}-00-vmmon-quick-workaround-for-objtool-warnings.patch"
+ kernel_is ge 4 9 0 && epatch "${FILESDIR}/${PV_MAJOR}-4.09-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch"
+ kernel_is ge 4 10 0 && epatch "${FILESDIR}/${PV_MAJOR}-4.10-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch"
+ kernel_is ge 4 12 0 && epatch "${FILESDIR}/${PV_MAJOR}-4.12-00-vmmon-use-standard-definition-of-MSR_MISC_FEATURES_E.patch"
+ kernel_is ge 4 13 0 && epatch "${FILESDIR}/${PV_MAJOR}-4.13-00-vmmon-use-standard-definition-of-CR3_PCID_MASK-if-av.patch"
+
+ # decouple the kernel include dir from the running kernel version: https://github.com/stefantalpalaru/gentoo-overlay/issues/17
+ sed -i -e "s%HEADER_DIR = /lib/modules/\$(VM_UNAME)/build/include%HEADER_DIR = ${KERNEL_DIR}/include%" */Makefile || die "sed failed"
+
+ # Allow user patches so they can support RC kernels and whatever else
+ default
+}
+
+src_install() {
+ linux-mod_src_install
+ local udevrules="${T}/60-vmware.rules"
+ cat > "${udevrules}" <<-EOF
+ KERNEL=="vmci", GROUP="vmware", MODE="660"
+ KERNEL=="vmw_vmci", GROUP="vmware", MODE="660"
+ KERNEL=="vmmon", GROUP="vmware", MODE="660"
+ KERNEL=="vsock", GROUP="vmware", MODE="660"
+ EOF
+ udev_dorules "${udevrules}"
+
+ if ! use vmci ; then
+ dodir /etc/modprobe.d/
+
+ cat > "${D}"/etc/modprobe.d/vmware.conf <<-EOF
+ # Support for vmware vmci in kernel module
+ alias vmci vmw_vmci
+ EOF
+
+ export installed_modprobe_conf=1
+ fi
+ if ! use vsock ; then
+ dodir /etc/modprobe.d/
+ cat >> "${D}"/etc/modprobe.d/vmware.conf <<-EOF
+ # Support for vmware vsock in kernel module
+ alias vsock vmw_vsock_vmci_transport
+ EOF
+
+ export installed_modprobe_conf=1
+ fi
+}
+
+pkg_postinst() {
+ linux-mod_pkg_postinst
+ if [ "${installed_modprobe_conf}"x == "x" ] ; then
+ if [ -f "${ROOT}/etc/modprobe.d/vmware.conf" ] ; then
+ ewarn "Please check the /etc/modprobe.d/vmware.conf file and"
+ ewarn "possible conflicts when using vmci and/or vsock modules built"
+ ewarn "out of kernel"
+ fi
+ fi
+}
diff --git a/app-emulation/vmware-workstation/Manifest b/app-emulation/vmware-workstation/Manifest
new file mode 100644
index 0000000..bd6b073
--- /dev/null
+++ b/app-emulation/vmware-workstation/Manifest
@@ -0,0 +1,10 @@
+AUX configure-hostd.sh 372 BLAKE2B 0ed2d479a46d69ff8498bfac180f0440fb57fb173fc1a427115872a40a47559725623399652e9663fa8a4ca0d7e020d5445bafb6c37f45449dea341fc9f6cce6 SHA512 87c84f5e51e8b4585a9a55f13771cd8b84f2e4e0bb33679e3a1b23eb84a5be5d523a57b6c770095c1d21712a98e9317bbd215ab027843b0586b35ecf9fb85b49
+AUX vmware-14.1.rc 2476 BLAKE2B dff25b43c5fa57186be2a5f0ca4606d26cd1c3f3dbeb91d855fc07a9fd576f446983c852c8e0b112c5616bb95dfddc7e2c738b4d0ca341c781d7addcb45068cd SHA512 9bae224387128b2cd221d509e2933042e3925fb041670907d8a47c70a488214206912fe25ab24c0bdeb31591149e62aba374d3fa63fdd08644e09667e195967f
+AUX vmware-server-14.1.rc 1506 BLAKE2B 886ed1de7a99320611a28a43b48cf17715fcab8bf533a73c28a1aa2f8d150ee2b84e1e510e864b18347f3bd7e43faec3cfc90f09d5ac9c0afe821f67654a68c4 SHA512 548ff69f87bee2b6c82bd931d22dd560370c4a00641ae47d05af05bbc72cedc8fd25054abc405a590b72227b10c5997d79f16ded67f3e0cfac142eb248b47d44
+DIST VMware-Workstation-Full-14.1.1-7528167.x86_64.bundle 460769685 BLAKE2B c9807a94588989e7a1dd0d7964c5d9385f57f19aaf2cdb43be9b29a0b61edcd7cb93865ca8dc84394a306467fb80816334239fc3508d360f2c5e4aeecd5c93d1 SHA512 86f06796fc3657a895fd5766c5b83e4ff88c73e34f789c287f1e9b5b613d138067f151f1c0c92749bb0104490bd0e0ca223c55b71a3a98611b1e9dc5cec6c304
+DIST com.vmware.fusion.tools.darwin-14.1.1.7528167.zip.tar 2836480 BLAKE2B e434280c4cf1f9f38823546e7c15c8425d33db3253d203d56d39b012a17d4862c9aece3b4aad08629d303881ea7b4bdba1ded11686bc3bc8ebc804dea3ad07de SHA512 3a08e3670475ea84ddde8646e7a5b9b1efcaffd801aa3d64a5b0984c84aebff320114b0a8b9f9188a7cdd0640ec0bfae8c237625132fdac448501b4451c78488
+DIST com.vmware.fusion.tools.darwinPre15-14.1.1.7528167.zip.tar 2478080 BLAKE2B 27b0ea99545b33e079994da8f26c8c6c3ecce7dbc108062cedc787c9a20e53b591e119826875895d10d120a81efbe14d47563b24f6889cf9338367488e2a5e44 SHA512 dbac244995a16a3247c3eb81ec5a68979f454e6b9e28d2fe47678502441140bbe1c171da69945ea8f0581dcc9191002e02758ce9aafbd70b442263a5b8818f3c
+DIST unlocker-2.1.1_p1.zip 16201234 BLAKE2B 486597ba7ef12d2ec5b021ff9f5b56a9d1a58251e26f7bd9df4e84d34df9602ada3eaf69967ea645082e3919187f14801e7f506fa08b457d5763bdba9ec75493 SHA512 4ccea825339ae9303e8676dc773ca54cc929ab4970d8a2ac225f05bf18bad0e0945b7df3dd2b65c5596fd164642296da0f64774b27d7c066597f4d1d4db82bee
+DIST vmware-systemd-gentoo-02.tgz 14064 BLAKE2B 24ac2c2f295130f4aadad867ec88d652bd292cc60e6b471bb2e01069fe01d84dac3d8b0ca7690ebf218d663adfe0c1dc889d3f4f53cf3178b68291461260748b SHA512 3a382bfd5f1eb2b218d8012588ea55c1f22786dba35a1fc0fdfdb4e40b05e0e735ed09c6961684f6442e863c3ed72024ce01f19113bbd9ca47c32e3f43c55f42
+EBUILD vmware-workstation-14.1.1.7528167-r2.ebuild 20721 BLAKE2B 4355a3730c8dccc92873d4317768c2a3d51b9576fb471629b9c1d46522ea196255341818a9f122cfad2f7397ef0bd2e9d831ee21c023283e96d5fbd9bb39a9a3 SHA512 6217e2e253b1c2e34a0d8deaf2f5073300a7843abbd317c3d7ac937f590a98d7d08694a1d3c5137fad65d5ff673dac155b1a97e49b119522a824ae9674963269
+MISC metadata.xml 2112 BLAKE2B c689dcbacb5d05d49b04cb7e6aa29111fff592ea0e3e2ea0096e8e538c0806ed51dbc30db6ff99d1eb4583c19200f21049492df09d88ada7416b9ed9f6be6ee0 SHA512 4d600113952a7c0ee26652eaebc7c4dfe396b077b928e38f0614d454e26a24599086d24446db0edfa496f37572a1abc1d2032ff57953fcb16bcbb122239b8342
diff --git a/app-emulation/vmware-workstation/files/configure-hostd.sh b/app-emulation/vmware-workstation/files/configure-hostd.sh
new file mode 100644
index 0000000..480e903
--- /dev/null
+++ b/app-emulation/vmware-workstation/files/configure-hostd.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+action="$1"
+
+case $action in
+ add)
+ rc-update -q add vmware-workstation-server default
+ rc-service vmware-workstation-server start
+ ;;
+ remove)
+ rc-update -q del vmware-workstation-server default
+ rc-service vmware-workstation-server stop
+ ;;
+ status)
+ rc-service -q vmware-workstation-server status
+ ;;
+ *)
+ exit 1
+ ;;
+esac
diff --git a/app-emulation/vmware-workstation/files/vmware-14.1.rc b/app-emulation/vmware-workstation/files/vmware-14.1.rc
new file mode 100644
index 0000000..b627869
--- /dev/null
+++ b/app-emulation/vmware-workstation/files/vmware-14.1.rc
@@ -0,0 +1,102 @@
+#!/sbin/openrc-run
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+depend() {
+ need localmount
+ use net
+}
+
+start() {
+ ebegin Starting VMware USB Arbitrator
+ @@BINDIR@@/vmware-usbarbitrator
+ eend $?
+ ebegin Starting VMware services
+
+ # vmci might be:
+ # 1) built as external kernel module
+ # 2) built as internal kernel module (with name vmw_vmci)
+ # 3) embedded in the kernel
+ for mod in /lib/modules/$(uname -r)/misc/vmci.ko \
+ /lib/modules/$(uname -r)/kernel/drivers/misc/vmw_vmci/vmw_vmci.ko ;
+ do
+ if [[ -f "${mod}" ]] ; then
+ modprobe -v $(basename "${mod}" .ko)
+ eend $?
+ break
+ fi
+ done
+
+ # vsock might be:
+ # 1) built as external kernel module
+ # 2) built as internal kernel module (with name vmw_vsock_vmci_transport)
+ # 3) embedded in the kernel
+ for mod in /lib/modules/$(uname -r)/misc/vsock.ko \
+ /lib/modules/$(uname -r)/kernel/net/vmw_vsock/vmw_vsock_vmci_transport.ko ;
+ do
+ if [[ -f "${mod}" ]] ; then
+ modprobe -v $(basename "${mod}" .ko)
+ eend $?
+ break
+ fi
+ done
+
+ # vmblock
+ if [[ -f /lib/modules/$(uname -r)/misc/vmblock.ko ]]; then
+ modprobe -v vmblock
+ eend $?
+ fi
+
+ # vmci or vsock were already loaded by the previous modprobe,
+ # no need to do it here
+ # quiet for vmci because it may not be there
+ modprobe -av vmmon vmnet
+ eend $?
+ @@BINDIR@@/vmware-networks --start
+ eend $?
+}
+
+stop() {
+ ebegin Stopping VMware USB Arbitrator
+ killall --wait vmware-usbarbitrator
+ eend $?
+ @@BINDIR@@/vmware-networks --stop
+ eend $?
+ ebegin Stopping VMware services
+ modprobe -rv vmmon vmnet
+ eend $?
+
+ # vsock might be:
+ # 1) built as external kernel module
+ # 2) built as internal kernel module (with name vmw_vsock_vmci_transport)
+ # 3) embedded in the kernel
+ for mod in /lib/modules/$(uname -r)/misc/vsock.ko \
+ /lib/modules/$(uname -r)/kernel/net/vmw_vsock/vmw_vsock_vmci_transport.ko ;
+ do
+ if [[ -f "${mod}" ]] ; then
+ modprobe -rv $(basename "${mod}" .ko)
+ eend $?
+ break
+ fi
+ done
+
+ # vmci might be:
+ # 1) built as external kernel module
+ # 2) built as internal kernel module (with name vmw_vmci)
+ # 3) embedded in the kernel
+ for mod in /lib/modules/$(uname -r)/misc/vmci.ko \
+ /lib/modules/$(uname -r)/kernel/drivers/misc/vmw_vmci/vmw_vmci.ko ;
+ do
+ if [[ -f "${mod}" ]] ; then
+ modprobe -rv $(basename "${mod}" .ko)
+ eend $?
+ break
+ fi
+ done
+
+ # vmblock
+ if [[ -f /lib/modules/$(uname -r)/misc/vmblock.ko ]]; then
+ modprobe -rv vmblock
+ eend $?
+ fi
+}
diff --git a/app-emulation/vmware-workstation/files/vmware-server-14.1.rc b/app-emulation/vmware-workstation/files/vmware-server-14.1.rc
new file mode 100644
index 0000000..8f9b7dd
--- /dev/null
+++ b/app-emulation/vmware-workstation/files/vmware-server-14.1.rc
@@ -0,0 +1,52 @@
+#!/sbin/openrc-run
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+depend() {
+ need localmount vmware
+ use net
+}
+
+checkconfig() {
+ checkpath -d /var/run/vmware
+
+ # Check if certificates exist. If not, we need to generate them, ala sshd.
+ if [ ! -e @@ETCDIR@@/ssl/rui.key -o ! -e @@ETCDIR@@/ssl/rui.crt ]; then
+ checkpath -d -m 0600 @@ETCDIR@@/ssl
+ openssl req -x509 -days 365 -newkey rsa:2048 -keyout @@ETCDIR@@/ssl/rui.key -out @@ETCDIR@@/ssl/rui.crt -config @@ETCDIR@@/ssl/hostd.ssl.config
+ checkpath -f -m 0600 @@ETCDIR@@/ssl/rui.key @@ETCDIR@@/ssl/rui.crt
+ fi
+}
+
+start() {
+ checkconfig
+
+ ebegin Starting VMware Authentication Daemon
+ start-stop-daemon --start \
+ --exec @@PREFIX@@/sbin/vmware-authdlauncher
+ eend $?
+ ebegin Starting VMware Workstation Server
+ start-stop-daemon --start \
+ --pidfile /var/run/vmware/vmware-hostd.PID \
+ --exec @@BINDIR@@/vmware-hostd \
+ -- -a -d @@ETCDIR@@/hostd/config.xml
+ eend $?
+}
+
+stop() {
+ ebegin "Shutdown VMs in the AutoStart Sequence"
+ local HOHO_ADMIN="$(@@BINDIR@@/vmware-wssc-adminTool "@@ETCDIR@@/hostd/authorization.xml" 2>/dev/null)"
+
+ if [ "x" != "x${HOHO_ADMIN}" ]; then
+ @@BINDIR@@/vmware-vim-cmd -U "${HOHO_ADMIN}" hostsvc/autostartmanager/autostop
+ fi
+ eend $?
+
+ ebegin Stopping VMware Workstation Server
+ start-stop-daemon --stop \
+ --pidfile /var/run/vmware/vmware-hostd.PID
+ eend $?
+ ebegin Stopping VMware Authentication Daemon
+ killall --wait vmware-authdlauncher
+ eend $?
+}
diff --git a/app-emulation/vmware-workstation/metadata.xml b/app-emulation/vmware-workstation/metadata.xml
new file mode 100644
index 0000000..94cc9f6
--- /dev/null
+++ b/app-emulation/vmware-workstation/metadata.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>vmware@gentoo.org</email>
+ <name>Gentoo VMware Project</name>
+ </maintainer>
+ <longdescription>
+ VMWare Workstation is a virtual machine which can be used to install
+ other operating systems in a virtual environment to run on top of Gentoo.
+ </longdescription>
+ <use>
+ <flag name="bundled-libs">Use precompiled bundled libraries instead of the system installation.</flag>
+ <flag name="macos-guests">Support macOS guests.</flag>
+ <flag name="modules">Install <pkg>app-emulation/vmware-modules</pkg> in order to run VMs locally.</flag>
+ <flag name="ovftool">Install OVF tool.</flag>
+ <flag name="server">Install VMware Workstation Server component.</flag>
+ <flag name="vix">Install VIX. The VIX API allows you to write programs and scripts
+ that automate virtual machine operations, and run programs or manipulate
+ files within guest operating systems.
+ </flag>
+ <flag name="vmware-tools-darwin">Install VMware Tools for OS X (El Capitan and later) guests.</flag>
+ <flag name="vmware-tools-darwinPre15">Install VMware Tools for OS X (up to Yosemite) guests.</flag>
+ <flag name="vmware-tools-freebsd">Install VMware Tools for FreeBSD guests.</flag>
+ <flag name="vmware-tools-linux">Install VMware Tools for Linux guests.</flag>
+ <flag name="vmware-tools-linuxPreGlibc25">Install VMware Tools for Linux (glibc older than 2.5) guests.</flag>
+ <flag name="vmware-tools-netware">Install VMware Tools for Netware guests.</flag>
+ <flag name="vmware-tools-solaris">Install VMware Tools for Solaris guests.</flag>
+ <flag name="vmware-tools-windows">Install VMware Tools for Windows (Vista and later) guests.</flag>
+ <flag name="vmware-tools-winPre2k">Install VMware Tools for Windows (before 2000) guests.</flag>
+ <flag name="vmware-tools-winPreVista">Install VMware Tools for Windows (after 2000, before Vista) guests.</flag>
+ </use>
+ <upstream>
+ <remote-id type="github">akhuettel/systemd-vmware</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/app-emulation/vmware-workstation/vmware-workstation-14.1.1.7528167-r2.ebuild b/app-emulation/vmware-workstation/vmware-workstation-14.1.1.7528167-r2.ebuild
new file mode 100644
index 0000000..b18ab04
--- /dev/null
+++ b/app-emulation/vmware-workstation/vmware-workstation-14.1.1.7528167-r2.ebuild
@@ -0,0 +1,700 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+inherit eutils versionator readme.gentoo-r1 gnome2-utils pam systemd xdg-utils
+
+MY_PN="VMware-Workstation-Full"
+MY_PV=$(get_version_component_range 1-3)
+PV_MODULES="329.$(get_version_component_range 2-3)"
+PV_BUILD=$(get_version_component_range 4)
+MY_P="${MY_PN}-${MY_PV}-${PV_BUILD}"
+VMWARE_FUSION_VER="10.1.1_7520154"
+SYSTEMD_UNITS_TAG="gentoo-02"
+
+DESCRIPTION="Emulate a complete PC without the performance overhead of most emulators"
+HOMEPAGE="http://www.vmware.com/products/workstation/"
+SRC_URI="
+ https://download3.vmware.com/software/wkst/file/${MY_P}.x86_64.bundle
+ macos-guests? (
+ https://github.com/DrDonk/unlocker/archive/b036c40ab1922d9abf4f7d68e34f1eca3b4dc2ad.zip -> unlocker-2.1.1_p1.zip
+ vmware-tools-darwinPre15? ( https://softwareupdate.vmware.com/cds/vmw-desktop/fusion/${VMWARE_FUSION_VER/_//}/packages/com.vmware.fusion.tools.darwinPre15.zip.tar -> com.vmware.fusion.tools.darwinPre15-${PV}.zip.tar )
+ vmware-tools-darwin? ( https://softwareupdate.vmware.com/cds/vmw-desktop/fusion/${VMWARE_FUSION_VER/_//}/packages/com.vmware.fusion.tools.darwin.zip.tar -> com.vmware.fusion.tools.darwin-${PV}.zip.tar )
+ )
+ systemd? ( https://github.com/akhuettel/systemd-vmware/archive/${SYSTEMD_UNITS_TAG}.tar.gz -> vmware-systemd-${SYSTEMD_UNITS_TAG}.tgz )
+ "
+
+LICENSE="GPL-2 GPL-3 MIT-with-advertising vmware"
+SLOT="0"
+KEYWORDS="~amd64"
+IUSE="bundled-libs cups doc macos-guests +modules ovftool server systemd vix"
+DARWIN_GUESTS="darwin darwinPre15"
+IUSE_VMWARE_GUESTS="${DARWIN_GUESTS} freebsd linux linuxPreGlibc25 netware solaris windows winPre2k winPreVista"
+for guest in ${IUSE_VMWARE_GUESTS}; do
+ IUSE+=" vmware-tools-${guest}"
+done
+REQUIRED_USE="
+ server? ( modules )
+ vmware-tools-darwin? ( macos-guests )
+ vmware-tools-darwinPre15? ( macos-guests )
+"
+RESTRICT="mirror strip"
+
+BUNDLED_LIBS_DIR=/opt/vmware/lib/vmware/lib
+
+BUNDLED_LIBS="
+ libX11.so.6
+ libXau.so.6
+ libxcb.so.1
+ libXcomposite.so.1
+ libXcursor.so.1
+ libXdamage.so.1
+ libXdmcp.so.6
+ libXext.so.6
+ libXfixes.so.3
+ libXft.so.2
+ libXinerama.so.1
+ libXi.so.6
+ libXrandr.so.2
+ libXrender.so.1
+ libXtst.so.6
+ libaio.so.1
+ libatk-1.0.so.0
+ libatk-bridge-2.0.so.0
+ libatspi.so.0
+ libcairo.so.2
+ libcairo-gobject.so.2
+ libcroco-0.6.so.3
+ libcrypto.so.1.0.2
+ libcurl.so.4
+ libdbus-1.so.3
+ libepoxy.so.0
+ libexpat.so.1
+ libffi.so.6
+ libfontconfig.so.1
+ libfreetype.so.6
+ libfuse.so.2
+ libgailutil-3.so.0
+ libgcc_s.so.1
+ libgck-1.so.0
+ libgcr-base-3.so.1
+ libgcr-ui-3.so.1
+ libgcrypt.so.20
+ libgdk-3.so.0
+ libgdk_pixbuf-2.0.so.0
+ libgio-2.0.so.0
+ libglib-2.0.so.0
+ libgmodule-2.0.so.0
+ libgobject-2.0.so.0
+ libgpg-error.so.0
+ libgthread-2.0.so.0
+ libgtk-3.so.0
+ libharfbuzz.so.0
+ libICE.so.6
+ libjpeg.so.62
+ libp11-kit.so.0
+ libpango-1.0.so.0
+ libpangocairo-1.0.so.0
+ libpangoft2-1.0.so.0
+ libpcre.so.1
+ libpcsclite.so.1
+ libpixman-1.so.0
+ libpng12.so.0
+ librsvg-2.so.2
+ libsigc-2.0.so.0
+ libSM.so.6
+ libssl.so.1.0.2
+ libstdc++.so.6
+ libtasn1.so.6
+ libtiff.so.5
+ libxml2.so.2
+ libz.so.1
+"
+
+BUNDLED_LIB_DEPENDS="
+ app-accessibility/at-spi2-atk
+ app-accessibility/at-spi2-core
+ app-crypt/gcr[gtk]
+ app-crypt/p11-kit
+ dev-libs/atk
+ dev-libs/expat
+ dev-libs/glib:2
+ dev-libs/libaio
+ dev-libs/libcroco
+ dev-libs/libffi
+ dev-libs/libgcrypt:0/20
+ dev-libs/libgpg-error
+ dev-libs/libpcre
+ dev-libs/libsigc++:2
+ dev-libs/libtasn1:0/6
+ dev-libs/libxml2
+ dev-libs/openssl:0
+ gnome-base/librsvg:2
+ media-libs/fontconfig
+ media-libs/freetype
+ media-libs/harfbuzz:0/0.9.18
+ media-libs/libepoxy
+ media-libs/libpng:1.2
+ media-libs/tiff:0
+ net-misc/curl
+ sys-apps/dbus
+ sys-apps/pcsc-lite
+ sys-fs/fuse
+ sys-libs/zlib
+ virtual/jpeg:62
+ x11-libs/cairo[glib]
+ x11-libs/gdk-pixbuf:2
+ x11-libs/gtk+:3
+ x11-libs/libICE
+ x11-libs/libSM
+ x11-libs/libX11
+ x11-libs/libXau
+ x11-libs/libxcb
+ x11-libs/libXcomposite
+ x11-libs/libXcursor
+ x11-libs/libXdamage
+ x11-libs/libXdmcp
+ x11-libs/libXext
+ x11-libs/libXfixes
+ x11-libs/libXft
+ x11-libs/libXi
+ x11-libs/libXinerama
+ x11-libs/libXrandr
+ x11-libs/libXrender
+ x11-libs/libXtst
+ x11-libs/pango
+ x11-libs/pixman
+"
+
+# vmware should not use virtual/libc as this is a
+# precompiled binary package thats linked to glibc.
+RDEPEND="
+ app-arch/bzip2
+ app-arch/unzip
+ app-shells/bash
+ dev-db/sqlite:3
+ dev-libs/dbus-glib
+ dev-libs/gmp:0
+ dev-libs/icu
+ dev-libs/json-c
+ dev-libs/nettle:0/6.2
+ gnome-base/gconf
+ gnome-base/libgnome-keyring
+ media-gfx/graphite2
+ media-libs/alsa-lib
+ media-libs/libart_lgpl
+ media-libs/libvorbis
+ media-libs/mesa
+ net-dns/libidn
+ net-libs/gnutls
+ cups? ( net-print/cups )
+ sys-apps/tcp-wrappers
+ sys-apps/util-linux
+ x11-libs/gksu
+ x11-libs/libXxf86vm
+ x11-libs/libdrm
+ x11-libs/libxshmfence
+ x11-libs/startup-notification
+ x11-libs/xcb-util
+ x11-themes/hicolor-icon-theme
+ !bundled-libs? ( ${BUNDLED_LIB_DEPENDS} )
+ !app-emulation/vmware-player
+ !app-emulation/vmware-tools
+"
+PDEPEND="
+ modules? ( ~app-emulation/vmware-modules-${PV_MODULES} )
+"
+DEPEND="
+ dev-lang/python:2.7
+ >=dev-util/patchelf-0.9
+ macos-guests? ( dev-python/six )
+ ovftool? ( app-admin/chrpath )
+ sys-libs/ncurses:5
+ sys-libs/readline:0
+"
+
+S=${WORKDIR}/extracted
+VM_INSTALL_DIR="/opt/vmware"
+VM_DATA_STORE_DIR="/var/lib/vmware/Shared VMs"
+VM_HOSTD_USER="root"
+
+QA_PREBUILT="/opt/*"
+
+QA_WX_LOAD="opt/vmware/lib/vmware/tools-upgraders/vmware-tools-upgrader-32 opt/vmware/lib/vmware/bin/vmware-vmx-stats opt/vmware/lib/vmware/bin/vmware-vmx-debug opt/vmware/lib/vmware/bin/vmware-vmx"
+# adding "opt/vmware/lib/vmware/lib/libvmware-gksu.so/libvmware-gksu.so" to QA_WX_LOAD doesn't work
+
+src_unpack() {
+ for a in ${A}; do
+ if [ ${a##*.} == 'bundle' ]; then
+ cp "${DISTDIR}/${a}" "${WORKDIR}"
+ else
+ unpack ${a}
+ fi
+ done
+
+ local bundle=${MY_P}.x86_64.bundle
+ chmod 755 ${bundle}
+ ./${bundle} --console --extract extracted || die "unable to extract bundle"
+
+ if ! use ovftool; then
+ rm -r extracted/vmware-ovftool || die "unable to remove dir"
+ fi
+
+ if ! use server; then
+ rm -r extracted/vmware-workstation-server || die "unable to remove dir"
+ fi
+
+ if ! use vix; then
+ rm -r extracted/vmware-vix-core extracted/vmware-vix-lib-Workstation* || die "unable to remove dir"
+ fi
+
+ for guest in ${DARWIN_GUESTS}; do
+ if use vmware-tools-${guest}; then
+ mkdir extracted/vmware-tools-${guest}
+ unzip -q com.vmware.fusion.tools.${guest}.zip payload/\*
+ mv payload/* extracted/vmware-tools-${guest}/
+ rm -r payload com.vmware.fusion.tools.${guest}.zip
+ fi
+ done
+}
+
+clean_bundled_libs() {
+ einfo "Removing bundled libraries"
+ for libname in ${BUNDLED_LIBS} ; do
+ rm -rf "${S}"/*/lib/lib/${libname}
+ done
+
+ rm -rf "${S}"/*/lib/libconf
+
+ # Among the bundled libs there are libcrypto.so.1.0.2 and libssl.so.1.0.2
+ # (needed by libcds.so) which seem to be compiled from openssl-1.0.1l.
+ # Upstream real sonames are *so.1.0.0 so it's necessary to fix DT_NEEDED link
+ # in libcds.so to be able to use system libs.
+ pushd >/dev/null .
+ einfo "Patching libcds.so"
+ for d in "${S}"/*/lib/lib/libcds.so; do
+ cd "${d}" || die
+ patchelf --replace-needed libssl.so.1.0.{2,0} \
+ --replace-needed libcrypto.so.1.0.{2,0} \
+ libcds.so || die
+ cd - >/dev/null
+ done
+}
+
+src_prepare() {
+ default
+
+ rm -f */bin/vmware-modconfig
+ rm -rf */lib/modules/binary
+ # Bug 459566
+ mkdir vmware-network-editor/lib/lib
+ mv vmware-network-editor/lib/libvmware-netcfg.so vmware-network-editor/lib/lib/
+
+ if use server; then
+ rm -f vmware-workstation-server/bin/{openssl,configure-hostd.sh}
+ fi
+
+ if ! use bundled-libs ; then
+ clean_bundled_libs
+ fi
+
+ if use ovftool; then
+ chrpath -d vmware-ovftool/libcurl.so.4
+ fi
+
+ if use macos-guests; then
+ sed -i -e "s#vmx_path = '/usr#vmx_path = '${D}${VM_INSTALL_DIR//\//\\/}#" \
+ -e "s#os\.path\.isfile('/usr#os.path.isfile('${D}${VM_INSTALL_DIR//\//\\/}#" \
+ -e "s#vmwarebase = '/usr#vmwarebase = '${D}${VM_INSTALL_DIR//\//\\/}#" \
+ "${WORKDIR}"/unlocker-*/unlocker.py
+ fi
+
+ DOC_CONTENTS="
+/etc/env.d is updated during ${PN} installation. Please run:\n
+'env-update && source /etc/profile'\n
+Before you can use ${PN}, you must configure a default network setup.
+You can do this by running 'emerge --config ${PN}'.\n
+To be able to run ${PN} your user must be in the vmware group.\n
+"
+}
+
+src_install() {
+ local major_minor=$(get_version_component_range 1-2 "${PV}")
+ local vmware_installer_version=$(cat "${S}/vmware-installer/manifest.xml" | grep -oPm1 "(?<=<version>)[^<]+")
+
+ # revdep-rebuild entry
+ insinto /etc/revdep-rebuild
+ echo "SEARCH_DIRS_MASK=\"${VM_INSTALL_DIR}\"" >> ${T}/10${PN}
+ doins "${T}"/10${PN}
+
+ # install the binaries
+ into "${VM_INSTALL_DIR}"
+ dobin */bin/*
+ dosbin */sbin/*
+
+ # install the libraries
+ insinto "${VM_INSTALL_DIR}"/lib/vmware
+ doins -r */lib/* vmware-vmx/roms
+ rm -rf "${D}${VM_INSTALL_DIR}"/lib/vmware/*.so
+
+ # install the installer
+ insinto "${VM_INSTALL_DIR}"/lib/vmware-installer/$vmware_installer_version
+ doins vmware-installer/{vmis,vmis-launcher,vmware-installer,vmware-installer.py}
+ insinto /etc/vmware-installer
+ doins vmware-installer/bootstrap
+
+ # workaround for hardcoded search paths needed during shared objects loading
+ if ! use bundled-libs ; then
+ dosym /usr/$(get_libdir)/libglib-2.0.so.0 \
+ "${VM_INSTALL_DIR}"/lib/vmware/lib/libglib-2.0.so.0/libglib-2.0.so.0
+ # Bug 432918
+ dosym /usr/$(get_libdir)/libcrypto.so.1.0.0 \
+ "${VM_INSTALL_DIR}"/lib/vmware/lib/libcrypto.so.1.0.2/libcrypto.so.1.0.2
+ dosym /usr/$(get_libdir)/libssl.so.1.0.0 \
+ "${VM_INSTALL_DIR}"/lib/vmware/lib/libssl.so.1.0.2/libssl.so.1.0.2
+ fi
+
+ # install the ancillaries
+ insinto /usr
+ doins -r */share
+
+ if use cups; then
+ exeinto $(cups-config --serverbin)/filter
+ doexe */extras/thnucups
+
+ insinto /etc/cups
+ doins -r */etc/cups/*
+ fi
+
+ if use doc; then
+ dodoc -r */doc/*
+ fi
+
+ exeinto "${VM_INSTALL_DIR}"/lib/vmware/setup
+ doexe */vmware-config
+
+ # pam
+ pamd_mimic_system vmware-authd auth account
+
+ # fuse
+ insinto /etc/modprobe.d
+ newins vmware-vmx/etc/modprobe.d/modprobe-vmware-fuse.conf vmware-fuse.conf
+
+ # install vmware workstation server
+ if use server; then
+ cd "${S}"/vmware-workstation-server
+
+ # install binaries
+ into "${VM_INSTALL_DIR}"/lib/vmware
+ dobin "${FILESDIR}"/configure-hostd.sh
+
+ # install the libraries
+ insinto "${VM_INSTALL_DIR}"/lib/vmware/lib
+ doins -r lib/*
+
+ into "${VM_INSTALL_DIR}"
+ for tool in vmware-hostd wssc-adminTool ; do
+ cat > "${T}/${tool}" <<-EOF
+ #!/usr/bin/env bash
+ set -e
+
+ . /etc/vmware/bootstrap
+
+ exec "${VM_INSTALL_DIR}/lib/vmware/bin/${tool}" \\
+ "\$@"
+ EOF
+ dobin "${T}/${tool}"
+ done
+
+ insinto "${VM_INSTALL_DIR}"/lib/vmware
+ doins -r hostd
+
+ # create the configuration
+ insinto /etc/vmware
+ doins -r config/etc/vmware/*
+ doins -r etc/vmware/*
+
+ # create directory for shared virtual machines.
+ keepdir "${VM_DATA_STORE_DIR}"
+ keepdir /var/log/vmware
+
+ cd - >/dev/null
+ fi
+
+ # install vmware-vix
+ if use vix; then
+ # install the binary
+ into "${VM_INSTALL_DIR}"
+ dobin "$S"/vmware-vix-*/bin/*
+
+ # install the libraries
+ insinto "${VM_INSTALL_DIR}"/lib/vmware-vix
+ doins -r "$S"/vmware-vix-*/lib/*
+
+ dosym vmware-vix/libvixAllProducts.so "${VM_INSTALL_DIR}"/lib/libbvixAllProducts.so
+
+ # install headers
+ insinto /usr/include/vmware-vix
+ doins "$S"/vmware-vix-*/include/*
+
+ if use doc; then
+ dodoc -r "$S"/vmware-vix-*/doc/*
+ fi
+ fi
+
+ # install ovftool
+ if use ovftool; then
+ cd "${S}"/vmware-ovftool
+
+ insinto "${VM_INSTALL_DIR}"/lib/vmware-ovftool
+ doins -r *
+
+ chmod 0755 "${D}${VM_INSTALL_DIR}"/lib/vmware-ovftool/{ovftool,ovftool.bin}
+ dosym "${D}${VM_INSTALL_DIR}"/lib/vmware-ovftool/ovftool "${VM_INSTALL_DIR}"/bin/ovftool
+
+ cd - >/dev/null
+ fi
+
+ # create symlinks for the various tools
+ local tool ; for tool in thnuclnt vmware vmplayer{,-daemon} licenseTool vmamqpd \
+ vmware-{app-control,enter-serial,gksu,fuseUI,hostd,modconfig{,-console},netcfg,tray,unity-helper,vim-cmd,vmblock-fuse,vprobe,wssc-adminTool,zenity} ; do
+ dosym appLoader "${VM_INSTALL_DIR}"/lib/vmware/bin/"${tool}"
+ done
+ dosym "${VM_INSTALL_DIR}"/lib/vmware/bin/vmplayer "${VM_INSTALL_DIR}"/bin/vmplayer
+ dosym "${VM_INSTALL_DIR}"/lib/vmware/bin/vmware "${VM_INSTALL_DIR}"/bin/vmware
+ dosym "${VM_INSTALL_DIR}"/lib/vmware/icu /etc/vmware/icu
+
+ # fix permissions
+ fperms 0755 "${VM_INSTALL_DIR}"/lib/vmware/bin/{appLoader,fusermount,mkisofs,vmware-remotemks}
+ fperms 0755 "${VM_INSTALL_DIR}"/lib/vmware/setup/vmware-config
+ fperms 4711 "${VM_INSTALL_DIR}"/lib/vmware/bin/vmware-vmx{,-debug,-stats}
+ fperms 0755 "${VM_INSTALL_DIR}"/lib/vmware/lib/libvmware-gksu.so/gksu-run-helper
+ fperms 4711 "${VM_INSTALL_DIR}"/sbin/vmware-authd
+ if use server; then
+ fperms 0755 "${VM_INSTALL_DIR}"/bin/{vmware-hostd,wssc-adminTool}
+ fperms 1777 "${VM_DATA_STORE_DIR}"
+ fi
+ if use vix; then
+ fperms 0755 "${VM_INSTALL_DIR}"/lib/vmware-vix/setup/vmware-config
+ fi
+
+ # create the environment
+ local envd="${T}/90vmware"
+ cat > "${envd}" <<-EOF
+ PATH='${VM_INSTALL_DIR}/bin'
+ ROOTPATH='${VM_INSTALL_DIR}/bin'
+ CONFIG_PROTECT_MASK='/etc/vmware-installer'
+ EOF
+ use bundled-libs && echo 'VMWARE_USE_SHIPPED_LIBS=1' >> "${envd}"
+
+ doenvd "${envd}"
+
+ # create the configuration
+ dodir /etc/vmware
+
+ cat > "${D}"/etc/vmware/bootstrap <<-EOF
+ BINDIR='${VM_INSTALL_DIR}/bin'
+ LIBDIR='${VM_INSTALL_DIR}/lib'
+ EOF
+
+ cat > "${D}"/etc/vmware/config <<-EOF
+ bindir = "${VM_INSTALL_DIR}/bin"
+ libdir = "${VM_INSTALL_DIR}/lib/vmware"
+ initscriptdir = "/etc/init.d"
+ authd.fullpath = "${VM_INSTALL_DIR}/sbin/vmware-authd"
+ gksu.rootMethod = "su"
+ VMCI_CONFED = "yes"
+ VMBLOCK_CONFED = "yes"
+ VSOCK_CONFED = "yes"
+ NETWORKING = "yes"
+ player.product.version = "${MY_PV}"
+ product.buildNumber = "${PV_BUILD}"
+ product.version = "${MY_PV}"
+ product.name = "VMware Workstation"
+ workstation.product.version = "${MY_PV}"
+ EOF
+
+ if use vix; then
+ cat >> "${D}"/etc/vmware/config <<-EOF
+ vmware.fullpath = "${VM_INSTALL_DIR}/bin/vmware"
+ vix.libdir = "${VM_INSTALL_DIR}/lib/vmware-vix"
+ vix.config.version = "1"
+ EOF
+ fi
+
+ if use server; then
+ cat >> "${D}"/etc/vmware/config <<-EOF
+ authd.client.port = "902"
+ authd.proxy.nfc = "vmware-hostd:ha-nfc"
+ authd.soapserver = "TRUE"
+ EOF
+ fi
+
+ if use modules; then
+ # install the init.d script
+ local initscript="${T}/vmware.rc"
+ sed -e "s:@@BINDIR@@:${VM_INSTALL_DIR}/bin:g" \
+ "${FILESDIR}/vmware-${major_minor}.rc" > "${initscript}" || die
+ newinitd "${initscript}" vmware
+ fi
+
+ if use server; then
+ # install the init.d script
+ local initscript="${T}/vmware-workstation-server.rc"
+ sed -e "s:@@ETCDIR@@:/etc/vmware:g" \
+ -e "s:@@PREFIX@@:${VM_INSTALL_DIR}:g" \
+ -e "s:@@BINDIR@@:${VM_INSTALL_DIR}/bin:g" \
+ -e "s:@@LIBDIR@@:${VM_INSTALL_DIR}/lib/vmware:g" \
+ "${FILESDIR}/vmware-server-${major_minor}.rc" > ${initscript} || die
+ newinitd "${initscript}" vmware-workstation-server
+ fi
+
+ # fill in variable placeholders
+ if use bundled-libs ; then
+ sed -e "s:@@LIBCONF_DIR@@:${VM_INSTALL_DIR}/lib/vmware/libconf:g" \
+ -i "${D}${VM_INSTALL_DIR}"/lib/vmware/libconf/etc/gtk-3.0/gdk-pixbuf.loaders || die
+ fi
+ sed -e "s:@@BINARY@@:${VM_INSTALL_DIR}/bin/vmplayer:g" \
+ -e "/^Encoding/d" \
+ -i "${D}/usr/share/applications/vmware-player.desktop" || die
+ sed -e "s:@@BINARY@@:${VM_INSTALL_DIR}/bin/vmware:g" \
+ -e "/^Encoding/d" \
+ -i "${D}/usr/share/applications/vmware-workstation.desktop" || die
+ sed -e "s:@@BINARY@@:${VM_INSTALL_DIR}/bin/vmware-netcfg:g" \
+ -e "/^Encoding/d" \
+ -i "${D}/usr/share/applications/vmware-netcfg.desktop" || die
+
+ if use server; then
+ # Configuration for vmware-workstation-server
+ local hostdUser="${VM_HOSTD_USER:-root}"
+ sed -e "/ACEDataUser/s:root:${hostdUser}:g" \
+ -i "${D}/etc/vmware/hostd/authorization.xml" || die
+
+ # Shared VMs Path: [standard].
+ sed -e "s:##{DS_NAME}##:standard:g" \
+ -e "s:##{DS_PATH}##:${VM_DATA_STORE_DIR}:g" \
+ -i "${D}/etc/vmware/hostd/datastores.xml" || die
+
+ sed -e "s:##{HTTP_PORT}##:-1:g" \
+ -e "s:##{HTTPS_PORT}##:443:g" \
+ -e "s:##{PIPE_PREFIX}##:/var/run/vmware/:g" \
+ -i "${D}/etc/vmware/hostd/proxy.xml" || die
+
+ # See vmware-workstation-server.py for more details.
+ sed -e "s:##{BUILD_CFGDIR}##:/etc/vmware/hostd/:g" \
+ -e "s:##{CFGALTDIR}##:/etc/vmware/hostd/:g" \
+ -e "s:##{CFGDIR}##:/etc/vmware/:g" \
+ -e "s:##{ENABLE_AUTH}##:true:g" \
+ -e "s:##{HOSTDMODE}##:ws:g" \
+ -e "s:##{HOSTD_CFGDIR}##:/etc/vmware/hostd/:g" \
+ -e "s:##{HOSTD_MOCKUP}##:false:g" \
+ -e "s:##{LIBDIR}##:${VM_INSTALL_DIR}/lib/vmware:g" \
+ -e "s:##{LIBDIR_INSTALLED}##:${VM_INSTALL_DIR}/lib/vmware/:g" \
+ -e "s:##{LOGDIR}##:/var/log/vmware/:g" \
+ -e "s:##{LOGLEVEL}##:verbose:g" \
+ -e "s:##{MOCKUP}##:mockup-host-config.xml:g" \
+ -e "s:##{PLUGINDIR}##:./:g" \
+ -e "s:##{SHLIB_PREFIX}##:lib:g" \
+ -e "s:##{SHLIB_SUFFIX}##:.so:g" \
+ -e "s:##{USE_BLKLISTSVC}##:false:g" \
+ -e "s:##{USE_CBRCSVC}##:false:g" \
+ -e "s:##{USE_CIMSVC}##:false:g" \
+ -e "s:##{USE_DIRECTORYSVC}##:false:g" \
+ -e "s:##{USE_DIRECTORYSVC_MOCKUP}##:false:g" \
+ -e "s:##{USE_DYNAMIC_PLUGIN_LOADING}##:false:g" \
+ -e "s:##{USE_DYNAMO}##:false:g" \
+ -e "s:##{USE_DYNSVC}##:false:g" \
+ -e "s:##{USE_GUESTSVC}##:false:g" \
+ -e "s:##{USE_HBRSVC}##:false:g" \
+ -e "s:##{USE_HBRSVC_MOCKUP}##:false:g" \
+ -e "s:##{USE_HOSTSPECSVC}##:false:g" \
+ -e "s:##{USE_HOSTSVC_MOCKUP}##:false:g" \
+ -e "s:##{USE_HTTPNFCSVC}##:false:g" \
+ -e "s:##{USE_HTTPNFCSVC_MOCKUP}##:false:g" \
+ -e "s:##{USE_LICENSESVC_MOCKUP}##:false:g" \
+ -e "s:##{USE_NFCSVC}##:true:g" \
+ -e "s:##{USE_NFCSVC_MOCKUP}##:false:g" \
+ -e "s:##{USE_OVFMGRSVC}##:true:g" \
+ -e "s:##{USE_PARTITIONSVC}##:false:g" \
+ -e "s:##{USE_SECURESOAP}##:false:g" \
+ -e "s:##{USE_SNMPSVC}##:false:g" \
+ -e "s:##{USE_SOLO_MOCKUP}##:false:g" \
+ -e "s:##{USE_STATSSVC}##:false:g" \
+ -e "s:##{USE_STATSSVC_MOCKUP}##:false:g" \
+ -e "s:##{USE_VCSVC_MOCKUP}##:false:g" \
+ -e "s:##{USE_VSLMSVC}##:false:g" \
+ -e "s:##{USE_VSLMSVC_MOCKUP}##:false:g" \
+ -e "s:##{USE_VDISKSVC}##:false:g" \
+ -e "s:##{USE_VDISKSVC_MOCKUP}##:false:g" \
+ -e "s:##{USE_VMSVC_MOCKUP}##:false:g" \
+ -e "s:##{VM_INVENTORY}##:vmInventory.xml:g" \
+ -e "s:##{VM_RESOURCES}##:vmResources.xml:g" \
+ -e "s:##{WEBSERVER_PORT_ENTRY}##::g" \
+ -e "s:##{WORKINGDIR}##:./:g" \
+ -i "${D}/etc/vmware/hostd/config.xml" || die
+
+ sed -e "s:##{ENV_LOCATION}##:/etc/vmware/hostd/env/:g" \
+ -i "${D}/etc/vmware/hostd/environments.xml" || die
+
+ # @@VICLIENT_URL@@=XXX
+ sed -e "s:@@AUTHD_PORT@@:902:g" \
+ -i "${D}${VM_INSTALL_DIR}/lib/vmware/hostd/docroot/client/clients.xml" || die
+ fi
+
+ # install systemd unit files
+ if use systemd; then
+ systemd_dounit "${WORKDIR}/systemd-vmware-${SYSTEMD_UNITS_TAG}/"*.{service,target}
+ fi
+
+ # enable macOS guests support
+ if use macos-guests; then
+ python2 "${WORKDIR}"/unlocker-*/unlocker.py >/dev/null || die "unlocker.py failed"
+ fi
+
+ # VMware tools
+ for guest in ${IUSE_VMWARE_GUESTS}; do
+ if use vmware-tools-${guest}; then
+ local dbfile="${D}/etc/vmware-installer/database"
+ if ! [ -e "${dbfile}" ]; then
+ > "${dbfile}"
+ sqlite3 "${dbfile}" "CREATE TABLE settings(key VARCHAR PRIMARY KEY, value VARCHAR NOT NULL, component_name VARCHAR NOT NULL);"
+ sqlite3 "${dbfile}" "INSERT INTO settings(key,value,component_name) VALUES('db.schemaVersion','2','vmware-installer');"
+ sqlite3 "${dbfile}" "CREATE TABLE components(id INTEGER PRIMARY KEY, name VARCHAR NOT NULL, version VARCHAR NOT NULL, buildNumber INTEGER NOT NULL, component_core_id INTEGER NOT NULL, longName VARCHAR NOT NULL, description VARCHAR, type INTEGER NOT NULL);"
+ fi
+ local manifest="vmware-tools-${guest}/manifest.xml"
+ if [ -e "${manifest}" ]; then
+ local version="$(grep -oPm1 '(?<=<version>)[^<]+' ${manifest})"
+ sqlite3 "${dbfile}" "INSERT INTO components(name,version,buildNumber,component_core_id,longName,description,type) VALUES(\"vmware-tools-$guest\",\"$version\",\"${PV_BUILD}\",1,\"$guest\",\"$guest\",1);"
+ else
+ sqlite3 "${dbfile}" "INSERT INTO components(name,version,buildNumber,component_core_id,longName,description,type) VALUES(\"vmware-tools-$guest\",\"${VMWARE_FUSION_VER%_*}\",\"${VMWARE_FUSION_VER#*_}\",1,\"$guest\",\"$guest\",1);"
+ fi
+ insinto "${VM_INSTALL_DIR}/lib/vmware/isoimages"
+ doins vmware-tools-${guest}/${guest}.iso
+ doins vmware-tools-${guest}/${guest}.iso.sig
+ fi
+ done
+
+ readme.gentoo_create_doc
+}
+
+pkg_config() {
+ "${VM_INSTALL_DIR}"/bin/vmware-networks --postinstall ${PN},old,new
+}
+
+pkg_preinst() {
+ gnome2_icon_savelist
+}
+
+pkg_postinst() {
+ xdg_desktop_database_update
+ xdg_mimeinfo_database_update
+ gnome2_icon_cache_update
+ readme.gentoo_print_elog
+}
+
+pkg_postrm() {
+ xdg_desktop_database_update
+ xdg_mimeinfo_database_update
+ gnome2_icon_cache_update
+}