13841c287SSimon J. Gerraty#!/bin/sh 23841c287SSimon J. Gerraty 3c59c3bf3SSimon J. Gerraty# SPDX-License-Identifier: BSD-2-Clause 4c59c3bf3SSimon J. Gerraty# 5*0b46a53aSSimon J. Gerraty# $Id: mkopt.sh,v 1.17 2025/05/22 22:35:14 sjg Exp $ 6db29cad8SSimon J. Gerraty# 7*0b46a53aSSimon J. Gerraty# @(#) Copyright (c) 2014-2025, Simon J. Gerraty 8db29cad8SSimon J. Gerraty# 9db29cad8SSimon J. Gerraty# This file is provided in the hope that it will 10db29cad8SSimon J. Gerraty# be of use. There is absolutely NO WARRANTY. 11db29cad8SSimon J. Gerraty# Permission to copy, redistribute or otherwise 12db29cad8SSimon J. Gerraty# use this file is hereby granted provided that 13db29cad8SSimon J. Gerraty# the above copyright notice and this notice are 14db29cad8SSimon J. Gerraty# left intact. 15db29cad8SSimon J. Gerraty# 16db29cad8SSimon J. Gerraty# Please send copies of changes and bug-fixes to: 17db29cad8SSimon J. Gerraty# sjg@crufty.net 18db29cad8SSimon J. Gerraty# 19db29cad8SSimon J. Gerraty 20db29cad8SSimon J. Gerraty# handle WITH[OUT]_* options in a manner compatible with 21db29cad8SSimon J. Gerraty# options.mk and bsd.mkopt.mk in recent FreeBSD 22db29cad8SSimon J. Gerraty 23db29cad8SSimon J. Gerraty# no need to be included more than once 24db29cad8SSimon J. Gerraty_MKOPT_SH=: 25128a4105SSimon J. Gerraty_MKOPT_PREFIX=${_MKOPT_PREFIX:-MK_} 26db29cad8SSimon J. Gerraty 27db29cad8SSimon J. Gerraty# 28128a4105SSimon J. Gerraty# _mk_opt default OPT 29db29cad8SSimon J. Gerraty# 30db29cad8SSimon J. Gerraty# Set MK_$OPT 31db29cad8SSimon J. Gerraty# 32db29cad8SSimon J. Gerraty# The semantics are simple, if MK_$OPT has no value 33db29cad8SSimon J. Gerraty# WITHOUT_$OPT results in MK_$OPT=no 34db29cad8SSimon J. Gerraty# otherwise WITH_$OPT results in MK_$OPT=yes. 35db29cad8SSimon J. Gerraty# Note WITHOUT_$OPT overrides WITH_$OPT. 36db29cad8SSimon J. Gerraty# 37db29cad8SSimon J. Gerraty# For backwards compatability reasons we treat WITH_$OPT=no 38db29cad8SSimon J. Gerraty# the same as WITHOUT_$OPT. 39db29cad8SSimon J. Gerraty# 40db29cad8SSimon J. Gerraty_mk_opt() { 41db29cad8SSimon J. Gerraty _d=$1 42128a4105SSimon J. Gerraty _mo=${_MKOPT_PREFIX}$2 _wo=WITHOUT_$2 _wi=WITH_$2 43db29cad8SSimon J. Gerraty eval "_mov=\$$_mo _wov=\$$_wo _wiv=\$$_wi" 44db29cad8SSimon J. Gerraty 45db29cad8SSimon J. Gerraty case "$_wiv" in 46b46b9039SSimon J. Gerraty [Nn][Oo]) _wov=no;; 47db29cad8SSimon J. Gerraty esac 48db29cad8SSimon J. Gerraty _v=${_mov:-${_wov:+no}} 49db29cad8SSimon J. Gerraty _v=${_v:-${_wiv:+yes}} 50db29cad8SSimon J. Gerraty _v=${_v:-$_d} 51db29cad8SSimon J. Gerraty _opt_list="$_opt_list $_mo" 52db29cad8SSimon J. Gerraty case "$_v" in 53db29cad8SSimon J. Gerraty yes|no) ;; # sane 54db29cad8SSimon J. Gerraty 0|[NnFf]*) _v=no;; # they mean no 55db29cad8SSimon J. Gerraty 1|[YyTt]*) _v=yes;; # they mean yes 56db29cad8SSimon J. Gerraty *) _v=$_d;; # ignore bogus value 57db29cad8SSimon J. Gerraty esac 58db29cad8SSimon J. Gerraty eval "$_mo=$_v" 59db29cad8SSimon J. Gerraty} 60db29cad8SSimon J. Gerraty 61db29cad8SSimon J. Gerraty# 62db29cad8SSimon J. Gerraty# _mk_opts default opt ... [default [opt] ...] 63db29cad8SSimon J. Gerraty# 64db29cad8SSimon J. Gerraty# see _mk_opts_defaults for example 65db29cad8SSimon J. Gerraty# 66db29cad8SSimon J. Gerraty_mk_opts() { 67db29cad8SSimon J. Gerraty _d=no 68db29cad8SSimon J. Gerraty for _o in "$@" 69db29cad8SSimon J. Gerraty do 70db29cad8SSimon J. Gerraty case "$_o" in 71128a4105SSimon J. Gerraty */*) # option is dirname default comes from basename 72128a4105SSimon J. Gerraty eval "_d=\$${_MKOPT_PREFIX}${_o#*/}" 73128a4105SSimon J. Gerraty _o=${_o%/*} 74128a4105SSimon J. Gerraty ;; 75db29cad8SSimon J. Gerraty yes|no) _d=$_o; continue;; 76db29cad8SSimon J. Gerraty esac 77db29cad8SSimon J. Gerraty _mk_opt $_d $_o 78db29cad8SSimon J. Gerraty done 79db29cad8SSimon J. Gerraty} 80db29cad8SSimon J. Gerraty 81128a4105SSimon J. Gerraty# handle either options.mk style OPTIONS_DEFAULT_* 82128a4105SSimon J. Gerraty# or FreeBSD's new bsd.mkopt.mk style __DEFAULT_*_OPTIONS 83db29cad8SSimon J. Gerraty_mk_opts_defaults() { 84128a4105SSimon J. Gerraty _mk_opts no $OPTIONS_DEFAULT_NO $__DEFAULT_NO_OPTIONS \ 85128a4105SSimon J. Gerraty yes $OPTIONS_DEFAULT_YES $__DEFAULT_YES_OPTIONS \ 86128a4105SSimon J. Gerraty $OPTIONS_DEFAULT_DEPENDENT $__DEFAULT_DEPENDENT_OPTIONS 87db29cad8SSimon J. Gerraty} 88db29cad8SSimon J. Gerraty 89954401e6SSimon J. Gerraty# _mk_cmdline_opts opt ... 90954401e6SSimon J. Gerraty# look at the command line (saved in _cmdline) 91954401e6SSimon J. Gerraty# to see any options we care about are being set with -DWITH* 92*0b46a53aSSimon J. Gerraty# or MK_*= and WITH[OUT]_*= if 'opt' is '*' then all options are of interest. 93954401e6SSimon J. Gerraty_cmdline="$0 $@" 94954401e6SSimon J. Gerraty_mk_cmdline_opts() { 95954401e6SSimon J. Gerraty for _x in $_cmdline 96954401e6SSimon J. Gerraty do 97954401e6SSimon J. Gerraty case "$_x" in 98*0b46a53aSSimon J. Gerraty -DWITH*|WITH*=*|${_MKOPT_PREFIX:-MK_}*=*) 99954401e6SSimon J. Gerraty for _o in "$@" 100954401e6SSimon J. Gerraty do 101954401e6SSimon J. Gerraty case "$_x" in 102954401e6SSimon J. Gerraty -DWITH_$_o|-DWITHOUT_$_o) eval ${_x#-D}=1;; 103954401e6SSimon J. Gerraty -DWITH_$_o=*|-DWITHOUT_$_o=*) eval ${_x#-D};; 104*0b46a53aSSimon J. Gerraty WITH_$_o=*|WITHOUT_$_o=*) eval "$_x";; 105954401e6SSimon J. Gerraty ${_MKOPT_PREFIX:-MK_}$_o=*) eval "$_x";; 106954401e6SSimon J. Gerraty esac 107954401e6SSimon J. Gerraty done 108954401e6SSimon J. Gerraty ;; 109954401e6SSimon J. Gerraty esac 110954401e6SSimon J. Gerraty done 111954401e6SSimon J. Gerraty} 112954401e6SSimon J. Gerraty 113954401e6SSimon J. Gerraty 114db29cad8SSimon J. Gerratycase "/$0" in 115db29cad8SSimon J. Gerraty*/mkopt*) 116db29cad8SSimon J. Gerraty _list=no 117954401e6SSimon J. Gerraty _mk_cmdline_opts '*' 118954401e6SSimon J. Gerraty _mk_opts no DEBUG 119954401e6SSimon J. Gerraty [ $MK_DEBUG = no ] || set -x 120db29cad8SSimon J. Gerraty while : 121db29cad8SSimon J. Gerraty do 122db29cad8SSimon J. Gerraty case "$1" in 123db29cad8SSimon J. Gerraty *=*) eval "$1"; shift;; 124db29cad8SSimon J. Gerraty --no|no) _list="$_list no"; shift;; 125db29cad8SSimon J. Gerraty --yes|yes) _list="$_list yes"; shift;; 126db29cad8SSimon J. Gerraty -DWITH*) eval "${1#-D}=1"; shift;; 127db29cad8SSimon J. Gerraty [A-Z]*) _list="$_list $1"; shift;; 128db29cad8SSimon J. Gerraty *) break;; 129db29cad8SSimon J. Gerraty esac 130db29cad8SSimon J. Gerraty done 131db29cad8SSimon J. Gerraty _mk_opts $_list 132db29cad8SSimon J. Gerraty ;; 133db29cad8SSimon J. Gerratyesac 134db29cad8SSimon J. Gerraty 135