6 # boot-strap [--"configure_arg" ... ][-s "srcdir"][-m "mksrc"]\\
7 # ["prefix" ["bmakesrc" ["mksrc"]]]
10 # This script is used to configure/build bmake it builds for
11 # each OS in a subdir to keep the src clean.
12 # On successful completion it echos commands to put the new
13 # bmake binary into the /configs tree (if it exists)
14 # (http://www.crufty.net/FreeWare/configs.html), $prefix/bin
15 # and a suitable ~/*bin directory.
20 # Pick up settings from "rc".
21 # We look for '.bmake-boot-strap.rc' before processing
25 # Where to put man pages and mk files.
26 # If $prefix ends in $HOST_TARGET, and $prefix/../share
27 # exits, the default will be that rather than $prefix/share.
30 # Indicate where the mk files can be found.
31 # Default is ./mk or ../mk, set to 'none' to force
32 # building without "mksrc" but in that case a sys.mk
33 # needs to exist in the default syspath ($share_dir/mk)
35 # Possibly useful configure_args:
38 # disable use of meta mode.
41 # disable use of filemon(9) which is currently only
42 # available for NetBSD and FreeBSD.
44 # --with-filemon="path/to/filemon.h"
45 # enables use of filemon(9) by meta mode.
47 # --with-machine="machine"
48 # set "machine" to override that determined by
51 # --with-force-machine="machine"
52 # force "machine" even if uname(3) provides a value.
54 # --with-machine_arch="machine_arch"
55 # set "machine_arch" to override that determined by
58 # --with-default-sys-path="syspath"
59 # set an explicit default "syspath" which is where bmake
60 # will look for sys.mk and friends.
63 # Simon J. Gerraty <sjg@crufty.net>
66 # $Id: boot-strap,v 1.39 2012/03/26 17:08:22 sjg Exp $
68 # @(#) Copyright (c) 2001 Simon J. Gerraty
70 # This file is provided in the hope that it will
71 # be of use. There is absolutely NO WARRANTY.
72 # Permission to copy, redistribute or otherwise
73 # use this file is hereby granted provided that
74 # the above copyright notice and this notice are
77 # Please send copies of changes and bug-fixes to:
85 *) Mydir=`cd "$Mydir" && 'pwd'`;;
90 [ "$1" ] && echo "ERROR: $@" >&2
92 echo "$0 [--<configure_arg> ...][-s <srcdir>][-m <mksrc>][<prefix> [[<srcdir>] [<mksrc>]]]" >&2
106 [ -f "$r" -a -s "$r" ] || continue
107 echo "NOTE: reading $r"
115 # pick a useful default prefix (for me at least ;-)
116 for prefix in /opt/$HOST_TARGET "$HOME/$HOST_TARGET" /usr/pkg /usr/local ""
118 [ -d "${prefix:-.}" ] && break
125 source_rc .bmake-boot-strap.rc . "$Mydir/.." "$HOME"
128 expr "x$1" : "x[^=]*=\\(.*\\)"
135 --prefix) prefix="$2"; shift;;
136 --prefix=*) prefix=`get_optarg "$1"`;;
137 --src=*) srcdir=`get_optarg "$1"`;;
138 --with-mksrc=*|--mksrc=*) mksrc=`get_optarg "$1"`;;
139 --share=*) share_dir=`get_optarg "$1"`;;
140 --share) share_dir="$2"; shift;;
141 --with-default-sys-path=*)
143 MAKESYSPATH=`get_optarg "$1"`;;
144 --with-default-sys-path)
145 CONFIGURE_ARGS="$1 $2"
146 MAKESYSPATH="$2"; shift;;
147 -s|--src) srcdir="$2"; shift;;
148 -m|--mksrc) mksrc="$2"; shift;;
149 -o|--objdir) objdir="$2"; shift;;
151 -c) source_rc "$2"; shift;;
152 --*) CONFIGURE_ARGS="$CONFIGURE_ARGS $1";;
153 *=*) eval "$1"; export `expr "x$1" : "x\\(.[^=]*\\)=.*"`;;
160 case " $CONFIGURE_ARGS " in
162 *) CONFIGURE_ARGS="$CONFIGURE_ARGS $1$2";;
173 [ -d "$dir" ] || continue
180 *) [ -s $dir/$fmatch ] || continue;;
183 *./*) cd "$dir" && 'pwd';;
185 *) cd "$dir" && 'pwd';;
197 -C) cd "$2"; shift; shift;;
203 /*) # we shouldn't be here
204 [ $_t "$1" ] && echo "$1"
207 .../*) want=`echo "$1" | sed 's,^.../*,,'`;;
213 if [ $_t "./$want" ]; then
226 # is $1 missing from $2 (or PATH) ?
228 eval "__p=\$${2:-PATH}"
229 case ":$__p:" in *:"$1":*) return 1;; *) return 0;; esac
232 # if $1 exists and is not in path, append it
239 MAKESYSPATH,.../*) ;;
240 *) [ $t ${1:-.} ] || return;;
242 no_path $* && eval ${2:-PATH}="$__p${__p:+:}$1"
246 srcdir=`GetDir /bmake make-bootstrap.sh.in "$srcdir" "$2" "$Mydir" ./bmake* "$Mydir"/../bmake*`
247 [ -d "${srcdir:-/dev/null}" ] || Usage
249 none|-) # we don't want it
252 .../*) # find here or above
253 mksrc=`FindHereOrAbove -C "$Mydir" -s "$mksrc/sys.mk"`
255 mksrc=`dirname $mksrc`
257 *) # guess we want mksrc...
258 mksrc=`GetDir /mk sys.mk "$mksrc" "$3" ./mk* "$srcdir"/mk* "$srcdir"/../mk*`
259 [ -d "${mksrc:-/dev/null}" ] || Usage "Use '-m none' to build without mksrc"
264 objdir="${objdir:-$OS}"
265 [ -d "$objdir" ] || mkdir -p "$objdir"
266 [ -d "$objdir" ] || mkdir "$objdir"
267 cd "$objdir" || exit 1
273 /) [ -d /share ] || return;;
275 if [ -d "$1/../share" ]; then
276 echo `dirname "$1"`/share
284 # make it easy to force prefix to use $HOST_TARGET
285 : looking at "$prefix"
287 */host?target) prefix=`echo "$prefix" | sed "s,host.target,${HOST_TARGET},"`;;
290 share_dir="${share_dir:-`ShareDir $prefix`}"
292 AddConfigure --prefix= "$prefix"
293 case "$CONFIGURE_ARGS" in
294 *--with-*-sys-path*) ;; # skip
295 *) [ "$share_dir" ] && AddConfigure --with-default-sys-path= "$share_dir/mk";;
297 if [ "$mksrc" ]; then
298 AddConfigure --with-mksrc= "$mksrc"
299 # not all cc's support this
300 CFLAGS_MF= CFLAGS_MD=
301 export CFLAGS_MF CFLAGS_MD
304 $srcdir/configure $CONFIGURE_ARGS || exit 1
305 chmod 755 make-bootstrap.sh || exit 1
306 ./make-bootstrap.sh || exit 1
307 if [ -z "$MAKESYSPATH" ]; then
308 add_path "${share_dir:-...}/mk" MAKESYSPATH
309 case "$HOST_TARGET" in
310 netbsd*) add_path /usr/share/mk MAKESYSPATH;;
313 if [ -s "${mksrc:-/dev/null}/install-mk" ]; then
314 sh "${mksrc}/install-mk" "$objdir/mk"
315 case "$MAKESYSPATH" in
317 *) MAKESYSPATH=".../mk:${MAKESYSPATH}";;
320 # make sure test below uses the same diff that configure did
321 TOOL_DIFF=`type diff | sed 's,[()],,g;s,^[^/][^/]*,,;q'`
322 export MAKESYSPATH TOOL_DIFF
323 if [ "$mksrc" ]; then
324 $objdir/bmake test || exit 1
327 $objdir/bmake -r -m / test || exit 1
329 # If -q given, we don't want all the install instructions
332 make_version=`./bmake -r -m / -f ./Makefile -V MAKE_VERSION | ( read one two; echo $one )`
333 bmake_version=bmake-$make_version
335 if [ -s /usr/share/tmac/andoc.tmac ]; then
338 man_src=$srcdir/bmake.1
342 man_src=$srcdir/bmake.cat1
354 *=*) eval "$1"; shift;;
358 bin_dir=${bin_dir:-$1/bin}
359 share_dir=${share_dir:-`ShareDir "$1"`}
360 man_dir=${man_dir:-$share_dir/man}
361 mk_dir=${mk_dir:-$share_dir/mk}
363 echo Commands to install into $1/
365 echo mkdir -p $bin_dir
366 echo cp $objdir/bmake $bin_dir/$bmake_version
367 echo rm -f $bin_dir/bmake
368 echo ln -s $bmake_version $bin_dir/bmake
369 echo mkdir -p $man_dir/$man_subdir
370 echo cp $man_src $man_dir/$man_subdir/bmake.1
371 if [ "$mksrc" ]; then
372 ev=`env | grep '_MK='`
373 echo $ev sh $mksrc/install-mk $mk_dir
380 *) CONFIGS=${CONFIGS:-/configs}
382 install_prefix mksrc= "$CONFIGS/$OS/$OSMAJOR.X/$MACHINE_ARCH$prefix"
383 # I like to keep a copy here...
384 install_prefix share_dir="$HOME/share" "$HOME/$HOST_TARGET"
388 install_prefix "$prefix"