aboutsummaryrefslogtreecommitdiff
path: root/build/meta/common.m4
blob: 54be5562781d161e021b3dcce6663fa7c9f3a3ab (plain)
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
# file      : build/meta/common.m4
# author    : Boris Kolpackov <boris@codesynthesis.com>
# copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC
# license   : GNU GPL v2; see accompanying LICENSE file

# Quote character literals.
#
m4_changequote([, ])
m4_define([m4_oquote],`)
m4_define([m4_cquote],')
m4_changequote(`, ')

# m4_strip(STRING)
# ----------------
# Expands into STRING with tabs and spaces singled out into a single
# space, and removing leading and trailing spaces.
#
m4_define(`m4_strip',
`m4_patsubst(m4_patsubst(` $1 ', `[	 ]+', ` '), `^ \(.*\) $', ```\1''')')


# m4_normalize(STRING)
# --------------------
# Apply m4_strip to STRING.
#
m4_define(`m4_normalize', `m4_strip(`$1')')

# m4_split(STRING, [REGEXP])
# --------------------------
# Split STRING into an m4 list of quoted elements.  The elements are
# quoted with ' and '.  Beginning spaces and end spaces *are kept*.
# Use m4_strip to remove them.
#
# REGEXP specifies where to split.  Default is [\t ]+.
#
# If STRING is empty, the result is an empty list.
#

m4_define(`m4_split',
`m4_ifelse(`$1', `', `',
       `$2', ` ', `m4_ifelse(m4_index(`$1', ` '), `-1', ```$1''',
			 `_$0(`$1', `$2', `, ')')',
       `$2', `', `_$0(`$1', `[	 ]+', `, ')',
       `_$0(`$1', `$2', `, ')')')

m4_define(`_m4_split', `m4_patsubst(`$1', `$2', `$3')')


# Simple foreach implementation. The list elements are expected to
# be fully expanded.
#
m4_define(`m4_foreach', `m4_ifelse(`$2', `', `',
  `m4_pushdef(`$1')_$0(`$1', `$3', `', $2)m4_popdef(`$1')')')
m4_define(`_m4_foreach', `m4_ifelse(`$#', `3', `',
  `m4_define(`$1', `$4')$2`'$0(`$1', `$2',
    m4_shift(m4_shift(m4_shift($@))))')')

# m4_foreach_w(VARIABLE, LIST, EXPRESSION)
# ----------------------------------------
# Like m4_foreach, but the list is whitespace separated.
#
m4_define(`m4_foreach_w',
`m4_foreach(`$1', m4_split(m4_normalize(`$2'), ` '), `$3')')

# Enable/disable quoting.
#
m4_define(`m4_equote', `m4_changequote(`,')')
m4_define(`m4_dquote', `m4_changequote(`')')

#
#
m4_define(`__env_impl__', `m4_esyscmd(`echo -n $'`$1')')
m4_define(`__env__', `m4_equote()__env_impl__(`$1')`'m4_dquote()')

m4_define(`__value_impl__', `__env_impl__(`$1')')
m4_define(`__value__', `m4_equote()__value_impl__(`$1')`'m4_dquote()')