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