1: 2# $Id: mkopt.sh,v 1.8 2014/11/15 07:07:18 sjg Exp $ 3# 4# @(#) Copyright (c) 2014, Simon J. Gerraty 5# 6# This file is provided in the hope that it will 7# be of use. There is absolutely NO WARRANTY. 8# Permission to copy, redistribute or otherwise 9# use this file is hereby granted provided that 10# the above copyright notice and this notice are 11# left intact. 12# 13# Please send copies of changes and bug-fixes to: 14# sjg@crufty.net 15# 16 17# handle WITH[OUT]_* options in a manner compatible with 18# options.mk and bsd.mkopt.mk in recent FreeBSD 19 20# no need to be included more than once 21_MKOPT_SH=: 22 23# 24# _mk_opt OPT default 25# 26# Set MK_$OPT 27# 28# The semantics are simple, if MK_$OPT has no value 29# WITHOUT_$OPT results in MK_$OPT=no 30# otherwise WITH_$OPT results in MK_$OPT=yes. 31# Note WITHOUT_$OPT overrides WITH_$OPT. 32# 33# For backwards compatability reasons we treat WITH_$OPT=no 34# the same as WITHOUT_$OPT. 35# 36_mk_opt() { 37 _d=$1 38 _mo=MK_$2 _wo=WITHOUT_$2 _wi=WITH_$2 39 eval "_mov=\$$_mo _wov=\$$_wo _wiv=\$$_wi" 40 41 case "$_wiv" in 42 no) _wov=no;; 43 esac 44 _v=${_mov:-${_wov:+no}} 45 _v=${_v:-${_wiv:+yes}} 46 _v=${_v:-$_d} 47 _opt_list="$_opt_list $_mo" 48 case "$_v" in 49 yes|no) ;; # sane 50 0|[NnFf]*) _v=no;; # they mean no 51 1|[YyTt]*) _v=yes;; # they mean yes 52 *) _v=$_d;; # ignore bogus value 53 esac 54 eval "$_mo=$_v" 55} 56 57# 58# _mk_opts default opt ... [default [opt] ...] 59# 60# see _mk_opts_defaults for example 61# 62_mk_opts() { 63 _d=no 64 for _o in "$@" 65 do 66 case "$_o" in 67 yes|no) _d=$_o; continue;; 68 esac 69 _mk_opt $_d $_o 70 done 71} 72 73_mk_opts_defaults() { 74 _mk_opts no $__DEFAULT_NO_OPTIONS yes $__DEFAULT_YES_OPTIONS 75} 76 77case "/$0" in 78*/mkopt*) 79 _list=no 80 while : 81 do 82 case "$1" in 83 *=*) eval "$1"; shift;; 84 --no|no) _list="$_list no"; shift;; 85 --yes|yes) _list="$_list yes"; shift;; 86 -DWITH*) eval "${1#-D}=1"; shift;; 87 [A-Z]*) _list="$_list $1"; shift;; 88 *) break;; 89 esac 90 done 91 _mk_opts $_list 92 ;; 93esac 94 95