1#!/bin/bash
2set -x
3
4# Skip installing headers during Xcode build (buildit uses installhdrs+install)
5if [ "$ACTION" == build ]; then exit 0; fi
6
7# Installs Libc header files
8
9MKDIR="mkdir -p"
10INSTALL=install
11MV=mv
12ECHO=echo
13CHMOD=chmod
14CP=cp
15UNIFDEF=unifdef
16FIND=find
17RM=rm
18ED=ed
19XARGS=xargs
20GREP=grep
21FGREP=fgrep
22
23eval $(${SRCROOT}/xcodescripts/generate_features.pl --bash)
24UNIFDEFARGS=$(${SRCROOT}/xcodescripts/generate_features.pl --unifdef)
25
26INCDIR=${DSTROOT}/${PUBLIC_HEADERS_FOLDER_PATH}
27LOCINCDIR=${DSTROOT}/${PRIVATE_HEADERS_FOLDER_PATH}
28SYSTEMFRAMEWORK=${DSTROOT}/${INSTALL_PATH_PREFIX}/System/Library/Frameworks/System.framework
29KERNELFRAMEWORK=${DSTROOT}/${INSTALL_PATH_PREFIX}/System/Library/Frameworks/Kernel.framework
30
31PRIVHDRS=${SYSTEMFRAMEWORK}/Versions/B/PrivateHeaders
32PRIVKERNELHDRS=${KERNELFRAMEWORK}/Versions/A/PrivateHeaders
33INSTALLMODE=$([[ `id -u` -eq 0 ]] && echo 444 || echo 644)
34
35INSTHDRS=(
36	${SRCROOT}/gen/get_compat.h
37	${SRCROOT}/gen/execinfo.h
38)
39
40INC_INSTHDRS=(
41	_locale.h
42	_types.h
43	_wctype.h
44	_xlocale.h
45	aio.h
46	alloca.h
47	ar.h
48	assert.h
49	asm.h
50	bitstring.h
51	cpio.h
52	crt_externs.h
53	ctype.h
54	db.h
55	dirent.h
56	disktab.h
57	err.h
58	errno.h
59	fcntl.h
60	fmtmsg.h
61	fnmatch.h
62	fsproperties.h
63	fstab.h
64	fts.h
65	ftw.h
66	getopt.h
67	glob.h
68	inttypes.h
69	iso646.h
70	langinfo.h
71	libc.h
72	libgen.h
73	limits.h
74	locale.h
75	memory.h
76	monetary.h
77	monitor.h
78	mpool.h
79	ndbm.h
80	nlist.h
81	paths.h
82	printf.h
83	poll.h
84	ranlib.h
85	readpassphrase.h
86	regex.h
87	runetype.h
88	search.h
89	semaphore.h
90	sgtty.h
91	signal.h
92	stab.h
93	standards.h
94	stdbool.h
95	stddef.h
96	stdio.h
97	stdint.h
98	stdlib.h
99	strhash.h
100	string.h
101	stringlist.h
102	strings.h
103	struct.h
104	sysexits.h
105	syslog.h
106	tar.h
107	termios.h
108	time.h
109	timeconv.h
110	ttyent.h
111	ulimit.h
112	unistd.h
113	util.h
114	utime.h
115	vis.h
116	wchar.h
117	wctype.h
118	wordexp.h
119	xlocale.h
120)
121if [ "x${FEATURE_LEGACY_RUNE_APIS}" == "x1" ]; then
122	INC_INSTHDRS=( "${INC_INSTHDRS[@]}" rune.h )
123fi
124if [ "x${FEATURE_LEGACY_UTMP_APIS}" == "x1" ]; then
125	INC_INSTHDRS=( "${INC_INSTHDRS[@]}" utmp.h )
126fi
127
128INC_INSTHDRS=( 
129	"${INC_INSTHDRS[@]/#/${SRCROOT}/include/}" 
130	${SRCROOT}/include/FreeBSD/nl_types.h
131	${SRCROOT}/include/NetBSD/utmpx.h
132	${SRCROOT}/stdtime/FreeBSD/tzfile.h
133)
134INSTHDRS=( "${INSTHDRS[@]}" "${INC_INSTHDRS[@]}" )
135
136INC_ARPA_INSTHDRS=( ftp.h inet.h nameser_compat.h telnet.h tftp.h )
137ARPA_INSTHDRS=( "${INC_ARPA_INSTHDRS[@]/#/${SRCROOT}/include/arpa/}" )
138
139if [ "x${FEATURE_THERM_NOTIFICATION_APIS}" == "x1" ]; then
140	INC_THERM_INSTHDRS=( OSThermalNotification.h )
141	THERM_INSTHDRS=( "${INC_THERM_INSTHDRS[@]/#/${SRCROOT}/include/libkern/}" )
142fi
143
144INC_PROTO_INSTHDRS=( routed.h rwhod.h talkd.h timed.h )
145PROTO_INSTHDRS=( "${INC_PROTO_INSTHDRS[@]/#/${SRCROOT}/include/protocols/}" )
146
147INC_SECURE_INSTHDRS=( _common.h _string.h _stdio.h )
148SECURE_INSTHDRS=( "${INC_SECURE_INSTHDRS[@]/#/${SRCROOT}/include/secure/}" )
149
150SYS_INSTHDRS=( ${SRCROOT}/include/sys/acl.h ${SRCROOT}/include/sys/statvfs.h )
151
152INC_XLOCALE_INSTHDRS=(
153	__wctype.h
154	_ctype.h
155	_inttypes.h
156	_langinfo.h
157	_monetary.h
158	_regex.h
159	_stdio.h
160	_stdlib.h
161	_string.h
162	_time.h
163	_wchar.h
164	_wctype.h
165)
166XLOCALE_INSTHDRS=( "${INC_XLOCALE_INSTHDRS[@]/#/${SRCROOT}/include/xlocale/}" )
167
168TYPES_INSTHDRS=(
169	${SRCROOT}/include/_types/_intmax_t.h
170	${SRCROOT}/include/_types/_nl_item.h
171	${SRCROOT}/include/_types/_uint16_t.h
172	${SRCROOT}/include/_types/_uint32_t.h
173	${SRCROOT}/include/_types/_uint64_t.h
174	${SRCROOT}/include/_types/_uint8_t.h
175	${SRCROOT}/include/_types/_uintmax_t.h
176	${SRCROOT}/include/_types/_wctrans_t.h
177	${SRCROOT}/include/_types/_wctype_t.h
178)
179
180LOCALHDRS=(
181	${SRCROOT}/darwin/libc_private.h
182	${SRCROOT}/gen/assumes.h
183	${SRCROOT}/gen/utmpx_thread.h
184	${SRCROOT}/nls/FreeBSD/msgcat.h
185)
186
187OS_LOCALHDRS=( ${SRCROOT}/os/assumes.h ${SRCROOT}/os/debug_private.h )
188
189PRIV_INSTHDRS=(
190	${SRCROOT}/stdlib/FreeBSD/atexit.h
191)
192
193PRIV_BTREEHDRS=(
194	${SRCROOT}/db/btree/FreeBSD/btree.h
195	${SRCROOT}/db/btree/FreeBSD/bt_extern.h
196)
197
198SYS_INSTHDRS=(
199	${SRCROOT}/include/sys/acl.h
200	${SRCROOT}/include/sys/rbtree.h
201	${SRCROOT}/include/sys/statvfs.h
202)
203PRIVUUID_INSTHDRS=( ${SRCROOT}/uuid/namespace.h )
204
205${MKDIR} ${INCDIR}/arpa
206${MKDIR} ${INCDIR}/libkern
207${MKDIR} ${INCDIR}/malloc
208${MKDIR} ${INCDIR}/protocols
209${MKDIR} ${INCDIR}/secure
210${MKDIR} ${INCDIR}/sys
211${MKDIR} ${INCDIR}/xlocale
212${MKDIR} ${INCDIR}/_types
213${INSTALL} -m ${INSTALLMODE} ${INSTHDRS[@]} ${INCDIR}
214${INSTALL} -m ${INSTALLMODE} ${ARPA_INSTHDRS[@]} ${INCDIR}/arpa
215if [ "x${FEATURE_MEM_NOTIFICATION_APIS}" == "x1" ]; then
216${INSTALL} -m ${INSTALLMODE} ${MEM_INSTHDRS[@]} ${INCDIR}/libkern
217fi
218if [ "x${FEATURE_THERM_NOTIFICATION_APIS}" == "x1" ]; then
219${INSTALL} -m ${INSTALLMODE} ${THERM_INSTHDRS[@]} ${INCDIR}/libkern
220fi
221${INSTALL} -m ${INSTALLMODE} ${PROTO_INSTHDRS[@]} ${INCDIR}/protocols
222${INSTALL} -m ${INSTALLMODE} ${SECURE_INSTHDRS[@]} ${INCDIR}/secure
223${INSTALL} -m ${INSTALLMODE} ${SYS_INSTHDRS[@]} ${INCDIR}/sys
224${INSTALL} -m ${INSTALLMODE} ${XLOCALE_INSTHDRS[@]} ${INCDIR}/xlocale
225${INSTALL} -m ${INSTALLMODE} ${TYPES_INSTHDRS[@]} ${INCDIR}/_types
226${MKDIR} ${LOCINCDIR}
227${MKDIR} ${LOCINCDIR}/os
228${INSTALL} -m ${INSTALLMODE} ${LOCALHDRS[@]} ${LOCINCDIR}
229${INSTALL} -m ${INSTALLMODE} ${OS_LOCALHDRS[@]} ${LOCINCDIR}/os
230${MKDIR} ${PRIVHDRS}/btree
231${MKDIR} ${PRIVHDRS}/machine
232${MKDIR} ${PRIVHDRS}/uuid
233${MKDIR} ${PRIVHDRS}/sys
234${MKDIR} ${PRIVKERNELHDRS}/uuid
235${INSTALL} -m ${INSTALLMODE} ${PRIV_INSTHDRS[@]} ${PRIVHDRS}
236${INSTALL} -m ${INSTALLMODE} ${PRIV_BTREEHDRS[@]} ${PRIVHDRS}/btree
237${MV} ${INCDIR}/asm.h ${PRIVHDRS}/machine
238${INSTALL} -m ${INSTALLMODE} ${SYS_INSTHDRS[@]} ${PRIVHDRS}/sys
239${INSTALL} -m ${INSTALLMODE} ${PRIVUUID_INSTHDRS[@]} ${PRIVHDRS}/uuid
240${INSTALL} -m ${INSTALLMODE} ${PRIVUUID_INSTHDRS[@]} ${PRIVKERNELHDRS}/uuid
241
242for i in `${FIND} "${DSTROOT}" -name \*.h -print0 | ${XARGS} -0 ${GREP} -l '^//Begin-Libc'`; do
243	${CHMOD} u+w $i &&
244	${ECHO} ${ED} - $i \< ${SRCROOT}/xcodescripts/strip-header.ed &&
245	${ED} - $i < ${SRCROOT}/xcodescripts/strip-header.ed &&
246	${CHMOD} u-w $i || exit 1;
247done
248for i in `${FIND} "${DSTROOT}" -name \*.h -print0 | ${XARGS} -0 ${FGREP} -l -e UNIFDEF -e OPEN_SOURCE`; do
249	${CHMOD} u+w $i &&
250	${CP} $i $i.orig &&
251	${ECHO} ${UNIFDEF} ${UNIFDEFARGS} $i.orig \> $i &&
252	{ ${UNIFDEF} ${UNIFDEFARGS} $i.orig > $i || [ $? -ne 2 ]; } &&
253	${RM} $i.orig &&
254	${CHMOD} u-w $i || exit 1;
255done
256
257exit 0
258