-
Notifications
You must be signed in to change notification settings - Fork 7
/
oac_var_scope.m4
105 lines (97 loc) · 4.26 KB
/
oac_var_scope.m4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
dnl -*- autoconf -*-
dnl
dnl Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
dnl University Research and Technology
dnl Corporation. All rights reserved.
dnl Copyright (c) 2004-2018 The University of Tennessee and The University
dnl of Tennessee Research Foundation. All rights
dnl reserved.
dnl Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
dnl University of Stuttgart. All rights reserved.
dnl Copyright (c) 2004-2005 The Regents of the University of California.
dnl All rights reserved.
dnl Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved.
dnl Copyright (c) 2009 Oak Ridge National Labs. All rights reserved.
dnl Copyright (c) 2009-2020 Cisco Systems, Inc. All rights reserved.
dnl Copyright (c) 2014 Intel, Inc. All rights reserved.
dnl Copyright (c) 2015-2017 Research Organization for Information Science
dnl and Technology (RIST). All rights reserved.
dnl Copyright (c) 2021-2022 Amazon.com, Inc. or its affiliates. All Rights reserved.
dnl
dnl $COPYRIGHT$
dnl
dnl Additional copyrights may follow
dnl
dnl $HEADER$
dnl OAC_VAR_SCOPE_INIT
dnl
dnl Initialization macro (that is AC_REQUIREd by OAC_VAR_SCOPE_PUSH /
dnl OAC_VAR_SCOPE_POP) for the var scope subsystem. Defines the two
dnl shell functions that implement the configure-time part of the var
dnl scope evaluation system.
AC_DEFUN([OAC_VAR_SCOPE_INIT],
[oac_var_scope_push()
{
oac_var_scope_push_lineno=$[]1
shift
# First, check to see if any of these variables are already set.
# This is a simple sanity check to ensure we're not already
# overwriting pre-existing variables (that have a non-empty
# value). It's not a perfect check, but at least it's something.
for oac_var_scope_tmp_var in $[]@; do
AS_VAR_SET_IF([$oac_var_scope_tmp_var],
[AS_VAR_COPY([oac_var_scope_tmp_var_val], [$oac_var_scope_tmp_var])
m4_pattern_allow([OAC_])
AC_MSG_ERROR([Found configure shell variable clash at line $oac_var_scope_push_lineno!
[OAC_VAR_SCOPE_PUSH] called on "$oac_var_scope_tmp_var",
but it is already defined with value "$oac_var_scope_tmp_var_val"
This usually indicates an error in configure.
Cannot continue.])
m4_pattern_forbid([OAC_])])
done
AS_UNSET([oac_var_scope_push_lineno])
AS_UNSET([oac_var_scope_tmp_var])
AS_UNSET([oac_var_scope_tmp_var_val])
}
oac_var_scope_pop()
{
# Iterate over all the variables and unset them all
for oac_var_scope_tmp_var in $[]@; do
AS_UNSET([$oac_var_scope_tmp_var])
done
AS_UNSET([oac_var_scope_tmp_var])
}])
dnl OAC_VAR_SCOPE_PUSH: Create a new variable scope
dnl
dnl 1 -> space separated list of variable names to push into the new scope
dnl
dnl Scope-check that the vars in the space-separated vars list are not already
dnl in use. Generate a configure-time error if a conflict is found. Note that
dnl the in use check is defined as "defined", so even if a var in vars list is
dnl set outside of OAC_VAR_SCOPE_PUSH, the check will still trip.
AC_DEFUN([OAC_VAR_SCOPE_PUSH],[
AC_REQUIRE([OAC_VAR_SCOPE_INIT])dnl
m4_pushdef([oac_var_scope_stack], [$1])dnl
m4_foreach_w([oac_var_scope_var], [$1],
[m4_set_add([oac_var_scope_active_set], oac_var_scope_var,
[], [m4_fatal([$0 found the variable ]oac_var_scope_var[
active in a previous scope.])])])dnl
oac_var_scope_push ${LINENO} $1
])dnl
dnl OAC_VAR_SCOPE_POP: pop off the current variable scope
dnl
dnl Unset the last set of variables set in OAC_VAR_SCOPE_POP. Every call to
dnl OAC_VAR_SCOPE_PUSH should have a matched call to this macro.
AC_DEFUN([OAC_VAR_SCOPE_POP],[
AC_REQUIRE([OAC_VAR_SCOPE_INIT])dnl
m4_ifdef([oac_var_scope_stack], [],
[m4_pattern_allow([OAC_])
m4_fatal([$0 was called without a defined
variable stack. This usually means that $0 was called more
times than OAC_VAR_SCOPE_PUSH.])
m4_pattern_forbid([OAC_])])dnl
m4_foreach_w([oac_var_scope_var], oac_var_scope_stack,
[m4_set_remove([oac_var_scope_active_set], oac_var_scope_var)])dnl
oac_var_scope_pop oac_var_scope_stack
m4_popdef([oac_var_scope_stack])dnl
])dnl