1ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- 2ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# 3ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. 4ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# Written by Gary V. Vaughan, 2004 5ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# 6ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# This file is free software; the Free Software Foundation gives 7ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# unlimited permission to copy and/or distribute it, with or without 8ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# modifications, as long as this notice is preserved. 9ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 10ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# serial 6 ltsugar.m4 11ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 12ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# This is to help aclocal find these macros, as it can't see m4_define. 13ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris CraikAC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) 14ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 15ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 16ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# lt_join(SEP, ARG1, [ARG2...]) 17ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# ----------------------------- 18ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their 19ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# associated separator. 20ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier 21ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# versions in m4sugar had bugs. 22ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikm4_define([lt_join], 23ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik[m4_if([$#], [1], [], 24ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik [$#], [2], [[$2]], 25ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) 26ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikm4_define([_lt_join], 27ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik[m4_if([$#$2], [2], [], 28ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) 29ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 30ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 31ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# lt_car(LIST) 32ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# lt_cdr(LIST) 33ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# ------------ 34ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# Manipulate m4 lists. 35ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# These macros are necessary as long as will still need to support 36ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# Autoconf-2.59 which quotes differently. 37ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikm4_define([lt_car], [[$1]]) 38ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikm4_define([lt_cdr], 39ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], 40ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik [$#], 1, [], 41ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik [m4_dquote(m4_shift($@))])]) 42ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikm4_define([lt_unquote], $1) 43ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 44ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 45ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# lt_append(MACRO-NAME, STRING, [SEPARATOR]) 46ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# ------------------------------------------ 47ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. 48ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# Note that neither SEPARATOR nor STRING are expanded; they are appended 49ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). 50ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# No SEPARATOR is output if MACRO-NAME was previously undefined (different 51ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# than defined and empty). 52ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# 53ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# This macro is needed until we can rely on Autoconf 2.62, since earlier 54ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. 55ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikm4_define([lt_append], 56ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik[m4_define([$1], 57ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) 58ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 59ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 60ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 61ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) 62ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# ---------------------------------------------------------- 63ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# Produce a SEP delimited list of all paired combinations of elements of 64ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list 65ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# has the form PREFIXmINFIXSUFFIXn. 66ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# Needed until we can rely on m4_combine added in Autoconf 2.62. 67ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikm4_define([lt_combine], 68ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik[m4_if(m4_eval([$# > 3]), [1], 69ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl 70ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik[[m4_foreach([_Lt_prefix], [$2], 71ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik [m4_foreach([_Lt_suffix], 72ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, 73ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) 74ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 75ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 76ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) 77ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# ----------------------------------------------------------------------- 78ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited 79ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. 80ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikm4_define([lt_if_append_uniq], 81ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik[m4_ifdef([$1], 82ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], 83ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik [lt_append([$1], [$2], [$3])$4], 84ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik [$5])], 85ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik [lt_append([$1], [$2], [$3])$4])]) 86ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 87ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 88ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# lt_dict_add(DICT, KEY, VALUE) 89ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# ----------------------------- 90ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikm4_define([lt_dict_add], 91ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik[m4_define([$1($2)], [$3])]) 92ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 93ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 94ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) 95ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# -------------------------------------------- 96ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikm4_define([lt_dict_add_subkey], 97ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik[m4_define([$1($2:$3)], [$4])]) 98ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 99ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 100ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# lt_dict_fetch(DICT, KEY, [SUBKEY]) 101ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# ---------------------------------- 102ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikm4_define([lt_dict_fetch], 103ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik[m4_ifval([$3], 104ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), 105ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) 106ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 107ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 108ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) 109ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# ----------------------------------------------------------------- 110ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikm4_define([lt_if_dict_fetch], 111ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], 112ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik [$5], 113ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik [$6])]) 114ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 115ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 116ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) 117ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# -------------------------------------------------------------- 118ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikm4_define([lt_dict_filter], 119ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik[m4_if([$5], [], [], 120ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik [lt_join(m4_quote(m4_default([$4], [[, ]])), 121ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), 122ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl 123ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik]) 124