diff options
Diffstat (limited to 'build/meta/common.m4')
-rw-r--r-- | build/meta/common.m4 | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/build/meta/common.m4 b/build/meta/common.m4 new file mode 100644 index 0000000..54be556 --- /dev/null +++ b/build/meta/common.m4 @@ -0,0 +1,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()') |