option_survey.sh revision 148884
1#!/bin/sh
2# This file is in the public domain
3# $FreeBSD: head/tools/tools/build_option_survey/option_survey.sh 148884 2005-08-09 09:27:11Z phk $
4
5if [ "x$1" != "x" ] ; then
6	OPLIST=$1
7else
8	OPLIST=no_list
9fi
10
11OPLIST=_.options
12
13set -e
14
15bw ( ) (
16	cd ../../.. 
17	make -j 4 buildworld \
18		__MAKE_CONF=${ODIR}/make.conf \
19		> ${ODIR}/_.bw 2>&1
20	make -j 4 buildkernel \
21		KERNCONF=GENERIC \
22		__MAKE_CONF=${ODIR}/make.conf \
23		> ${ODIR}/_.bk 2>&1
24)
25
26iw ( ) (
27	dd if=/dev/zero of=${ODIR}/_.i bs=1m count=200
28	mkdir -p ${MNT}
29	MD=`mdconfig -a -t vnode -f ${ODIR}/_.i`
30	trap "umount ${MNT} || true ; mdconfig -d -u $MD" 1 2 15 EXIT
31	newfs -O1 -U -b 4096 -f 512 /dev/$MD
32	mount /dev/${MD} ${MNT}
33
34	cd ../../..
35	make installworld \
36		__MAKE_CONF=${ODIR}/make.conf \
37		DESTDIR=${MNT} \
38		> ${ODIR}/_.iw 2>&1
39	cd etc
40	make distribution \
41		__MAKE_CONF=${ODIR}/make.conf \
42		DESTDIR=${MNT} \
43		> ${ODIR}/_.etc 2>&1
44	cd ..
45	make installkernel \
46		KERNCONF=GENERIC \
47		DESTDIR=${MNT} \
48		__MAKE_CONF=${ODIR}/make.conf \
49		> ${ODIR}/_.ik 2>&1
50
51	sync ${MNT}
52	( cd ${MNT} && mtree -c ) > ${ODIR}/_.mtree
53	( cd ${MNT} && du ) > ${ODIR}/_.du
54	( df -i ${MNT} ) > ${ODIR}/_.df
55)
56
57ODIR=/usr/obj/`pwd`
58MNT=${ODIR}/_.mnt
59RDIR=${ODIR}/_.result
60export ODIR MNT RDIR
61
62
63# Clean and recrate the ODIR
64
65if false ; then 
66	if rm -rf ${ODIR} ; then
67		true
68	else
69		chflags -R noschg ${ODIR}
70		rm -rf ${ODIR}
71	fi
72	mkdir -p ${ODIR}
73
74fi
75
76# Build the reference world
77
78if false ; then 
79	echo '' > ${ODIR}/make.conf
80	MAKEOBJDIRPREFIX=$ODIR/_.ref 
81	export MAKEOBJDIRPREFIX
82	bw
83fi
84
85# Parse option list into subdirectories with make.conf files.
86
87if false ; then
88	rm -rf ${RDIR}
89	grep -v '^[ 	]*#' $OPLIST | while read o
90	do
91		echo "$o=/dev/YES" > ${ODIR}/_make.conf
92		m=`md5 < ${ODIR}/_make.conf`
93		mkdir -p ${RDIR}/$m
94		mv ${ODIR}/_make.conf ${RDIR}/$m/make.conf
95	done
96fi
97
98# Do the reference installworld 
99
100if false ; then
101	echo '' > ${ODIR}/make.conf
102	MAKEOBJDIRPREFIX=$ODIR/_.ref 
103	export MAKEOBJDIRPREFIX
104	mkdir -p ${RDIR}/Ref
105	iw
106	cp ${ODIR}/_.df ${RDIR}/Ref
107	cp ${ODIR}/_.mtree ${RDIR}/Ref
108	cp ${ODIR}/_.du ${RDIR}/Ref
109fi
110
111# Run through each testtarget in turn
112
113if true ; then
114	for d in ${RDIR}/[0-9a-z]*
115	do
116		if [ ! -d $d ] ; then
117			continue;
118		fi
119		echo '------------------------------------------------'
120		cat $d/make.conf
121		echo '------------------------------------------------'
122		cp $d/make.conf ${ODIR}/make.conf
123
124		if [ ! -f $d/iw/done ] ; then
125			echo "# Trying IW"
126			rm -rf $d/iw
127			mkdir -p $d/iw
128			MAKEOBJDIRPREFIX=$ODIR/_.ref 
129			export MAKEOBJDIRPREFIX
130			if iw ; then
131				cp ${ODIR}/_.df $d/iw
132				cp ${ODIR}/_.mtree $d/iw
133				cp ${ODIR}/_.du $d/iw
134			else
135				cp ${ODIR}/_.iw $d/iw || true
136				cp ${ODIR}/_.ik $d/iw || true
137			fi
138			touch $d/iw/done
139		fi
140		if [ ! -f $d/bw/done ] ; then
141			echo "# Trying BW"
142			MAKEOBJDIRPREFIX=$ODIR/_.tst 
143			export MAKEOBJDIRPREFIX
144			if bw ; then
145				mkdir -p $d/w
146				if iw ; then
147					cp ${ODIR}/_.df $d/w
148					cp ${ODIR}/_.mtree $d/w
149					cp ${ODIR}/_.du $d/w
150				else
151					cp ${ODIR}/_.iw $d/w || true
152					cp ${ODIR}/_.ik $d/w || true
153				fi
154				touch $d/w/done
155				echo "# Trying W"
156				mkdir -p $d/bw
157				echo '' > ${ODIR}/make.conf
158				if iw ; then
159					cp ${ODIR}/_.df $d/bw
160					cp ${ODIR}/_.mtree $d/bw
161					cp ${ODIR}/_.du $d/bw
162				else
163					cp ${ODIR}/_.iw $d/bw || true
164					cp ${ODIR}/_.ik $d/bw || true
165				fi
166				touch $d/bw/done
167			else
168				mkdir -p $d/bw
169				cp ${ODIR}/_.bw $d/bw || true
170				cp ${ODIR}/_.bk $d/bw || true
171				touch $d/bw/done
172			fi
173		fi
174	done
175fi
176