1#!/bin/sh
2
3CONFIGD_LAUNCHD_PLIST=${INSTALL_DIR}/../../System/Library/LaunchDaemons/${1}
4CONFIGD_PLUGINS=/tmp/plugins.$$
5EMBEDDED_PROJECTS=/tmp/projects.$$
6PLUGIN_MACHSERVICES=/tmp/plugin.$$
7
8HAVE_CONFIGD_PLUGINS="MISSING"
9HAVE_IPCONFIGURATION="MISSING"
10
11cp /dev/null ${CONFIGD_PLUGINS}
12if [ -d ${INSTALL_DIR}/../../System/Library/SystemConfiguration ]; then
13	(cd ${INSTALL_DIR}/../../System/Library/SystemConfiguration ; ls -1d *.bundle >> ${CONFIGD_PLUGINS} 2>/dev/null )
14fi
15
16cp /dev/null ${EMBEDDED_PROJECTS}
17if [ -n "${RC_EMBEDDEDPROJECT_DIR}" -a -d "${RC_EMBEDDEDPROJECT_DIR}" ]; then
18	( cd ${RC_EMBEDDEDPROJECT_DIR}					\
19	; ls -1d */System/Library/SystemConfiguration 2>/dev/null	\
20	| sed -e 's:/System/Library/SystemConfiguration::'		\
21	>> ${EMBEDDED_PROJECTS} )
22
23	if [ -s ${EMBEDDED_PROJECTS} ]; then
24		for PROJECT in `cat ${EMBEDDED_PROJECTS}`
25		do
26			( cd ${RC_EMBEDDEDPROJECT_DIR}/${PROJECT}/System/Library/SystemConfiguration ; ls -1d *.bundle >> ${CONFIGD_PLUGINS} 2>/dev/null )
27		done
28	fi
29fi
30
31if [ -d ${SDKROOT}/System/Library/SystemConfiguration ]; then
32	( cd ${SDKROOT}/System/Library/SystemConfiguration ; ls -1d *.bundle >> ${CONFIGD_PLUGINS} 2>/dev/null )
33fi
34
35if [ -n "${EXTRA_SYSTEMCONFIGURATION_PLUGIN_DIR}" -a -d "${EXTRA_SYSTEMCONFIGURATION_PLUGIN_DIR}" ]; then
36	( cd ${EXTRA_SYSTEMCONFIGURATION_PLUGIN_DIR} ; ls -1d *.bundle >> ${CONFIGD_PLUGINS} 2>/dev/null )
37fi
38
39for PLUGIN in `sort -u ${CONFIGD_PLUGINS}`
40do
41	PLUGIN_PLIST=""
42
43#	if [ -z "${PLUGIN_PLIST}" ]; then
44		PLUGIN_INF=${INSTALL_DIR}/../../System/Library/SystemConfiguration/${PLUGIN}/Contents/Info.plist
45		if [ -f ${PLUGIN_INF} ]; then
46			PLUGIN_PLIST=${PLUGIN_INF}
47		fi
48#	fi
49
50	if [ -z "${PLUGIN_PLIST}" ]; then
51		PLUGIN_INF=${INSTALL_DIR}/../../System/Library/SystemConfiguration/${PLUGIN}/Info.plist
52		if [ -f ${PLUGIN_INF} ]; then
53			PLUGIN_PLIST=${PLUGIN_INF}
54		fi
55	fi
56
57	if [ -z "${PLUGIN_PLIST}" -a -s ${EMBEDDED_PROJECTS} ]; then
58		for PROJECT in `cat ${EMBEDDED_PROJECTS}`
59		do
60			PROJECT_INF=${RC_EMBEDDEDPROJECT_DIR}/${PROJECT}/System/Library/SystemConfiguration/${PLUGIN}/Contents/Info.plist
61			if [ -f ${PROJECT_INF} ]; then
62				PLUGIN_PLIST=${PROJECT_INF}
63				break
64			fi
65
66			PROJECT_INF=${RC_EMBEDDEDPROJECT_DIR}/${PROJECT}/System/Library/SystemConfiguration/${PLUGIN}/Info.plist
67			if [ -f ${PROJECT_INF} ]; then
68				PLUGIN_PLIST=${PROJECT_INF}
69				break
70			fi
71		done
72	fi
73
74	if [ -z "${PLUGIN_PLIST}" ]; then
75		PLUGIN_INF=${SDKROOT}/System/Library/SystemConfiguration/${PLUGIN}/Contents/Info.plist
76		if [ -f ${PLUGIN_INF} ]; then
77			PLUGIN_PLIST=${PLUGIN_INF}
78		fi
79	fi
80
81	if [ -z "${PLUGIN_PLIST}" ]; then
82		PLUGIN_INF=${SDKROOT}/System/Library/SystemConfiguration/${PLUGIN}/Info.plist
83		if [ -f ${PLUGIN_INF} ]; then
84			PLUGIN_PLIST=${PLUGIN_INF}
85		fi
86	fi
87
88	if [ -n "${EXTRA_SYSTEMCONFIGURATION_PLUGIN_DIR}" ]; then
89		if [ -z "${PLUGIN_PLIST}" ]; then
90			PLUGIN_INF=${EXTRA_SYSTEMCONFIGURATION_PLUGIN_DIR}/${PLUGIN}/Contents/Info.plist
91			if [ -f ${PLUGIN_INF} ]; then
92				PLUGIN_PLIST=${PLUGIN_INF}
93			fi
94		fi
95
96		if [ -z "${PLUGIN_PLIST}" ]; then
97			PLUGIN_INF=${EXTRA_SYSTEMCONFIGURATION_PLUGIN_DIR}/${PLUGIN}/Info.plist
98			if [ -f ${PLUGIN_INF} ]; then
99				PLUGIN_PLIST=${PLUGIN_INF}
100			fi
101		fi
102	fi
103
104	if [ -z "${PLUGIN_PLIST}" ]; then
105		continue
106	fi
107
108	/usr/libexec/PlistBuddy -c "Print :MachServices" -x ${PLUGIN_PLIST} > ${PLUGIN_MACHSERVICES} 2>/dev/null
109	if [ $? -eq 0 ]; then
110		echo "Merging \"MachServices\" from: ${PLUGIN_INF}"
111		/usr/libexec/PlistBuddy -c "Merge ${PLUGIN_MACHSERVICES} :MachServices" ${CONFIGD_LAUNCHD_PLIST} 2>/dev/null
112		if [ -n "${IPHONEOS_DEPLOYMENT_TARGET}" ]; then
113			/usr/bin/plutil -convert binary1 ${CONFIGD_LAUNCHD_PLIST}
114		else
115			/usr/bin/plutil -convert xml1 ${CONFIGD_LAUNCHD_PLIST}
116		fi
117	fi
118
119	case "${PLUGIN}" in
120		"IPMonitor.bundle" )
121			HAVE_CONFIGD_PLUGINS="OK"
122			;;
123		"IPConfiguration.bundle" )
124			HAVE_IPCONFIGURATION="OK"
125			;;
126	esac
127done
128
129rm -f ${PLUGIN_MACHSERVICES} ${CONFIGD_PLUGINS} ${EMBEDDED_PROJECTS}
130
131if [ "${HAVE_CONFIGD_PLUGINS}" != "OK" ]; then
132	echo ""
133	echo "**************************************************************************************"
134	echo "* THE BUILD ENVIRONMENT IS MISSING THE ROOT FOR AN ESSENTIAL PROJECT (configd_plugins)"
135	echo "**************************************************************************************"
136	exit 1
137elif [ "${HAVE_IPCONFIGURATION}" != "OK" -a "${PLATFORM_NAME}" != "iphonesimulator" ] ; then
138	echo ""
139	echo "****************************************************************************"
140	echo "* THE BUILD ENVIRONMENT IS MISSING THE ROOT FOR AN ESSENTIAL PROJECT (bootp)"
141	echo "****************************************************************************"
142	exit 1
143fi
144