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