Offset 0, 0 lines modifiedOffset 1, 11437 lines modified
 1 #!·/usr/bin/env·sh
 2 ##·DO·NOT·EDIT·-·This·file·generated·from·./build-aux/ltmain.in
 3 ##···············by·inline-source·v2019-02-19.15
  
 4 #·libtool·(GNU·libtool)·2.4.7.4-1ec8f-dirty
 5 #·Provide·generalized·library-building·support·services.
 6 #·Written·by·Gordon·Matzigkeit·<gord@gnu.ai.mit.edu>,·1996
  
 7 #·Copyright·(C)·1996-2019,·2021-2022·Free·Software·Foundation,·Inc.
 8 #·This·is·free·software;·see·the·source·for·copying·conditions.··There·is·NO
 9 #·warranty;·not·even·for·MERCHANTABILITY·or·FITNESS·FOR·A·PARTICULAR·PURPOSE.
  
 10 #·GNU·Libtool·is·free·software;·you·can·redistribute·it·and/or·modify
 11 #·it·under·the·terms·of·the·GNU·General·Public·License·as·published·by
 12 #·the·Free·Software·Foundation;·either·version·2·of·the·License,·or
 13 #·(at·your·option)·any·later·version.
 14 #
 15 #·As·a·special·exception·to·the·GNU·General·Public·License,
 16 #·if·you·distribute·this·file·as·part·of·a·program·or·library·that
 17 #·is·built·using·GNU·Libtool,·you·may·include·this·file·under·the
 18 #·same·distribution·terms·that·you·use·for·the·rest·of·that·program.
 19 #
 20 #·GNU·Libtool·is·distributed·in·the·hope·that·it·will·be·useful,·but
 21 #·WITHOUT·ANY·WARRANTY;·without·even·the·implied·warranty·of
 22 #·MERCHANTABILITY·or·FITNESS·FOR·A·PARTICULAR·PURPOSE.··See·the·GNU
 23 #·General·Public·License·for·more·details.
 24 #
 25 #·You·should·have·received·a·copy·of·the·GNU·General·Public·License
 26 #·along·with·this·program.··If·not,·see·<http://www.gnu.org/licenses/>.
  
  
 27 PROGRAM=libtool
 28 PACKAGE=libtool
 29 VERSION=2.4.7.4-1ec8f-dirty
 30 package_revision=2.4.7.4
  
  
 31 ##·------·##
 32 ##·Usage.·##
 33 ##·------·##
  
 34 #·Run·'./libtool·--help'·for·help·with·using·this·script·from·the
 35 #·command·line.
  
  
 36 ##·-------------------------------·##
 37 ##·User·overridable·command·paths.·##
 38 ##·-------------------------------·##
  
 39 #·After·configure·completes,·it·has·a·better·idea·of·some·of·the
 40 #·shell·tools·we·need·than·the·defaults·used·by·the·functions·shared
 41 #·with·bootstrap,·so·set·those·here·where·they·can·still·be·over-
 42 #·ridden·by·the·user,·but·otherwise·take·precedence.
  
 43 :·${AUTOCONF="autoconf"}
 44 :·${AUTOMAKE="automake"}
  
  
 45 ##·--------------------------·##
 46 ##·Source·external·libraries.·##
 47 ##·--------------------------·##
  
 48 #·Much·of·our·low-level·functionality·needs·to·be·sourced·from·external
 49 #·libraries,·which·are·installed·to·$pkgauxdir.
  
 50 #·Set·a·version·string·for·this·script.
 51 scriptversion=2019-02-19.15;·#·UTC
  
 52 #·General·shell·script·boiler·plate,·and·helper·functions.
 53 #·Written·by·Gary·V.·Vaughan,·2004
  
 54 #·This·is·free·software.··There·is·NO·warranty;·not·even·for
 55 #·MERCHANTABILITY·or·FITNESS·FOR·A·PARTICULAR·PURPOSE.
 56 #
 57 #·Copyright·(C)·2004-2019,·2021·Bootstrap·Authors
 58 #
 59 #·This·file·is·dual·licensed·under·the·terms·of·the·MIT·license
 60 #·<https://opensource.org/license/MIT>,·and·GPL·version·2·or·later
 61 #·<http://www.gnu.org/licenses/gpl-2.0.html>.··You·must·apply·one·of
 62 #·these·licenses·when·using·or·redistributing·this·software·or·any·of
 63 #·the·files·within·it.··See·the·URLs·above,·or·the·file·`LICENSE`
 64 #·included·in·the·Bootstrap·distribution·for·the·full·license·texts.
  
 65 #·Please·report·bugs·or·propose·patches·to:
 66 #·<https://github.com/gnulib-modules/bootstrap/issues>
  
  
 67 ##·------·##
 68 ##·Usage.·##
 69 ##·------·##
  
 70 #·Evaluate·this·file·near·the·top·of·your·script·to·gain·access·to
 71 #·the·functions·and·variables·defined·here:
 72 #
 73 #···.·`echo·"$0"·|·${SED-sed}·'s|[^/]*$||'`/build-aux/funclib.sh
 74 #
 75 #·If·you·need·to·override·any·of·the·default·environment·variable
 76 #·settings,·do·that·before·evaluating·this·file.
  
  
 77 ##·--------------------·##
 78 ##·Shell·normalisation.·##
 79 ##·--------------------·##
  
 80 #·Some·shells·need·a·little·help·to·be·as·Bourne·compatible·as·possible.
 81 #·Before·doing·anything·else,·make·sure·all·that·help·has·been·provided!
  
 82 DUALCASE=1;·export·DUALCASE·#·for·MKS·sh
 83 if·test·-n·"${ZSH_VERSION+set}"·&&·(emulate·sh)·>/dev/null·2>&1;·then·:
 84 ··emulate·sh
 85 ··NULLCMD=:
 86 ··#·Pre-4.2·versions·of·Zsh·do·word·splitting·on·${1+"$@"},·which
 87 ··#·is·contrary·to·our·usage.··Disable·this·feature.
 88 ··alias·-g·'${1+"$@"}'='"$@"'
 89 ··setopt·NO_GLOB_SUBST
 90 else
 91 ··case·`(set·-o)·2>/dev/null`·in·*posix*)·set·-o·posix·;;·esac
 92 fi
  
 93 #·NLS·nuisances:·We·save·the·old·values·in·case·they·are·required·later.
 94 _G_user_locale=
 95 _G_safe_locale=
 96 for·_G_var·in·LANG·LANGUAGE·LC_ALL·LC_CTYPE·LC_COLLATE·LC_MESSAGES
 97 do
 98 ··eval·"if·test·set·=·\"\${$_G_var+set}\";·then
 99 ··········save_$_G_var=\$$_G_var
 100 ··········$_G_var=C
 101 »       ··export·$_G_var
 102 »       ··_G_user_locale=\"$_G_var=\\\$save_\$_G_var;·\$_G_user_locale\"
 103 »       ··_G_safe_locale=\"$_G_var=C;·\$_G_safe_locale\"
 104 »       fi"
 105 done
 106 #·These·NLS·vars·are·set·unconditionally·(bootstrap·issue·#24).··Unset·those
 107 #·in·case·the·environment·reset·is·needed·later·and·the·$save_*·variant·is·not
 108 #·defined·(see·the·code·above).
 109 LC_ALL=C
 110 LANGUAGE=C
 111 export·LANGUAGE·LC_ALL
  
 112 #·Make·sure·IFS·has·a·sensible·default
 113 sp='·'
 114 nl='
 115 '
 116 IFS="$sp»       $nl"
  
 117 #·There·are·apparently·some·retarded·systems·that·use·';'·as·a·PATH·separator!
 118 if·test·"${PATH_SEPARATOR+set}"·!=·set;·then
 119 ··PATH_SEPARATOR=:
 120 ··(PATH='/bin;/bin';·FPATH=$PATH;·sh·-c·:)·>/dev/null·2>&1·&&·{
 121 ····(PATH='/bin:/bin';·FPATH=$PATH;·sh·-c·:)·>/dev/null·2>&1·||
 122 ······PATH_SEPARATOR=';'
 123 ··}
 124 fi
  
  
 125 #·func_unset·VAR
 126 #·--------------
 127 #·Portably·unset·VAR.
 128 #·In·some·shells,·an·'unset·VAR'·statement·leaves·a·non-zero·return
 129 #·status·if·VAR·is·already·unset,·which·might·be·problematic·if·the
 130 #·statement·is·used·at·the·end·of·a·function·(thus·poisoning·its·return
 131 #·value)·or·when·'set·-e'·is·active·(causing·even·a·spurious·abort·of
 132 #·the·script·in·this·case).
 133 func_unset·()
 134 {
 135 ····{·eval·$1=;·(eval·unset·$1)·>/dev/null·2>&1·&&·eval·unset·$1·||·:·;·}
 136 }
  
  
 137 #·Make·sure·CDPATH·doesn't·cause·`cd`·commands·to·output·the·target·dir.
 138 func_unset·CDPATH
  
 139 #·Make·sure·${,E,F}GREP·behave·sanely.
 140 func_unset·GREP_OPTIONS
  
  
 141 ##·-------------------------·##
 142 ##·Locate·command·utilities.·##
 143 ##·-------------------------·##
  
  
 144 #·func_executable_p·FILE
 145 #·----------------------
 146 #·Check·that·FILE·is·an·executable·regular·file.
 147 func_executable_p·()
 148 {
 149 ····test·-f·"$1"·&&·test·-x·"$1"
 150 }
  
  
 151 #·func_path_progs·PROGS_LIST·CHECK_FUNC·[PATH]
 152 #·--------------------------------------------
 153 #·Search·for·either·a·program·that·responds·to·--version·with·output
 154 #·containing·"GNU",·or·else·returned·by·CHECK_FUNC·otherwise,·by
 155 #·trying·all·the·directories·in·PATH·with·each·of·the·elements·of
 156 #·PROGS_LIST.
 157 #
 158 #·CHECK_FUNC·should·accept·the·path·to·a·candidate·program,·and
 159 #·set·$func_check_prog_result·if·it·truncates·its·output·less·than
 160 #·$_G_path_prog_max·characters.
 161 func_path_progs·()
 162 {
 163 ····_G_progs_list=$1
 164 ····_G_check_func=$2
 165 ····_G_PATH=${3-"$PATH"}
  
 166 ····_G_path_prog_max=0
 167 ····_G_path_prog_found=false
 168 ····_G_save_IFS=$IFS;·IFS=${PATH_SEPARATOR-:}
 169 ····for·_G_dir·in·$_G_PATH;·do
 170 ······IFS=$_G_save_IFS
 171 ······test·-z·"$_G_dir"·&&·_G_dir=.
 172 ······for·_G_prog_name·in·$_G_progs_list;·do
 173 ········for·_exeext·in·''·.EXE;·do
 174 ··········_G_path_prog=$_G_dir/$_G_prog_name$_exeext
 175 ··········func_executable_p·"$_G_path_prog"·||·continue
 176 ··········case·`"$_G_path_prog"·--version·2>&1`·in
 177 ············*GNU*)·func_path_progs_result=$_G_path_prog·_G_path_prog_found=:·;;
 178 ············*)·····$_G_check_func·$_G_path_prog
 179 »       »       ···func_path_progs_result=$func_check_prog_result
 180 »       »       ···;;
 181 ··········esac
 182 ··········$_G_path_prog_found·&&·break·3
 183 ········done
 184 ······done
 185 ····done
 186 ····IFS=$_G_save_IFS
 187 ····test·-z·"$func_path_progs_result"·&&·{
 188 ······echo·"no·acceptable·sed·could·be·found·in·\$PATH"·>&2
 189 ······exit·1
 190 ····}
 191 }
  
  
 192 #·We·want·to·be·able·to·use·the·functions·in·this·file·before·configure
 193 #·has·figured·out·where·the·best·binaries·are·kept,·which·means·we·have
 194 #·to·search·for·them·ourselves·-·except·when·the·results·are·already·set
 195 #·where·we·skip·the·searches.
  
 196 #·Unless·the·user·overrides·by·setting·SED,·search·the·path·for·either·GNU
 197 #·sed,·or·the·sed·that·truncates·its·output·the·least.
 198 test·-z·"$SED"·&&·{
 199 ··_G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
 200 ··for·_G_i·in·1·2·3·4·5·6·7;·do
 201 ····_G_sed_script=$_G_sed_script$nl$_G_sed_script
 202 ··done
 203 ··echo·"$_G_sed_script"·2>/dev/null·|·sed·99q·>conftest.sed
 204 ··_G_sed_script=
  
 205 ··func_check_prog_sed·()
 206 ··{
 207 ····_G_path_prog=$1
  
 208 ····_G_count=0
 209 ····printf·0123456789·>conftest.in
 210 ····while·:
 211 ····do
 212 ······cat·conftest.in·conftest.in·>conftest.tmp
 213 ······mv·conftest.tmp·conftest.in
 214 ······cp·conftest.in·conftest.nl
 215 ······echo·''·>>·conftest.nl
 216 ······"$_G_path_prog"·-f·conftest.sed·<conftest.nl·>conftest.out·2>/dev/null·||·break
 217 ······diff·conftest.out·conftest.nl·>/dev/null·2>&1·||·break
 218 ······_G_count=`expr·$_G_count·+·1`
 219 ······if·test·"$_G_count"·-gt·"$_G_path_prog_max";·then
 220 ········#·Best·one·so·far,·save·it·but·keep·looking·for·a·better·one
 221 ········func_check_prog_result=$_G_path_prog
 222 ········_G_path_prog_max=$_G_count
 223 ······fi
 224 ······#·10*(2^10)·chars·as·input·seems·more·than·enough
 225 ······test·10·-lt·"$_G_count"·&&·break
 226 ····done
 227 ····rm·-f·conftest.in·conftest.tmp·conftest.nl·conftest.out
 228 ··}
  
 229 ··func_path_progs·"sed·gsed"·func_check_prog_sed·"$PATH:/usr/xpg4/bin"
 230 ··rm·-f·conftest.sed
 231 ··SED=$func_path_progs_result
 232 }
  
  
 233 #·Unless·the·user·overrides·by·setting·GREP,·search·the·path·for·either·GNU
 234 #·grep,·or·the·grep·that·truncates·its·output·the·least.
 235 test·-z·"$GREP"·&&·{
 236 ··func_check_prog_grep·()
 237 ··{
 238 ····_G_path_prog=$1
  
 239 ····_G_count=0
 240 ····_G_path_prog_max=0
 241 ····printf·0123456789·>conftest.in
 242 ····while·:
 243 ····do
 244 ······cat·conftest.in·conftest.in·>conftest.tmp
 245 ······mv·conftest.tmp·conftest.in
 246 ······cp·conftest.in·conftest.nl
 247 ······echo·'GREP'·>>·conftest.nl
 248 ······"$_G_path_prog"·-e·'GREP$'·-e·'-(cannot·match)-'·<conftest.nl·>conftest.out·2>/dev/null·||·break
 249 ······diff·conftest.out·conftest.nl·>/dev/null·2>&1·||·break
 250 ······_G_count=`expr·$_G_count·+·1`
 251 ······if·test·"$_G_count"·-gt·"$_G_path_prog_max";·then
 252 ········#·Best·one·so·far,·save·it·but·keep·looking·for·a·better·one
 253 ········func_check_prog_result=$_G_path_prog
 254 ········_G_path_prog_max=$_G_count
 255 ······fi
 256 ······#·10*(2^10)·chars·as·input·seems·more·than·enough
 257 ······test·10·-lt·"$_G_count"·&&·break
 258 ····done
 259 ····rm·-f·conftest.in·conftest.tmp·conftest.nl·conftest.out
 260 ··}
  
 261 ··func_path_progs·"grep·ggrep"·func_check_prog_grep·"$PATH:/usr/xpg4/bin"
 262 ··GREP=$func_path_progs_result
 263 }
  
  
 264 ##·-------------------------------·##
 265 ##·User·overridable·command·paths.·##
 266 ##·-------------------------------·##
  
 267 #·All·uppercase·variable·names·are·used·for·environment·variables.··These
 268 #·variables·can·be·overridden·by·the·user·before·calling·a·script·that
 269 #·uses·them·if·a·suitable·command·of·that·name·is·not·already·available
 270 #·in·the·command·search·PATH.
  
 271 :·${CP="cp·-f"}
 272 :·${ECHO="printf·%s\n"}
 273 :·${EGREP="$GREP·-E"}
 274 :·${FGREP="$GREP·-F"}
 275 :·${LN_S="ln·-s"}
 276 :·${MAKE="make"}
 277 :·${MKDIR="mkdir"}
 278 :·${MV="mv·-f"}
 279 :·${RM="rm·-f"}
 280 :·${SHELL="${CONFIG_SHELL-/bin/sh}"}
  
  
 281 ##·--------------------·##
 282 ##·Useful·sed·snippets.·##
 283 ##·--------------------·##
  
 284 sed_dirname='s|/[^/]*$||'
 285 sed_basename='s|^.*/||'
  
 286 #·Sed·substitution·that·helps·us·do·robust·quoting.··It·backslashifies
 287 #·metacharacters·that·are·still·active·within·double-quoted·strings.
 288 sed_quote_subst='s|\([`"$\\]\)|\\\1|g'
  
 289 #·Same·as·above,·but·do·not·quote·variable·references.
 290 sed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
  
 291 #·Sed·substitution·that·turns·a·string·into·a·regex·matching·for·the
 292 #·string·literally.
 293 sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
  
 294 #·Sed·substitution·that·converts·a·w32·file·name·or·path
 295 #·that·contains·forward·slashes,·into·one·that·contains
 296 #·(escaped)·backslashes.··A·very·naive·implementation.
 297 sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
  
 298 #·Re-'\'·parameter·expansions·in·output·of·sed_double_quote_subst·that
 299 #·were·'\'-ed·in·input·to·the·same.··If·an·odd·number·of·'\'·preceded·a
 300 #·'$'·in·input·to·sed_double_quote_subst,·that·'$'·was·protected·from
 301 #·expansion.··Since·each·input·'\'·is·now·two·'\'s,·look·for·any·number
 302 #·of·runs·of·four·'\'s·followed·by·two·'\'s·and·then·a·'$'.··'\'·that·'$'.
 303 _G_bs='\\'
 304 _G_bs2='\\\\'
 305 _G_bs4='\\\\\\\\'
 306 _G_dollar='\$'
 307 sed_double_backslash="\
 308 ··s/$_G_bs4/&\\
 309 /g
 310 ··s/^$_G_bs2$_G_dollar/$_G_bs&/
 311 ··s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
 312 ··s/\n//g"
  
 313 #·require_check_ifs_backslash
 314 #·---------------------------
 315 #·Check·if·we·can·use·backslash·as·IFS='\'·separator,·and·set
 316 #·$check_ifs_backshlash_broken·to·':'·or·'false'.
 317 require_check_ifs_backslash=func_require_check_ifs_backslash
 318 func_require_check_ifs_backslash·()
 319 {
 320 ··_G_save_IFS=$IFS
 321 ··IFS='\'
 322 ··_G_check_ifs_backshlash='a\\b'
 323 ··for·_G_i·in·$_G_check_ifs_backshlash
 324 ··do
 325 ··case·$_G_i·in
 326 ··a)
 327 ····check_ifs_backshlash_broken=false
 328 ····;;
 329 ··'')
 330 ····break
 331 ····;;
 332 ··*)
 333 ····check_ifs_backshlash_broken=:
 334 ····break
 335 ····;;
 336 ··esac
 337 ··done
 338 ··IFS=$_G_save_IFS
 339 ··require_check_ifs_backslash=:
 340 }
  
  
 341 ##·-----------------·##
 342 ##·Global·variables.·##
 343 ##·-----------------·##
  
 344 #·Except·for·the·global·variables·explicitly·listed·below,·the·following
 345 #·functions·in·the·'^func_'·namespace,·and·the·'^require_'·namespace
 346 #·variables·initialised·in·the·'Resource·management'·section,·sourcing
 347 #·this·file·will·not·pollute·your·global·namespace·with·anything
 348 #·else.·There's·no·portable·way·to·scope·variables·in·Bourne·shell
 349 #·though,·so·actually·running·these·functions·will·sometimes·place
 350 #·results·into·a·variable·named·after·the·function,·and·often·use
 351 #·temporary·variables·in·the·'^_G_'·namespace.·If·you·are·careful·to
 352 #·avoid·using·those·namespaces·casually·in·your·sourcing·script,·things
 353 #·should·continue·to·work·as·you·expect.·And,·of·course,·you·can·freely
 354 #·overwrite·any·of·the·functions·or·variables·defined·here·before
 355 #·calling·anything·to·customize·them.
  
 356 EXIT_SUCCESS=0
 357 EXIT_FAILURE=1
 358 EXIT_MISMATCH=63··#·$?·=·63·is·used·to·indicate·version·mismatch·to·missing.
 359 EXIT_SKIP=77»   ··#·$?·=·77·is·used·to·indicate·a·skipped·test·to·automake.
  
 360 #·Allow·overriding,·eg·assuming·that·you·follow·the·convention·of
 361 #·putting·'$debug_cmd'·at·the·start·of·all·your·functions,·you·can·get
 362 #·bash·to·show·function·call·trace·with:
 363 #
 364 #····debug_cmd='eval·echo·"${FUNCNAME[0]}·$*"·>&2'·bash·your-script-name
 365 debug_cmd=${debug_cmd-":"}
 366 exit_cmd=:
  
 367 #·By·convention,·finish·your·script·with:
 368 #
 369 #····exit·$exit_status
 370 #
 371 #·so·that·you·can·set·exit_status·to·non-zero·if·you·want·to·indicate
 372 #·something·went·wrong·during·execution·without·actually·bailing·out·at
 373 #·the·point·of·failure.
 374 exit_status=$EXIT_SUCCESS
  
 375 #·Work·around·backward·compatibility·issue·on·IRIX·6.5.·On·IRIX·6.4+,·sh
 376 #·is·ksh·but·when·the·shell·is·invoked·as·"sh"·and·the·current·value·of
 377 #·the·_XPG·environment·variable·is·not·equal·to·1·(one),·the·special
 378 #·positional·parameter·$0,·within·a·function·call,·is·the·name·of·the
 379 #·function.
 380 progpath=$0
  
 381 #·The·name·of·this·program.
 382 progname=`$ECHO·"$progpath"·|$SED·"$sed_basename"`
  
 383 #·Make·sure·we·have·an·absolute·progpath·for·reexecution:
 384 case·$progpath·in
 385 ··[\\/]*|[A-Za-z]:\\*)·;;
 386 ··*[\\/]*)
 387 ·····progdir=`$ECHO·"$progpath"·|$SED·"$sed_dirname"`
 388 ·····progdir=`cd·"$progdir"·&&·pwd`
 389 ·····progpath=$progdir/$progname
 390 ·····;;
 391 ··*)
 392 ·····_G_IFS=$IFS
 393 ·····IFS=${PATH_SEPARATOR-:}
 394 ·····for·progdir·in·$PATH;·do
 395 ·······IFS=$_G_IFS
 396 ·······test·-x·"$progdir/$progname"·&&·break
 397 ·····done
 398 ·····IFS=$_G_IFS
 399 ·····test·-n·"$progdir"·||·progdir=`pwd`
 400 ·····progpath=$progdir/$progname
 401 ·····;;
 402 esac
  
  
 403 ##·-----------------·##
 404 ##·Standard·options.·##
 405 ##·-----------------·##
  
 406 #·The·following·options·affect·the·operation·of·the·functions·defined
 407 #·below,·and·should·be·set·appropriately·depending·on·run-time·para-
 408 #·meters·passed·on·the·command·line.
  
 409 opt_dry_run=false
 410 opt_quiet=false
 411 opt_verbose=false
  
 412 #·Categories·'all'·and·'none'·are·always·available.··Append·any·others
 413 #·you·will·pass·as·the·first·argument·to·func_warning·from·your·own
 414 #·code.
 415 warning_categories=
  
 416 #·By·default,·display·warnings·according·to·'opt_warning_types'.··Set
 417 #·'warning_func'··to·':'·to·elide·all·warnings,·or·func_fatal_error·to
 418 #·treat·the·next·displayed·warning·as·a·fatal·error.
 419 warning_func=func_warn_and_continue
  
 420 #·Set·to·'all'·to·display·all·warnings,·'none'·to·suppress·all
 421 #·warnings,·or·a·space·delimited·list·of·some·subset·of
 422 #·'warning_categories'·to·display·only·the·listed·warnings.
 423 opt_warning_types=all
  
  
 424 ##·--------------------·##
 425 ##·Resource·management.·##
 426 ##·--------------------·##
  
 427 #·This·section·contains·definitions·for·functions·that·each·ensure·a
 428 #·particular·resource·(a·file,·or·a·non-empty·configuration·variable·for
 429 #·example)·is·available,·and·if·appropriate·to·extract·default·values
 430 #·from·pertinent·package·files.·Call·them·using·their·associated
 431 #·'require_*'·variable·to·ensure·that·they·are·executed,·at·most,·once.
 432 #
 433 #·It's·entirely·deliberate·that·calling·these·functions·can·set
 434 #·variables·that·don't·obey·the·namespace·limitations·obeyed·by·the·rest
 435 #·of·this·file,·in·order·that·that·they·be·as·useful·as·possible·to
 436 #·callers.
  
  
 437 #·require_term_colors
 438 #·-------------------
 439 #·Allow·display·of·bold·text·on·terminals·that·support·it.
 440 require_term_colors=func_require_term_colors
 441 func_require_term_colors·()
 442 {
 443 ····$debug_cmd
  
 444 ····test·-t·1·&&·{
 445 ······#·COLORTERM·and·USE_ANSI_COLORS·environment·variables·take
 446 ······#·precedence,·because·most·terminfo·databases·neglect·to·describe
 447 ······#·whether·color·sequences·are·supported.
 448 ······test·-n·"${COLORTERM+set}"·&&·:·${USE_ANSI_COLORS="1"}
  
 449 ······if·test·1·=·"$USE_ANSI_COLORS";·then
 450 ········#·Standard·ANSI·escape·sequences
 451 ········tc_reset='\x1b[0m'
 452 ········tc_bold='\x1b[1m';···tc_standout='\x1b[7m'
 453 ········tc_red='\x1b[31m';···tc_green='\x1b[32m'
 454 ········tc_blue='\x1b[34m';··tc_cyan='\x1b[36m'
 455 ······else
 456 ········#·Otherwise·trust·the·terminfo·database·after·all.
 457 ········test·-n·"`tput·sgr0·2>/dev/null`"·&&·{
 458 ··········tc_reset=`tput·sgr0`
 459 ··········test·-n·"`tput·bold·2>/dev/null`"·&&·tc_bold=`tput·bold`
 460 ··········tc_standout=$tc_bold
 461 ··········test·-n·"`tput·smso·2>/dev/null`"·&&·tc_standout=`tput·smso`
 462 ··········test·-n·"`tput·setaf·1·2>/dev/null`"·&&·tc_red=`tput·setaf·1`
 463 ··········test·-n·"`tput·setaf·2·2>/dev/null`"·&&·tc_green=`tput·setaf·2`
 464 ··········test·-n·"`tput·setaf·4·2>/dev/null`"·&&·tc_blue=`tput·setaf·4`
 465 ··········test·-n·"`tput·setaf·5·2>/dev/null`"·&&·tc_cyan=`tput·setaf·5`
 466 ········}
 467 ······fi
 468 ····}
  
 469 ····require_term_colors=:
 470 }
  
  
 471 ##·-----------------·##
 472 ##·Function·library.·##
 473 ##·-----------------·##
  
 474 #·This·section·contains·a·variety·of·useful·functions·to·call·in·your
 475 #·scripts.·Take·note·of·the·portable·wrappers·for·features·provided·by
 476 #·some·modern·shells,·which·will·fall·back·to·slower·equivalents·on
 477 #·less·featureful·shells.
  
  
 478 #·func_append·VAR·VALUE
 479 #·---------------------
 480 #·Append·VALUE·onto·the·existing·contents·of·VAR.
  
 481 ··#·We·should·try·to·minimise·forks,·especially·on·Windows·where·they·are
 482 ··#·unreasonably·slow,·so·skip·the·feature·probes·when·bash·or·zsh·are
 483 ··#·being·used:
 484 ··if·test·set·=·"${BASH_VERSION+set}${ZSH_VERSION+set}";·then
 485 ····:·${_G_HAVE_ARITH_OP="yes"}
 486 ····:·${_G_HAVE_XSI_OPS="yes"}
 487 ····#·The·+=·operator·was·introduced·in·bash·3.1
 488 ····case·$BASH_VERSION·in
 489 ······[12].*·|·3.0·|·3.0*)·;;
 490 ······*)
 491 ········:·${_G_HAVE_PLUSEQ_OP="yes"}
 492 ········;;
 493 ····esac
 494 ··fi
  
 495 ··#·_G_HAVE_PLUSEQ_OP
 496 ··#·Can·be·empty,·in·which·case·the·shell·is·probed,·"yes"·if·+=·is
 497 ··#·useable·or·anything·else·if·it·does·not·work.
 498 ··test·-z·"$_G_HAVE_PLUSEQ_OP"·\
 499 ····&&·(eval·'x=a;·x+="·b";·test·"a·b"·=·"$x"')·2>/dev/null·\
 500 ····&&·_G_HAVE_PLUSEQ_OP=yes
  
 501 if·test·yes·=·"$_G_HAVE_PLUSEQ_OP"
 502 then
 503 ··#·This·is·an·XSI·compatible·shell,·allowing·a·faster·implementation...
 504 ··eval·'func_append·()
 505 ··{
 506 ····$debug_cmd
  
 507 ····eval·"$1+=\$2"
 508 ··}'
 509 else
 510 ··#·...otherwise·fall·back·to·using·expr,·which·is·often·a·shell·builtin.
 511 ··func_append·()
 512 ··{
 513 ····$debug_cmd
  
 514 ····eval·"$1=\$$1\$2"
 515 ··}
 516 fi
  
  
 517 #·func_append_quoted·VAR·VALUE
 518 #·----------------------------
 519 #·Quote·VALUE·and·append·to·the·end·of·shell·variable·VAR,·separated
 520 #·by·a·space.
 521 if·test·yes·=·"$_G_HAVE_PLUSEQ_OP";·then
 522 ··eval·'func_append_quoted·()
 523 ··{
 524 ····$debug_cmd
  
 525 ····func_quote_arg·pretty·"$2"
 526 ····eval·"$1+=\\·\$func_quote_arg_result"
 527 ··}'
 528 else
 529 ··func_append_quoted·()
 530 ··{
 531 ····$debug_cmd
  
 532 ····func_quote_arg·pretty·"$2"
 533 ····eval·"$1=\$$1\\·\$func_quote_arg_result"
 534 ··}
 535 fi
  
  
 536 #·func_append_uniq·VAR·VALUE
 537 #·--------------------------
 538 #·Append·unique·VALUE·onto·the·existing·contents·of·VAR,·assuming
 539 #·entries·are·delimited·by·the·first·character·of·VALUE.··For·example:
 540 #
 541 #···func_append_uniq·options·"·--another-option·option-argument"
 542 #
 543 #·will·only·append·to·$options·if·"·--another-option·option-argument·"
 544 #·is·not·already·present·somewhere·in·$options·already·(note·spaces·at
 545 #·each·end·implied·by·leading·space·in·second·argument).
 546 func_append_uniq·()
 547 {
 548 ····$debug_cmd
  
 549 ····eval·_G_current_value='`$ECHO·$'$1'`'
 550 ····_G_delim=`expr·"$2"·:·'\(.\)'`
  
 551 ····case·$_G_delim$_G_current_value$_G_delim·in
 552 ······*"$2$_G_delim"*)·;;
 553 ······*)·func_append·"$@"·;;
 554 ····esac
 555 }
  
  
 556 #·func_arith·TERM...
 557 #·------------------
 558 #·Set·func_arith_result·to·the·result·of·evaluating·TERMs.
 559 ··test·-z·"$_G_HAVE_ARITH_OP"·\
 560 ····&&·(eval·'test·2·=·$((·1·+·1·))')·2>/dev/null·\
 561 ····&&·_G_HAVE_ARITH_OP=yes
  
 562 if·test·yes·=·"$_G_HAVE_ARITH_OP";·then
 563 ··eval·'func_arith·()
 564 ··{
 565 ····$debug_cmd
  
 566 ····func_arith_result=$((·$*·))
 567 ··}'
 568 else
 569 ··func_arith·()
 570 ··{
 571 ····$debug_cmd
  
 572 ····func_arith_result=`expr·"$@"`
 573 ··}
 574 fi
  
  
 575 #·func_basename·FILE
 576 #·------------------
 577 #·Set·func_basename_result·to·FILE·with·everything·up·to·and·including
 578 #·the·last·/·stripped.
 579 if·test·yes·=·"$_G_HAVE_XSI_OPS";·then
 580 ··#·If·this·shell·supports·suffix·pattern·removal,·then·use·it·to·avoid
 581 ··#·forking.·Hide·the·definitions·single·quotes·in·case·the·shell·chokes
 582 ··#·on·unsupported·syntax...
 583 ··_b='func_basename_result=${1##*/}'
 584 ··_d='case·$1·in
 585 ········*/*)·func_dirname_result=${1%/*}$2·;;
 586 ········*··)·func_dirname_result=$3········;;
 587 ······esac'
  
 588 else
 589 ··#·...otherwise·fall·back·to·using·sed.
 590 ··_b='func_basename_result=`$ECHO·"$1"·|$SED·"$sed_basename"`'
 591 ··_d='func_dirname_result=`$ECHO·"$1"··|$SED·"$sed_dirname"`
 592 ······if·test·"X$func_dirname_result"·=·"X$1";·then
 593 ········func_dirname_result=$3
 594 ······else
 595 ········func_append·func_dirname_result·"$2"
 596 ······fi'
 597 fi
  
 598 eval·'func_basename·()
 599 {
 600 ····$debug_cmd
  
 601 ····'"$_b"'
 602 }'
  
  
 603 #·func_dirname·FILE·APPEND·NONDIR_REPLACEMENT
 604 #·-------------------------------------------
 605 #·Compute·the·dirname·of·FILE.··If·nonempty,·add·APPEND·to·the·result,
 606 #·otherwise·set·result·to·NONDIR_REPLACEMENT.
 607 eval·'func_dirname·()
 608 {
 609 ····$debug_cmd
  
 610 ····'"$_d"'
 611 }'
  
  
 612 #·func_dirname_and_basename·FILE·APPEND·NONDIR_REPLACEMENT
 613 #·--------------------------------------------------------
 614 #·Perform·func_basename·and·func_dirname·in·a·single·function
 615 #·call:
 616 #···dirname:··Compute·the·dirname·of·FILE.··If·nonempty,
 617 #·············add·APPEND·to·the·result,·otherwise·set·result
 618 #·············to·NONDIR_REPLACEMENT.
 619 #·············value·returned·in·"$func_dirname_result"
 620 #···basename:·Compute·filename·of·FILE.
 621 #·············value·retuned·in·"$func_basename_result"
 622 #·For·efficiency,·we·do·not·delegate·to·the·functions·above·but·instead
 623 #·duplicate·the·functionality·here.
 624 eval·'func_dirname_and_basename·()
 625 {
 626 ····$debug_cmd
  
 627 ····'"$_b"'
 628 ····'"$_d"'
 629 }'
  
  
 630 #·func_echo·ARG...
 631 #·----------------
 632 #·Echo·program·name·prefixed·message.
 633 func_echo·()
 634 {
 635 ····$debug_cmd
  
 636 ····_G_message=$*
  
 637 ····func_echo_IFS=$IFS
 638 ····IFS=$nl
 639 ····for·_G_line·in·$_G_message;·do
 640 ······IFS=$func_echo_IFS
 641 ······$ECHO·"$progname:·$_G_line"
 642 ····done
 643 ····IFS=$func_echo_IFS
 644 }
  
  
 645 #·func_echo_all·ARG...
 646 #·--------------------
 647 #·Invoke·$ECHO·with·all·args,·space-separated.
 648 func_echo_all·()
 649 {
 650 ····$ECHO·"$*"
 651 }
  
  
 652 #·func_echo_infix_1·INFIX·ARG...
 653 #·------------------------------
 654 #·Echo·program·name,·followed·by·INFIX·on·the·first·line,·with·any
 655 #·additional·lines·not·showing·INFIX.
 656 func_echo_infix_1·()
 657 {
 658 ····$debug_cmd
  
 659 ····$require_term_colors
  
 660 ····_G_infix=$1;·shift
 661 ····_G_indent=$_G_infix
 662 ····_G_prefix="$progname:·$_G_infix:·"
 663 ····_G_message=$*
  
 664 ····#·Strip·color·escape·sequences·before·counting·printable·length
 665 ····for·_G_tc·in·"$tc_reset"·"$tc_bold"·"$tc_standout"·"$tc_red"·"$tc_green"·"$tc_blue"·"$tc_cyan"
 666 ····do
 667 ······test·-n·"$_G_tc"·&&·{
 668 ········_G_esc_tc=`$ECHO·"$_G_tc"·|·$SED·"$sed_make_literal_regex"`
 669 ········_G_indent=`$ECHO·"$_G_indent"·|·$SED·"s|$_G_esc_tc||g"`
 670 ······}
 671 ····done
 672 ····_G_indent="$progname:·"`echo·"$_G_indent"·|·$SED·'s|.|·|g'`"··"·##·exclude·from·sc_prohibit_nested_quotes
  
 673 ····func_echo_infix_1_IFS=$IFS
 674 ····IFS=$nl
 675 ····for·_G_line·in·$_G_message;·do
 676 ······IFS=$func_echo_infix_1_IFS
 677 ······$ECHO·"$_G_prefix$tc_bold$_G_line$tc_reset"·>&2
 678 ······_G_prefix=$_G_indent
 679 ····done
 680 ····IFS=$func_echo_infix_1_IFS
 681 }
  
  
 682 #·func_error·ARG...
 683 #·-----------------
 684 #·Echo·program·name·prefixed·message·to·standard·error.
 685 func_error·()
 686 {
 687 ····$debug_cmd
  
 688 ····$require_term_colors
  
 689 ····func_echo_infix_1·"··$tc_standout${tc_red}error$tc_reset"·"$*"·>&2
 690 }
  
  
 691 #·func_fatal_error·ARG...
 692 #·-----------------------
 693 #·Echo·program·name·prefixed·message·to·standard·error,·and·exit.
 694 func_fatal_error·()
 695 {
 696 ····$debug_cmd
  
 697 ····func_error·"$*"
 698 ····exit·$EXIT_FAILURE
 699 }
  
  
 700 #·func_grep·EXPRESSION·FILENAME
 701 #·-----------------------------
 702 #·Check·whether·EXPRESSION·matches·any·line·of·FILENAME,·without·output.
 703 func_grep·()
 704 {
 705 ····$debug_cmd
  
 706 ····$GREP·"$1"·"$2"·>/dev/null·2>&1
 707 }
  
  
 708 #·func_len·STRING
 709 #·---------------
 710 #·Set·func_len_result·to·the·length·of·STRING.·STRING·may·not
 711 #·start·with·a·hyphen.
 712 ··test·-z·"$_G_HAVE_XSI_OPS"·\
 713 ····&&·(eval·'x=a/b/c;
 714 ······test·5aa/bb/cc·=·"${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"')·2>/dev/null·\
 715 ····&&·_G_HAVE_XSI_OPS=yes
  
 716 if·test·yes·=·"$_G_HAVE_XSI_OPS";·then
 717 ··eval·'func_len·()
 718 ··{
 719 ····$debug_cmd
  
 720 ····func_len_result=${#1}
 721 ··}'
 722 else
 723 ··func_len·()
 724 ··{
 725 ····$debug_cmd
  
 726 ····func_len_result=`expr·"$1"·:·".*"·2>/dev/null·||·echo·$max_cmd_len`
 727 ··}
 728 fi
  
  
 729 #·func_mkdir_p·DIRECTORY-PATH
 730 #·---------------------------
 731 #·Make·sure·the·entire·path·to·DIRECTORY-PATH·is·available.
 732 func_mkdir_p·()
 733 {
 734 ····$debug_cmd
  
 735 ····_G_directory_path=$1
 736 ····_G_dir_list=
  
 737 ····if·test·-n·"$_G_directory_path"·&&·test·:·!=·"$opt_dry_run";·then
  
 738 ······#·Protect·directory·names·starting·with·'-'
 739 ······case·$_G_directory_path·in
 740 ········-*)·_G_directory_path=./$_G_directory_path·;;
 741 ······esac
  
 742 ······#·While·some·portion·of·DIR·does·not·yet·exist...
 743 ······while·test·!·-d·"$_G_directory_path";·do
 744 ········#·...make·a·list·in·topmost·first·order.··Use·a·colon·delimited
 745 »       #·list·incase·some·portion·of·path·contains·whitespace.
 746 ········_G_dir_list=$_G_directory_path:$_G_dir_list
  
 747 ········#·If·the·last·portion·added·has·no·slash·in·it,·the·list·is·done
 748 ········case·$_G_directory_path·in·*/*)·;;·*)·break·;;·esac
  
 749 ········#·...otherwise·throw·away·the·child·directory·and·loop
 750 ········_G_directory_path=`$ECHO·"$_G_directory_path"·|·$SED·-e·"$sed_dirname"`
 751 ······done
 752 ······_G_dir_list=`$ECHO·"$_G_dir_list"·|·$SED·'s|:*$||'`
  
 753 ······func_mkdir_p_IFS=$IFS;·IFS=:
 754 ······for·_G_dir·in·$_G_dir_list;·do
 755 »       IFS=$func_mkdir_p_IFS
 756 ········#·mkdir·can·fail·with·a·'File·exist'·error·if·two·processes
 757 ········#·try·to·create·one·of·the·directories·concurrently.··Don't
 758 ········#·stop·in·that·case!
 759 ········$MKDIR·"$_G_dir"·2>/dev/null·||·:
 760 ······done
 761 ······IFS=$func_mkdir_p_IFS
  
 762 ······#·Bail·out·if·we·(or·some·other·process)·failed·to·create·a·directory.
 763 ······test·-d·"$_G_directory_path"·||·\
 764 ········func_fatal_error·"Failed·to·create·'$1'"
 765 ····fi
 766 }
  
  
 767 #·func_mktempdir·[BASENAME]
 768 #·-------------------------
 769 #·Make·a·temporary·directory·that·won't·clash·with·other·running
 770 #·libtool·processes,·and·avoids·race·conditions·if·possible.··If
 771 #·given,·BASENAME·is·the·basename·for·that·directory.
 772 func_mktempdir·()
 773 {
 774 ····$debug_cmd
  
 775 ····_G_template=${TMPDIR-/tmp}/${1-$progname}
  
 776 ····if·test·:·=·"$opt_dry_run";·then
 777 ······#·Return·a·directory·name,·but·don't·create·it·in·dry-run·mode
 778 ······_G_tmpdir=$_G_template-$$
 779 ····else
  
 780 ······#·If·mktemp·works,·use·that·first·and·foremost
 781 ······_G_tmpdir=`mktemp·-d·"$_G_template-XXXXXXXX"·2>/dev/null`
  
 782 ······if·test·!·-d·"$_G_tmpdir";·then
 783 ········#·Failing·that,·at·least·try·and·use·$RANDOM·to·avoid·a·race
 784 ········_G_tmpdir=$_G_template-${RANDOM-0}$$
  
 785 ········func_mktempdir_umask=`umask`
 786 ········umask·0077
 787 ········$MKDIR·"$_G_tmpdir"
 788 ········umask·$func_mktempdir_umask
 789 ······fi
  
 790 ······#·If·we're·not·in·dry-run·mode,·bomb·out·on·failure
 791 ······test·-d·"$_G_tmpdir"·||·\
 792 ········func_fatal_error·"cannot·create·temporary·directory·'$_G_tmpdir'"
 793 ····fi
  
 794 ····$ECHO·"$_G_tmpdir"
 795 }
  
  
 796 #·func_normal_abspath·PATH
 797 #·------------------------
 798 #·Remove·doubled-up·and·trailing·slashes,·"."·path·components,
 799 #·and·cancel·out·any·".."·path·components·in·PATH·after·making
 800 #·it·an·absolute·path.
 801 func_normal_abspath·()
 802 {
 803 ····$debug_cmd
  
 804 ····#·These·SED·scripts·presuppose·an·absolute·path·with·a·trailing·slash.
 805 ····_G_pathcar='s|^/\([^/]*\).*$|\1|'
 806 ····_G_pathcdr='s|^/[^/]*||'
 807 ····_G_removedotparts=':dotsl
 808 »       »       s|/\./|/|g
 809 »       »       t·dotsl
 810 »       »       s|/\.$|/|'
 811 ····_G_collapseslashes='s|/\{1,\}|/|g'
 812 ····_G_finalslash='s|/*$|/|'
  
 813 ····#·Start·from·root·dir·and·reassemble·the·path.
 814 ····func_normal_abspath_result=
 815 ····func_normal_abspath_tpath=$1
 816 ····func_normal_abspath_altnamespace=
 817 ····case·$func_normal_abspath_tpath·in
 818 ······"")
 819 ········#·Empty·path,·that·just·means·$cwd.
 820 ········func_stripname·''·'/'·"`pwd`"
 821 ········func_normal_abspath_result=$func_stripname_result
 822 ········return
 823 ········;;
 824 ······#·The·next·three·entries·are·used·to·spot·a·run·of·precisely
 825 ······#·two·leading·slashes·without·using·negated·character·classes;
 826 ······#·we·take·advantage·of·case's·first-match·behaviour.
 827 ······///*)
 828 ········#·Unusual·form·of·absolute·path,·do·nothing.
 829 ········;;
 830 ······//*)
 831 ········#·Not·necessarily·an·ordinary·path;·POSIX·reserves·leading·'//'
 832 ········#·and·for·example·Cygwin·uses·it·to·access·remote·file·shares
 833 ········#·over·CIFS/SMB,·so·we·conserve·a·leading·double·slash·if·found.
 834 ········func_normal_abspath_altnamespace=/
 835 ········;;
 836 ······/*)
 837 ········#·Absolute·path,·do·nothing.
 838 ········;;
 839 ······*)
 840 ········#·Relative·path,·prepend·$cwd.
 841 ········func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
 842 ········;;
 843 ····esac
  
 844 ····#·Cancel·out·all·the·simple·stuff·to·save·iterations.··We·also·want
 845 ····#·the·path·to·end·with·a·slash·for·ease·of·parsing,·so·make·sure
 846 ····#·there·is·one·(and·only·one)·here.
 847 ····func_normal_abspath_tpath=`$ECHO·"$func_normal_abspath_tpath"·|·$SED·\
 848 ··········-e·"$_G_removedotparts"·-e·"$_G_collapseslashes"·-e·"$_G_finalslash"`
 849 ····while·:;·do
 850 ······#·Processed·it·all·yet?
Max diff block lines reached; -1/344628 bytes (-0.00%) of diff not shown.