xref: /dflybsd-src/contrib/bmake/mk/mkopt.sh (revision 9e7ae5a0527a977cab412aede3a532cfe2903bbb)
1ca58f742SDaniel Fojt#!/bin/sh
2ca58f742SDaniel Fojt
3*6eef5f0cSAntonio Huete Jimenez# $Id: mkopt.sh,v 1.15 2022/06/06 21:34:21 sjg Exp $
46a91b982SJohn Marino#
5*6eef5f0cSAntonio Huete Jimenez#	@(#) Copyright (c) 2014-2022, Simon J. Gerraty
66a91b982SJohn Marino#
76a91b982SJohn Marino#	This file is provided in the hope that it will
86a91b982SJohn Marino#	be of use.  There is absolutely NO WARRANTY.
96a91b982SJohn Marino#	Permission to copy, redistribute or otherwise
106a91b982SJohn Marino#	use this file is hereby granted provided that
116a91b982SJohn Marino#	the above copyright notice and this notice are
126a91b982SJohn Marino#	left intact.
136a91b982SJohn Marino#
146a91b982SJohn Marino#	Please send copies of changes and bug-fixes to:
156a91b982SJohn Marino#	sjg@crufty.net
166a91b982SJohn Marino#
176a91b982SJohn Marino
186a91b982SJohn Marino# handle WITH[OUT]_* options in a manner compatible with
196a91b982SJohn Marino# options.mk and bsd.mkopt.mk in recent FreeBSD
206a91b982SJohn Marino
216a91b982SJohn Marino# no need to be included more than once
226a91b982SJohn Marino_MKOPT_SH=:
23f445c897SJohn Marino_MKOPT_PREFIX=${_MKOPT_PREFIX:-MK_}
246a91b982SJohn Marino
256a91b982SJohn Marino#
26f445c897SJohn Marino# _mk_opt default OPT
276a91b982SJohn Marino#
286a91b982SJohn Marino# Set MK_$OPT
296a91b982SJohn Marino#
306a91b982SJohn Marino# The semantics are simple, if MK_$OPT has no value
316a91b982SJohn Marino# WITHOUT_$OPT results in MK_$OPT=no
326a91b982SJohn Marino# otherwise WITH_$OPT results in MK_$OPT=yes.
336a91b982SJohn Marino# Note WITHOUT_$OPT overrides WITH_$OPT.
346a91b982SJohn Marino#
356a91b982SJohn Marino# For backwards compatability reasons we treat WITH_$OPT=no
366a91b982SJohn Marino# the same as WITHOUT_$OPT.
376a91b982SJohn Marino#
386a91b982SJohn Marino_mk_opt() {
396a91b982SJohn Marino    _d=$1
40f445c897SJohn Marino    _mo=${_MKOPT_PREFIX}$2 _wo=WITHOUT_$2 _wi=WITH_$2
416a91b982SJohn Marino    eval "_mov=\$$_mo _wov=\$$_wo _wiv=\$$_wi"
426a91b982SJohn Marino
436a91b982SJohn Marino    case "$_wiv" in
44ca58f742SDaniel Fojt    [Nn][Oo]) _wov=no;;
456a91b982SJohn Marino    esac
466a91b982SJohn Marino    _v=${_mov:-${_wov:+no}}
476a91b982SJohn Marino    _v=${_v:-${_wiv:+yes}}
486a91b982SJohn Marino    _v=${_v:-$_d}
496a91b982SJohn Marino    _opt_list="$_opt_list $_mo"
506a91b982SJohn Marino    case "$_v" in
516a91b982SJohn Marino    yes|no) ;;			# sane
526a91b982SJohn Marino    0|[NnFf]*) _v=no;;		# they mean no
536a91b982SJohn Marino    1|[YyTt]*) _v=yes;;		# they mean yes
546a91b982SJohn Marino    *) _v=$_d;;			# ignore bogus value
556a91b982SJohn Marino    esac
566a91b982SJohn Marino    eval "$_mo=$_v"
576a91b982SJohn Marino}
586a91b982SJohn Marino
596a91b982SJohn Marino#
606a91b982SJohn Marino# _mk_opts default opt ... [default [opt] ...]
616a91b982SJohn Marino#
626a91b982SJohn Marino# see _mk_opts_defaults for example
636a91b982SJohn Marino#
646a91b982SJohn Marino_mk_opts() {
656a91b982SJohn Marino    _d=no
666a91b982SJohn Marino    for _o in "$@"
676a91b982SJohn Marino    do
686a91b982SJohn Marino	case "$_o" in
69f445c897SJohn Marino	*/*) # option is dirname default comes from basename
70f445c897SJohn Marino	    eval "_d=\$${_MKOPT_PREFIX}${_o#*/}"
71f445c897SJohn Marino	    _o=${_o%/*}
72f445c897SJohn Marino	    ;;
736a91b982SJohn Marino	yes|no) _d=$_o; continue;;
746a91b982SJohn Marino	esac
756a91b982SJohn Marino	_mk_opt $_d $_o
766a91b982SJohn Marino    done
776a91b982SJohn Marino}
786a91b982SJohn Marino
79f445c897SJohn Marino# handle either options.mk style OPTIONS_DEFAULT_*
80f445c897SJohn Marino# or FreeBSD's new bsd.mkopt.mk style __DEFAULT_*_OPTIONS
816a91b982SJohn Marino_mk_opts_defaults() {
82f445c897SJohn Marino    _mk_opts no $OPTIONS_DEFAULT_NO $__DEFAULT_NO_OPTIONS \
83f445c897SJohn Marino	yes $OPTIONS_DEFAULT_YES $__DEFAULT_YES_OPTIONS \
84f445c897SJohn Marino	$OPTIONS_DEFAULT_DEPENDENT $__DEFAULT_DEPENDENT_OPTIONS
856a91b982SJohn Marino}
866a91b982SJohn Marino
87*6eef5f0cSAntonio Huete Jimenez# _mk_cmdline_opts opt ...
88*6eef5f0cSAntonio Huete Jimenez# look at the command line (saved in _cmdline)
89*6eef5f0cSAntonio Huete Jimenez# to see any options we care about are being set with -DWITH*
90*6eef5f0cSAntonio Huete Jimenez# or MK_*= if 'opt' is '*' then all options are of interest.
91*6eef5f0cSAntonio Huete Jimenez_cmdline="$0 $@"
92*6eef5f0cSAntonio Huete Jimenez_mk_cmdline_opts() {
93*6eef5f0cSAntonio Huete Jimenez    for _x in $_cmdline
94*6eef5f0cSAntonio Huete Jimenez    do
95*6eef5f0cSAntonio Huete Jimenez	case "$_x" in
96*6eef5f0cSAntonio Huete Jimenez	-DWITH*|${_MKOPT_PREFIX:-MK_}*)
97*6eef5f0cSAntonio Huete Jimenez	    for _o in "$@"
98*6eef5f0cSAntonio Huete Jimenez	    do
99*6eef5f0cSAntonio Huete Jimenez		case "$_x" in
100*6eef5f0cSAntonio Huete Jimenez		-DWITH_$_o|-DWITHOUT_$_o) eval ${_x#-D}=1;;
101*6eef5f0cSAntonio Huete Jimenez		-DWITH_$_o=*|-DWITHOUT_$_o=*) eval ${_x#-D};;
102*6eef5f0cSAntonio Huete Jimenez		${_MKOPT_PREFIX:-MK_}$_o=*) eval "$_x";;
103*6eef5f0cSAntonio Huete Jimenez		esac
104*6eef5f0cSAntonio Huete Jimenez	    done
105*6eef5f0cSAntonio Huete Jimenez	    ;;
106*6eef5f0cSAntonio Huete Jimenez	esac
107*6eef5f0cSAntonio Huete Jimenez    done
108*6eef5f0cSAntonio Huete Jimenez}
109*6eef5f0cSAntonio Huete Jimenez
110*6eef5f0cSAntonio Huete Jimenez
1116a91b982SJohn Marinocase "/$0" in
1126a91b982SJohn Marino*/mkopt*)
1136a91b982SJohn Marino    _list=no
114*6eef5f0cSAntonio Huete Jimenez    _mk_cmdline_opts '*'
115*6eef5f0cSAntonio Huete Jimenez    _mk_opts no DEBUG
116*6eef5f0cSAntonio Huete Jimenez    [ $MK_DEBUG = no ] || set -x
1176a91b982SJohn Marino    while :
1186a91b982SJohn Marino    do
1196a91b982SJohn Marino	case "$1" in
1206a91b982SJohn Marino	*=*) eval "$1"; shift;;
1216a91b982SJohn Marino	--no|no) _list="$_list no"; shift;;
1226a91b982SJohn Marino	--yes|yes) _list="$_list yes"; shift;;
1236a91b982SJohn Marino	-DWITH*) eval "${1#-D}=1"; shift;;
1246a91b982SJohn Marino	[A-Z]*) _list="$_list $1"; shift;;
1256a91b982SJohn Marino	*) break;;
1266a91b982SJohn Marino	esac
1276a91b982SJohn Marino    done
1286a91b982SJohn Marino    _mk_opts $_list
1296a91b982SJohn Marino    ;;
1306a91b982SJohn Marinoesac
1316a91b982SJohn Marino
132