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