xref: /freebsd/contrib/bmake/boot-strap (revision c59c3bf3)
13955d011SMarcel Moolenaar:
23955d011SMarcel Moolenaar# NAME:
33955d011SMarcel Moolenaar#	boot-strap
43955d011SMarcel Moolenaar#
53955d011SMarcel Moolenaar# SYNOPSIS:
63cbdda60SSimon J. Gerraty#	boot-strap ["options"]
73cbdda60SSimon J. Gerraty#	boot-strap --prefix=/opt --install
83cbdda60SSimon J. Gerraty#	boot-strap --prefix=$HOME --install-host-target -DWITH_PROG_VERSION
93cbdda60SSimon J. Gerraty#	boot-strap ["options"] op=build
103cbdda60SSimon J. Gerraty#	boot-strap ["options"] op=install
113955d011SMarcel Moolenaar#
123955d011SMarcel Moolenaar# DESCRIPTION:
133955d011SMarcel Moolenaar#	This script is used to configure/build bmake it builds for
143cbdda60SSimon J. Gerraty#	each host-target in a different subdir to keep the src clean.
153cbdda60SSimon J. Gerraty#	There is no requirement for an existing make(1).
163cbdda60SSimon J. Gerraty#
173cbdda60SSimon J. Gerraty#	On successful completion if no '--install' flag is given,
183cbdda60SSimon J. Gerraty#	it echos a command to do installation.
193cbdda60SSimon J. Gerraty#
203cbdda60SSimon J. Gerraty#	The variable "op" defaults to 'all', and is affected by
213cbdda60SSimon J. Gerraty#	'--install' flag as above.
223cbdda60SSimon J. Gerraty#	Other values include:
233cbdda60SSimon J. Gerraty#
243cbdda60SSimon J. Gerraty#	configure
253cbdda60SSimon J. Gerraty#		Just run 'configure'
263cbdda60SSimon J. Gerraty#
273cbdda60SSimon J. Gerraty#	build
283cbdda60SSimon J. Gerraty#		If 'configure' has not been done, do it, then
293cbdda60SSimon J. Gerraty#		run the build script, and finally 'test'.
303cbdda60SSimon J. Gerraty#
313cbdda60SSimon J. Gerraty#	install
323cbdda60SSimon J. Gerraty#		If 'build' has not been done, do it, 'test' then
333cbdda60SSimon J. Gerraty#		install.
343cbdda60SSimon J. Gerraty#
353cbdda60SSimon J. Gerraty#	clean
363cbdda60SSimon J. Gerraty#		attempt to clean up
373cbdda60SSimon J. Gerraty#
383cbdda60SSimon J. Gerraty#	test
393cbdda60SSimon J. Gerraty#		run the unit-tests.  Done automatically after 'build'
403cbdda60SSimon J. Gerraty#		and before 'install'.
413cbdda60SSimon J. Gerraty#
423cbdda60SSimon J. Gerraty#	The above are leveraged by a trivial makefile for the benefit
433cbdda60SSimon J. Gerraty#	of those that have './configure; make; make install' baked
443cbdda60SSimon J. Gerraty#	into them.
453955d011SMarcel Moolenaar#
463955d011SMarcel Moolenaar#	Options:
473955d011SMarcel Moolenaar#
483955d011SMarcel Moolenaar#	-c "rc"
493955d011SMarcel Moolenaar#		Pick up settings from "rc".
503955d011SMarcel Moolenaar#		We look for '.bmake-boot-strap.rc' before processing
513cbdda60SSimon J. Gerraty#		options (unless SKIP_RC is set in environment).
523955d011SMarcel Moolenaar#
533955d011SMarcel Moolenaar#	--share "share_dir"
543955d011SMarcel Moolenaar#		Where to put man pages and mk files.
553955d011SMarcel Moolenaar#		If $prefix ends in $HOST_TARGET, and $prefix/../share
563955d011SMarcel Moolenaar#		exits, the default will be that rather than $prefix/share.
573955d011SMarcel Moolenaar#
583955d011SMarcel Moolenaar#	--mksrc "mksrc"
593955d011SMarcel Moolenaar#		Indicate where the mk files can be found.
603cbdda60SSimon J. Gerraty#		Default is $Mydir/mk
613cbdda60SSimon J. Gerraty#
623cbdda60SSimon J. Gerraty#	--install
633cbdda60SSimon J. Gerraty#		If build and test work, run bmake install.
643cbdda60SSimon J. Gerraty#		BINDIR=$prefix/bin
653cbdda60SSimon J. Gerraty#		SHAREDIR=$prefix/share
663cbdda60SSimon J. Gerraty#
673cbdda60SSimon J. Gerraty#	--install-host-target
683cbdda60SSimon J. Gerraty#		As for '--install' but BINDIR=$prefix/$HOST_TARGET/bin
693cbdda60SSimon J. Gerraty#		This is useful when $prefix/ is shared by multiple
703cbdda60SSimon J. Gerraty#		machines.
713cbdda60SSimon J. Gerraty#
723cbdda60SSimon J. Gerraty#	Flags relevant when installing:
733cbdda60SSimon J. Gerraty#
743cbdda60SSimon J. Gerraty#	-DWITHOUT_INSTALL_MK
753cbdda60SSimon J. Gerraty#		Skip installing mk files.
763cbdda60SSimon J. Gerraty#		By default they will be installed to $prefix/share/mk
773cbdda60SSimon J. Gerraty#
783cbdda60SSimon J. Gerraty#	-DWITH_PROG_VERSION
793cbdda60SSimon J. Gerraty#		Install 'bmake' as 'bmake-$MAKE_VERSION'
803cbdda60SSimon J. Gerraty#		A symlink will be made as 'bmake' unless
813cbdda60SSimon J. Gerraty#		-DWITHOUT_PROG_LINK is set.
823955d011SMarcel Moolenaar#
833955d011SMarcel Moolenaar#	Possibly useful configure_args:
843955d011SMarcel Moolenaar#
85d5e0a182SSimon J. Gerraty#	--without-makefile
86d5e0a182SSimon J. Gerraty#		do not generate 'makefile'.
87d5e0a182SSimon J. Gerraty#
88d5e0a182SSimon J. Gerraty#		'makefile' is used to enable the classic
89d5e0a182SSimon J. Gerraty#		'./configure; make; make install' dance, but on
90d5e0a182SSimon J. Gerraty#		systems with case insensitive filesystems it can lead
91d5e0a182SSimon J. Gerraty#		to infinite recursion.
92d5e0a182SSimon J. Gerraty#
93d5e0a182SSimon J. Gerraty#		It is disabled by default on Darwin, and Cygwin.
94d5e0a182SSimon J. Gerraty#
953955d011SMarcel Moolenaar#	--without-meta
963955d011SMarcel Moolenaar#		disable use of meta mode.
973955d011SMarcel Moolenaar#
98d5e0a182SSimon J. Gerraty#		Even without filemon(9) meta mode is very useful
99d5e0a182SSimon J. Gerraty#		both for debugging build and improving reliability of
100d5e0a182SSimon J. Gerraty#		update builds.
101d5e0a182SSimon J. Gerraty#
1023955d011SMarcel Moolenaar#	--without-filemon
1033955d011SMarcel Moolenaar#		disable use of filemon(9) which is currently only
1043955d011SMarcel Moolenaar#		available for NetBSD and FreeBSD.
1053955d011SMarcel Moolenaar#
10649caa483SSimon J. Gerraty#	--with-filemon=ktrace
10749caa483SSimon J. Gerraty#		on NetBSD or others with fktrace(2), use ktrace
10849caa483SSimon J. Gerraty#		version of filemon.
10949caa483SSimon J. Gerraty#
1103955d011SMarcel Moolenaar#	--with-filemon="path/to/filemon.h"
1113955d011SMarcel Moolenaar#		enables use of filemon(9) by meta mode.
1123955d011SMarcel Moolenaar#
1133955d011SMarcel Moolenaar#	--with-machine="machine"
1143955d011SMarcel Moolenaar#		set "machine" to override that determined by
1153955d011SMarcel Moolenaar#		machine.sh
1163955d011SMarcel Moolenaar#
1173955d011SMarcel Moolenaar#	--with-force-machine="machine"
1183955d011SMarcel Moolenaar#		force "machine" even if uname(3) provides a value.
1193955d011SMarcel Moolenaar#
1203955d011SMarcel Moolenaar#	--with-machine_arch="machine_arch"
1213955d011SMarcel Moolenaar#		set "machine_arch" to override that determined by
1223955d011SMarcel Moolenaar#		machine.sh
1233955d011SMarcel Moolenaar#
124e2eeea75SSimon J. Gerraty#	--with-force_machine_arch="machine_arch"
125e2eeea75SSimon J. Gerraty#		force "machine_arch" to override that determined by
126e2eeea75SSimon J. Gerraty#		machine.sh
127e2eeea75SSimon J. Gerraty#
1283955d011SMarcel Moolenaar#	--with-default-sys-path="syspath"
1293955d011SMarcel Moolenaar#		set an explicit default "syspath" which is where bmake
1303955d011SMarcel Moolenaar#		will look for sys.mk and friends.
1313955d011SMarcel Moolenaar#
1323955d011SMarcel Moolenaar# AUTHOR:
1333955d011SMarcel Moolenaar#	Simon J. Gerraty <sjg@crufty.net>
1343955d011SMarcel Moolenaar
1353955d011SMarcel Moolenaar# RCSid:
136*c59c3bf3SSimon J. Gerraty#	$Id: boot-strap,v 1.61 2024/03/10 17:51:10 sjg Exp $
1373955d011SMarcel Moolenaar#
1383955d011SMarcel Moolenaar#	@(#) Copyright (c) 2001 Simon J. Gerraty
1393955d011SMarcel Moolenaar#
1403955d011SMarcel Moolenaar#	This file is provided in the hope that it will
1413955d011SMarcel Moolenaar#	be of use.  There is absolutely NO WARRANTY.
1423955d011SMarcel Moolenaar#	Permission to copy, redistribute or otherwise
1433955d011SMarcel Moolenaar#	use this file is hereby granted provided that
1443955d011SMarcel Moolenaar#	the above copyright notice and this notice are
1453955d011SMarcel Moolenaar#	left intact.
1463955d011SMarcel Moolenaar#
1473955d011SMarcel Moolenaar#	Please send copies of changes and bug-fixes to:
1483955d011SMarcel Moolenaar#	sjg@crufty.net
1493955d011SMarcel Moolenaar#
1503955d011SMarcel Moolenaar
1513955d011SMarcel MoolenaarMydir=`dirname $0`
1523955d011SMarcel Moolenaar. "$Mydir/os.sh"
1533955d011SMarcel Moolenaarcase "$Mydir" in
1543955d011SMarcel Moolenaar/*) ;;
1553955d011SMarcel Moolenaar*) Mydir=`cd "$Mydir" && 'pwd'`;;
1563955d011SMarcel Moolenaaresac
1573955d011SMarcel Moolenaar
1583955d011SMarcel MoolenaarUsage() {
1593955d011SMarcel Moolenaar	[ "$1" ] && echo "ERROR: $@" >&2
1603955d011SMarcel Moolenaar	echo "Usage:" >&2
1613cbdda60SSimon J. Gerraty	echo "$0 [--<configure_arg> ...][<prefix>][--install]" >&2
1623955d011SMarcel Moolenaar	exit 1
1633955d011SMarcel Moolenaar}
1643955d011SMarcel Moolenaar
1653955d011SMarcel MoolenaarError() {
1663955d011SMarcel Moolenaar	echo "ERROR: $@" >&2
1673955d011SMarcel Moolenaar	exit 1
1683955d011SMarcel Moolenaar}
1693955d011SMarcel Moolenaar
1703955d011SMarcel Moolenaarsource_rc() {
1713955d011SMarcel Moolenaar	rc="$1"; shift
1723955d011SMarcel Moolenaar	for d in ${*:-""}
1733955d011SMarcel Moolenaar	do
1743955d011SMarcel Moolenaar		r="${d:+$d/}$rc"
1753955d011SMarcel Moolenaar		[ -f "$r" -a -s "$r" ] || continue
1763955d011SMarcel Moolenaar		echo "NOTE: reading $r"
1773955d011SMarcel Moolenaar		. "$r"
1783955d011SMarcel Moolenaar		break
1793955d011SMarcel Moolenaar	done
1803955d011SMarcel Moolenaar}
1813955d011SMarcel Moolenaar
1823cbdda60SSimon J. Gerratycmd_args="$@"
1833cbdda60SSimon J. Gerraty
1841748de26SSimon J. Gerraty# clear some things from the environment that we care about
1851748de26SSimon J. Gerratyunset MAKEOBJDIR MAKEOBJDIRPREFIX
18649caa483SSimon J. Gerraty# or that might be incompatible
18749caa483SSimon J. Gerratyunset MAKE MAKEFLAGS
1881748de26SSimon J. Gerraty
1893cbdda60SSimon J. Gerraty# --install[-host-target] will set this
1903cbdda60SSimon J. GerratyINSTALL_PREFIX=
1913cbdda60SSimon J. Gerraty# other things we pass to install step
1923cbdda60SSimon J. GerratyINSTALL_ARGS=
1933955d011SMarcel MoolenaarCONFIGURE_ARGS=
1943955d011SMarcel MoolenaarMAKESYSPATH=
1953955d011SMarcel Moolenaar# pick a useful default prefix (for me at least ;-)
1963955d011SMarcel Moolenaarfor prefix in /opt/$HOST_TARGET "$HOME/$HOST_TARGET" /usr/pkg /usr/local ""
1973955d011SMarcel Moolenaardo
1983cbdda60SSimon J. Gerraty	[ -d "${prefix:-.}" ] || continue
1993cbdda60SSimon J. Gerraty	case "$prefix" in
2003cbdda60SSimon J. Gerraty	*/$HOST_TARGET)
2013cbdda60SSimon J. Gerraty		p=`dirname $prefix`
2023cbdda60SSimon J. Gerraty		if [ -d $p/share ]; then
2033cbdda60SSimon J. Gerraty			INSTALL_BIN=$HOST_TARGET/bin
2043cbdda60SSimon J. Gerraty			prefix=$p
2053cbdda60SSimon J. Gerraty		fi
2063cbdda60SSimon J. Gerraty		;;
2073cbdda60SSimon J. Gerraty	esac
2083cbdda60SSimon J. Gerraty        echo "NOTE: default prefix=$prefix ${INSTALL_BIN:+INSTALL_BIN=$INSTALL_BIN}"
2093cbdda60SSimon J. Gerraty	break
2103955d011SMarcel Moolenaardone
2113cbdda60SSimon J. Gerratysrcdir=$Mydir
2123cbdda60SSimon J. Gerratymksrc=$Mydir/mk
2133955d011SMarcel Moolenaarobjdir=
2143955d011SMarcel Moolenaarquiet=:
2153955d011SMarcel Moolenaar
2163cbdda60SSimon J. Gerraty${SKIP_RC:+:} source_rc .bmake-boot-strap.rc . "$Mydir/.." "$HOME"
2173955d011SMarcel Moolenaar
2183955d011SMarcel Moolenaarget_optarg() {
2193955d011SMarcel Moolenaar	expr "x$1" : "x[^=]*=\\(.*\\)"
2203955d011SMarcel Moolenaar}
2213955d011SMarcel Moolenaar
2223cbdda60SSimon J. Gerratyhere=`'pwd'`
2233cbdda60SSimon J. Gerratyif [ $here = $Mydir ]; then
2245bcb7424SSimon J. Gerraty   # avoid pollution
2253cbdda60SSimon J. Gerraty   OBJROOT=../
2263cbdda60SSimon J. Gerratyfi
2273cbdda60SSimon J. Gerraty
2283cbdda60SSimon J. Gerratyop=all
2293cbdda60SSimon J. GerratyBMAKE=
2303cbdda60SSimon J. Gerraty
2313955d011SMarcel Moolenaarwhile :
2323955d011SMarcel Moolenaardo
2333955d011SMarcel Moolenaar	case "$1" in
2343955d011SMarcel Moolenaar	--) shift; break;;
2353cbdda60SSimon J. Gerraty        --help) sed -n -e "1d;/RCSid/,\$d" -e '/^#\.[a-z]/d' -e '/^#/s,^# *,,p' $0; exit 0;;
2363955d011SMarcel Moolenaar	--prefix) prefix="$2"; shift;;
2373955d011SMarcel Moolenaar	--prefix=*) prefix=`get_optarg "$1"`;;
2383955d011SMarcel Moolenaar	--src=*) srcdir=`get_optarg "$1"`;;
2393955d011SMarcel Moolenaar	--with-mksrc=*|--mksrc=*) mksrc=`get_optarg "$1"`;;
2403955d011SMarcel Moolenaar	--share=*) share_dir=`get_optarg "$1"`;;
2413955d011SMarcel Moolenaar	--share) share_dir="$2"; shift;;
2423955d011SMarcel Moolenaar	--with-default-sys-path=*)
2430dede8b0SSimon J. Gerraty	    CONFIGURE_ARGS="$1";;
2443955d011SMarcel Moolenaar	--with-default-sys-path)
2450dede8b0SSimon J. Gerraty	    CONFIGURE_ARGS="$1 $2";;
2463cbdda60SSimon J. Gerraty	--install) INSTALL_PREFIX=${INSTALL_PREFIX:-$prefix};;
2473cbdda60SSimon J. Gerraty	--install-host-target)
2483cbdda60SSimon J. Gerraty                INSTALL_PREFIX=${INSTALL_PREFIX:-$prefix}
2493cbdda60SSimon J. Gerraty                INSTALL_BIN=$HOST_TARGET/bin;;
2503cbdda60SSimon J. Gerraty	--install-destdir=*) INSTALL_DESTDIR=`get_optarg "$1"`;;
2513cbdda60SSimon J. Gerraty	--install-prefix=*) INSTALL_PREFIX=`get_optarg "$1"`;;
2523cbdda60SSimon J. Gerraty	-DWITH*) INSTALL_ARGS="$INSTALL_ARGS $1";;
2533955d011SMarcel Moolenaar	-s|--src) srcdir="$2"; shift;;
2543955d011SMarcel Moolenaar	-m|--mksrc) mksrc="$2"; shift;;
2553955d011SMarcel Moolenaar	-o|--objdir) objdir="$2"; shift;;
2563955d011SMarcel Moolenaar	-q) quiet=;;
2573955d011SMarcel Moolenaar	-c) source_rc "$2"; shift;;
2583955d011SMarcel Moolenaar	--*) CONFIGURE_ARGS="$CONFIGURE_ARGS $1";;
2593955d011SMarcel Moolenaar	*=*) eval "$1"; export `expr "x$1" : "x\\(.[^=]*\\)=.*"`;;
2603955d011SMarcel Moolenaar	*) break;;
2613955d011SMarcel Moolenaar	esac
2623955d011SMarcel Moolenaar        shift
2633955d011SMarcel Moolenaardone
2643955d011SMarcel Moolenaar
2653955d011SMarcel MoolenaarAddConfigure() {
2663955d011SMarcel Moolenaar	case " $CONFIGURE_ARGS " in
2673955d011SMarcel Moolenaar	*" $1"*) ;;
2683955d011SMarcel Moolenaar	*) CONFIGURE_ARGS="$CONFIGURE_ARGS $1$2";;
2693955d011SMarcel Moolenaar	esac
2703955d011SMarcel Moolenaar}
2713955d011SMarcel Moolenaar
2723955d011SMarcel MoolenaarGetDir() {
2733955d011SMarcel Moolenaar	match="$1"
2743955d011SMarcel Moolenaar	shift
2753955d011SMarcel Moolenaar	fmatch="$1"
2763955d011SMarcel Moolenaar	shift
2773955d011SMarcel Moolenaar	for dir in $*
2783955d011SMarcel Moolenaar	do
2793955d011SMarcel Moolenaar		[ -d "$dir" ] || continue
2803955d011SMarcel Moolenaar		case "/$dir/" in
2813955d011SMarcel Moolenaar		*$match*) ;;
2823955d011SMarcel Moolenaar		*) continue;;
2833955d011SMarcel Moolenaar		esac
2843955d011SMarcel Moolenaar		case "$fmatch" in
2853955d011SMarcel Moolenaar		.) ;;
2863955d011SMarcel Moolenaar		*) [ -s $dir/$fmatch ] || continue;;
2873955d011SMarcel Moolenaar		esac
2883955d011SMarcel Moolenaar		case "$dir/" in
2893955d011SMarcel Moolenaar		*./*) cd "$dir" && 'pwd';;
2903955d011SMarcel Moolenaar		/*) echo $dir;;
2913955d011SMarcel Moolenaar		*) cd "$dir" && 'pwd';;
2923955d011SMarcel Moolenaar		esac
2933955d011SMarcel Moolenaar		break
2943955d011SMarcel Moolenaar	done
2953955d011SMarcel Moolenaar}
2963955d011SMarcel Moolenaar
2973955d011SMarcel MoolenaarFindHereOrAbove() {
2983955d011SMarcel Moolenaar    (
2993955d011SMarcel Moolenaar	_t=-s
3003955d011SMarcel Moolenaar	while :
3013955d011SMarcel Moolenaar	do
3023955d011SMarcel Moolenaar		case "$1" in
3033955d011SMarcel Moolenaar		-C) cd "$2"; shift; shift;;
3043955d011SMarcel Moolenaar		-?) _t=$1; shift;;
3053955d011SMarcel Moolenaar		*) break;;
3063955d011SMarcel Moolenaar		esac
3073955d011SMarcel Moolenaar	done
3083955d011SMarcel Moolenaar	case "$1" in
3093955d011SMarcel Moolenaar	/*)	# we shouldn't be here
3103955d011SMarcel Moolenaar		[ $_t "$1" ] && echo "$1"
3113955d011SMarcel Moolenaar		return
3123955d011SMarcel Moolenaar		;;
3133955d011SMarcel Moolenaar	.../*) want=`echo "$1" | sed 's,^.../*,,'`;;
3143955d011SMarcel Moolenaar	*) want="$1";;
3153955d011SMarcel Moolenaar	esac
3163955d011SMarcel Moolenaar	here=`'pwd'`
3173955d011SMarcel Moolenaar	while :
3183955d011SMarcel Moolenaar	do
3193955d011SMarcel Moolenaar		if [ $_t "./$want" ]; then
3203955d011SMarcel Moolenaar			echo "$here/$want"
3213955d011SMarcel Moolenaar			return
3223955d011SMarcel Moolenaar		fi
3233955d011SMarcel Moolenaar		cd ..
3243955d011SMarcel Moolenaar		here=`'pwd'`
3253955d011SMarcel Moolenaar		case "$here" in
3263955d011SMarcel Moolenaar		/) return;;
3273955d011SMarcel Moolenaar		esac
3283955d011SMarcel Moolenaar	done
3293955d011SMarcel Moolenaar    )
3303955d011SMarcel Moolenaar}
3313955d011SMarcel Moolenaar
332*c59c3bf3SSimon J. Gerraty# is $1 newer than $2 ...
333*c59c3bf3SSimon J. Gerratyis_newer() {
334*c59c3bf3SSimon J. Gerraty	case `'ls' -1td "$@" 2> /dev/null | head -1` in
335*c59c3bf3SSimon J. Gerraty	$1) return 0;;
336*c59c3bf3SSimon J. Gerraty	esac
337*c59c3bf3SSimon J. Gerraty	return 1
338*c59c3bf3SSimon J. Gerraty}
339*c59c3bf3SSimon J. Gerraty
3403955d011SMarcel Moolenaar# is $1 missing from $2 (or PATH) ?
3413955d011SMarcel Moolenaarno_path() {
3423955d011SMarcel Moolenaar	eval "__p=\$${2:-PATH}"
3433955d011SMarcel Moolenaar	case ":$__p:" in *:"$1":*) return 1;; *) return 0;; esac
3443955d011SMarcel Moolenaar}
3453955d011SMarcel Moolenaar
3463955d011SMarcel Moolenaar# if $1 exists and is not in path, append it
3473955d011SMarcel Moolenaaradd_path () {
3483955d011SMarcel Moolenaar	case "$1" in
3493955d011SMarcel Moolenaar	-?) t=$1; shift;;
3503955d011SMarcel Moolenaar	*) t=-d;;
3513955d011SMarcel Moolenaar	esac
3523955d011SMarcel Moolenaar	case "$2,$1" in
3533955d011SMarcel Moolenaar	MAKESYSPATH,.../*) ;;
3543955d011SMarcel Moolenaar	*) [ $t ${1:-.} ] || return;;
3553955d011SMarcel Moolenaar	esac
3563955d011SMarcel Moolenaar	no_path $* && eval ${2:-PATH}="$__p${__p:+:}$1"
3573955d011SMarcel Moolenaar}
3583955d011SMarcel Moolenaar
3593955d011SMarcel Moolenaar
3603955d011SMarcel Moolenaarsrcdir=`GetDir /bmake make-bootstrap.sh.in "$srcdir" "$2" "$Mydir" ./bmake* "$Mydir"/../bmake*`
3613955d011SMarcel Moolenaar[ -d "${srcdir:-/dev/null}" ] || Usage
3623955d011SMarcel Moolenaarcase "$mksrc" in
3630dede8b0SSimon J. Gerratynone|-) # we ignore this now
3640dede8b0SSimon J. Gerraty	mksrc=$Mydir/mk
3653955d011SMarcel Moolenaar	;;
3663955d011SMarcel Moolenaar.../*)	# find here or above
3673955d011SMarcel Moolenaar	mksrc=`FindHereOrAbove -C "$Mydir" -s "$mksrc/sys.mk"`
3683955d011SMarcel Moolenaar	# that found a file
3693955d011SMarcel Moolenaar	mksrc=`dirname $mksrc`
3703955d011SMarcel Moolenaar	;;
3713955d011SMarcel Moolenaar*)	# guess we want mksrc...
3723955d011SMarcel Moolenaar	mksrc=`GetDir /mk sys.mk "$mksrc" "$3" ./mk* "$srcdir"/mk* "$srcdir"/../mk*`
3733955d011SMarcel Moolenaar	[ -d "${mksrc:-/dev/null}" ] || Usage "Use '-m none' to build without mksrc"
3743955d011SMarcel Moolenaar	;;
3753955d011SMarcel Moolenaaresac
3763955d011SMarcel Moolenaar
3773955d011SMarcel Moolenaar# Ok, get to work...
3783cbdda60SSimon J. Gerratyobjdir="${objdir:-$OBJROOT$HOST_TARGET}"
3793955d011SMarcel Moolenaar[ -d "$objdir" ] || mkdir -p "$objdir"
3803955d011SMarcel Moolenaar[ -d "$objdir" ] || mkdir "$objdir"
3813955d011SMarcel Moolenaarcd "$objdir" || exit 1
3823955d011SMarcel Moolenaar# make it absolute
3833955d011SMarcel Moolenaarobjdir=`'pwd'`
3843955d011SMarcel Moolenaar
3853955d011SMarcel MoolenaarShareDir() {
3863955d011SMarcel Moolenaar	case "/$1" in
3873955d011SMarcel Moolenaar	/) [ -d /share ] || return;;
3883955d011SMarcel Moolenaar	*/$HOST_TARGET)
3893955d011SMarcel Moolenaar		if [ -d "$1/../share" ]; then
3903955d011SMarcel Moolenaar			echo `dirname "$1"`/share
3913955d011SMarcel Moolenaar			return
3923955d011SMarcel Moolenaar		fi
3933955d011SMarcel Moolenaar		;;
3943955d011SMarcel Moolenaar	esac
3953955d011SMarcel Moolenaar	echo $1/share
3963955d011SMarcel Moolenaar}
3973955d011SMarcel Moolenaar
3983955d011SMarcel Moolenaar# make it easy to force prefix to use $HOST_TARGET
3993955d011SMarcel Moolenaar: looking at "$prefix"
4003955d011SMarcel Moolenaarcase "$prefix" in
4013955d011SMarcel Moolenaar*/host?target) prefix=`echo "$prefix" | sed "s,host.target,${HOST_TARGET},"`;;
4023955d011SMarcel Moolenaaresac
4033955d011SMarcel Moolenaar
4043955d011SMarcel Moolenaarshare_dir="${share_dir:-`ShareDir $prefix`}"
4053955d011SMarcel Moolenaar
4063955d011SMarcel MoolenaarAddConfigure --prefix= "$prefix"
4073955d011SMarcel Moolenaarcase "$CONFIGURE_ARGS" in
4083955d011SMarcel Moolenaar*--with-*-sys-path*) ;; # skip
4093955d011SMarcel Moolenaar*) [ "$share_dir" ] && AddConfigure --with-default-sys-path= "$share_dir/mk";;
4103955d011SMarcel Moolenaaresac
4113955d011SMarcel Moolenaarif [ "$mksrc" ]; then
4123955d011SMarcel Moolenaar        AddConfigure --with-mksrc= "$mksrc"
4133955d011SMarcel Moolenaar        # not all cc's support this
4143955d011SMarcel Moolenaar        CFLAGS_MF= CFLAGS_MD=
4153955d011SMarcel Moolenaar        export CFLAGS_MF CFLAGS_MD
4163955d011SMarcel Moolenaarfi
4173955d011SMarcel Moolenaar
4183cbdda60SSimon J. Gerraty# this makes it easy to run the bmake we just built
4193cbdda60SSimon J. Gerraty# the :tA dance is needed because 'pwd' and even /bin/pwd
4203cbdda60SSimon J. Gerraty# may not give the same result as realpath().
4213cbdda60SSimon J. GerratyBmake() {
4223955d011SMarcel Moolenaar    (
4233cbdda60SSimon J. Gerraty	    cd $Mydir &&
4243cbdda60SSimon J. Gerraty	    MAKESYSPATH=$mksrc SRCTOP=$Mydir OBJTOP=$objdir \
4253cbdda60SSimon J. Gerraty	    MAKEOBJDIR='${.CURDIR:S,${SRCTOP:tA},${OBJTOP:tA},}' \
4263cbdda60SSimon J. Gerraty	    ${BMAKE:-$objdir/bmake} -f $Mydir/Makefile "$@"
4273955d011SMarcel Moolenaar    )
4283955d011SMarcel Moolenaar}
4293955d011SMarcel Moolenaar
4303cbdda60SSimon J. Gerratyop_configure() {
4313cbdda60SSimon J. Gerraty	$srcdir/configure $CONFIGURE_ARGS || exit 1
4323cbdda60SSimon J. Gerraty}
4333cbdda60SSimon J. Gerraty
4343cbdda60SSimon J. Gerratyop_build() {
4353cbdda60SSimon J. Gerraty	[ -s make-bootstrap.sh ] || op_configure
4363cbdda60SSimon J. Gerraty	chmod 755 make-bootstrap.sh || exit 1
4373cbdda60SSimon J. Gerraty	./make-bootstrap.sh || exit 1
4383cbdda60SSimon J. Gerraty	case "$op" in
439*c59c3bf3SSimon J. Gerraty	build) rm -f tested; op_test;;
4403cbdda60SSimon J. Gerraty	esac
4413cbdda60SSimon J. Gerraty}
4423cbdda60SSimon J. Gerraty
4433cbdda60SSimon J. Gerratyop_test() {
4443cbdda60SSimon J. Gerraty	[ -x bmake ] || op_build
445*c59c3bf3SSimon J. Gerraty	case "$op" in
446*c59c3bf3SSimon J. Gerraty	test) ;;
447*c59c3bf3SSimon J. Gerraty	*) is_newer bmake tested || return;;
448*c59c3bf3SSimon J. Gerraty	esac
44998875883SSimon J. Gerraty	Bmake test TEST_MAKE=$objdir/bmake "$@" || exit 1
450*c59c3bf3SSimon J. Gerraty	touch tested
4513cbdda60SSimon J. Gerraty}
4523cbdda60SSimon J. Gerraty
4533cbdda60SSimon J. Gerratyop_clean() {
4543cbdda60SSimon J. Gerraty	if [ -x bmake ]; then
4553cbdda60SSimon J. Gerraty		ln bmake bmake$$
4563cbdda60SSimon J. Gerraty		BMAKE=$objdir/bmake$$ Bmake clean
4573cbdda60SSimon J. Gerraty		rm -f bmake$$
4583cbdda60SSimon J. Gerraty	elif [ $objdir != $srcdir ]; then
4593cbdda60SSimon J. Gerraty		rm -rf *
4603cbdda60SSimon J. Gerraty	fi
4613cbdda60SSimon J. Gerraty}
4623cbdda60SSimon J. Gerraty
4633cbdda60SSimon J. Gerratyop_install() {
4643cbdda60SSimon J. Gerraty	op_test
4653cbdda60SSimon J. Gerraty	case "$INSTALL_PREFIX,$INSTALL_BIN,$prefix" in
4663cbdda60SSimon J. Gerraty	,$HOST_TARGET/bin,*/$HOST_TARGET)
4673cbdda60SSimon J. Gerraty		INSTALL_PREFIX=`dirname $prefix`
4683955d011SMarcel Moolenaar		;;
4693955d011SMarcel Moolenaar	esac
4703cbdda60SSimon J. Gerraty	INSTALL_PREFIX=${INSTALL_PREFIX:-$prefix}
4713cbdda60SSimon J. Gerraty	Bmake install prefix=$INSTALL_PREFIX BINDIR=$INSTALL_PREFIX/${INSTALL_BIN:-bin} ${INSTALL_DESTDIR:+DESTDIR=$INSTALL_DESTDIR} $INSTALL_ARGS || exit 1
4723cbdda60SSimon J. Gerraty}
4733955d011SMarcel Moolenaar
4743cbdda60SSimon J. Gerratyop_all() {
4753cbdda60SSimon J. Gerraty	rm -f make-bootstrap.sh bmake *.o
4763cbdda60SSimon J. Gerraty	if [ -n "$INSTALL_PREFIX" ]; then
4773cbdda60SSimon J. Gerraty		op_install
4783cbdda60SSimon J. Gerraty	else
4793cbdda60SSimon J. Gerraty		op_test
480b778b302SSimon J. Gerraty		MAKE_VERSION=`sed -n '/^_MAKE_VERSION/ { s,.*=  *,,;p; }' $srcdir/Makefile`
481956e45f6SSimon J. Gerraty		cat << EOM
482956e45f6SSimon J. GerratyYou can install by running:
483956e45f6SSimon J. Gerraty
484956e45f6SSimon J. Gerraty$0 $cmd_args op=install
485956e45f6SSimon J. Gerraty
486956e45f6SSimon J. GerratyUse --install-prefix=/something to install somewhere other than $prefix
487956e45f6SSimon J. GerratyUse --install-destdir=/somewhere to set DESTDIR during install
488956e45f6SSimon J. GerratyUse --install-host-target to use INSTALL_BIN=$HOST_TARGET/bin
489956e45f6SSimon J. GerratyUse -DWITH_PROG_VERSION to install as bmake-$MAKE_VERSION
490956e45f6SSimon J. GerratyUse -DWITHOUT_PROG_LINK to suppress bmake -> bmake-$MAKE_VERSION symlink
491956e45f6SSimon J. GerratyUse -DWITHOUT_INSTALL_MK to skip installing files to $prefix/share/mk
492956e45f6SSimon J. GerratyEOM
4933cbdda60SSimon J. Gerraty	fi
494956e45f6SSimon J. Gerraty	cat << EOM
495956e45f6SSimon J. Gerraty
496956e45f6SSimon J. GerratyNote: bmake.cat1 contains ANSI escape sequences.
497956e45f6SSimon J. GerratyYou may need the -r or -R option to more/less to view it correctly.
498956e45f6SSimon J. Gerraty
499956e45f6SSimon J. GerratyEOM
5003cbdda60SSimon J. Gerraty}
5013cbdda60SSimon J. Gerraty
50212904384SSimon J. Gerratyop_$op "$@"
5033cbdda60SSimon J. Gerratyexit 0
504