xref: /dflybsd-src/contrib/bmake/mk/install-mk (revision 9e7ae5a0527a977cab412aede3a532cfe2903bbb)
15f1e34d9SAlexandre Perrin:
25f1e34d9SAlexandre Perrin# NAME:
35f1e34d9SAlexandre Perrin#	install-mk - install mk files
45f1e34d9SAlexandre Perrin#
55f1e34d9SAlexandre Perrin# SYNOPSIS:
65f1e34d9SAlexandre Perrin#	install-mk [options] [var=val] [dest]
75f1e34d9SAlexandre Perrin#
85f1e34d9SAlexandre Perrin# DESCRIPTION:
95f1e34d9SAlexandre Perrin#	This tool installs mk files in a semi-intelligent manner into
105f1e34d9SAlexandre Perrin#	"dest".
115f1e34d9SAlexandre Perrin#
125f1e34d9SAlexandre Perrin#	Options:
135f1e34d9SAlexandre Perrin#
145f1e34d9SAlexandre Perrin#	-n	just say what we want to do, but don't touch anything.
155f1e34d9SAlexandre Perrin#
165f1e34d9SAlexandre Perrin#	-f	use -f when copying sys,mk.
175f1e34d9SAlexandre Perrin#
185f1e34d9SAlexandre Perrin#	-v	be verbose
195f1e34d9SAlexandre Perrin#
205f1e34d9SAlexandre Perrin#	-q	be quiet
215f1e34d9SAlexandre Perrin#
225f1e34d9SAlexandre Perrin#	-m "mode"
235f1e34d9SAlexandre Perrin#		Use "mode" for installed files (444).
245f1e34d9SAlexandre Perrin#
255f1e34d9SAlexandre Perrin#	-o "owner"
265f1e34d9SAlexandre Perrin#		Use "owner" for installed files.
275f1e34d9SAlexandre Perrin#
285f1e34d9SAlexandre Perrin#	-g "group"
295f1e34d9SAlexandre Perrin#		Use "group" for installed files.
305f1e34d9SAlexandre Perrin#
315f1e34d9SAlexandre Perrin#	var=val
325f1e34d9SAlexandre Perrin#		Set "var" to "val".  See below.
335f1e34d9SAlexandre Perrin#
345f1e34d9SAlexandre Perrin#	All our *.mk files are copied to "dest" with appropriate
355f1e34d9SAlexandre Perrin#	ownership and permissions.
365f1e34d9SAlexandre Perrin#
375f1e34d9SAlexandre Perrin#	By default if a sys.mk can be found in a standard location
385f1e34d9SAlexandre Perrin#	(that bmake will find) then no sys.mk will be put in "dest".
395f1e34d9SAlexandre Perrin#
405f1e34d9SAlexandre Perrin#	SKIP_SYS_MK:
415f1e34d9SAlexandre Perrin#		If set, we will avoid installing our 'sys.mk'
425f1e34d9SAlexandre Perrin#		This is probably a bad idea.
435f1e34d9SAlexandre Perrin#
445f1e34d9SAlexandre Perrin#	SKIP_BSD_MK:
455f1e34d9SAlexandre Perrin#		If set, we will skip making bsd.*.mk links to *.mk
465f1e34d9SAlexandre Perrin#
475f1e34d9SAlexandre Perrin#	sys.mk:
485f1e34d9SAlexandre Perrin#
495f1e34d9SAlexandre Perrin#	By default (and provided we are not installing to the system
505f1e34d9SAlexandre Perrin#	mk dir - '/usr/share/mk') we install our own 'sys.mk' which
515f1e34d9SAlexandre Perrin#	includes a sys specific file, or a generic one.
525f1e34d9SAlexandre Perrin#
535f1e34d9SAlexandre Perrin#
545f1e34d9SAlexandre Perrin# AUTHOR:
555f1e34d9SAlexandre Perrin#       Simon J. Gerraty <sjg@crufty.net>
565f1e34d9SAlexandre Perrin
575f1e34d9SAlexandre Perrin# RCSid:
58*6eef5f0cSAntonio Huete Jimenez#	$Id: install-mk,v 1.222 2022/09/09 17:44:29 sjg Exp $
595f1e34d9SAlexandre Perrin#
605f1e34d9SAlexandre Perrin#	@(#) Copyright (c) 1994 Simon J. Gerraty
615f1e34d9SAlexandre Perrin#
625f1e34d9SAlexandre Perrin#	This file is provided in the hope that it will
635f1e34d9SAlexandre Perrin#	be of use.  There is absolutely NO WARRANTY.
645f1e34d9SAlexandre Perrin#	Permission to copy, redistribute or otherwise
655f1e34d9SAlexandre Perrin#	use this file is hereby granted provided that
665f1e34d9SAlexandre Perrin#	the above copyright notice and this notice are
675f1e34d9SAlexandre Perrin#	left intact.
685f1e34d9SAlexandre Perrin#
695f1e34d9SAlexandre Perrin#	Please send copies of changes and bug-fixes to:
705f1e34d9SAlexandre Perrin#	sjg@crufty.net
715f1e34d9SAlexandre Perrin#
725f1e34d9SAlexandre Perrin
73*6eef5f0cSAntonio Huete JimenezMK_VERSION=20220909
745f1e34d9SAlexandre PerrinOWNER=
755f1e34d9SAlexandre PerrinGROUP=
765f1e34d9SAlexandre PerrinMODE=444
775f1e34d9SAlexandre PerrinBINMODE=555
785f1e34d9SAlexandre PerrinECHO=:
795f1e34d9SAlexandre PerrinSKIP=
805f1e34d9SAlexandre Perrincp_f=-f
815f1e34d9SAlexandre Perrin
825f1e34d9SAlexandre Perrinwhile :
835f1e34d9SAlexandre Perrindo
845f1e34d9SAlexandre Perrin	case "$1" in
855f1e34d9SAlexandre Perrin	*=*) eval "$1"; shift;;
865f1e34d9SAlexandre Perrin	+f) cp_f=; shift;;
875f1e34d9SAlexandre Perrin	-f) cp_f=-f; shift;;
885f1e34d9SAlexandre Perrin	-m) MODE=$2; shift 2;;
895f1e34d9SAlexandre Perrin	-o) OWNER=$2; shift 2;;
905f1e34d9SAlexandre Perrin	-g) GROUP=$2; shift 2;;
915f1e34d9SAlexandre Perrin	-v) ECHO=echo; shift;;
925f1e34d9SAlexandre Perrin	-q) ECHO=:; shift;;
935f1e34d9SAlexandre Perrin	-n) ECHO=echo SKIP=:; shift;;
945f1e34d9SAlexandre Perrin	--) shift; break;;
955f1e34d9SAlexandre Perrin	*) break;;
965f1e34d9SAlexandre Perrin	esac
975f1e34d9SAlexandre Perrindone
985f1e34d9SAlexandre Perrin
995f1e34d9SAlexandre Perrincase $# in
1005f1e34d9SAlexandre Perrin0)	echo "$0 [options] <destination> [<os>]"
1015f1e34d9SAlexandre Perrin	echo "eg."
1025f1e34d9SAlexandre Perrin	echo "$0 -o bin -g bin -m 444 /usr/local/share/mk"
1035f1e34d9SAlexandre Perrin	exit 1
1045f1e34d9SAlexandre Perrin	;;
1055f1e34d9SAlexandre Perrinesac
1065f1e34d9SAlexandre Perrindest=$1
1075f1e34d9SAlexandre Perrinos=${2:-`uname`}
1085f1e34d9SAlexandre Perrinosrel=${3:-`uname -r`}
1095f1e34d9SAlexandre Perrin
1105f1e34d9SAlexandre PerrinDo() {
1115f1e34d9SAlexandre Perrin	$ECHO "$@"
1125f1e34d9SAlexandre Perrin	$SKIP "$@"
1135f1e34d9SAlexandre Perrin}
1145f1e34d9SAlexandre Perrin
1155f1e34d9SAlexandre PerrinError() {
1165f1e34d9SAlexandre Perrin	echo "ERROR: $@" >&2
1175f1e34d9SAlexandre Perrin	exit 1
1185f1e34d9SAlexandre Perrin}
1195f1e34d9SAlexandre Perrin
1205f1e34d9SAlexandre PerrinWarning() {
1215f1e34d9SAlexandre Perrin	echo "WARNING: $@" >&2
1225f1e34d9SAlexandre Perrin}
1235f1e34d9SAlexandre Perrin
1245f1e34d9SAlexandre Perrin[ "$FORCE_SYS_MK" ] && Warning "ignoring: FORCE_{BSD,SYS}_MK (no longer supported)"
1255f1e34d9SAlexandre Perrin
1265f1e34d9SAlexandre PerrinSYS_MK_DIR=${SYS_MK_DIR:-/usr/share/mk}
1275f1e34d9SAlexandre PerrinSYS_MK=${SYS_MK:-$SYS_MK_DIR/sys.mk}
1285f1e34d9SAlexandre Perrin
1295f1e34d9SAlexandre Perrinrealpath() {
1305f1e34d9SAlexandre Perrin	[ -d $1 ] && cd $1 && 'pwd' && return
1315f1e34d9SAlexandre Perrin	echo $1
1325f1e34d9SAlexandre Perrin}
1335f1e34d9SAlexandre Perrin
134*6eef5f0cSAntonio Huete Jimenez# some Linux systems have deprecated egrep in favor of grep -E
135*6eef5f0cSAntonio Huete Jimenezcase "`echo bmake | egrep 'a' 2>&1`" in
136*6eef5f0cSAntonio Huete Jimenez*"grep -E"*) egrep='grep -E';;
137*6eef5f0cSAntonio Huete Jimenez*) egrep=egrep;;
138*6eef5f0cSAntonio Huete Jimenezesac
139*6eef5f0cSAntonio Huete Jimenez
1405f1e34d9SAlexandre Perrinif [ -s $SYS_MK -a -d $dest ]; then
1415f1e34d9SAlexandre Perrin	# if this is a BSD system we don't want to touch $SYS_MK
1425f1e34d9SAlexandre Perrin	dest=`realpath $dest`
1435f1e34d9SAlexandre Perrin	sys_mk_dir=`realpath $SYS_MK_DIR`
1445f1e34d9SAlexandre Perrin	if [ $dest = $sys_mk_dir ]; then
1455f1e34d9SAlexandre Perrin		case "$os" in
1465f1e34d9SAlexandre Perrin		*BSD*)	SKIP_SYS_MK=:
1475f1e34d9SAlexandre Perrin			SKIP_BSD_MK=:
1485f1e34d9SAlexandre Perrin			;;
1495f1e34d9SAlexandre Perrin		*)	# could be fake?
1505f1e34d9SAlexandre Perrin			if [ ! -d $dest/sys -a ! -s $dest/Generic.sys.mk ]; then
1515f1e34d9SAlexandre Perrin				SKIP_SYS_MK=: # play safe
1525f1e34d9SAlexandre Perrin				SKIP_BSD_MK=:
1535f1e34d9SAlexandre Perrin			fi
1545f1e34d9SAlexandre Perrin			;;
1555f1e34d9SAlexandre Perrin		esac
1565f1e34d9SAlexandre Perrin	fi
1575f1e34d9SAlexandre Perrinfi
1585f1e34d9SAlexandre Perrin
1595f1e34d9SAlexandre Perrin[ -d $dest/sys ] || Do mkdir -p $dest/sys
1605f1e34d9SAlexandre Perrin[ -d $dest/sys ] || Do mkdir $dest/sys || exit 1
1615f1e34d9SAlexandre Perrin[ -z "$SKIP" ] && dest=`realpath $dest`
1625f1e34d9SAlexandre Perrin
1635f1e34d9SAlexandre Perrincd `dirname $0`
1645f1e34d9SAlexandre Perrinmksrc=`'pwd'`
1655f1e34d9SAlexandre Perrinif [ $mksrc = $dest ]; then
1665f1e34d9SAlexandre Perrin	SKIP_MKFILES=:
1675f1e34d9SAlexandre Perrinelse
1685f1e34d9SAlexandre Perrin	# we do not install the examples
169*6eef5f0cSAntonio Huete Jimenez	mk_files=`grep '^[a-z].*\.mk' FILES | $egrep -v '(examples/|^sys\.mk|sys/)'`
170*6eef5f0cSAntonio Huete Jimenez	mk_scripts=`$egrep '^[a-z].*\.(sh|py)' FILES | $egrep -v '/'`
1715f1e34d9SAlexandre Perrin	sys_mk_files=`grep 'sys/.*\.mk' FILES`
1725f1e34d9SAlexandre Perrin	SKIP_MKFILES=
1735f1e34d9SAlexandre Perrin	[ -z "$SKIP_SYS_MK" ] && mk_files="sys.mk $mk_files"
1745f1e34d9SAlexandre Perrinfi
1755f1e34d9SAlexandre Perrin$SKIP_MKFILES Do cp $cp_f $mk_files $dest
1765f1e34d9SAlexandre Perrin$SKIP_MKFILES Do cp $cp_f $sys_mk_files $dest/sys
1775f1e34d9SAlexandre Perrin$SKIP_MKFILES Do cp $cp_f $mk_scripts $dest
1785f1e34d9SAlexandre Perrin$SKIP cd $dest
1795f1e34d9SAlexandre Perrin$SKIP_MKFILES Do chmod $MODE $mk_files $sys_mk_files
1805f1e34d9SAlexandre Perrin$SKIP_MKFILES Do chmod $BINMODE $mk_scripts
1815f1e34d9SAlexandre Perrin[ "$GROUP" ] && $SKIP_MKFILES Do chgrp $GROUP $mk_files $sys_mk_files
1825f1e34d9SAlexandre Perrin[ "$OWNER" ] && $SKIP_MKFILES Do chown $OWNER $mk_files $sys_mk_files
1835f1e34d9SAlexandre Perrin# if this is a BSD system the bsd.*.mk should exist and be used.
1845f1e34d9SAlexandre Perrinif [ -z "$SKIP_BSD_MK" ]; then
185ca58f742SDaniel Fojt	for f in dep doc files inc init lib links man nls obj own prog subdir
1865f1e34d9SAlexandre Perrin	do
1875f1e34d9SAlexandre Perrin		b=bsd.$f.mk
1885f1e34d9SAlexandre Perrin		[ -s $b ] || Do ln -s $f.mk $b
1895f1e34d9SAlexandre Perrin	done
1905f1e34d9SAlexandre Perrinfi
1915f1e34d9SAlexandre Perrinexit 0
192