1# lib-link.m4 serial 4 (gettext-0.12) 2dnl Copyright (C) 2001-2003 Free Software Foundation, Inc. 3dnl This file is free software, distributed under the terms of the GNU 4dnl General Public License. As a special exception to the GNU General 5dnl Public License, this file may be distributed as part of a program 6dnl that contains a configuration script generated by Autoconf, under 7dnl the same distribution terms as the rest of that program. 8 9dnl From Bruno Haible. 10 11dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and 12dnl the libraries corresponding to explicit and implicit dependencies. 13dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and 14dnl augments the CPPFLAGS variable. 15AC_DEFUN([AC_LIB_LINKFLAGS], 16[ 17 AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) 18 AC_REQUIRE([AC_LIB_RPATH]) 19 define([Name],[translit([$1],[./-], [___])]) 20 define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], 21 [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) 22 AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ 23 AC_LIB_LINKFLAGS_BODY([$1], [$2]) 24 ac_cv_lib[]Name[]_libs="$LIB[]NAME" 25 ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" 26 ac_cv_lib[]Name[]_cppflags="$INC[]NAME" 27 ]) 28 LIB[]NAME="$ac_cv_lib[]Name[]_libs" 29 LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" 30 INC[]NAME="$ac_cv_lib[]Name[]_cppflags" 31 AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) 32 AC_SUBST([LIB]NAME) 33 AC_SUBST([LTLIB]NAME) 34 dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the 35 dnl results of this search when this library appears as a dependency. 36 HAVE_LIB[]NAME=yes 37 undefine([Name]) 38 undefine([NAME]) 39]) 40 41dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) 42dnl searches for libname and the libraries corresponding to explicit and 43dnl implicit dependencies, together with the specified include files and 44dnl the ability to compile and link the specified testcode. If found, it 45dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and 46dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and 47dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs 48dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. 49AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], 50[ 51 AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) 52 AC_REQUIRE([AC_LIB_RPATH]) 53 define([Name],[translit([$1],[./-], [___])]) 54 define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], 55 [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) 56 57 dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME 58 dnl accordingly. 59 AC_LIB_LINKFLAGS_BODY([$1], [$2]) 60 61 dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, 62 dnl because if the user has installed lib[]Name and not disabled its use 63 dnl via --without-lib[]Name-prefix, he wants to use it. 64 ac_save_CPPFLAGS="$CPPFLAGS" 65 AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) 66 67 AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ 68 ac_save_LIBS="$LIBS" 69 LIBS="$LIBS $LIB[]NAME" 70 AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) 71 LIBS="$ac_save_LIBS" 72 ]) 73 if test "$ac_cv_lib[]Name" = yes; then 74 HAVE_LIB[]NAME=yes 75 AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) 76 AC_MSG_CHECKING([how to link with lib[]$1]) 77 AC_MSG_RESULT([$LIB[]NAME]) 78 else 79 HAVE_LIB[]NAME=no 80 dnl If $LIB[]NAME didn't lead to a usable library, we don't need 81 dnl $INC[]NAME either. 82 CPPFLAGS="$ac_save_CPPFLAGS" 83 LIB[]NAME= 84 LTLIB[]NAME= 85 fi 86 AC_SUBST([HAVE_LIB]NAME) 87 AC_SUBST([LIB]NAME) 88 AC_SUBST([LTLIB]NAME) 89 undefine([Name]) 90 undefine([NAME]) 91]) 92 93dnl Determine the platform dependent parameters needed to use rpath: 94dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator, 95dnl hardcode_direct, hardcode_minus_L. 96AC_DEFUN([AC_LIB_RPATH], 97[ 98 AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS 99 AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld 100 AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host 101 AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir 102 AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ 103 CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ 104 ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh 105 . ./conftest.sh 106 rm -f ./conftest.sh 107 acl_cv_rpath=done 108 ]) 109 wl="$acl_cv_wl" 110 libext="$acl_cv_libext" 111 shlibext="$acl_cv_shlibext" 112 hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" 113 hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" 114 hardcode_direct="$acl_cv_hardcode_direct" 115 hardcode_minus_L="$acl_cv_hardcode_minus_L" 116 dnl Determine whether the user wants rpath handling at all. 117 AC_ARG_ENABLE(rpath, 118 [ --disable-rpath do not hardcode runtime library paths], 119 :, enable_rpath=yes) 120]) 121 122dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and 123dnl the libraries corresponding to explicit and implicit dependencies. 124dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. 125AC_DEFUN([AC_LIB_LINKFLAGS_BODY], 126[ 127 define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], 128 [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) 129 dnl By default, look in $includedir and $libdir. 130 use_additional=yes 131 AC_LIB_WITH_FINAL_PREFIX([ 132 eval additional_includedir=\"$includedir\" 133 eval additional_libdir=\"$libdir\" 134 ]) 135 AC_LIB_ARG_WITH([lib$1-prefix], 136[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib 137 --without-lib$1-prefix don't search for lib$1 in includedir and libdir], 138[ 139 if test "X$withval" = "Xno"; then 140 use_additional=no 141 else 142 if test "X$withval" = "X"; then 143 AC_LIB_WITH_FINAL_PREFIX([ 144 eval additional_includedir=\"$includedir\" 145 eval additional_libdir=\"$libdir\" 146 ]) 147 else 148 additional_includedir="$withval/include" 149 additional_libdir="$withval/lib" 150 fi 151 fi 152]) 153 dnl Search the library and its dependencies in $additional_libdir and 154 dnl $LDFLAGS. Using breadth-first-seach. 155 LIB[]NAME= 156 LTLIB[]NAME= 157 INC[]NAME= 158 rpathdirs= 159 ltrpathdirs= 160 names_already_handled= 161 names_next_round='$1 $2' 162 while test -n "$names_next_round"; do 163 names_this_round="$names_next_round" 164 names_next_round= 165 for name in $names_this_round; do 166 already_handled= 167 for n in $names_already_handled; do 168 if test "$n" = "$name"; then 169 already_handled=yes 170 break 171 fi 172 done 173 if test -z "$already_handled"; then 174 names_already_handled="$names_already_handled $name" 175 dnl See if it was already located by an earlier AC_LIB_LINKFLAGS 176 dnl or AC_LIB_HAVE_LINKFLAGS call. 177 uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` 178 eval value=\"\$HAVE_LIB$uppername\" 179 if test -n "$value"; then 180 if test "$value" = yes; then 181 eval value=\"\$LIB$uppername\" 182 test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" 183 eval value=\"\$LTLIB$uppername\" 184 test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" 185 else 186 dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined 187 dnl that this library doesn't exist. So just drop it. 188 : 189 fi 190 else 191 dnl Search the library lib$name in $additional_libdir and $LDFLAGS 192 dnl and the already constructed $LIBNAME/$LTLIBNAME. 193 found_dir= 194 found_la= 195 found_so= 196 found_a= 197 if test $use_additional = yes; then 198 if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then 199 found_dir="$additional_libdir" 200 found_so="$additional_libdir/lib$name.$shlibext" 201 if test -f "$additional_libdir/lib$name.la"; then 202 found_la="$additional_libdir/lib$name.la" 203 fi 204 else 205 if test -f "$additional_libdir/lib$name.$libext"; then 206 found_dir="$additional_libdir" 207 found_a="$additional_libdir/lib$name.$libext" 208 if test -f "$additional_libdir/lib$name.la"; then 209 found_la="$additional_libdir/lib$name.la" 210 fi 211 fi 212 fi 213 fi 214 if test "X$found_dir" = "X"; then 215 for x in $LDFLAGS $LTLIB[]NAME; do 216 AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) 217 case "$x" in 218 -L*) 219 dir=`echo "X$x" | sed -e 's/^X-L//'` 220 if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then 221 found_dir="$dir" 222 found_so="$dir/lib$name.$shlibext" 223 if test -f "$dir/lib$name.la"; then 224 found_la="$dir/lib$name.la" 225 fi 226 else 227 if test -f "$dir/lib$name.$libext"; then 228 found_dir="$dir" 229 found_a="$dir/lib$name.$libext" 230 if test -f "$dir/lib$name.la"; then 231 found_la="$dir/lib$name.la" 232 fi 233 fi 234 fi 235 ;; 236 esac 237 if test "X$found_dir" != "X"; then 238 break 239 fi 240 done 241 fi 242 if test "X$found_dir" != "X"; then 243 dnl Found the library. 244 LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" 245 if test "X$found_so" != "X"; then 246 dnl Linking with a shared library. We attempt to hardcode its 247 dnl directory into the executable's runpath, unless it's the 248 dnl standard /usr/lib. 249 if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then 250 dnl No hardcoding is needed. 251 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" 252 else 253 dnl Use an explicit option to hardcode DIR into the resulting 254 dnl binary. 255 dnl Potentially add DIR to ltrpathdirs. 256 dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. 257 haveit= 258 for x in $ltrpathdirs; do 259 if test "X$x" = "X$found_dir"; then 260 haveit=yes 261 break 262 fi 263 done 264 if test -z "$haveit"; then 265 ltrpathdirs="$ltrpathdirs $found_dir" 266 fi 267 dnl The hardcoding into $LIBNAME is system dependent. 268 if test "$hardcode_direct" = yes; then 269 dnl Using DIR/libNAME.so during linking hardcodes DIR into the 270 dnl resulting binary. 271 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" 272 else 273 if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then 274 dnl Use an explicit option to hardcode DIR into the resulting 275 dnl binary. 276 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" 277 dnl Potentially add DIR to rpathdirs. 278 dnl The rpathdirs will be appended to $LIBNAME at the end. 279 haveit= 280 for x in $rpathdirs; do 281 if test "X$x" = "X$found_dir"; then 282 haveit=yes 283 break 284 fi 285 done 286 if test -z "$haveit"; then 287 rpathdirs="$rpathdirs $found_dir" 288 fi 289 else 290 dnl Rely on "-L$found_dir". 291 dnl But don't add it if it's already contained in the LDFLAGS 292 dnl or the already constructed $LIBNAME 293 haveit= 294 for x in $LDFLAGS $LIB[]NAME; do 295 AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) 296 if test "X$x" = "X-L$found_dir"; then 297 haveit=yes 298 break 299 fi 300 done 301 if test -z "$haveit"; then 302 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" 303 fi 304 if test "$hardcode_minus_L" != no; then 305 dnl FIXME: Not sure whether we should use 306 dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" 307 dnl here. 308 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" 309 else 310 dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH 311 dnl here, because this doesn't fit in flags passed to the 312 dnl compiler. So give up. No hardcoding. This affects only 313 dnl very old systems. 314 dnl FIXME: Not sure whether we should use 315 dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" 316 dnl here. 317 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" 318 fi 319 fi 320 fi 321 fi 322 else 323 if test "X$found_a" != "X"; then 324 dnl Linking with a static library. 325 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" 326 else 327 dnl We shouldn't come here, but anyway it's good to have a 328 dnl fallback. 329 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" 330 fi 331 fi 332 dnl Assume the include files are nearby. 333 additional_includedir= 334 case "$found_dir" in 335 */lib | */lib/) 336 basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` 337 additional_includedir="$basedir/include" 338 ;; 339 esac 340 if test "X$additional_includedir" != "X"; then 341 dnl Potentially add $additional_includedir to $INCNAME. 342 dnl But don't add it 343 dnl 1. if it's the standard /usr/include, 344 dnl 2. if it's /usr/local/include and we are using GCC on Linux, 345 dnl 3. if it's already present in $CPPFLAGS or the already 346 dnl constructed $INCNAME, 347 dnl 4. if it doesn't exist as a directory. 348 if test "X$additional_includedir" != "X/usr/include"; then 349 haveit= 350 if test "X$additional_includedir" = "X/usr/local/include"; then 351 if test -n "$GCC"; then 352 case $host_os in 353 linux*) haveit=yes;; 354 esac 355 fi 356 fi 357 if test -z "$haveit"; then 358 for x in $CPPFLAGS $INC[]NAME; do 359 AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) 360 if test "X$x" = "X-I$additional_includedir"; then 361 haveit=yes 362 break 363 fi 364 done 365 if test -z "$haveit"; then 366 if test -d "$additional_includedir"; then 367 dnl Really add $additional_includedir to $INCNAME. 368 INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" 369 fi 370 fi 371 fi 372 fi 373 fi 374 dnl Look for dependencies. 375 if test -n "$found_la"; then 376 dnl Read the .la file. It defines the variables 377 dnl dlname, library_names, old_library, dependency_libs, current, 378 dnl age, revision, installed, dlopen, dlpreopen, libdir. 379 save_libdir="$libdir" 380 case "$found_la" in 381 */* | *\\*) . "$found_la" ;; 382 *) . "./$found_la" ;; 383 esac 384 libdir="$save_libdir" 385 dnl We use only dependency_libs. 386 for dep in $dependency_libs; do 387 case "$dep" in 388 -L*) 389 additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` 390 dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. 391 dnl But don't add it 392 dnl 1. if it's the standard /usr/lib, 393 dnl 2. if it's /usr/local/lib and we are using GCC on Linux, 394 dnl 3. if it's already present in $LDFLAGS or the already 395 dnl constructed $LIBNAME, 396 dnl 4. if it doesn't exist as a directory. 397 if test "X$additional_libdir" != "X/usr/lib"; then 398 haveit= 399 if test "X$additional_libdir" = "X/usr/local/lib"; then 400 if test -n "$GCC"; then 401 case $host_os in 402 linux*) haveit=yes;; 403 esac 404 fi 405 fi 406 if test -z "$haveit"; then 407 haveit= 408 for x in $LDFLAGS $LIB[]NAME; do 409 AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) 410 if test "X$x" = "X-L$additional_libdir"; then 411 haveit=yes 412 break 413 fi 414 done 415 if test -z "$haveit"; then 416 if test -d "$additional_libdir"; then 417 dnl Really add $additional_libdir to $LIBNAME. 418 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" 419 fi 420 fi 421 haveit= 422 for x in $LDFLAGS $LTLIB[]NAME; do 423 AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) 424 if test "X$x" = "X-L$additional_libdir"; then 425 haveit=yes 426 break 427 fi 428 done 429 if test -z "$haveit"; then 430 if test -d "$additional_libdir"; then 431 dnl Really add $additional_libdir to $LTLIBNAME. 432 LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" 433 fi 434 fi 435 fi 436 fi 437 ;; 438 -R*) 439 dir=`echo "X$dep" | sed -e 's/^X-R//'` 440 if test "$enable_rpath" != no; then 441 dnl Potentially add DIR to rpathdirs. 442 dnl The rpathdirs will be appended to $LIBNAME at the end. 443 haveit= 444 for x in $rpathdirs; do 445 if test "X$x" = "X$dir"; then 446 haveit=yes 447 break 448 fi 449 done 450 if test -z "$haveit"; then 451 rpathdirs="$rpathdirs $dir" 452 fi 453 dnl Potentially add DIR to ltrpathdirs. 454 dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. 455 haveit= 456 for x in $ltrpathdirs; do 457 if test "X$x" = "X$dir"; then 458 haveit=yes 459 break 460 fi 461 done 462 if test -z "$haveit"; then 463 ltrpathdirs="$ltrpathdirs $dir" 464 fi 465 fi 466 ;; 467 -l*) 468 dnl Handle this in the next round. 469 names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` 470 ;; 471 *.la) 472 dnl Handle this in the next round. Throw away the .la's 473 dnl directory; it is already contained in a preceding -L 474 dnl option. 475 names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` 476 ;; 477 *) 478 dnl Most likely an immediate library name. 479 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" 480 LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" 481 ;; 482 esac 483 done 484 fi 485 else 486 dnl Didn't find the library; assume it is in the system directories 487 dnl known to the linker and runtime loader. (All the system 488 dnl directories known to the linker should also be known to the 489 dnl runtime loader, otherwise the system is severely misconfigured.) 490 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" 491 LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" 492 fi 493 fi 494 fi 495 done 496 done 497 if test "X$rpathdirs" != "X"; then 498 if test -n "$hardcode_libdir_separator"; then 499 dnl Weird platform: only the last -rpath option counts, the user must 500 dnl pass all path elements in one option. We can arrange that for a 501 dnl single library, but not when more than one $LIBNAMEs are used. 502 alldirs= 503 for found_dir in $rpathdirs; do 504 alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" 505 done 506 dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl. 507 acl_save_libdir="$libdir" 508 libdir="$alldirs" 509 eval flag=\"$hardcode_libdir_flag_spec\" 510 libdir="$acl_save_libdir" 511 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" 512 else 513 dnl The -rpath options are cumulative. 514 for found_dir in $rpathdirs; do 515 acl_save_libdir="$libdir" 516 libdir="$found_dir" 517 eval flag=\"$hardcode_libdir_flag_spec\" 518 libdir="$acl_save_libdir" 519 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" 520 done 521 fi 522 fi 523 if test "X$ltrpathdirs" != "X"; then 524 dnl When using libtool, the option that works for both libraries and 525 dnl executables is -R. The -R options are cumulative. 526 for found_dir in $ltrpathdirs; do 527 LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" 528 done 529 fi 530]) 531 532dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, 533dnl unless already present in VAR. 534dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes 535dnl contains two or three consecutive elements that belong together. 536AC_DEFUN([AC_LIB_APPENDTOVAR], 537[ 538 for element in [$2]; do 539 haveit= 540 for x in $[$1]; do 541 AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) 542 if test "X$x" = "X$element"; then 543 haveit=yes 544 break 545 fi 546 done 547 if test -z "$haveit"; then 548 [$1]="${[$1]}${[$1]:+ }$element" 549 fi 550 done 551]) 552