summaryrefslogtreecommitdiff
blob: 64fd0c53ce05a712d842ae1847056e31c421e478 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# Copyright 2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=7

AVM="AvailabilityVersions-26.50.4"
DESCRIPTION="System headers provided by XNU-${PV}, macOS 10.12.6"
HOMEPAGE="https://opensource.apple.com/source/xnu"
SRC_URI="https://opensource.apple.com/tarballs/xnu/xnu-${PV}.tar.gz
	https://opensource.apple.com/tarballs/${AVM%-*}/${AVM}.tar.gz"

LICENSE="APSL-2"
SLOT="10.12"
KEYWORDS="~x64-macos"
IUSE="+man"

S=${WORKDIR}/xnu-${PV}

src_prepare() {
	default

	# we don't install availability.pl, but generation needs it
	local avpl="${WORKDIR}/${AVM}/availability.pl"
	sed -i -e 's:${SDKROOT}/usr/local/libexec/availability.pl:'"${avpl}"':' \
		bsd/sys/make_symbol_aliasing.sh || die
}

src_compile() {
	# crappy scripts that just about do the job
	./bsd/kern/makesyscalls.sh \
		bsd/kern/syscalls.master header >& /dev/null || die
	./bsd/sys/make_posix_availability.sh \
		_posix_availability.h >& /dev/null || die
	./bsd/sys/make_symbol_aliasing.sh \
		dummy _symbol_aliasing.h >& /dev/null || die
}

src_install() {
	insinto /usr/include
	doins EXTERNAL_HEADERS/AssertMacros.h EXTERNAL_HEADERS/Availability*.h
	doins libsyscall/wrappers/gethostuuid.h
	doins -r libsyscall/mach/mach

	# generated during src_compile
	insinto /usr/include/sys
	doins syscall.h _posix_availability.h _symbol_aliasing.h

	pushd bsd > /dev/null || die

	get_files_list() {
		local s="$1"
		local f="$2"/Makefile
		sed -n -e '/^'"${s}"' \?=/,/^$/p' "${f}" \
			| sed -e '1s/^'"${s}"' \?=//' -e '/\s*#/d' \
			| sed -e 's/\\$//' -e '/^[A-Z]\+ \?=/,/^$/d'
	}

	get_datafiles() {
		local entry
		get_files_list DATAFILES "$@" | while read entry ; do
			[[ ${entry} == '${'?*'}' ]] \
				&& get_files_list ${entry:2:-1} "$@" \
				|| echo "${entry}"
		done
	}

	local d
	local files
	for d in bsm i386 machine miscfs/{devfs,specfs,union} net \
		netinet{,6} netkey nfs sys{,/_types} uuid vfs ;
	do
		insinto /usr/include/${d}
		files=( $(get_datafiles ${d}) )
		einfo "${d}:" ${files[*]}
		doins ${files[@]/#/$d/}
	done

	use man && doman man/man*/*.[234579]

	popd > /dev/null || die

	pushd osfmk > /dev/null || die

	for d in mach{,/i386,/machine} ; do
		insinto /usr/include/${d}
		files=( $(get_datafiles ${d}) )
		einfo "${d}:" ${files[*]}
		doins ${files[@]/#/$d/}
	done

	for d in i386 ; do
		insinto /usr/include/${d}
		files=( $(get_files_list INSTALL_MD_LIST ${d}) )
		einfo "${d}:" ${files[*]}
		doins ${files[@]/#/$d/}
	done

	popd > /dev/null || die

	pushd libkern > /dev/null || die

	for d in libkern{,/i386,/machine,/c++,/crypto} ; do
		insinto /usr/include/${d}
		files=( $(get_datafiles ${d}) )
		einfo "${d}:" ${files[*]}
		doins ${files[@]/#/$d/}
	done

	popd > /dev/null || die
}