diff options
author | jk7744.park <jk7744.park@samsung.com> | 2015-09-08 22:07:42 +0900 |
---|---|---|
committer | jk7744.park <jk7744.park@samsung.com> | 2015-09-08 22:07:42 +0900 |
commit | 4732847654ed74ed893b7ea088805832fd91cc18 (patch) | |
tree | 393207d68983c3b587733b83714bef2de2457025 | |
download | xmlstarlet-tizen_2.3.1.tar.gz xmlstarlet-tizen_2.3.1.tar.bz2 xmlstarlet-tizen_2.3.1.zip |
tizen 2.3.1 releasetizen_2.4_mobile_releasetizen_2.3.1_releasesubmit/tizen_2.4/20151028.063429submit/tizen_2.3.1/20150915.075556accepted/tizen/2.4/mobile/20151029.035146tizen_2.4tizen_2.3.1accepted/tizen_2.4_mobile
292 files changed, 34121 insertions, 0 deletions
@@ -0,0 +1 @@ +Mikhail Grushinskiy <mgrouch@users.sourceforge.net> @@ -0,0 +1,20 @@ +Copyright (c) 2002-2004 Mikhail Grushinskiy. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/ChangeLog @@ -0,0 +1 @@ + diff --git a/Copyright b/Copyright new file mode 100644 index 0000000..bf6997b --- /dev/null +++ b/Copyright @@ -0,0 +1,20 @@ +Copyright (c) 2002-2004 Mikhail Grushinskiy. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + @@ -0,0 +1,183 @@ +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, a file +`config.cache' that saves the results of its tests to speed up +reconfiguring, and a file `config.log' containing compiler output +(useful mainly for debugging `configure'). + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If at some point `config.cache' +contains results you don't want to keep, you may remove or edit it. + + The file `configure.in' is used to create `configure' by a program +called `autoconf'. You only need `configure.in' if you want to change +it or regenerate `configure' using a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. You can give `configure' +initial values for variables by setting them in the environment. Using +a Bourne-compatible shell, you can do that on the command line like +this: + CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure + +Or on systems that have the `env' program, you can do it like this: + env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not supports the `VPATH' +variable, you have to compile the package for one architecture at a time +in the source code directory. After you have installed the package for +one architecture, use `make distclean' before reconfiguring for another +architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' can not figure out +automatically, but needs to determine by the type of host the package +will run on. Usually `configure' can figure that out, but if it prints +a message saying it can not guess the host type, give it the +`--host=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name with three fields: + CPU-COMPANY-SYSTEM + +See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the host type. + + If you are building compiler tools for cross-compiling, you can also +use the `--target=TYPE' option to select the type of system they will +produce code for and the `--build=TYPE' option to select the type of +system on which you are compiling the package. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Operation Controls +================== + + `configure' recognizes the following options to control how it +operates. + +`--cache-file=FILE' + Use and save the results of the tests in FILE instead of + `./config.cache'. Set FILE to `/dev/null' to disable caching, for + debugging `configure'. + +`--help' + Print a summary of the options to `configure', and exit. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--version' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`configure' also accepts some other, not widely useful, options. + diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..4844243 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,87 @@ +EXTRA_DIST = Copyright examples solaris tests +WIN32_DIST = README TODO Copyright COPYING AUTHORS ChangeLog INSTALL NEWS xml.exe +WIN32_doc_DIST = $(generated_docs) doc/html.css + +ACLOCAL_AMFLAGS = -I m4 +if GCC +AM_CFLAGS = -Wall -pedantic +endif + +GIT_DESCRIBE = git describe --tags --dirty + +# TODO: figure out why log removal is needed and/or make it completely automatic +dist-hook: + @for log in $(srcdir)/examples/*.log ; do if [ -f "$$log" ] ; then \ + rm $(srcdir)/examples/*.log ; \ + echo 'ERROR: log files need to cleaned BEFORE making tarball, try again'; exit 1 ; fi ; done + @ if [ -d .git ] ; then \ + if [ $(VERSION) != `$(GIT_DESCRIBE)` ] ; then \ + echo 'ERROR: version mismatch, rerun autoconf -f' ; exit 1 ; fi ; \ + $(SED) 's/\[m4_esyscmd_s(\[$(GIT_DESCRIBE)\])\]/[$(VERSION)]/' \ + $(srcdir)/configure.ac > $(distdir)/configure.ac ; fi + +cleantar: + @(rm -f xmlstarlet*.tar.gz) + +rpm: cleantar distdir xmlstarlet.spec + cp xmlstarlet.spec $(distdir) + $(AMTAR) -czf $(distdir).tar.gz $(distdir) + rpmbuild -ta $(distdir).tar.gz + +$(distdir)-win32.zip: xml.exe + mkdir -p /tmp/$(distdir)/doc + cp $(WIN32_DIST) /tmp/$(distdir) + cp $(WIN32_doc_DIST) /tmp/$(distdir)/doc + strip /tmp/$(distdir)/xml.exe + cd /tmp && zip -9 --symlinks --recurse-paths --to-crlf --move \ + $(distdir)-win32.zip $(distdir) + mv /tmp/$(distdir)-win32.zip . + +dist-win32: $(distdir)-win32.zip + +version.h: VERSION + @if [ -d .git ] ; then \ + VERSION=`$(GIT_DESCRIBE)`; \ + else VERSION=$(VERSION) ; fi; \ + NEW_VERSION="#define VERSION \"$$VERSION\""; \ + OLD_VERSION=`cat version.h 2>/dev/null` ; \ + if [ "$$NEW_VERSION" != "$$OLD_VERSION" ] ; then \ + echo "$$NEW_VERSION" > version.h ; \ + echo "version.h: $$NEW_VERSION"; fi +VERSION: + +# need to build version.h even if dependency files haven't been +# generated +src/xml.o : version.h + + + +# testing +include examples/tests.mk + +# building executable +bin_PROGRAMS = xml + +include src/sources.mk +xml_SOURCES += version.h +nodist_xml_SOURCES = $(generated_usage_sources) +EXTRA_DIST += $(usage_texts) usage2c.awk + +.txt.c: + $(AM_V_GEN)$(AWK) -f $(srcdir)/usage2c.awk $< > $@ +$(generated_usage_sources) : usage2c.awk + + +# doc +include doc/doc.mk + +man_MANS = $(manpage) +dist_doc_DATA = $(userguide_gen) doc/html.css $(txtguide) +EXTRA_DIST += $(manpage_src) $(userguide_src) $(txtguide_src) +EXTRA_DIST += $(buildfiles_docs) $(manpage) + + +CLEANFILES = version.h $(generated_usage_sources) +MAINTAINERCLEANFILES = $(manpage) $(userguide_gen) $(txtguide) + +.PHONY: cleantar rpm dist-win32 VERSION doc diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..f23eb39 --- /dev/null +++ b/Makefile.in @@ -0,0 +1,1617 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = README $(am__configure_deps) $(dist_doc_DATA) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/config.h.in $(srcdir)/doc/doc.mk \ + $(srcdir)/examples/tests.mk $(srcdir)/src/sources.mk \ + $(srcdir)/xmlstarlet.spec.in $(top_srcdir)/configure \ + $(top_srcdir)/solaris/package/sol8-sparc/pkginfo.in \ + $(top_srcdir)/solaris/package/sol9-sparc/pkginfo.in AUTHORS \ + COPYING ChangeLog INSTALL NEWS TODO compile config.guess \ + config.sub depcomp install-sh missing +@HAVE_EXSLT_XPATH_REGISTER_FALSE@am__append_1 = examples/exslt-ed +bin_PROGRAMS = xml$(EXEEXT) +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/quiet-rule.m4 \ + $(top_srcdir)/m4/xstar-check-libs.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = xmlstarlet.spec \ + solaris/package/sol8-sparc/pkginfo \ + solaris/package/sol9-sparc/pkginfo +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \ + "$(DESTDIR)$(docdir)" +PROGRAMS = $(bin_PROGRAMS) +am__dirstamp = $(am__leading_dot)dirstamp +am_xml_OBJECTS = src/trans.$(OBJEXT) src/xml.$(OBJEXT) \ + src/xml_C14N.$(OBJEXT) src/xml_depyx.$(OBJEXT) \ + src/xml_edit.$(OBJEXT) src/xml_elem.$(OBJEXT) \ + src/xml_escape.$(OBJEXT) src/xml_format.$(OBJEXT) \ + src/xml_ls.$(OBJEXT) src/xml_pyx.$(OBJEXT) \ + src/xml_select.$(OBJEXT) src/xml_trans.$(OBJEXT) \ + src/xml_validate.$(OBJEXT) +am__objects_1 = src/usage.$(OBJEXT) src/c14n-usage.$(OBJEXT) \ + src/depyx-usage.$(OBJEXT) src/edit-usage.$(OBJEXT) \ + src/elem-usage.$(OBJEXT) src/escape-usage.$(OBJEXT) \ + src/format-usage.$(OBJEXT) src/ls-usage.$(OBJEXT) \ + src/pyx-usage.$(OBJEXT) src/select-usage.$(OBJEXT) \ + src/trans-usage.$(OBJEXT) src/unescape-usage.$(OBJEXT) \ + src/validate-usage.$(OBJEXT) +nodist_xml_OBJECTS = $(am__objects_1) +xml_OBJECTS = $(am_xml_OBJECTS) $(nodist_xml_OBJECTS) +xml_LDADD = $(LDADD) +xml_DEPENDENCIES = +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(xml_SOURCES) $(nodist_xml_SOURCES) +DIST_SOURCES = $(xml_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +man1dir = $(mandir)/man1 +NROFF = nroff +MANS = $(man_MANS) +DATA = $(dist_doc_DATA) +ETAGS = etags +CTAGS = ctags +# If stdout is a non-dumb tty, use colors. If test -t is not supported, +# then this fails; a conservative approach. Of course do not redirect +# stdout here, just stderr. +am__tty_colors = \ +red=; grn=; lgn=; blu=; std=; \ +test "X$(AM_COLOR_TESTS)" != Xno \ +&& test "X$$TERM" != Xdumb \ +&& { test "X$(AM_COLOR_TESTS)" = Xalways || test -t 1 2>/dev/null; } \ +&& { \ + red='[0;31m'; \ + grn='[0;32m'; \ + lgn='[1;32m'; \ + blu='[1;34m'; \ + std='[m'; \ +} +# Restructured Text title and section. +am__rst_title = sed 's/.*/ & /;h;s/./=/g;p;x;p;g;p;s/.*//' +am__rst_section = sed 'p;s/./=/g;p;g' +# Put stdin (possibly several lines separated by ". ") in a box. +# Prefix each line by 'col' and terminate each with 'std', for coloring. +# Multi line coloring is problematic with "less -R", so we really need +# to color each line individually. +am__text_box = $(AWK) '{ \ + n = split($$0, lines, "\\. "); max = 0; \ + for (i = 1; i <= n; ++i) \ + if (max < length(lines[i])) \ + max = length(lines[i]); \ + for (i = 0; i < max; ++i) \ + line = line "="; \ + print col line std; \ + for (i = 1; i <= n; ++i) \ + if (lines[i]) \ + print col lines[i] std; \ + print col line std; \ +}' +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# To be inserted before the command running the test. Creates the +# directory for the log if needed. Stores in $dir the directory +# containing $f, in $tst the test, in $log the log, and passes +# TESTS_ENVIRONMENT. Save and restore TERM around use of +# TESTS_ENVIRONMENT, in case that unsets it. +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +srcdir=$(srcdir); export srcdir; \ +rm -f $@-t; \ +am__trap='rm -f '\''$(abs_builddir)/$@-t'\''; (exit $$st); exit $$st'; \ +trap "st=129; $$am__trap" 1; trap "st=130; $$am__trap" 2; \ +trap "st=141; $$am__trap" 13; trap "st=143; $$am__trap" 15; \ +am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`; \ +test "x$$am__odir" = x. || $(MKDIR_P) "$$am__odir" || exit $$?; \ +if test -f "./$$f"; then dir=./; \ +elif test -f "$$f"; then dir=; \ +else dir="$(srcdir)/"; fi; \ +tst=$$dir$$f; log='$@'; __SAVED_TERM=$$TERM; \ +$(TESTS_ENVIRONMENT) +# To be appended to the command running the test. Handle the stdout +# and stderr redirection, and catch the exit status. +am__check_post = \ +>$@-t 2>&1; \ +estatus=$$?; \ +if test -n '$(DISABLE_HARD_ERRORS)' \ + && test $$estatus -eq 99; then \ + estatus=1; \ +fi; \ +TERM=$$__SAVED_TERM; export TERM; \ +$(am__tty_colors); \ +xfailed=PASS; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + xfailed=XFAIL;; \ +esac; \ +case $$estatus.$$xfailed in \ + 0.XFAIL) col=$$red; res=XPASS;; \ + 0.*) col=$$grn; res=PASS ;; \ + 77.*) col=$$blu; res=SKIP ;; \ + 99.*) col=$$red; res=FAIL ;; \ + *.XFAIL) col=$$lgn; res=XFAIL;; \ + *.*) col=$$red; res=FAIL ;; \ +esac; \ +echo "$${col}$$res$${std}: $$f"; \ +echo "$$res: $$f (exit: $$estatus)" | \ + $(am__rst_section) >$@; \ +cat $@-t >>$@; \ +rm -f $@-t +RECHECK_LOGS = $(TEST_LOGS) +AM_RECURSIVE_TARGETS = check recheck check-html recheck-html +TEST_SUITE_HTML = $(TEST_SUITE_LOG:.log=.html) +TEST_SUITE_LOG = test-suite.log +TEST_EXTENSIONS = @EXEEXT@ .test +LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) +TEST_LOGS_TMP = $(TEST_LOGS:.log=.log-t) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AM_LDFLAGS = @AM_LDFLAGS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FOP = @FOP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDADD = @LDADD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBXML_CONFIG = @LIBXML_CONFIG@ +LIBXML_REQUIRED_VERSION = @LIBXML_REQUIRED_VERSION@ +LIBXSLT_CONFIG = @LIBXSLT_CONFIG@ +LIBXSLT_REQUIRED_VERSION = @LIBXSLT_REQUIRED_VERSION@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PDF2PS = @PDF2PS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +V_DOCBOOK = @V_DOCBOOK@ +V_DOCBOOK_ = @V_DOCBOOK_@ +V_DOCBOOK_0 = @V_DOCBOOK_0@ +V_FOP = @V_FOP@ +V_FOP_ = @V_FOP_@ +V_FOP_0 = @V_FOP_0@ +XSLTPROC = @XSLTPROC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = Copyright examples solaris tests $(usage_texts) \ + usage2c.awk $(manpage_src) $(userguide_src) $(txtguide_src) \ + $(buildfiles_docs) $(manpage) +WIN32_DIST = README TODO Copyright COPYING AUTHORS ChangeLog INSTALL NEWS xml.exe +WIN32_doc_DIST = $(generated_docs) doc/html.css +ACLOCAL_AMFLAGS = -I m4 +@GCC_TRUE@AM_CFLAGS = -Wall -pedantic +GIT_DESCRIBE = git describe --tags --dirty +LOG_COMPILER = abs_builddir=$(abs_builddir) \ +EXEEXT=$(EXEEXT) SED=$(SED) AWK=$(AWK) SHELL=$(SHELL) \ + $(SHELL) $(srcdir)/tests/runTest.sh + + +# split tests into fast and slow, so we can run just the fast ones +SLOW_TESTS = \ +examples/bigxml-dtd\ +examples/bigxml-embed-ref\ +examples/bigxml-embed\ +examples/bigxml-relaxng\ +examples/bigxml-well-formed\ +examples/bigxml-xsd + +QUICK_TESTS = \ +examples/c14n-default-attr\ +examples/c14n-newlines\ +examples/c14n1\ +examples/c14n2\ +examples/command-help\ +examples/count1\ +examples/countnode1\ +examples/delete1\ +examples/dtd1\ +examples/dtd2\ +examples/dtd3\ +examples/dtd4\ +examples/ed-2op\ +examples/ed-append\ +examples/ed-backref-delete\ +examples/ed-backref1\ +examples/ed-backref2\ +examples/ed-expr\ +examples/ed-insert\ +examples/ed-literal\ +examples/ed-move\ +examples/ed-namespace\ +examples/ed-nop\ +examples/ed-subnode\ +examples/elem1\ +examples/elem2\ +examples/elem3\ +examples/elem-depth\ +examples/elem-uniq\ +examples/escape1\ +examples/exslt-ed\ +examples/exslt1\ +examples/external-entity\ +examples/findfile1\ +examples/genxml1\ +examples/hello1\ +examples/localname1\ +examples/look1\ +examples/move1\ +examples/N-order\ +examples/noindent1\ +examples/ns1\ +examples/pyx\ +examples/pyx-ns\ +examples/recover1\ +examples/rename-attr1\ +examples/rename-elem1\ +examples/schema1\ +examples/sel-literal\ +examples/sel-if\ +examples/sel-many-values\ +examples/sel-root\ +examples/sel-xpath-c\ +examples/sel-xpath-i\ +examples/sel-xpath-m\ +examples/sel-xpath-v\ +examples/sel1\ +examples/sort1\ +examples/sort2\ +examples/sort3\ +examples/structure1\ +examples/sum1\ +examples/tab1\ +examples/table1\ +examples/table2\ +examples/table3\ +examples/unicode1\ +examples/update-attr1\ +examples/update-elem1\ +examples/valid1\ +examples/xinclude1\ +examples/xsl-param1\ +examples/xsl-sum1 + + +# default to all the tests +TESTS = $(SLOW_TESTS) $(QUICK_TESTS) +XFAIL_TESTS = examples/bigxml-dtd examples/ed-namespace \ + $(am__append_1) +usage_texts = \ +src/usage.txt\ +src/c14n-usage.txt\ +src/depyx-usage.txt\ +src/edit-usage.txt\ +src/elem-usage.txt\ +src/escape-usage.txt\ +src/format-usage.txt\ +src/ls-usage.txt\ +src/pyx-usage.txt\ +src/select-usage.txt\ +src/trans-usage.txt\ +src/unescape-usage.txt\ +src/validate-usage.txt + +generated_usage_sources = \ +src/usage.c\ +src/c14n-usage.c\ +src/depyx-usage.c\ +src/edit-usage.c\ +src/elem-usage.c\ +src/escape-usage.c\ +src/format-usage.c\ +src/ls-usage.c\ +src/pyx-usage.c\ +src/select-usage.c\ +src/trans-usage.c\ +src/unescape-usage.c\ +src/validate-usage.c + +xml_SOURCES = src/escape.h src/trans.c src/trans.h src/xml.c \ + src/xml_C14N.c src/xml_depyx.c src/xml_edit.c src/xml_elem.c \ + src/xml_escape.c src/xml_format.c src/xml_ls.c src/xml_pyx.c \ + src/xml_select.c src/xmlstar.h src/xml_trans.c \ + src/xml_validate.c version.h +nodist_xml_SOURCES = $(generated_usage_sources) +userguide = doc/xmlstarlet-ug +userguide_gen = $(userguide).pdf $(userguide).ps $(userguide).html +userguide_src = $(userguide).xml +txtguide = doc/xmlstarlet.txt +txtguide_src = doc/gen-doc +manpage = doc/xmlstarlet.1 +manpage_src = doc/xmlstarlet-man.xml +generated_docs = $(userguide_gen) $(txtguide) $(manpage) +buildfiles_docs = doc/replace-PROG-VERSION.xsl doc/xmlstar-fodoc-style.xsl +DOCBOOK_PARAMS = \ +--param section.autolabel 1 \ +--stringparam generate.toc 'book toc,title' + +EDIT_XML = $(XSLTPROC) \ + --stringparam VERSION '$(VERSION)' \ + --stringparam PROG "`echo xml | $(SED) '$(program_transform_name)'`" \ + doc/replace-PROG-VERSION.xsl + + +# doc +man_MANS = $(manpage) +dist_doc_DATA = $(userguide_gen) doc/html.css $(txtguide) +CLEANFILES = version.h $(generated_usage_sources) +MAINTAINERCLEANFILES = $(manpage) $(userguide_gen) $(txtguide) +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .c .fo .html .log .o .obj .pdf .ps .test .test$(EXEEXT) .txt .xml +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/examples/tests.mk $(srcdir)/src/sources.mk $(srcdir)/doc/doc.mk $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; +$(srcdir)/examples/tests.mk $(srcdir)/src/sources.mk $(srcdir)/doc/doc.mk: + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @if test ! -f $@; then rm -f stamp-h1; else :; fi + @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +xmlstarlet.spec: $(top_builddir)/config.status $(srcdir)/xmlstarlet.spec.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +solaris/package/sol8-sparc/pkginfo: $(top_builddir)/config.status $(top_srcdir)/solaris/package/sol8-sparc/pkginfo.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +solaris/package/sol9-sparc/pkginfo: $(top_builddir)/config.status $(top_srcdir)/solaris/package/sol9-sparc/pkginfo.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) + +installcheck-binPROGRAMS: $(bin_PROGRAMS) + bad=0; pid=$$$$; list="$(bin_PROGRAMS)"; for p in $$list; do \ + case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \ + *" $$p "* | *" $(srcdir)/$$p "*) continue;; \ + esac; \ + f=`echo "$$p" | \ + sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ + for opt in --help --version; do \ + if "$(DESTDIR)$(bindir)/$$f" $$opt >c$${pid}_.out \ + 2>c$${pid}_.err </dev/null \ + && test -n "`cat c$${pid}_.out`" \ + && test -z "`cat c$${pid}_.err`"; then :; \ + else echo "$$f does not support $$opt" 1>&2; bad=1; fi; \ + done; \ + done; rm -f c$${pid}_.???; exit $$bad +src/$(am__dirstamp): + @$(MKDIR_P) src + @: > src/$(am__dirstamp) +src/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) src/$(DEPDIR) + @: > src/$(DEPDIR)/$(am__dirstamp) +src/trans.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) +src/xml.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) +src/xml_C14N.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +src/xml_depyx.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +src/xml_edit.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +src/xml_elem.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +src/xml_escape.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +src/xml_format.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +src/xml_ls.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +src/xml_pyx.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +src/xml_select.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +src/xml_trans.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +src/xml_validate.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +src/usage.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) +src/c14n-usage.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +src/depyx-usage.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +src/edit-usage.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +src/elem-usage.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +src/escape-usage.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +src/format-usage.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +src/ls-usage.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +src/pyx-usage.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +src/select-usage.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +src/trans-usage.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +src/unescape-usage.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +src/validate-usage.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) +xml$(EXEEXT): $(xml_OBJECTS) $(xml_DEPENDENCIES) $(EXTRA_xml_DEPENDENCIES) + @rm -f xml$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(xml_OBJECTS) $(xml_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f src/c14n-usage.$(OBJEXT) + -rm -f src/depyx-usage.$(OBJEXT) + -rm -f src/edit-usage.$(OBJEXT) + -rm -f src/elem-usage.$(OBJEXT) + -rm -f src/escape-usage.$(OBJEXT) + -rm -f src/format-usage.$(OBJEXT) + -rm -f src/ls-usage.$(OBJEXT) + -rm -f src/pyx-usage.$(OBJEXT) + -rm -f src/select-usage.$(OBJEXT) + -rm -f src/trans-usage.$(OBJEXT) + -rm -f src/trans.$(OBJEXT) + -rm -f src/unescape-usage.$(OBJEXT) + -rm -f src/usage.$(OBJEXT) + -rm -f src/validate-usage.$(OBJEXT) + -rm -f src/xml.$(OBJEXT) + -rm -f src/xml_C14N.$(OBJEXT) + -rm -f src/xml_depyx.$(OBJEXT) + -rm -f src/xml_edit.$(OBJEXT) + -rm -f src/xml_elem.$(OBJEXT) + -rm -f src/xml_escape.$(OBJEXT) + -rm -f src/xml_format.$(OBJEXT) + -rm -f src/xml_ls.$(OBJEXT) + -rm -f src/xml_pyx.$(OBJEXT) + -rm -f src/xml_select.$(OBJEXT) + -rm -f src/xml_trans.$(OBJEXT) + -rm -f src/xml_validate.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/c14n-usage.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/depyx-usage.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/edit-usage.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/elem-usage.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/escape-usage.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/format-usage.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/ls-usage.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/pyx-usage.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/select-usage.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/trans-usage.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/trans.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/unescape-usage.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/usage.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/validate-usage.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/xml.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/xml_C14N.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/xml_depyx.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/xml_edit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/xml_elem.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/xml_escape.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/xml_format.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/xml_ls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/xml_pyx.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/xml_select.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/xml_trans.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/xml_validate.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` +install-man1: $(man_MANS) + @$(NORMAL_INSTALL) + @list1=''; \ + list2='$(man_MANS)'; \ + test -n "$(man1dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.1[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) +install-dist_docDATA: $(dist_doc_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ + done + +uninstall-dist_docDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__sh_e_setup); \ + list='$(TEST_LOGS)'; \ + results=`for f in $$list; do \ + test -r $$f && read line < $$f && echo "$$line" \ + || echo FAIL; \ + done`; \ + all=`echo "$$results" | sed '/^$$/d' | wc -l | sed -e 's/^[ ]*//'`; \ + fail=`echo "$$results" | grep -c '^FAIL'`; \ + pass=`echo "$$results" | grep -c '^PASS'`; \ + skip=`echo "$$results" | grep -c '^SKIP'`; \ + xfail=`echo "$$results" | grep -c '^XFAIL'`; \ + xpass=`echo "$$results" | grep -c '^XPASS'`; \ + failures=`expr $$fail + $$xpass`; \ + all=`expr $$all - $$skip`; \ + if test "$$all" -eq 1; then tests=test; All=; \ + else tests=tests; All="All "; fi; \ + case fail=$$fail:xpass=$$xpass:xfail=$$xfail in \ + fail=0:xpass=0:xfail=0) \ + msg="$$All$$all $$tests passed. "; \ + exit=true;; \ + fail=0:xpass=0:xfail=*) \ + msg="$$All$$all $$tests behaved as expected"; \ + if test "$$xfail" -eq 1; then xfailures=failure; \ + else xfailures=failures; fi; \ + msg="$$msg ($$xfail expected $$xfailures). "; \ + exit=true;; \ + fail=*:xpass=0:xfail=*) \ + msg="$$fail of $$all $$tests failed. "; \ + exit=false;; \ + fail=*:xpass=*:xfail=*) \ + msg="$$failures of $$all $$tests did not behave as expected"; \ + if test "$$xpass" -eq 1; then xpasses=pass; \ + else xpasses=passes; fi; \ + msg="$$msg ($$xpass unexpected $$xpasses). "; \ + exit=false;; \ + *) \ + echo >&2 "incorrect case"; exit 4;; \ + esac; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + msg="$$msg($$skip test was not run). "; \ + else \ + msg="$$msg($$skip tests were not run). "; \ + fi; \ + fi; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + echo "$$msg"; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for f in $$list; do \ + test -r $$f && read line < $$f || line=; \ + case $$line in \ + PASS:*|XFAIL:*);; \ + *) echo; cat $$f;; \ + esac; \ + done; \ + } >$(TEST_SUITE_LOG).tmp; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if test "$$failures" -ne 0; then \ + msg="$${msg}See $(subdir)/$(TEST_SUITE_LOG). "; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + msg="$${msg}Please report to $(PACKAGE_BUGREPORT). "; \ + fi; \ + fi; \ + test x"$$VERBOSE" = x || $$exit || cat $(TEST_SUITE_LOG); \ + $(am__tty_colors); \ + if $$exit; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$$msg" | $(am__text_box) "col=$$col" "std=$$std"; \ + $$exit || exit 1 + +check-TESTS recheck: + @if test $@ != recheck; then \ + list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list; \ + fi + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @list='' list2='$(TEST_LOGS)'; for f in $$list2; do \ + test .log = $$f && continue; \ + if test $@ = recheck; then \ + test -f $$f || continue; \ + if test -r $$f && read line < $$f; then \ + case $$line in FAIL*|XPASS*) : ;; *) continue;; esac; \ + fi; \ + fi; \ + if test -z "$$list"; then list=$$f; else list="$$list $$f"; fi; \ + done; \ + if test $@ = recheck && test -n "$$list"; then \ + $(am__make_dryrun) || rm -f $$list || exit 1; \ + fi; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$list" +recheck: + +am--mostlyclean-test-html: + list='$(TEST_LOGS:.log=.html)'; test -z "$$list" || rm -f $$list + rm -f $(TEST_SUITE_HTML) + +.log.html: + @list='$(RST2HTML) $$RST2HTML rst2html rst2html.py'; \ + for r2h in $$list; do \ + if ($$r2h --version) >/dev/null 2>&1; then \ + R2H=$$r2h; \ + fi; \ + done; \ + if test -z "$$R2H"; then \ + echo >&2 "cannot find rst2html, cannot create $@"; \ + exit 2; \ + fi; \ + $$R2H $< >$@.tmp + @mv $@.tmp $@ + +# Be sure to run check first, and then to convert the result. +# Beware of concurrent executions. Run "check" not "check-TESTS", as +# check-SCRIPTS and other dependencies are rebuilt by the former only. +# And expect check to fail. +check-html recheck-html: + @target=`echo $@ | sed 's/-html$$//'`; \ + rv=0; $(MAKE) $(AM_MAKEFLAGS) $$target || rv=$$?; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_HTML) TEST_LOGS= || exit 4; \ + exit $$rv +examples/bigxml-dtd.log: examples/bigxml-dtd + @p='examples/bigxml-dtd'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/bigxml-embed-ref.log: examples/bigxml-embed-ref + @p='examples/bigxml-embed-ref'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/bigxml-embed.log: examples/bigxml-embed + @p='examples/bigxml-embed'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/bigxml-relaxng.log: examples/bigxml-relaxng + @p='examples/bigxml-relaxng'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/bigxml-well-formed.log: examples/bigxml-well-formed + @p='examples/bigxml-well-formed'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/bigxml-xsd.log: examples/bigxml-xsd + @p='examples/bigxml-xsd'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/c14n-default-attr.log: examples/c14n-default-attr + @p='examples/c14n-default-attr'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/c14n-newlines.log: examples/c14n-newlines + @p='examples/c14n-newlines'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/c14n1.log: examples/c14n1 + @p='examples/c14n1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/c14n2.log: examples/c14n2 + @p='examples/c14n2'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/command-help.log: examples/command-help + @p='examples/command-help'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/count1.log: examples/count1 + @p='examples/count1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/countnode1.log: examples/countnode1 + @p='examples/countnode1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/delete1.log: examples/delete1 + @p='examples/delete1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/dtd1.log: examples/dtd1 + @p='examples/dtd1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/dtd2.log: examples/dtd2 + @p='examples/dtd2'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/dtd3.log: examples/dtd3 + @p='examples/dtd3'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/dtd4.log: examples/dtd4 + @p='examples/dtd4'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/ed-2op.log: examples/ed-2op + @p='examples/ed-2op'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/ed-append.log: examples/ed-append + @p='examples/ed-append'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/ed-backref-delete.log: examples/ed-backref-delete + @p='examples/ed-backref-delete'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/ed-backref1.log: examples/ed-backref1 + @p='examples/ed-backref1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/ed-backref2.log: examples/ed-backref2 + @p='examples/ed-backref2'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/ed-expr.log: examples/ed-expr + @p='examples/ed-expr'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/ed-insert.log: examples/ed-insert + @p='examples/ed-insert'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/ed-literal.log: examples/ed-literal + @p='examples/ed-literal'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/ed-move.log: examples/ed-move + @p='examples/ed-move'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/ed-namespace.log: examples/ed-namespace + @p='examples/ed-namespace'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/ed-nop.log: examples/ed-nop + @p='examples/ed-nop'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/ed-subnode.log: examples/ed-subnode + @p='examples/ed-subnode'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/elem1.log: examples/elem1 + @p='examples/elem1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/elem2.log: examples/elem2 + @p='examples/elem2'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/elem3.log: examples/elem3 + @p='examples/elem3'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/elem-depth.log: examples/elem-depth + @p='examples/elem-depth'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/elem-uniq.log: examples/elem-uniq + @p='examples/elem-uniq'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/escape1.log: examples/escape1 + @p='examples/escape1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/exslt-ed.log: examples/exslt-ed + @p='examples/exslt-ed'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/exslt1.log: examples/exslt1 + @p='examples/exslt1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/external-entity.log: examples/external-entity + @p='examples/external-entity'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/findfile1.log: examples/findfile1 + @p='examples/findfile1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/genxml1.log: examples/genxml1 + @p='examples/genxml1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/hello1.log: examples/hello1 + @p='examples/hello1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/localname1.log: examples/localname1 + @p='examples/localname1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/look1.log: examples/look1 + @p='examples/look1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/move1.log: examples/move1 + @p='examples/move1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/N-order.log: examples/N-order + @p='examples/N-order'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/noindent1.log: examples/noindent1 + @p='examples/noindent1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/ns1.log: examples/ns1 + @p='examples/ns1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/pyx.log: examples/pyx + @p='examples/pyx'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/pyx-ns.log: examples/pyx-ns + @p='examples/pyx-ns'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/recover1.log: examples/recover1 + @p='examples/recover1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/rename-attr1.log: examples/rename-attr1 + @p='examples/rename-attr1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/rename-elem1.log: examples/rename-elem1 + @p='examples/rename-elem1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/schema1.log: examples/schema1 + @p='examples/schema1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/sel-literal.log: examples/sel-literal + @p='examples/sel-literal'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/sel-if.log: examples/sel-if + @p='examples/sel-if'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/sel-many-values.log: examples/sel-many-values + @p='examples/sel-many-values'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/sel-root.log: examples/sel-root + @p='examples/sel-root'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/sel-xpath-c.log: examples/sel-xpath-c + @p='examples/sel-xpath-c'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/sel-xpath-i.log: examples/sel-xpath-i + @p='examples/sel-xpath-i'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/sel-xpath-m.log: examples/sel-xpath-m + @p='examples/sel-xpath-m'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/sel-xpath-v.log: examples/sel-xpath-v + @p='examples/sel-xpath-v'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/sel1.log: examples/sel1 + @p='examples/sel1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/sort1.log: examples/sort1 + @p='examples/sort1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/sort2.log: examples/sort2 + @p='examples/sort2'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/sort3.log: examples/sort3 + @p='examples/sort3'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/structure1.log: examples/structure1 + @p='examples/structure1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/sum1.log: examples/sum1 + @p='examples/sum1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/tab1.log: examples/tab1 + @p='examples/tab1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/table1.log: examples/table1 + @p='examples/table1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/table2.log: examples/table2 + @p='examples/table2'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/table3.log: examples/table3 + @p='examples/table3'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/unicode1.log: examples/unicode1 + @p='examples/unicode1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/update-attr1.log: examples/update-attr1 + @p='examples/update-attr1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/update-elem1.log: examples/update-elem1 + @p='examples/update-elem1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/valid1.log: examples/valid1 + @p='examples/valid1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/xinclude1.log: examples/xinclude1 + @p='examples/xinclude1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/xsl-param1.log: examples/xsl-param1 + @p='examples/xsl-param1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +examples/xsl-sum1.log: examples/xsl-sum1 + @p='examples/xsl-sum1'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +.test.log: + @p='$<'; $(am__check_pre) $(TEST_LOG_COMPILE) "$$tst" $(am__check_post) +@am__EXEEXT_TRUE@.test$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; $(am__check_pre) $(TEST_LOG_COMPILE) "$$tst" $(am__check_post) + +distdir: $(DISTFILES) + @list='$(MANS)'; if test -n "$$list"; then \ + list=`for p in $$list; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ + if test -n "$$list" && \ + grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ + echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ + grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ + echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ + echo " typically \`make maintainer-clean' will remove them" >&2; \ + exit 1; \ + else :; fi; \ + else :; fi + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod u+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile $(PROGRAMS) $(MANS) $(DATA) config.h +installdirs: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(docdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS_TMP)" || rm -f $(TEST_LOGS_TMP) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f src/$(DEPDIR)/$(am__dirstamp) + -rm -f src/$(am__dirstamp) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf src/$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-dist_docDATA install-man + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: install-man1 + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: installcheck-binPROGRAMS + +maintainer-clean: maintainer-clean-am + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -rf src/$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: am--mostlyclean-test-html mostlyclean-compile \ + mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-dist_docDATA \ + uninstall-man + +uninstall-man: uninstall-man1 + +.MAKE: all check-am check-html install-am install-strip recheck-html + +.PHONY: CTAGS GTAGS all all-am am--mostlyclean-test-html am--refresh \ + check check-TESTS check-am check-html clean clean-binPROGRAMS \ + clean-generic ctags dist dist-all dist-bzip2 dist-gzip \ + dist-hook dist-lzip dist-lzma dist-shar dist-tarZ dist-xz \ + dist-zip distcheck distclean distclean-compile \ + distclean-generic distclean-hdr distclean-tags distcleancheck \ + distdir distuninstallcheck dvi dvi-am html html-am info \ + info-am install install-am install-binPROGRAMS install-data \ + install-data-am install-dist_docDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installcheck-binPROGRAMS installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am recheck recheck-html \ + tags uninstall uninstall-am uninstall-binPROGRAMS \ + uninstall-dist_docDATA uninstall-man uninstall-man1 + + +# TODO: figure out why log removal is needed and/or make it completely automatic +dist-hook: + @for log in $(srcdir)/examples/*.log ; do if [ -f "$$log" ] ; then \ + rm $(srcdir)/examples/*.log ; \ + echo 'ERROR: log files need to cleaned BEFORE making tarball, try again'; exit 1 ; fi ; done + @ if [ -d .git ] ; then \ + if [ $(VERSION) != `$(GIT_DESCRIBE)` ] ; then \ + echo 'ERROR: version mismatch, rerun autoconf -f' ; exit 1 ; fi ; \ + $(SED) 's/\[m4_esyscmd_s(\[$(GIT_DESCRIBE)\])\]/[$(VERSION)]/' \ + $(srcdir)/configure.ac > $(distdir)/configure.ac ; fi + +cleantar: + @(rm -f xmlstarlet*.tar.gz) + +rpm: cleantar distdir xmlstarlet.spec + cp xmlstarlet.spec $(distdir) + $(AMTAR) -czf $(distdir).tar.gz $(distdir) + rpmbuild -ta $(distdir).tar.gz + +$(distdir)-win32.zip: xml.exe + mkdir -p /tmp/$(distdir)/doc + cp $(WIN32_DIST) /tmp/$(distdir) + cp $(WIN32_doc_DIST) /tmp/$(distdir)/doc + strip /tmp/$(distdir)/xml.exe + cd /tmp && zip -9 --symlinks --recurse-paths --to-crlf --move \ + $(distdir)-win32.zip $(distdir) + mv /tmp/$(distdir)-win32.zip . + +dist-win32: $(distdir)-win32.zip + +version.h: VERSION + @if [ -d .git ] ; then \ + VERSION=`$(GIT_DESCRIBE)`; \ + else VERSION=$(VERSION) ; fi; \ + NEW_VERSION="#define VERSION \"$$VERSION\""; \ + OLD_VERSION=`cat version.h 2>/dev/null` ; \ + if [ "$$NEW_VERSION" != "$$OLD_VERSION" ] ; then \ + echo "$$NEW_VERSION" > version.h ; \ + echo "version.h: $$NEW_VERSION"; fi +VERSION: + +# need to build version.h even if dependency files haven't been +# generated +src/xml.o : version.h + +# qcheck is just tests listed in QUICK_TESTS +qcheck : + @$(MAKE) TESTS="$(QUICK_TESTS)" check + +.txt.c: + $(AM_V_GEN)$(AWK) -f $(srcdir)/usage2c.awk $< > $@ +$(generated_usage_sources) : usage2c.awk + +@BUILD_DOCS_TRUE@.xml.html: +@BUILD_DOCS_TRUE@ $(V_DOCBOOK)$(EDIT_XML) $< | $(XSLTPROC) $(DOCBOOK_PARAMS) \ +@BUILD_DOCS_TRUE@ --stringparam html.stylesheet html.css \ +@BUILD_DOCS_TRUE@ http://docbook.sourceforge.net/release/xsl-ns/current/html/docbook.xsl \ +@BUILD_DOCS_TRUE@ - > $@ + +@BUILD_DOCS_TRUE@.xml.fo: +@BUILD_DOCS_TRUE@ $(V_DOCBOOK)$(EDIT_XML) $< | $(XSLTPROC) $(DOCBOOK_PARAMS) doc/xmlstar-fodoc-style.xsl - > $@ + +@BUILD_DOCS_TRUE@@HAVE_FOP_TRUE@.fo.pdf: +@BUILD_DOCS_TRUE@@HAVE_FOP_TRUE@ $(V_FOP)$(FOP) -q $< $@ +@BUILD_DOCS_TRUE@@HAVE_PDF2PS_TRUE@.pdf.ps: +@BUILD_DOCS_TRUE@@HAVE_PDF2PS_TRUE@ $(AM_V_GEN)$(PDF2PS) $< $@ + +@BUILD_DOCS_TRUE@$(userguide).html : $(userguide).xml + +@BUILD_DOCS_TRUE@$(manpage): $(manpage_src) +@BUILD_DOCS_TRUE@ $(V_DOCBOOK)$(EDIT_XML) $< | $(XSLTPROC) -o $@ \ +@BUILD_DOCS_TRUE@ http://docbook.sourceforge.net/release/xsl-ns/current/manpages/docbook.xsl \ +@BUILD_DOCS_TRUE@ - + +@BUILD_DOCS_TRUE@$(txtguide): $(txtguide_src) $(usage_texts) +@BUILD_DOCS_TRUE@ $(AM_V_GEN)srcdir=$(srcdir) SED=$(SED) transform='$(program_transform_name)' $< ./xml > $@ + +@BUILD_DOCS_TRUE@clean-doc: +@BUILD_DOCS_TRUE@ rm -f $(generated_docs) + +# NOTE: if put inside "if BUILD_DOCS" automake issues a warning +.PHONY: clean-doc + +.PHONY: cleantar rpm dist-win32 VERSION doc + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: @@ -0,0 +1,179 @@ +1.4.1: Dec 8, 2012 + + - avoid segfault when attempting to edit the document node (Bug + #3575722) + + - Packaging: + - include doc/xmlstar-fodoc-style.xsl in the dist so that the + --enable-build-docs option works from the tarball (Bug + #3580667) + - AC_SUBST PACKAGE_TARNAME for automake so that documentation is + installed to the right place (Bug #3561958) + + - Test Suite: + - avoid test failures due to XML formatting and whitespace + changes (also fixes Bug #3572789) + - use automake's parallel test suite + - make bigxml tests much faster by using whitespace instead of nodes + - don't test str:replace() with ed: it doesn't work outside of + xslt in new libxslt + - ignore extra errors from libxml 2.9.0 bug + - let tests run using busybox + - add runAllTests.sh to run tests without make + + +1.4.0: Aug 26, 2012 + + - Documentation: + - executable name used in documentation now matches + --transform-program-name (Bug #3283713) + - added Makefile rules for generating documentation + (./configure --enable-build-docs) + + - ed subcommand: + - relative XPaths are now handled correctly (Bug #3527850) + - the last nodeset inserted by an edit operation can be + accessed as the XPath variable $prev (or $xstar:prev) + - add --var option to define XPath variables + - allow ed -u -x to insert nodesets instead of converting to + string + - remove hard limit for number of edit operations (Bug + #3488240) + + - pyx now handles namespaces correctly + +1.3.1: Jan 14, 2012 + + - handle multiple values for --value-of properly (Bug #2563866) + - substitute external entities (Bug #3467320) + - pyx output needs space between attribute name and value (Bug #3440797) + + +1.3.0: Oct 7, 2011 + + - avoid ASCII CRs in UTF-16/32 text (reported by Ming Chen) + - --value-of outputs concat values of all nodes (Req #2563866) + - encode special chars for ed -u -x + - allow use of exslt functions in ed -u -x + - add --var to select (allow --var <name>=<value> as well as --var + <name> <value> --break) + - work around libxml bug that passes bogus data to error handler + (Bug #3362217) + + +1.2.1: July 07, 2011 + + - check for NULL nodeset result (Bugs #3323189, #3323196) + - "-" was being confused with --elif + - generated XSLT should also have automatic namespaces + - allow -N after other option (Bug #3325166) + - namespace values were being registered as prefixes + - avoid segfault when asked to move namespace nodes + - missing newline in ed --help message + - test scripts portability + - no bashisms allowed in NetBSD sh + - make BRE portable: '+' is not allowed + - deal with msys path conversion properly (Bug #3178657) + - don't use XML_SAVE_WSNONSIG #if libxml < 2.7.8 (Bug #3310475) + + +1.2.0: June 1, 2011 + + - implement ed --update --expr + - use top-level namespace definitions from first input file, this + should remove the need to define namespaces on the command line + with -N in most cases. + - select exits with 0 only if result is non-empty (Req #3155702) + - add -Q to select, like grep's -q + - add column number to error messages + - restore input context (lost in version 1.0.3) to error messages + (Bug #3305659) + - print extra string information in error messages + - use entity definitions from dtd (Bug #3305659) + - add --net option to c14n, ed, fo, and val (Req #1071398) + - remove --catalog from tr --help message since it isn't actually supported + - add --elif and --else to sel --help message + + +1.1.0: Apr 3, 2011 + + - bug fix for BSD/OSX: check that O_BINARY is declared before + #including io.h (Bug 3211822) + - select improvements + - add --elif and --else options + - sorting on multiple fields + - correct (for English) lexical sorting instead of ASCIIbetical + - only outputs namespaces that are actually used + - only outputs xsl:param inputFile if it's used + - don't make separate templates if there is only 1 + - link to shared libxml and libxslt libraries by default + - add library version info to --version output + - add directory argument for ls; exit status indicates + failure/success instead of file count + - stop using old SAX1 interface, xmlstarlet will now link with a + libxml configured --without-sax1 and --without-legacy + + +1.0.6: Mar 13 2011: + + - Bug fixes: + - c14n: set stdout to binary mode on Windows to avoid carriage + returns (Bug 840665) + - fix broken --help options + - put actual behaviour of -P, -S options in --help output (see + Bug/Feature Request 2858514) + - remove unneeded escape of quote in ./configure --help + - don't distribute xmlstarlet.spec: it's generated by ./configure + - add src/xml.o depends on version.h to Makefile.am so compile + will succeed without dependency info (eg after make distclean) + - add test for subcommands' --help option + - Portability fixes: + - yes isn't portable, use an awk program instead + - neither read -r nor xargs -0 are portable, escape the command + lines to xargs instead + - don't use nonportable echo -n option + + +1.0.5: Feb 11 2011: + + - Bug fixes: + - use XSLT_PARSE_OPTIONS, else CDATA nodes can cause corruption (Bug 3158482) + - fix typo in help message + - get rid of warnings in -ansi -pedantic mode + - required libxml2 version is 2.6.23 + - usage strings use argv[0] as program name + - --help prints to stdout and exits with success + - double /'s under msys to avoid path conversion + - Portability fixes: + - don't use xargs (-d isn't portable) + - use -Wall only for gcc + -Build system: + - use -ansi in configure, and check for strdup declaration + - seperate list of sources and tests into subdirs + - check git version during make, not just autoconf + - tarball releases of configure.ac have actual version number + instead of querying git + + +1.0.4: Jan 16 2011: + + - Bug fixes: + - encode special XML characters in arguments (can now include quotes in xpath) + - non-zero exit code when input file is not found (Bug 3158488) + - ed with --pf/--ps options doesn't reformat output (Bug 3158490) + - exit() instead of segfault when trying to delete namespace nodes + (Bug 1120417) + - added --disable-static-libs ./configure option to use shared libxml2 and libxslt + - non-recursive make + - use TESTS and XFAIL_TESTS for testing, nicer output + +1.0.3: Nov 18 2010: + + - Bug fixes: + escape --value in update mode (Bug 3052978) + c14n now includes default attributes (Bug 1505579) + Allow special characters in sel --output literal (Bug 1912978) + remove warning from xml_trans.c (Bug 1521756) + Use xmlReader interface so line numbers are 32-bit (Bug 1219072) + test for error messages on lines past 2^16 (Bug 1219072) + don't look for embedded dtd if not asked (Bug 1167215) @@ -0,0 +1,6 @@ + +XMLStarlet is a command line XML toolkit which can be used to transform, +query, validate, and edit XML documents and files using simple set of shell +commands in similar way it is done for plain text files using grep/sed/awk/ +tr/diff/patch. + @@ -0,0 +1,4 @@ +1. xml ed option is highly incomplete +2. How about XUpdate? (see http://www.xmldb.org/) +3. just do grep TODO src/*.c and you'll figure it out +4. generate xsd/DTD (best guess) from given XML document diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..5d6c52a --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,1105 @@ +# generated automatically by aclocal 1.11.6 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, +# Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software +# Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11.6], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.11.6])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 9 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, +# 2010, 2011 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 12 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 5 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 16 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, +# Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008, +# 2011 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless `enable' is passed literally. +# For symmetry, `disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. +AC_DEFUN([AM_MAINTAINER_MODE], +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], +[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST([MAINT])dnl +] +) + +AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# AM_PROG_CC_C_O +# -------------- +# Like AC_PROG_CC_C_O, but changed for automake. +AC_DEFUN([AM_PROG_CC_C_O], +[AC_REQUIRE([AC_PROG_CC_C_O])dnl +AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +dnl Make sure AC_PROG_CC is never called again, or it will override our +dnl setting of CC. +m4_define([AC_PROG_CC], + [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, +# Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software +# Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2009, 2011 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# (`yes' being less verbose, `no' or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], +[ --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0')]) +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few `make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using `$V' instead of `$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar <conftest.tar]) + grep GrepMe conftest.dir/file >/dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([m4/quiet-rule.m4]) +m4_include([m4/xstar-check-libs.m4]) @@ -0,0 +1,343 @@ +#! /bin/sh +# Wrapper for compilers which do not understand '-c -o'. + +scriptversion=2012-03-05.13; # UTC + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009, 2010, 2012 Free +# Software Foundation, Inc. +# Written by Tom Tromey <tromey@cygnus.com>. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to <bug-automake@gnu.org> or send patches to +# <automake-patches@gnu.org>. + +nl=' +' + +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent tools from complaining about whitespace usage. +IFS=" "" $nl" + +file_conv= + +# func_file_conv build_file lazy +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. If the determined conversion +# type is listed in (the comma separated) LAZY, no conversion will +# take place. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv/,$2, in + *,$file_conv,*) + ;; + mingw/*) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin/*) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine/*) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_cl_dashL linkdir +# Make cl look for libraries in LINKDIR +func_cl_dashL () +{ + func_file_conv "$1" + if test -z "$lib_path"; then + lib_path=$file + else + lib_path="$lib_path;$file" + fi + linker_opts="$linker_opts -LIBPATH:$file" +} + +# func_cl_dashl library +# Do a library search-path lookup for cl +func_cl_dashl () +{ + lib=$1 + found=no + save_IFS=$IFS + IFS=';' + for dir in $lib_path $LIB + do + IFS=$save_IFS + if $shared && test -f "$dir/$lib.dll.lib"; then + found=yes + lib=$dir/$lib.dll.lib + break + fi + if test -f "$dir/$lib.lib"; then + found=yes + lib=$dir/$lib.lib + break + fi + done + IFS=$save_IFS + + if test "$found" != yes; then + lib=$lib.lib + fi +} + +# func_cl_wrapper cl arg... +# Adjust compile command to suit cl +func_cl_wrapper () +{ + # Assume a capable shell + lib_path= + shared=: + linker_opts= + for arg + do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + eat=1 + case $2 in + *.o | *.[oO][bB][jJ]) + func_file_conv "$2" + set x "$@" -Fo"$file" + shift + ;; + *) + func_file_conv "$2" + set x "$@" -Fe"$file" + shift + ;; + esac + ;; + -I) + eat=1 + func_file_conv "$2" mingw + set x "$@" -I"$file" + shift + ;; + -I*) + func_file_conv "${1#-I}" mingw + set x "$@" -I"$file" + shift + ;; + -l) + eat=1 + func_cl_dashl "$2" + set x "$@" "$lib" + shift + ;; + -l*) + func_cl_dashl "${1#-l}" + set x "$@" "$lib" + shift + ;; + -L) + eat=1 + func_cl_dashL "$2" + ;; + -L*) + func_cl_dashL "${1#-L}" + ;; + -static) + shared=false + ;; + -Wl,*) + arg=${1#-Wl,} + save_ifs="$IFS"; IFS=',' + for flag in $arg; do + IFS="$save_ifs" + linker_opts="$linker_opts $flag" + done + IFS="$save_ifs" + ;; + -Xlinker) + eat=1 + linker_opts="$linker_opts $2" + ;; + -*) + set x "$@" "$1" + shift + ;; + *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) + func_file_conv "$1" + set x "$@" -Tp"$file" + shift + ;; + *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) + func_file_conv "$1" mingw + set x "$@" "$file" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift + done + if test -n "$linker_opts"; then + linker_opts="-link$linker_opts" + fi + exec "$@" $linker_opts + exit 1 +} + +eat= + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand '-c -o'. +Remove '-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file 'INSTALL'. + +Report bugs to <bug-automake@gnu.org>. +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + func_cl_wrapper "$@" # Doesn't return... + ;; +esac + +ofile= +cfile= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + # So we strip '-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no '-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # '.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use '[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/config.guess b/config.guess new file mode 100644 index 0000000..d622a44 --- /dev/null +++ b/config.guess @@ -0,0 +1,1530 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +# 2011, 2012 Free Software Foundation, Inc. + +timestamp='2012-02-10' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see <http://www.gnu.org/licenses/>. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner. Please send patches (context +# diff format) to <config-patches@gnu.org> and include a ChangeLog +# entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to <config-patches@gnu.org>." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include <stdio.h> /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include <sys/systemcfg.h> + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include <stdlib.h> + #include <unistd.h> + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include <unistd.h> + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=`/usr/bin/uname -p` + case ${UNAME_PROCESSOR} in + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:MSYS*:*) + echo ${UNAME_MACHINE}-pc-msys + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + aarch64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + hexagon:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + LIBC=gnu + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` + echo ${UNAME_MACHINE}-pc-isc$UNAME_REL + elif /bin/uname -X 2>/dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says <Richard.M.Bartel@ccMail.Census.GOV> + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes <hewes@openmarket.com>. + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + i386) + eval $set_cc_for_build + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + UNAME_PROCESSOR="x86_64" + fi + fi ;; + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; + x86_64:VMkernel:*:*) + echo ${UNAME_MACHINE}-unknown-esx + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c <<EOF +#ifdef _SEQUENT_ +# include <sys/types.h> +# include <sys/utsname.h> +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include <sys/param.h> + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include <sys/param.h> +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 <<EOF +$0: unable to guess system type + +This script, last modified $timestamp, has failed to recognize +the operating system you are using. It is advised that you +download the most up to date version of the config scripts from + + http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +and + http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +If the version you run ($0) is already up to date, please +send the following data and any information you think might be +pertinent to <config-patches@gnu.org> in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config.h.in b/config.h.in new file mode 100644 index 0000000..7b016ff --- /dev/null +++ b/config.h.in @@ -0,0 +1,97 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* don't have O_BINARY */ +#undef HAVE_DECL_O_BINARY + +/* have exslt*XpathCtxtRegister() */ +#undef HAVE_EXSLT_XPATH_REGISTER + +/* Define to 1 if you have the <inttypes.h> header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the `lstat' function. */ +#undef HAVE_LSTAT + +/* Define to 1 if your system has a GNU libc compatible `malloc' function, and + to 0 otherwise. */ +#undef HAVE_MALLOC + +/* Define to 1 if you have the <memory.h> header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if your system has a GNU libc compatible `realloc' function, + and to 0 otherwise. */ +#undef HAVE_REALLOC + +/* Define to 1 if you have the `setmode' function. */ +#undef HAVE_SETMODE + +/* Define to 1 if you have the `stat' function. */ +#undef HAVE_STAT + +/* Define to 1 if you have the <stdint.h> header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the <stdlib.h> header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the <strings.h> header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the <string.h> header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the <sys/types.h> header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the <unistd.h> header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if `lstat' dereferences a symlink specified with a trailing + slash. */ +#undef LSTAT_FOLLOWS_SLASHED_SYMLINK + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +#undef NO_MINUS_C_MINUS_O + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Using the Win32 Socket implementation */ +#undef _WINSOCKAPI_ + +/* needed to get lstat declaration in -ansi mode */ +#undef _XOPEN_SOURCE + +/* Define to rpl_malloc if the replacement function should be used. */ +#undef malloc + +/* Define to `int' if <sys/types.h> does not define. */ +#undef mode_t + +/* Define to rpl_realloc if the replacement function should be used. */ +#undef realloc + +/* Define to `unsigned int' if <sys/types.h> does not define. */ +#undef size_t diff --git a/config.sub b/config.sub new file mode 100644 index 0000000..6205f84 --- /dev/null +++ b/config.sub @@ -0,0 +1,1782 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +# 2011, 2012 Free Software Foundation, Inc. + +timestamp='2012-04-18' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see <http://www.gnu.org/licenses/>. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Please send patches to <config-patches@gnu.org>. Submit a context +# diff and a properly formatted GNU ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to <config-patches@gnu.org>." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + android-linux) + os=-linux-android + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*178) + os=-lynxos178 + ;; + -lynx*5) + os=-lynxos5 + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | be32 | be64 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | epiphany \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 \ + | ns16k | ns32k \ + | open8 \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pyramid \ + | rl78 | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | we32k \ + | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + xgate) + basic_machine=$basic_machine-unknown + os=-none + ;; + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | be32-* | be64-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | le32-* | le64-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pyramid-* \ + | rl78-* | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile*-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ + | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16 | cr16-*) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze) + basic_machine=microblaze-xilinx + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + msys) + basic_machine=i386-pc + os=-msys + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + nacl) + basic_machine=le32-unknown + os=-nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc | ppcbe) basic_machine=powerpc-unknown + ;; + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tile*) + basic_machine=$basic_machine-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -nacl*) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + hexagon-*) + os=-elf + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/configure b/configure new file mode 100755 index 0000000..e1213bd --- /dev/null +++ b/configure @@ -0,0 +1,7612 @@ +#! /bin/sh +# From configure.ac 1.4.1. +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for XMLStarlet 1.4.1. +# +# Report bugs to <http://sourceforge.net/projects/xmlstar/support>. +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: http://sourceforge.net/projects/xmlstar/support about +$0: your system, including any error possibly output before +$0: this message. Then install a modern shell, or manually +$0: run the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +as_awk_strverscmp=' + # Use only awk features that work with 7th edition Unix awk (1978). + # My, what an old awk you have, Mr. Solaris! + END { + while (length(v1) && length(v2)) { + # Set d1 to be the next thing to compare from v1, and likewise for d2. + # Normally this is a single character, but if v1 and v2 contain digits, + # compare them as integers and fractions as strverscmp does. + if (v1 ~ /^[0-9]/ && v2 ~ /^[0-9]/) { + # Split v1 and v2 into their leading digit string components d1 and d2, + # and advance v1 and v2 past the leading digit strings. + for (len1 = 1; substr(v1, len1 + 1) ~ /^[0-9]/; len1++) continue + for (len2 = 1; substr(v2, len2 + 1) ~ /^[0-9]/; len2++) continue + d1 = substr(v1, 1, len1); v1 = substr(v1, len1 + 1) + d2 = substr(v2, 1, len2); v2 = substr(v2, len2 + 1) + if (d1 ~ /^0/) { + if (d2 ~ /^0/) { + # Compare two fractions. + while (d1 ~ /^0/ && d2 ~ /^0/) { + d1 = substr(d1, 2); len1-- + d2 = substr(d2, 2); len2-- + } + if (len1 != len2 && ! (len1 && len2 && substr(d1, 1, 1) == substr(d2, 1, 1))) { + # The two components differ in length, and the common prefix + # contains only leading zeros. Consider the longer to be less. + d1 = -len1 + d2 = -len2 + } else { + # Otherwise, compare as strings. + d1 = "x" d1 + d2 = "x" d2 + } + } else { + # A fraction is less than an integer. + exit 1 + } + } else { + if (d2 ~ /^0/) { + # An integer is greater than a fraction. + exit 2 + } else { + # Compare two integers. + d1 += 0 + d2 += 0 + } + } + } else { + # The normal case, without worrying about digits. + d1 = substr(v1, 1, 1); v1 = substr(v1, 2) + d2 = substr(v2, 1, 1); v2 = substr(v2, 2) + } + if (d1 < d2) exit 1 + if (d1 > d2) exit 2 + } + # Beware Solaris /usr/xgp4/bin/awk (at least through Solaris 10), + # which mishandles some comparisons of empty strings to integers. + if (length(v2)) exit 1 + if (length(v1)) exit 2 + } +' + +test -n "$DJDIR" || exec 7<&0 </dev/null +exec 6>&1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='XMLStarlet' +PACKAGE_TARNAME='xmlstarlet' +PACKAGE_VERSION='1.4.1' +PACKAGE_STRING='XMLStarlet 1.4.1' +PACKAGE_BUGREPORT='http://sourceforge.net/projects/xmlstar/support' +PACKAGE_URL='http://xmlstar.sourceforge.net/' + +# Factoring default headers for most tests. +ac_includes_default="\ +#include <stdio.h> +#ifdef HAVE_SYS_TYPES_H +# include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +# include <sys/stat.h> +#endif +#ifdef STDC_HEADERS +# include <stdlib.h> +# include <stddef.h> +#else +# ifdef HAVE_STDLIB_H +# include <stdlib.h> +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include <memory.h> +# endif +# include <string.h> +#endif +#ifdef HAVE_STRINGS_H +# include <strings.h> +#endif +#ifdef HAVE_INTTYPES_H +# include <inttypes.h> +#endif +#ifdef HAVE_STDINT_H +# include <stdint.h> +#endif +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif" + +ac_func_list= +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +V_DOCBOOK_0 +V_DOCBOOK_ +V_DOCBOOK +V_FOP_0 +V_FOP_ +V_FOP +LIBXSLT_REQUIRED_VERSION +LIBXML_REQUIRED_VERSION +LDADD +AM_LDFLAGS +AM_CPPFLAGS +HAVE_EXSLT_XPATH_REGISTER_FALSE +HAVE_EXSLT_XPATH_REGISTER_TRUE +LIBOBJS +EGREP +GREP +CPP +BUILD_DOCS_FALSE +BUILD_DOCS_TRUE +HAVE_PDF2PS_FALSE +HAVE_PDF2PS_TRUE +PDF2PS +HAVE_FOP_FALSE +HAVE_FOP_TRUE +FOP +XSLTPROC +LIBXSLT_CONFIG +LIBXML_CONFIG +SED +GCC_FALSE +GCC_TRUE +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_silent_rules +enable_maintainer_mode +with_libxml_prefix +with_libxml_include_prefix +with_libxml_libs_prefix +with_libxml_src +with_libxslt_prefix +with_libxslt_include_prefix +with_libxslt_libs_prefix +with_libxslt_src +with_libiconv_prefix +with_libiconv_include_prefix +with_libiconv_libs_prefix +enable_static_libs +enable_build_docs +enable_dependency_tracking +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures XMLStarlet 1.4.1 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/xmlstarlet] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of XMLStarlet 1.4.1:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0') + --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer + --enable-static-libs link statically with libxml2 and lib(e)xslt + [default=no] + --enable-build-docs include rules to build documentation files + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-libxml-prefix=PFX + Specify location of libxml + --with-libxml-include-prefix=PFX + Specify location of libxml headers + --with-libxml-libs-prefix=PFX + Specify location of libxml libs + --with-libxml-src=DIR For libxml that's not installed yet (sets all three + above) + --with-libxslt-prefix=PFX + Specify location of libxslt + --with-libxslt-include-prefix=PFX + Specify location of libxslt headers + --with-libxslt-libs-prefix=PFX + Specify location of libxslt libs + --with-libxslt-src=DIR For libxslt that's not installed yet (sets all three + above) + --with-libiconv-prefix=PFX + Specify location of libiconv + --with-libiconv-include-prefix=PFX + Specify location of libiconv headers + --with-libiconv-libs-prefix=PFX + Specify location of libiconv libs + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a + nonstandard directory <lib dir> + LIBS libraries to pass to the linker, e.g. -l<library> + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if + you have headers in a nonstandard directory <include dir> + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to <http://sourceforge.net/projects/xmlstar/support>. +XMLStarlet home page: <http://xmlstar.sourceforge.net/>. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +XMLStarlet configure 1.4.1 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## -------------------------------------------------------------- ## +## Report this to http://sourceforge.net/projects/xmlstar/support ## +## -------------------------------------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_type + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case <limits.h> declares $2. + For example, HP-UX 11i <limits.h> declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + <limits.h> exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES +# --------------------------------------------- +# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR +# accordingly. +ac_fn_c_check_decl () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + as_decl_name=`echo $2|sed 's/ *(.*//'` + as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 +$as_echo_n "checking whether $as_decl_name is declared... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +#ifndef $as_decl_name +#ifdef __cplusplus + (void) $as_decl_use; +#else + (void) $as_decl_name; +#endif +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_decl +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by XMLStarlet $as_me 1.4.1, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +as_fn_append ac_func_list " lstat" +as_fn_append ac_func_list " stat" +as_fn_append ac_func_list " setmode" +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + +am__api_version='1.11' + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='xmlstarlet' + VERSION='1.4.1' + + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=0;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + + +LIBXML_REQUIRED_VERSION=2.6.27 +LIBXSLT_REQUIRED_VERSION=1.1.9 + + +# Check whether --with-libxml-prefix was given. +if test "${with_libxml_prefix+set}" = set; then : + withval=$with_libxml_prefix; LIBXML_PREFIX="$withval" +fi + + +# Check whether --with-libxml-include-prefix was given. +if test "${with_libxml_include_prefix+set}" = set; then : + withval=$with_libxml_include_prefix; LIBXML_INCDIR="$withval" +fi + + +# Check whether --with-libxml-libs-prefix was given. +if test "${with_libxml_libs_prefix+set}" = set; then : + withval=$with_libxml_libs_prefix; LIBXML_LIBDIR="$withval" +fi + + +# Check whether --with-libxml-src was given. +if test "${with_libxml_src+set}" = set; then : + withval=$with_libxml_src; LIBXML_SRCDIR="$withval" + LIBXML_LIBDIR="$LIBXML_SRCDIR/.libs" +fi + + + +# Check whether --with-libxslt-prefix was given. +if test "${with_libxslt_prefix+set}" = set; then : + withval=$with_libxslt_prefix; LIBXSLT_PREFIX="$withval" +fi + + +# Check whether --with-libxslt-include-prefix was given. +if test "${with_libxslt_include_prefix+set}" = set; then : + withval=$with_libxslt_include_prefix; LIBXSLT_INCDIR="$withval" +fi + + +# Check whether --with-libxslt-libs-prefix was given. +if test "${with_libxslt_libs_prefix+set}" = set; then : + withval=$with_libxslt_libs_prefix; LIBXSLT_LIBDIR="$withval" +fi + + +# Check whether --with-libxslt-src was given. +if test "${with_libxslt_src+set}" = set; then : + withval=$with_libxslt_src; LIBXSLT_SRCDIR="$withval" + LIBXSLT_LIBDIR="$LIBXSLT_SRCDIR/.libs" +fi + + + +# Check whether --with-libiconv-prefix was given. +if test "${with_libiconv_prefix+set}" = set; then : + withval=$with_libiconv_prefix; LIBICONV_PREFIX="$withval" +fi + + +# Check whether --with-libiconv-include-prefix was given. +if test "${with_libiconv_include_prefix+set}" = set; then : + withval=$with_libiconv_include_prefix; LIBICONV_INCDIR="$withval" +fi + + +# Check whether --with-libiconv-libs-prefix was given. +if test "${with_libiconv_libs_prefix+set}" = set; then : + withval=$with_libiconv_libs_prefix; LIBICONV_LIBDIR="$withval" +fi + + + + +# Check whether --enable-static-libs was given. +if test "${enable_static_libs+set}" = set; then : + enableval=$enable_static_libs; STATIC_LIBS=$enableval +else + STATIC_LIBS=no +fi + + +# Check whether --enable-build_docs was given. +if test "${enable_build_docs+set}" = set; then : + enableval=$enable_build_docs; +else + enable_build_docs=no +fi + + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdio.h> +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +#include <stdio.h> +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + if test x$GCC = xyes; then + GCC_TRUE= + GCC_FALSE='#' +else + GCC_TRUE='#' + GCC_FALSE= +fi + +if test x$GCC = xyes; then : + CFLAGS="-ansi $CFLAGS" +fi +if test "x$CC" != xcc; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 +$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 +$as_echo_n "checking whether cc understands -c and -o together... " >&6; } +fi +set dummy $CC; ac_cc=`$as_echo "$2" | + sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +# Make sure it works both with $CC and with simple cc. +# We do the test twice because some compilers refuse to overwrite an +# existing .o file with -o, though they will create one. +ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' +rm -f conftest2.* +if { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; +then + eval ac_cv_prog_cc_${ac_cc}_c_o=yes + if test "x$CC" != xcc; then + # Test first that cc exists at all. + if { ac_try='cc -c conftest.$ac_ext >&5' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' + rm -f conftest2.* + if { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; + then + # cc works too. + : + else + # cc exists but doesn't like -o. + eval ac_cv_prog_cc_${ac_cc}_c_o=no + fi + fi + fi +else + eval ac_cv_prog_cc_${ac_cc}_c_o=no +fi +rm -f core conftest* + +fi +if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h + +fi + +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + + + + + + if test "x$LIBXML_SRCDIR" != x; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: using libxml src dir \"$LIBXML_SRCDIR\"" >&5 +$as_echo "$as_me: using libxml src dir \"$LIBXML_SRCDIR\"" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: not checking libxml version" >&5 +$as_echo "$as_me: WARNING: not checking libxml version" >&2;} +else + # Extract the first word of "xml2-config", so it can be a program name with args. +set dummy xml2-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_LIBXML_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $LIBXML_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_LIBXML_CONFIG="$LIBXML_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $LIBXML_PREFIX/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_LIBXML_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LIBXML_CONFIG=$ac_cv_path_LIBXML_CONFIG +if test -n "$LIBXML_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBXML_CONFIG" >&5 +$as_echo "$LIBXML_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$LIBXML_CONFIG" = x; then : + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "xml2-config not found +See \`config.log' for more details" "$LINENO" 5; } +fi + LIBXML_VERSION=$($LIBXML_CONFIG --version) + as_arg_v1=$LIBXML_VERSION +as_arg_v2=$LIBXML_REQUIRED_VERSION +awk "$as_awk_strverscmp" v1="$as_arg_v1" v2="$as_arg_v2" /dev/null +case $? in #( + 1) : + as_fn_error $? "xmlstarlet needs at least libxml version $LIBXML_REQUIRED_VERSION (http://www.xmlsoft.org/)" "$LINENO" 5 ;; #( + 0) : + ;; #( + 2) : + ;; #( + *) : + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: using libxml-$LIBXML_VERSION" >&5 +$as_echo "$as_me: using libxml-$LIBXML_VERSION" >&6;} + LIBXML_PREFIX=`$as_dirname -- $LIBXML_CONFIG || +$as_expr X$LIBXML_CONFIG : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X$LIBXML_CONFIG : 'X\(//\)[^/]' \| \ + X$LIBXML_CONFIG : 'X\(//\)$' \| \ + X$LIBXML_CONFIG : 'X\(/\)' \| . 2>/dev/null || +$as_echo X$LIBXML_CONFIG | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + LIBXML_PREFIX=`$as_dirname -- $LIBXML_PREFIX || +$as_expr X$LIBXML_PREFIX : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X$LIBXML_PREFIX : 'X\(//\)[^/]' \| \ + X$LIBXML_PREFIX : 'X\(//\)$' \| \ + X$LIBXML_PREFIX : 'X\(/\)' \| . 2>/dev/null || +$as_echo X$LIBXML_PREFIX | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + : ${LIBXML_LIBDIR="$LIBXML_PREFIX/lib"} +fi + + +if test "x$LIBXML_SRCDIR" != x; then : + LIBXML_INCDIR="$LIBXML_SRCDIR/include" +fi +: ${LIBXML_INCDIR="$LIBXML_PREFIX/include/libxml2"} + +if test "x$STATIC_LIBS" != xno; then : + LIBXML_CPPFLAGS="-I$LIBXML_INCDIR -DLIBXML_STATIC" +else + LIBXML_CPPFLAGS="-I$LIBXML_INCDIR" +fi + +if test "x$STATIC_LIBS" != xno; then : + LIBXML_LIBS="$LIBXML_LIBDIR/libxml2.a" +else + LIBXML_LIBS="-lxml2" +fi +LIBXML_LDFLAGS="-L$LIBXML_LIBDIR" + + + + + + if test "x$LIBXSLT_SRCDIR" != x; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: using libxslt src dir \"$LIBXSLT_SRCDIR\"" >&5 +$as_echo "$as_me: using libxslt src dir \"$LIBXSLT_SRCDIR\"" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: not checking libxslt version" >&5 +$as_echo "$as_me: WARNING: not checking libxslt version" >&2;} +else + # Extract the first word of "xslt-config", so it can be a program name with args. +set dummy xslt-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_LIBXSLT_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $LIBXSLT_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_LIBXSLT_CONFIG="$LIBXSLT_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $LIBXSLT_PREFIX/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_LIBXSLT_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LIBXSLT_CONFIG=$ac_cv_path_LIBXSLT_CONFIG +if test -n "$LIBXSLT_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBXSLT_CONFIG" >&5 +$as_echo "$LIBXSLT_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$LIBXSLT_CONFIG" = x; then : + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "xslt-config not found +See \`config.log' for more details" "$LINENO" 5; } +fi + LIBXSLT_VERSION=$($LIBXSLT_CONFIG --version) + as_arg_v1=$LIBXSLT_VERSION +as_arg_v2=$LIBXSLT_REQUIRED_VERSION +awk "$as_awk_strverscmp" v1="$as_arg_v1" v2="$as_arg_v2" /dev/null +case $? in #( + 1) : + as_fn_error $? "xmlstarlet needs at least libxslt version $LIBXSLT_REQUIRED_VERSION (http://www.xmlsoft.org/)" "$LINENO" 5 ;; #( + 0) : + ;; #( + 2) : + ;; #( + *) : + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: using libxslt-$LIBXSLT_VERSION" >&5 +$as_echo "$as_me: using libxslt-$LIBXSLT_VERSION" >&6;} + LIBXSLT_PREFIX=`$as_dirname -- $LIBXSLT_CONFIG || +$as_expr X$LIBXSLT_CONFIG : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X$LIBXSLT_CONFIG : 'X\(//\)[^/]' \| \ + X$LIBXSLT_CONFIG : 'X\(//\)$' \| \ + X$LIBXSLT_CONFIG : 'X\(/\)' \| . 2>/dev/null || +$as_echo X$LIBXSLT_CONFIG | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + LIBXSLT_PREFIX=`$as_dirname -- $LIBXSLT_PREFIX || +$as_expr X$LIBXSLT_PREFIX : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X$LIBXSLT_PREFIX : 'X\(//\)[^/]' \| \ + X$LIBXSLT_PREFIX : 'X\(//\)$' \| \ + X$LIBXSLT_PREFIX : 'X\(/\)' \| . 2>/dev/null || +$as_echo X$LIBXSLT_PREFIX | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + : ${LIBXSLT_LIBDIR="$LIBXSLT_PREFIX/lib"} +fi + + +if test "x$LIBXSLT_SRCDIR" != x; then : + XSLTPROC_PATH="$LIBXSLT_SRCDIR/xsltproc:$PATH" + LIBXSLT_INCDIR="$LIBXSLT_SRCDIR" + LIBXSLT_LDFLAGS="-L$LIBXSLT_SRCDIR/libexslt/.libs -L$LIBXSLT_SRCDIR/libxslt/.libs" + if test "x$STATIC_LIBS" != xno; then : + LIBXSLT_LIBS="$LIBXSLT_SRCDIR/libexslt/.libs/libexslt.a $LIBXSLT_SRCDIR/libxslt/.libs/libxslt.a" +fi +else + XSLTPROC_PATH="$PATH" + LIBXSLT_LDFLAGS="-L$LIBXSLT_LIBDIR" + if test "x$STATIC_LIBS" != xno; then : + LIBXSLT_LIBS="$LIBXSLT_LIBDIR/libexslt.a $LIBXSLT_LIBDIR/libxslt.a" +fi +fi + +if test x"$enable_build_docs" = xyes; then : + # Extract the first word of "xsltproc", so it can be a program name with args. +set dummy xsltproc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_XSLTPROC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $XSLTPROC in + [\\/]* | ?:[\\/]*) + ac_cv_path_XSLTPROC="$XSLTPROC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $XSLTPROC_PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_XSLTPROC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_XSLTPROC" && ac_cv_path_XSLTPROC="none" + ;; +esac +fi +XSLTPROC=$ac_cv_path_XSLTPROC +if test -n "$XSLTPROC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XSLTPROC" >&5 +$as_echo "$XSLTPROC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "$XSLTPROC" = none; then : + as_fn_error $? "xsltproc not found, unable to build documentation" "$LINENO" 5 +fi + + # Extract the first word of "fop", so it can be a program name with args. +set dummy fop; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_FOP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $FOP in + [\\/]* | ?:[\\/]*) + ac_cv_path_FOP="$FOP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_FOP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_FOP" && ac_cv_path_FOP="none" + ;; +esac +fi +FOP=$ac_cv_path_FOP +if test -n "$FOP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FOP" >&5 +$as_echo "$FOP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test x"$FOP" != xnone; then + HAVE_FOP_TRUE= + HAVE_FOP_FALSE='#' +else + HAVE_FOP_TRUE='#' + HAVE_FOP_FALSE= +fi + + if test "$FOP" = none; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: fop not installed, unable to build pdf documentation" >&5 +$as_echo "$as_me: WARNING: fop not installed, unable to build pdf documentation" >&2;} +fi + + # Extract the first word of "pdf2ps", so it can be a program name with args. +set dummy pdf2ps; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PDF2PS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PDF2PS in + [\\/]* | ?:[\\/]*) + ac_cv_path_PDF2PS="$PDF2PS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PDF2PS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_PDF2PS" && ac_cv_path_PDF2PS="none" + ;; +esac +fi +PDF2PS=$ac_cv_path_PDF2PS +if test -n "$PDF2PS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PDF2PS" >&5 +$as_echo "$PDF2PS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test x"$PDF2PS" != xnone; then + HAVE_PDF2PS_TRUE= + HAVE_PDF2PS_FALSE='#' +else + HAVE_PDF2PS_TRUE='#' + HAVE_PDF2PS_FALSE= +fi + + if test "$PDF2PS" = none; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pdf2ps not installed, unable to build postscript documentation" >&5 +$as_echo "$as_me: WARNING: pdf2ps not installed, unable to build postscript documentation" >&2;} +fi +else + # these don't get used when BUILD_DOCS is false but Automake + # will get cranky if we don't set the conditional + if false; then + HAVE_FOP_TRUE= + HAVE_FOP_FALSE='#' +else + HAVE_FOP_TRUE='#' + HAVE_FOP_FALSE= +fi + + if false; then + HAVE_PDF2PS_TRUE= + HAVE_PDF2PS_FALSE='#' +else + HAVE_PDF2PS_TRUE='#' + HAVE_PDF2PS_FALSE= +fi + +fi + + if test x"$enable_build_docs" = xyes; then + BUILD_DOCS_TRUE= + BUILD_DOCS_FALSE='#' +else + BUILD_DOCS_TRUE='#' + BUILD_DOCS_FALSE= +fi + + + +if test "x$STATIC_LIBS" = xno; then : + LIBXSLT_LIBS="-lexslt -lxslt" +fi + +: ${LIBXSLT_INCDIR="$LIBXSLT_PREFIX/include"} +LIBXSLT_CPPFLAGS="-I$LIBXSLT_INCDIR" + + +WIN32_EXTRA_LDFLAGS= +WIN32_EXTRA_LIBS= + +case "${host}" in #( + *-hpux*) : + if test "x$GCC" != "xyes"; then : + CFLAGS="-Ae" +fi ;; #( + *mingw*) : + WIN32_EXTRA_LIBS='-lwsock32' + +$as_echo "#define _WINSOCKAPI_ 1" >>confdefs.h + ;; #( + *) : + ;; +esac + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + # <limits.h> exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + # <limits.h> exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <float.h> + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ctype.h> +#include <stdlib.h> +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5 +$as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; } +if ${ac_cv_func_lstat_dereferences_slashed_symlink+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f conftest.sym conftest.file +echo >conftest.file +if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then + if test "$cross_compiling" = yes; then : + ac_cv_func_lstat_dereferences_slashed_symlink=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +struct stat sbuf; + /* Linux will dereference the symlink and fail, as required by POSIX. + That is better in the sense that it means we will not + have to compile and use the lstat wrapper. */ + return lstat ("conftest.sym/", &sbuf) == 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_lstat_dereferences_slashed_symlink=yes +else + ac_cv_func_lstat_dereferences_slashed_symlink=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +else + # If the `ln -s' command failed, then we probably don't even + # have an lstat function. + ac_cv_func_lstat_dereferences_slashed_symlink=no +fi +rm -f conftest.sym conftest.file + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5 +$as_echo "$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; } + +test $ac_cv_func_lstat_dereferences_slashed_symlink = yes && + +cat >>confdefs.h <<_ACEOF +#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +_ACEOF + + +if test "x$ac_cv_func_lstat_dereferences_slashed_symlink" = xno; then + case " $LIBOBJS " in + *" lstat.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS lstat.$ac_objext" + ;; +esac + +fi + +for ac_header in stdlib.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STDLIB_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 +$as_echo_n "checking for GNU libc compatible malloc... " >&6; } +if ${ac_cv_func_malloc_0_nonnull+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_malloc_0_nonnull=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined STDC_HEADERS || defined HAVE_STDLIB_H +# include <stdlib.h> +#else +char *malloc (); +#endif + +int +main () +{ +return ! malloc (0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_malloc_0_nonnull=yes +else + ac_cv_func_malloc_0_nonnull=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 +$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } +if test $ac_cv_func_malloc_0_nonnull = yes; then : + +$as_echo "#define HAVE_MALLOC 1" >>confdefs.h + +else + $as_echo "#define HAVE_MALLOC 0" >>confdefs.h + + case " $LIBOBJS " in + *" malloc.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS malloc.$ac_objext" + ;; +esac + + +$as_echo "#define malloc rpl_malloc" >>confdefs.h + +fi + + +for ac_header in stdlib.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STDLIB_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible realloc" >&5 +$as_echo_n "checking for GNU libc compatible realloc... " >&6; } +if ${ac_cv_func_realloc_0_nonnull+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_realloc_0_nonnull=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined STDC_HEADERS || defined HAVE_STDLIB_H +# include <stdlib.h> +#else +char *realloc (); +#endif + +int +main () +{ +return ! realloc (0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_realloc_0_nonnull=yes +else + ac_cv_func_realloc_0_nonnull=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_realloc_0_nonnull" >&5 +$as_echo "$ac_cv_func_realloc_0_nonnull" >&6; } +if test $ac_cv_func_realloc_0_nonnull = yes; then : + +$as_echo "#define HAVE_REALLOC 1" >>confdefs.h + +else + $as_echo "#define HAVE_REALLOC 0" >>confdefs.h + + case " $LIBOBJS " in + *" realloc.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS realloc.$ac_objext" + ;; +esac + + +$as_echo "#define realloc rpl_realloc" >>confdefs.h + +fi + + +ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" +if test "x$ac_cv_type_mode_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define mode_t int +_ACEOF + +fi + +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF + +fi + + +# The trick with USER_LIBS allows make LIBS=-lfoo to add rather than +# replace the libraries from ./configure +USER_LIBS="$LIBS" +LIBS= +# shared libraries link to dependant libraries automatically +if test "x$STATIC_LIBS" != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5 +$as_echo_n "checking for library containing dlopen... " >&6; } +if ${ac_cv_search_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +for ac_lib in '' dl; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib "$USER_LIBS" $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_dlopen=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_dlopen+:} false; then : + break +fi +done +if ${ac_cv_search_dlopen+:} false; then : + +else + ac_cv_search_dlopen=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5 +$as_echo "$ac_cv_search_dlopen" >&6; } +ac_res=$ac_cv_search_dlopen +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sqrt" >&5 +$as_echo_n "checking for library containing sqrt... " >&6; } +if ${ac_cv_search_sqrt+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char sqrt (); +int +main () +{ +return sqrt (); + ; + return 0; +} +_ACEOF +for ac_lib in '' m; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib "$USER_LIBS" $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_sqrt=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_sqrt+:} false; then : + break +fi +done +if ${ac_cv_search_sqrt+:} false; then : + +else + ac_cv_search_sqrt=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sqrt" >&5 +$as_echo "$ac_cv_search_sqrt" >&6; } +ac_res=$ac_cv_search_sqrt +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing iconv_open" >&5 +$as_echo_n "checking for library containing iconv_open... " >&6; } +if ${ac_cv_search_iconv_open+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char iconv_open (); +int +main () +{ +return iconv_open (); + ; + return 0; +} +_ACEOF +for ac_lib in '' iconv; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib "$USER_LIBS" $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_iconv_open=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_iconv_open+:} false; then : + break +fi +done +if ${ac_cv_search_iconv_open+:} false; then : + +else + ac_cv_search_iconv_open=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_iconv_open" >&5 +$as_echo "$ac_cv_search_iconv_open" >&6; } +ac_res=$ac_cv_search_iconv_open +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing libiconv_open" >&5 +$as_echo_n "checking for library containing libiconv_open... " >&6; } +if ${ac_cv_search_libiconv_open+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char libiconv_open (); +int +main () +{ +return libiconv_open (); + ; + return 0; +} +_ACEOF +for ac_lib in '' iconv; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib "$USER_LIBS" $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_libiconv_open=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_libiconv_open+:} false; then : + break +fi +done +if ${ac_cv_search_libiconv_open+:} false; then : + +else + ac_cv_search_libiconv_open=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_libiconv_open" >&5 +$as_echo "$ac_cv_search_libiconv_open" >&6; } +ac_res=$ac_cv_search_libiconv_open +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5 +$as_echo_n "checking for library containing clock_gettime... " >&6; } +if ${ac_cv_search_clock_gettime+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char clock_gettime (); +int +main () +{ +return clock_gettime (); + ; + return 0; +} +_ACEOF +for ac_lib in '' rt; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib "$USER_LIBS" $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_clock_gettime=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_clock_gettime+:} false; then : + break +fi +done +if ${ac_cv_search_clock_gettime+:} false; then : + +else + ac_cv_search_clock_gettime=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5 +$as_echo "$ac_cv_search_clock_gettime" >&6; } +ac_res=$ac_cv_search_clock_gettime +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing deflate" >&5 +$as_echo_n "checking for library containing deflate... " >&6; } +if ${ac_cv_search_deflate+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char deflate (); +int +main () +{ +return deflate (); + ; + return 0; +} +_ACEOF +for ac_lib in '' z; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib "$USER_LIBS" $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_deflate=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_deflate+:} false; then : + break +fi +done +if ${ac_cv_search_deflate+:} false; then : + +else + ac_cv_search_deflate=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_deflate" >&5 +$as_echo "$ac_cv_search_deflate" >&6; } +ac_res=$ac_cv_search_deflate +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gcry_cipher_encrypt" >&5 +$as_echo_n "checking for library containing gcry_cipher_encrypt... " >&6; } +if ${ac_cv_search_gcry_cipher_encrypt+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gcry_cipher_encrypt (); +int +main () +{ +return gcry_cipher_encrypt (); + ; + return 0; +} +_ACEOF +for ac_lib in '' gcrypt; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib "$USER_LIBS" $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_gcry_cipher_encrypt=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_gcry_cipher_encrypt+:} false; then : + break +fi +done +if ${ac_cv_search_gcry_cipher_encrypt+:} false; then : + +else + ac_cv_search_gcry_cipher_encrypt=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gcry_cipher_encrypt" >&5 +$as_echo "$ac_cv_search_gcry_cipher_encrypt" >&6; } +ac_res=$ac_cv_search_gcry_cipher_encrypt +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + + + # Checks for inet libraries: + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostent" >&5 +$as_echo_n "checking for library containing gethostent... " >&6; } +if ${ac_cv_search_gethostent+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostent (); +int +main () +{ +return gethostent (); + ; + return 0; +} +_ACEOF +for ac_lib in '' nsl; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib "$USER_LIBS" $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_gethostent=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_gethostent+:} false; then : + break +fi +done +if ${ac_cv_search_gethostent+:} false; then : + +else + ac_cv_search_gethostent=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostent" >&5 +$as_echo "$ac_cv_search_gethostent" >&6; } +ac_res=$ac_cv_search_gethostent +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing setsockopt" >&5 +$as_echo_n "checking for library containing setsockopt... " >&6; } +if ${ac_cv_search_setsockopt+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char setsockopt (); +int +main () +{ +return setsockopt (); + ; + return 0; +} +_ACEOF +for ac_lib in '' socket net network; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib "$USER_LIBS" $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_setsockopt=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_setsockopt+:} false; then : + break +fi +done +if ${ac_cv_search_setsockopt+:} false; then : + +else + ac_cv_search_setsockopt=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_setsockopt" >&5 +$as_echo "$ac_cv_search_setsockopt" >&6; } +ac_res=$ac_cv_search_setsockopt +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing connect" >&5 +$as_echo_n "checking for library containing connect... " >&6; } +if ${ac_cv_search_connect+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char connect (); +int +main () +{ +return connect (); + ; + return 0; +} +_ACEOF +for ac_lib in '' inet; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib "$USER_LIBS" $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_connect=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_connect+:} false; then : + break +fi +done +if ${ac_cv_search_connect+:} false; then : + +else + ac_cv_search_connect=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_connect" >&5 +$as_echo "$ac_cv_search_connect" >&6; } +ac_res=$ac_cv_search_connect +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +fi + + + + + for ac_func in $ac_func_list +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + + + + + +ac_fn_c_check_decl "$LINENO" "O_BINARY" "ac_cv_have_decl_O_BINARY" " +#include <io.h> +#include <fcntl.h> + +" +if test "x$ac_cv_have_decl_O_BINARY" = xyes; then : + +$as_echo "#define HAVE_DECL_O_BINARY 1" >>confdefs.h + +else + +$as_echo "#define HAVE_DECL_O_BINARY 0" >>confdefs.h + +fi + + + + + +# check for exslt*XpathCtxtRegister() functions +OLD_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$LIBXSLT_CPPFLAGS $LIBXML_CPPFLAGS $CPPFLAGS" +ac_fn_c_check_decl "$LINENO" "exsltDateXpathCtxtRegister" "ac_cv_have_decl_exsltDateXpathCtxtRegister" "#include <libexslt/exslt.h> +" +if test "x$ac_cv_have_decl_exsltDateXpathCtxtRegister" = xyes; then : + +$as_echo "#define HAVE_EXSLT_XPATH_REGISTER 1" >>confdefs.h + + HAVE_EXSLT_XPATH_REGISTER=1 +else + +$as_echo "#define HAVE_EXSLT_XPATH_REGISTER 0" >>confdefs.h + + HAVE_EXSLT_XPATH_REGISTER=0 +fi + + + if test $HAVE_EXSLT_XPATH_REGISTER = 1; then + HAVE_EXSLT_XPATH_REGISTER_TRUE= + HAVE_EXSLT_XPATH_REGISTER_FALSE='#' +else + HAVE_EXSLT_XPATH_REGISTER_TRUE='#' + HAVE_EXSLT_XPATH_REGISTER_FALSE= +fi + +CPPFLAGS="$OLD_CPPFLAGS" + +# make flags +AM_CPPFLAGS="$LIBXSLT_CPPFLAGS $LIBXML_CPPFLAGS" + +AM_LDFLAGS="$LIBXSLT_LDFLAGS $LIBXML_LDFLAGS" + +LDADD="$LIBXSLT_LIBS $LIBXML_LIBS $WIN32_EXTRA_LIBS $LIBS" + +LIBS="$USER_LIBS" + + + + + + +# make silent rule for FOP +V_FOP="\$(V_FOP_$AM_V)" +V_FOP_="\$(V_FOP_$AM_DEFAULT_VERBOSITY)" +V_FOP_0='@echo " FOP $@";' + +# make silent rule for DOCBOOK +V_DOCBOOK="\$(V_DOCBOOK_$AM_V)" +V_DOCBOOK_="\$(V_DOCBOOK_$AM_DEFAULT_VERBOSITY)" +V_DOCBOOK_0='@echo " DBOOK $@";' + + + + + + + +$as_echo "#define _XOPEN_SOURCE 500" >>confdefs.h + + + +ac_config_headers="$ac_config_headers config.h" + +ac_config_files="$ac_config_files xmlstarlet.spec Makefile solaris/package/sol8-sparc/pkginfo solaris/package/sol9-sparc/pkginfo" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GCC_TRUE}" && test -z "${GCC_FALSE}"; then + as_fn_error $? "conditional \"GCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_FOP_TRUE}" && test -z "${HAVE_FOP_FALSE}"; then + as_fn_error $? "conditional \"HAVE_FOP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_PDF2PS_TRUE}" && test -z "${HAVE_PDF2PS_FALSE}"; then + as_fn_error $? "conditional \"HAVE_PDF2PS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_FOP_TRUE}" && test -z "${HAVE_FOP_FALSE}"; then + as_fn_error $? "conditional \"HAVE_FOP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_PDF2PS_TRUE}" && test -z "${HAVE_PDF2PS_FALSE}"; then + as_fn_error $? "conditional \"HAVE_PDF2PS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${BUILD_DOCS_TRUE}" && test -z "${BUILD_DOCS_FALSE}"; then + as_fn_error $? "conditional \"BUILD_DOCS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_EXSLT_XPATH_REGISTER_TRUE}" && test -z "${HAVE_EXSLT_XPATH_REGISTER_FALSE}"; then + as_fn_error $? "conditional \"HAVE_EXSLT_XPATH_REGISTER\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by XMLStarlet $as_me 1.4.1, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to <http://sourceforge.net/projects/xmlstar/support>. +XMLStarlet home page: <http://xmlstar.sourceforge.net/>." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +XMLStarlet config.status 1.4.1 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "xmlstarlet.spec") CONFIG_FILES="$CONFIG_FILES xmlstarlet.spec" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "solaris/package/sol8-sparc/pkginfo") CONFIG_FILES="$CONFIG_FILES solaris/package/sol8-sparc/pkginfo" ;; + "solaris/package/sol9-sparc/pkginfo") CONFIG_FILES="$CONFIG_FILES solaris/package/sol9-sparc/pkginfo" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' <conf$$subs.awk | sed ' +/^[^""]/{ + N + s/\n// +} +' >>$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' <confdefs.h | sed ' +s/'"$ac_delim"'/"\\\ +"/g' >>$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..19678f6 --- /dev/null +++ b/configure.ac @@ -0,0 +1,186 @@ +AC_PREREQ([2.62]) +AC_INIT([XMLStarlet], [1.4.1], + [http://sourceforge.net/projects/xmlstar/support], + [], + [http://xmlstar.sourceforge.net/]) +AC_REVISION(AC_PACKAGE_VERSION) + +AM_INIT_AUTOMAKE([1.11 foreign -Wall subdir-objects no-define std-options parallel-tests color-tests]) +AM_SILENT_RULES([yes]) +AM_MAINTAINER_MODE + +[LIBXML_REQUIRED_VERSION=2.6.27] +[LIBXSLT_REQUIRED_VERSION=1.1.9] + +XSTAR_LIB_ARGS_WITH([LIBXML], [with-src]) +XSTAR_LIB_ARGS_WITH([LIBXSLT], [with-src]) +XSTAR_LIB_ARGS_WITH([LIBICONV]) + +AC_ARG_ENABLE([static-libs], + [AS_HELP_STRING([--enable-static-libs], + [link statically with libxml2 and lib(e)xslt @<:@default=no@:>@])], + [STATIC_LIBS=$enableval], + [STATIC_LIBS=no]) + +AC_ARG_ENABLE([build_docs], + [AS_HELP_STRING([--enable-build-docs], + [include rules to build documentation files])], + [], [enable_build_docs=no]) + +dnl +dnl Check the environment +dnl + +AC_CANONICAL_HOST +AC_PROG_CC +AM_CONDITIONAL([GCC], [test x$GCC = xyes]) +AS_IF([test x$GCC = xyes], [CFLAGS="-ansi $CFLAGS"]) +AM_PROG_CC_C_O +AC_ARG_PROGRAM dnl Transforming Program Names When Installing +AC_PROG_SED +AC_PROG_AWK + +XSTAR_LIB_CHECK([LIBXML], [xml2-config]) + +AS_IF([test "x$LIBXML_SRCDIR" != x], + [LIBXML_INCDIR="$LIBXML_SRCDIR/include"]) +[: ${LIBXML_INCDIR="$LIBXML_PREFIX/include/libxml2"}] + +AS_IF([test "x$STATIC_LIBS" != xno], + [LIBXML_CPPFLAGS="-I$LIBXML_INCDIR -DLIBXML_STATIC"], + [LIBXML_CPPFLAGS="-I$LIBXML_INCDIR"]) + +AS_IF([test "x$STATIC_LIBS" != xno], + [LIBXML_LIBS="$LIBXML_LIBDIR/libxml2.a"], + [LIBXML_LIBS="-lxml2"]) +[LIBXML_LDFLAGS="-L$LIBXML_LIBDIR"] + + +XSTAR_LIB_CHECK([LIBXSLT], [xslt-config]) + +AS_IF([test "x$LIBXSLT_SRCDIR" != x], + [XSLTPROC_PATH="$LIBXSLT_SRCDIR/xsltproc:$PATH" + LIBXSLT_INCDIR="$LIBXSLT_SRCDIR" + LIBXSLT_LDFLAGS="-L$LIBXSLT_SRCDIR/libexslt/.libs -L$LIBXSLT_SRCDIR/libxslt/.libs" + AS_IF([test "x$STATIC_LIBS" != xno], + [LIBXSLT_LIBS="$LIBXSLT_SRCDIR/libexslt/.libs/libexslt.a $LIBXSLT_SRCDIR/libxslt/.libs/libxslt.a"])], + [XSLTPROC_PATH="$PATH" + LIBXSLT_LDFLAGS="-L$LIBXSLT_LIBDIR" + AS_IF([test "x$STATIC_LIBS" != xno], + [LIBXSLT_LIBS="$LIBXSLT_LIBDIR/libexslt.a $LIBXSLT_LIBDIR/libxslt.a"])]) + +AS_IF([test x"$enable_build_docs" = xyes], + [AC_PATH_PROG(XSLTPROC, xsltproc, [none], [$XSLTPROC_PATH]) + AS_IF([test "$XSLTPROC" = none], [AC_MSG_ERROR([xsltproc not found, unable to build documentation])]) + + AC_PATH_PROG(FOP, fop, [none]) + AM_CONDITIONAL([HAVE_FOP], [test x"$FOP" != xnone]) + AS_IF([test "$FOP" = none], [AC_MSG_WARN([fop not installed, unable to build pdf documentation])]) + + AC_PATH_PROG(PDF2PS, pdf2ps, [none]) + AM_CONDITIONAL([HAVE_PDF2PS], [test x"$PDF2PS" != xnone]) + AS_IF([test "$PDF2PS" = none], [AC_MSG_WARN([pdf2ps not installed, unable to build postscript documentation])])], + + [# these don't get used when BUILD_DOCS is false but Automake + # will get cranky if we don't set the conditional + AM_CONDITIONAL([HAVE_FOP], [false]) + AM_CONDITIONAL([HAVE_PDF2PS], [false])]) + +AM_CONDITIONAL([BUILD_DOCS], [test x"$enable_build_docs" = xyes]) + + +AS_IF([test "x$STATIC_LIBS" = xno], + [LIBXSLT_LIBS="-lexslt -lxslt"]) + +[: ${LIBXSLT_INCDIR="$LIBXSLT_PREFIX/include"}] +[LIBXSLT_CPPFLAGS="-I$LIBXSLT_INCDIR"] + + +[WIN32_EXTRA_LDFLAGS=] +[WIN32_EXTRA_LIBS=] + +AS_CASE(["${host}"], + [*-hpux*], + [AS_IF([test "x$GCC" != "xyes"], + [CFLAGS="-Ae"])], + [*mingw*], + [WIN32_EXTRA_LIBS='-lwsock32' + AC_DEFINE([_WINSOCKAPI_],1,[Using the Win32 Socket implementation])]) + +AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK +AC_FUNC_MALLOC +AC_FUNC_REALLOC +AC_TYPE_MODE_T +AC_TYPE_SIZE_T + +# The trick with USER_LIBS allows make LIBS=-lfoo to add rather than +# replace the libraries from ./configure +[USER_LIBS="$LIBS"] +[LIBS=] +# shared libraries link to dependant libraries automatically +AS_IF([test "x$STATIC_LIBS" != xno], + [AC_SEARCH_LIBS([dlopen], [dl], [], [], "$USER_LIBS") + AC_SEARCH_LIBS([sqrt], [m], [], [], "$USER_LIBS") + AC_SEARCH_LIBS([iconv_open], [iconv], [], + [AC_SEARCH_LIBS([libiconv_open], [iconv], [], [], "$USER_LIBS")], "$USER_LIBS") + AC_SEARCH_LIBS([clock_gettime], [rt], [], [], "$USER_LIBS") + AC_SEARCH_LIBS([deflate], [z], [], [], "$USER_LIBS") + AC_SEARCH_LIBS([gcry_cipher_encrypt], [gcrypt], [], [], "$USER_LIBS") + + # Checks for inet libraries: + AC_SEARCH_LIBS([gethostent], [nsl], [], [], "$USER_LIBS") + AC_SEARCH_LIBS([setsockopt], [socket net network], [], [], "$USER_LIBS") + AC_SEARCH_LIBS([connect], [inet], [], [], "$USER_LIBS")]) + +AC_CHECK_FUNCS_ONCE([lstat stat]) + +AC_CHECK_DECL([O_BINARY], [AC_DEFINE([HAVE_DECL_O_BINARY],1,[have O_BINARY])], +[AC_DEFINE([HAVE_DECL_O_BINARY],0,[don't have O_BINARY])], [[ +#include <io.h> +#include <fcntl.h> +]]) +AC_CHECK_FUNCS_ONCE([setmode]) + +# check for exslt*XpathCtxtRegister() functions +[OLD_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$LIBXSLT_CPPFLAGS $LIBXML_CPPFLAGS $CPPFLAGS"] +AC_CHECK_DECL([exsltDateXpathCtxtRegister], + [AC_DEFINE([HAVE_EXSLT_XPATH_REGISTER],1,[have exslt*XpathCtxtRegister()]) + HAVE_EXSLT_XPATH_REGISTER=1], + [AC_DEFINE([HAVE_EXSLT_XPATH_REGISTER],0,[have exslt*XpathCtxtRegister()]) + HAVE_EXSLT_XPATH_REGISTER=0], + [#include <libexslt/exslt.h>]) + +AM_CONDITIONAL([HAVE_EXSLT_XPATH_REGISTER], [test $HAVE_EXSLT_XPATH_REGISTER = 1]) +[CPPFLAGS="$OLD_CPPFLAGS"] + +# make flags +AC_SUBST([AM_CPPFLAGS], ["$LIBXSLT_CPPFLAGS $LIBXML_CPPFLAGS"]) +AC_SUBST([AM_LDFLAGS], ["$LIBXSLT_LDFLAGS $LIBXML_LDFLAGS"]) +AC_SUBST([LDADD], ["$LIBXSLT_LIBS $LIBXML_LIBS $WIN32_EXTRA_LIBS $LIBS"]) +AC_SUBST([LIBS], ["$USER_LIBS"]) +AC_SUBST([LIBXML_REQUIRED_VERSION]) +AC_SUBST([LIBXSLT_REQUIRED_VERSION]) + +AC_SUBST([SED]) + +np_SILENT_RULE([FOP]) +np_SILENT_RULE([DOCBOOK], [DBOOK]) + +AC_SUBST(PACKAGE_NAME) +AC_SUBST(PACKAGE_TARNAME) +AC_SUBST(PACKAGE_VERSION) + +AC_DEFINE([_XOPEN_SOURCE], [500], [needed to get lstat declaration in -ansi mode]) + +dnl for the spec file + +AC_CONFIG_HEADERS([config.h]) +AC_CONFIG_FILES([ +xmlstarlet.spec +Makefile +solaris/package/sol8-sparc/pkginfo +solaris/package/sol9-sparc/pkginfo +]) +AC_OUTPUT + @@ -0,0 +1,708 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2012-03-27.16; # UTC + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, +# 2011, 2012 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by 'PROGRAMS ARGS'. + object Object file output by 'PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputting dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to <bug-automake@gnu.org>. +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +# A tabulation character. +tab=' ' +# A newline character. +nl=' +' + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvisualcpp +fi + +if test "$depmode" = msvc7msys; then + # This is just like msvc7 but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvc7 +fi + +if test "$depmode" = xlc; then + # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations. + gccflag=-qmakedep=gcc,-MF + depmode=gcc +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the "deleted header file" problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' "$nl" < "$tmpdepfile" | +## Some versions of gcc put a space before the ':'. On the theory +## that the space means something, we add a space to the output as +## well. hp depmode also adds that space, but also prefixes the VPATH +## to the object. Take care to not repeat it in the output. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like '#:fec' to the end of the + # dependency line. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr "$nl" ' ' >> "$depfile" + echo >> "$depfile" + + # The second pass generates a dummy entry for each header file. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +xlc) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts '$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + # Each line is of the form 'foo.o: dependent.h'. + # Do two passes, one to just change these to + # '$object: dependent.h' and one to simply 'dependent.h:'. + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'. + # However on + # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using '\': + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + # tcc 0.9.26 (FIXME still under development at the moment of writing) + # will emit a similar output, but also prepend the continuation lines + # with horizontal tabulation characters. + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form 'foo.o: dependent.h', + # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'. + # Do two passes, one to just change these to + # '$object: dependent.h' and one to simply 'dependent.h:'. + sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \ + < "$tmpdepfile" > "$depfile" + sed ' + s/[ '"$tab"'][ '"$tab"']*/ /g + s/^ *// + s/ *\\*$// + s/^[^:]*: *// + /^$/d + /:$/d + s/$/ :/ + ' < "$tmpdepfile" >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" + # Add 'dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in 'foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # With Tru64 cc, shared objects can also be used to make a + # static library. This mechanism is used in libtool 1.4 series to + # handle both shared and static libraries in a single compilation. + # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. + # + # With libtool 1.5 this exception was removed, and libtool now + # generates 2 separate objects for the 2 libraries. These two + # compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 + tmpdepfile2=$dir$base.o.d # libtool 1.5 + tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 + tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.o.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + tmpdepfile4=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +msvc7) + if test "$libtool" = yes; then + showIncludes=-Wc,-showIncludes + else + showIncludes=-showIncludes + fi + "$@" $showIncludes > "$tmpdepfile" + stat=$? + grep -v '^Note: including file: ' "$tmpdepfile" + if test "$stat" = 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The first sed program below extracts the file names and escapes + # backslashes for cygpath. The second sed program outputs the file + # name when reading, but also accumulates all include files in the + # hold buffer in order to output them again at the end. This only + # works with sed implementations that can handle large buffers. + sed < "$tmpdepfile" -n ' +/^Note: including file: *\(.*\)/ { + s//\1/ + s/\\/\\\\/g + p +}' | $cygpath_u | sort -u | sed -n ' +s/ /\\ /g +s/\(.*\)/'"$tab"'\1 \\/p +s/.\(.*\) \\/\1:/ +H +$ { + s/.*/'"$tab"'/ + G + p +}' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvc7msys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for ':' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. + "$@" $dashmflag | + sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' "$nl" < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + # makedepend may prepend the VPATH from the source file name to the object. + # No need to regex-escape $object, excess matching of '.' is harmless. + sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" + echo "$tab" >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/doc/doc.mk b/doc/doc.mk new file mode 100644 index 0000000..10dc18d --- /dev/null +++ b/doc/doc.mk @@ -0,0 +1,59 @@ +userguide = doc/xmlstarlet-ug +userguide_gen = $(userguide).pdf $(userguide).ps $(userguide).html +userguide_src = $(userguide).xml + +txtguide = doc/xmlstarlet.txt +txtguide_src = doc/gen-doc + +manpage = doc/xmlstarlet.1 +manpage_src = doc/xmlstarlet-man.xml + +generated_docs = $(userguide_gen) $(txtguide) $(manpage) +buildfiles_docs = doc/replace-PROG-VERSION.xsl doc/xmlstar-fodoc-style.xsl + +DOCBOOK_PARAMS = \ +--param section.autolabel 1 \ +--stringparam generate.toc 'book toc,title' + +EDIT_XML = $(XSLTPROC) \ + --stringparam VERSION '$(VERSION)' \ + --stringparam PROG "`echo xml | $(SED) '$(program_transform_name)'`" \ + doc/replace-PROG-VERSION.xsl + +if BUILD_DOCS + +.xml.html: + $(V_DOCBOOK)$(EDIT_XML) $< | $(XSLTPROC) $(DOCBOOK_PARAMS) \ + --stringparam html.stylesheet html.css \ + http://docbook.sourceforge.net/release/xsl-ns/current/html/docbook.xsl \ + - > $@ + +.xml.fo: + $(V_DOCBOOK)$(EDIT_XML) $< | $(XSLTPROC) $(DOCBOOK_PARAMS) doc/xmlstar-fodoc-style.xsl - > $@ + +if HAVE_FOP +.fo.pdf: + $(V_FOP)$(FOP) -q $< $@ +endif +if HAVE_PDF2PS +.pdf.ps: + $(AM_V_GEN)$(PDF2PS) $< $@ +endif + +$(userguide).html : $(userguide).xml + +$(manpage): $(manpage_src) + $(V_DOCBOOK)$(EDIT_XML) $< | $(XSLTPROC) -o $@ \ + http://docbook.sourceforge.net/release/xsl-ns/current/manpages/docbook.xsl \ + - + +$(txtguide): $(txtguide_src) $(usage_texts) + $(AM_V_GEN)srcdir=$(srcdir) SED=$(SED) transform='$(program_transform_name)' $< ./xml > $@ + +clean-doc: + rm -f $(generated_docs) + +endif BUILD_DOCS + +# NOTE: if put inside "if BUILD_DOCS" automake issues a warning +.PHONY: clean-doc diff --git a/doc/gen-doc b/doc/gen-doc new file mode 100644 index 0000000..c438ab4 --- /dev/null +++ b/doc/gen-doc @@ -0,0 +1,186 @@ +#! /bin/sh + +: "${SED=sed}" +XMLSTARLET=$1 +STAR_NAME=`echo xml | ${SED} "$transform"` + +{ +echo "" +echo "" +echo " XMLSTARLET USER'S GUIDE" +echo "" +echo " see also http://xmlstar.sourceforge.net/" +echo "" +echo "" + +echo "" +echo "" +echo "1. BASIC COMMAND LINE OPTIONS" +echo "====================================================" +echo "" +echo "$STAR_NAME --help" +$SED '/^#/d' src/usage.txt + +echo "" +echo "" +echo "" +echo "2. Select/Query XML documents" +echo "====================================================" +echo "" +echo "$STAR_NAME sel --help" +$SED '/^#/d' src/select-usage.txt + +echo "" +echo "" +echo "" +echo "3. Editing XML documents" +echo "====================================================" +echo "" +echo "$STAR_NAME ed --help" +$SED '/^#/d' src/edit-usage.txt + +echo "" +echo "" +echo "" +echo "4. Using XSLT to transform XML documents" +echo "====================================================" +echo "" +echo "$STAR_NAME tr --help" +$SED '/^#/d' src/trans-usage.txt + +echo "" +echo "" +echo "" +echo "5. Formatting XML documents" +echo "====================================================" +echo "" +echo "$STAR_NAME fo --help" +$SED '/^#/d' src/format-usage.txt + +echo "" +echo "" +echo "" +echo "6. Validating XML documents" +echo "====================================================" +echo "" +echo "$STAR_NAME val --help" +$SED '/^#/d' src/validate-usage.txt + +echo "" +echo "" +echo "" +echo "7. Displaying structure of XML documents" +echo "====================================================" +echo "" +echo "$STAR_NAME el --help" +$SED '/^#/d' src/elem-usage.txt + +echo "" +echo "" +echo "" +echo "" +echo "8. Escape/Unescape special XML characters" +echo "====================================================" +echo "" +echo "$STAR_NAME esc --help" +$SED '/^#/d' src/escape-usage.txt + +echo "" +echo "" +echo "" +echo "" +echo "9. List directory as XML" +echo "====================================================" +echo "" +echo "$STAR_NAME ls --help" +$SED '/^#/d' src/ls-usage.txt + +echo "" +echo "" +echo "" +echo "" +echo "10. XML canonicalization" +echo "====================================================" +echo "" +echo "$STAR_NAME c14n --help" +$SED '/^#/d' src/c14n-usage.txt + +echo "" +echo "" +echo "" +echo "" +echo "11. Convert XML into PYX format (based on ESIS - ISO 8879)" +echo "====================================================" +echo "" +echo "$STAR_NAME pyx --help" +$SED '/^#/d' src/pyx-usage.txt + +echo "" +echo "" +echo "" +echo "" +echo "12. Examples:" +echo "====================================================" +echo "" +echo "Input1" +echo "examples/xml/table.xml" +echo "" +cat "$srcdir"/examples/xml/table.xml +echo "" +echo "" +echo "Input2" +echo "examples/xml/tab-obj.xml" +echo "" +cat "$srcdir"/examples/xml/tab-obj.xml +echo "" +echo "" +echo "Input3" +echo "examples/html/hello1.html" +echo "" +cat "$srcdir"/examples/html/hello1.html +echo "" +echo "" +echo "Input4" +echo "examples/sgml/docbook1.sgml" +echo "" +cat "$srcdir"/examples/sgml/docbook1.sgml +echo "" +echo "" +echo "Stylesheet1" +echo "examples/xsl/sum1.xsl" +echo "" +cat "$srcdir"/examples/xsl/sum1.xsl +echo "" +echo "" +echo "Stylesheet2" +echo "examples/xsl/hello1.xsl" +echo "" +cat "$srcdir"/examples/xsl/hello1.xsl +echo "" +echo "" +echo "Stylesheet3" +echo "examples/xsl/param1.xsl" +echo "" +cat "$srcdir"/examples/xsl/param1.xsl +echo "" +echo "" + +echo "" + +for eg in "$srcdir"/examples/*[0-9] +do + if [ -x "$eg" ] + then + echo "Command:" + sed -e '/^#!/d' "$eg" + echo "Result Output:" + cat "$srcdir"/examples/results/`basename $eg`.out + echo "" + echo "" + fi +done + +echo "" +} | $SED -e "s:\./xmlstarlet:$STAR_NAME:g; s:PROG:$STAR_NAME:g" + + diff --git a/doc/html.css b/doc/html.css new file mode 100644 index 0000000..676ff98 --- /dev/null +++ b/doc/html.css @@ -0,0 +1,27 @@ +body { + background: #FFFFFF; +} + +h1, h2, h3, h4, h5 { + color: #800000; + font-family: sans-serif; +} + +span.term { + font-weight: bold; +} + +div.sidebar { + background: #F0F0F0; + border: 1px solid gray; + padding: 5px; + margin: 20px; +} + +pre.programlisting { + background: #F0F0F0; + border: 1px solid gray; + padding: 2px; + font-size: 10pt; + white-space: pre; +} diff --git a/doc/replace-PROG-VERSION.xsl b/doc/replace-PROG-VERSION.xsl new file mode 100644 index 0000000..bec1279 --- /dev/null +++ b/doc/replace-PROG-VERSION.xsl @@ -0,0 +1,15 @@ +<?xml version="1.0"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:db="http://docbook.org/ns/docbook" version="1.0"> + + <xsl:param name="VERSION"/> + <xsl:template match="db:phrase[@role='VERSION']"><xsl:value-of select="$VERSION"/></xsl:template> + + <xsl:param name="PROG"/> + <xsl:template match="db:phrase[@role='PROG']"><xsl:value-of select="$PROG"/></xsl:template> + + <!-- identity transform --> + <xsl:template match="node()|@*"> + <xsl:copy><xsl:apply-templates select="node()|@*"/></xsl:copy> + </xsl:template> + +</xsl:stylesheet> diff --git a/doc/xmlstar-fodoc-style.xsl b/doc/xmlstar-fodoc-style.xsl new file mode 100644 index 0000000..11eaedb --- /dev/null +++ b/doc/xmlstar-fodoc-style.xsl @@ -0,0 +1,17 @@ +<?xml version='1.0'?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> + + <xsl:import href="http://docbook.sourceforge.net/release/xsl-ns/current/fo/docbook.xsl"/> + + <xsl:param name="fop1.extensions" select="1"/> + + <xsl:attribute-set name="toc.line.properties"> + <xsl:attribute name="font-weight"> + <xsl:choose> + <xsl:when test="self::chapter">bold</xsl:when> + <xsl:otherwise>normal</xsl:otherwise> + </xsl:choose> + </xsl:attribute> + </xsl:attribute-set> + +</xsl:stylesheet> diff --git a/doc/xmlstarlet-man.xml b/doc/xmlstarlet-man.xml new file mode 100644 index 0000000..9299b59 --- /dev/null +++ b/doc/xmlstarlet-man.xml @@ -0,0 +1,202 @@ +<?xml version="1.0" encoding="UTF-8"?> +<refentry xmlns="http://docbook.org/ns/docbook" + xmlns:db="http://docbook.org/ns/docbook" + xmlns:xlink="http://www.w3.org/1999/xlink" + version="5.0"> + <info> + <copyright><year>2012</year></copyright> + + <author> + <personname> + <firstname>Mikhail</firstname> + <surname>Grushinskiy</surname> + </personname> + <contrib>XMLStarlet creator.</contrib> + </author> + + <releaseinfo>Version <phrase role="VERSION"/></releaseinfo> + </info> + + <refmeta> + <refentrytitle>xmlstarlet</refentrytitle> + <manvolnum>1</manvolnum> + <refmiscinfo class="manual">XMLStarlet Manual</refmiscinfo> + </refmeta> + + <refnamediv> + <refname>xmlstarlet</refname> + + <refpurpose>command line <acronym>XML/XSLT</acronym> toolkit</refpurpose> + </refnamediv> + + <refsynopsisdiv> + <cmdsynopsis> + <command><phrase role="PROG"/></command> + <arg choice="opt" rep="repeat"><replaceable>options</replaceable></arg> + <arg choice="req"><replaceable>command</replaceable></arg> + <arg choice="opt" rep="repeat"><replaceable>cmd-options</replaceable></arg> + </cmdsynopsis> + </refsynopsisdiv> + + <refsect1 xml:id="introduction"> + <title>Introduction</title> + + <para>XMLStarlet is a set of command line utilities (tools) which can be + used to transform, query, validate, and edit XML documents and files using + simple set of shell commands in similar way it is done for plain text + files using UNIX grep, sed, awk, diff, patch, join, etc commands. This set + of command line utilities can be used by those who deal with many XML + documents on UNIX shell command prompt as well as for automated XML + processing with shell scripts.</para> + </refsect1> + + <refsect1 xml:id="options"> + <title>Options</title> + + <variablelist> + <varlistentry> + <term><option>--version</option></term> + + <listitem> + <simpara>Display the version of + <application>xmlstarlet</application>.</simpara> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>--help</option></term> + + <listitem> + <simpara>Display help.</simpara> + </listitem> + </varlistentry> + </variablelist> + </refsect1> + + <refsect1 xml:id="shell"> + <title>Commands</title> + + <para><command><phrase role="PROG"/></command> + <replaceable>command</replaceable> <option>--help</option> + for command specific help</para> + + <para>Available commands include:</para> + + <variablelist> + <varlistentry> + <term><option>ed (or edit)</option></term> + + <listitem> + <simpara>Edit/update XML document(s).</simpara> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>sel (or select)</option></term> + + <listitem> + <simpara>Select data or query XML document(s) (XPATH, + etc).</simpara> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>tr (or transform)</option></term> + + <listitem> + <simpara>Transform XML documents(s) using XSLT.</simpara> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>val (or validate)</option></term> + + <listitem> + <simpara>Validate XML document(s) + (well-formed/DTD/XSD/RelaxNG).</simpara> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>fo (or format)</option></term> + + <listitem> + <simpara>Format XML document(s).</simpara> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>el (or elements)</option></term> + + <listitem> + <simpara>Display element structure of XML document.</simpara> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>c14n (or canonic)</option></term> + + <listitem> + <simpara>XML canonicalization.</simpara> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>ls (or list)</option></term> + + <listitem> + <simpara>List directory as XML.</simpara> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>esc (or escape)</option></term> + + <listitem> + <simpara>Escape special XML characters.</simpara> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>unesc (or unescape)</option></term> + + <listitem> + <simpara>Unescape special XML characters.</simpara> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>pyx (or xmln)</option></term> + + <listitem> + <simpara>Convert XML into PYX format (based on ESIS - ISO + 8879).</simpara> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>p2x (or depyx)</option></term> + + <listitem> + <simpara>Convert PYX into XML.</simpara> + </listitem> + </varlistentry> + </variablelist> + </refsect1> + + <refsect1> + <title>References</title> + + <para>XMLStarlet is a command line toolkit to query/edit/check/transform + XML documents (for more information see + http://xmlstar.sourceforge.net/).</para> + </refsect1> + + <refsect1> + <title>Bugs</title> + <para> Report bugs to the mailing list, + <email>xmlstar-devel@lists.sourceforge.net</email> or the bug tracker: <link + xlink:href="http://sourceforge.net/tracker/?group_id=66612&atid=515106"/>. + </para> + </refsect1> +</refentry> diff --git a/doc/xmlstarlet-ug.html b/doc/xmlstarlet-ug.html new file mode 100644 index 0000000..be82ac2 --- /dev/null +++ b/doc/xmlstarlet-ug.html @@ -0,0 +1,888 @@ +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>XmlStarlet Command Line XML Toolkit User's Guide</title><link rel="stylesheet" type="text/css" href="html.css"><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div lang="en" class="book" title="XmlStarlet Command Line XML Toolkit User's Guide"><div class="titlepage"><div><div><h1 class="title"><a name="idm25482624"></a>XmlStarlet Command Line XML Toolkit User's Guide</h1></div><div><div class="author"><h3 class="author"><span class="firstname">Mikhail</span> <span class="surname">Grushinskiy</span></h3></div></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="#idp9792">1. Introduction</a></span></dt><dd><dl><dt><span class="sect1"><a href="#idp69568">1. About XmlStarlet</a></span></dt><dt><span class="sect1"><a href="#idp78480">2. Main Features</a></span></dt><dt><span class="sect1"><a href="#idp92656">3. Supported Platforms</a></span></dt><dt><span class="sect1"><a href="#idp102752">4. Finding binary packages</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp117360">2. Installation</a></span></dt><dd><dl><dt><span class="sect1"><a href="#idp118352">1. Installation on Linux</a></span></dt><dt><span class="sect1"><a href="#idp121936">2. Installation on Solaris</a></span></dt><dt><span class="sect1"><a href="#idp123744">3. Installation on MacOS X</a></span></dt><dt><span class="sect1"><a href="#idp125920">4. Installation on Windows</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp128368">3. Getting Started</a></span></dt><dd><dl><dt><span class="sect1"><a href="#idp129360">1. Basic Command-Line Options</a></span></dt><dt><span class="sect1"><a href="#idp133024">2. Studying Structure of XML Document</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp145280">4. XmlStarlet Reference</a></span></dt><dd><dl><dt><span class="sect1"><a href="#idp146176">1. Querying XML documents</a></span></dt><dt><span class="sect1"><a href="#idp197216">2. Transforming XML documents</a></span></dt><dt><span class="sect1"><a href="#idp205696">3. Editing XML documents</a></span></dt><dt><span class="sect1"><a href="#idp223616">4. Validating XML documents</a></span></dt><dt><span class="sect1"><a href="#idp230704">5. Formatting XML documents</a></span></dt><dt><span class="sect1"><a href="#idp22448">6. Canonicalization of XML documents</a></span></dt><dt><span class="sect1"><a href="#idp257456">7. XML and PYX format</a></span></dt><dt><span class="sect1"><a href="#idp267248">8. Escape/Unescape special XML characters</a></span></dt><dt><span class="sect1"><a href="#idp272240">9. List directory as XML</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp276272">5. Common problems</a></span></dt><dd><dl><dt><span class="sect1"><a href="#idp277216">1. Namespaces and default namespace</a></span></dt><dt><span class="sect1"><a href="#idp286656">2. Special characters</a></span></dt><dt><span class="sect1"><a href="#idp292496">3. Sorting</a></span></dt><dt><span class="sect1"><a href="#idp296784">4. Validation</a></span></dt></dl></dd><dt><span class="chapter"><a href="#idp299120">6. Other XmlStarlet Resources</a></span></dt></dl></div><div class="chapter" title="Chapter 1. Introduction"><div class="titlepage"><div><div><h2 class="title"><a name="idp9792"></a>Chapter 1. Introduction</h2></div></div></div><div class="sect1" title="1. About XmlStarlet"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp69568"></a>1. About XmlStarlet</h2></div></div></div><p><a class="link" href="http://xmlstar.sourceforge.net/" target="_top">XMLStarlet</a> is + a set of command line utilities (tools) which can be used to transform, + query, validate, and edit XML documents and files using simple set of + shell commands in similar way it is done for plain text files using UNIX + grep, sed, awk, diff, patch, join, etc commands.</p><p>This set of command line utilities can be used by those who deal + with many XML documents on UNIX shell command prompt as well as for + automated XML processing with shell scripts.</p><p>XMLStarlet command line utility is written in C and uses libxml2 + and libxslt from <a class="link" href="http://xmlsoft.org/" target="_top">http://xmlsoft.org/</a>. Implementation of + extensive choice of options for XMLStarlet utility was only possible + because of rich feature set of libxml2 and libxslt (many thanks to the + developers of those libraries for great work).</p><p>'diff' and 'patch' options are not currently implemented. Other + features need some work too. Please, send an email to the project + administrator (see <a class="link" href="http://sourceforge.net/projects/xmlstar/" target="_top">http://sourceforge.net/projects/xmlstar/</a>) + if you wish to help.</p><p>XMLStarlet is linked statically to both libxml2 and libxslt, so + generally all you need to process XML documents is one executable file. + To run XmlStarlet utility you can simple type 'xml' on command line and + see list of options available.</p><p>XMLStarlet is open source freeware under MIT license which allows + free use and distribution for both commercial and non-commercial + projects.</p><p>We welcome any user's feedback on this project which would greatly + help us to improve its quality. Comments, suggestions, feature requests, + bug reports can be done via SourceForge project web site (see <a class="link" href="http://sourceforge.net/forum/?group_id=66612" target="_top">XMLStarlet + Sourceforge forums</a>, or <a class="link" href="http://lists.sourceforge.net/lists/listinfo/xmlstar-devel/" target="_top">XMLStarlet + mailing list</a>)</p></div><div class="sect1" title="2. Main Features"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp78480"></a>2. Main Features</h2></div></div></div><p>The toolkit's feature set includes options to:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Check or validate XML files (simple well-formedness check, + DTD, XSD, RelaxNG)</p></li><li class="listitem"><p>Calculate values of XPath expressions on XML files (such as + running sums, etc)</p></li><li class="listitem"><p>Search XML files for matches to given XPath expressions</p></li><li class="listitem"><p>Apply XSLT stylesheets to XML documents (including EXSLT + support, and passing parameters to stylesheets)</p></li><li class="listitem"><p>Query XML documents (ex. query for value of some elements of + attributes, sorting, etc)</p></li><li class="listitem"><p>Modify or edit XML documents (ex. delete some elements)</p></li><li class="listitem"><p>Format or "beautify" XML documents (as changing indentation, + etc)</p></li><li class="listitem"><p>Fetch XML documents using http:// or ftp:// URLs</p></li><li class="listitem"><p>Browse tree structure of XML documents (in similar way to 'ls' + command for directories)</p></li><li class="listitem"><p>Include one XML document into another using XInclude</p></li><li class="listitem"><p>XML c14n canonicalization</p></li><li class="listitem"><p>Escape/unescape special XML characters in input text</p></li><li class="listitem"><p>Print directory as XML document</p></li><li class="listitem"><p>Convert XML into PYX format (based on ESIS - ISO 8879), and + vice versa</p></li></ul></div><p></p></div><div class="sect1" title="3. Supported Platforms"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp92656"></a>3. Supported Platforms</h2></div></div></div><p>Here is a list of platforms on which XmlStarlet is known to + work.</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Linux</p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Solaris</p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Windows</p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>MacOS X</p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>FreeBSD/NetBSD</p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>HP-UX</p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>AIX</p></li></ul></div><p>You might be able to compile and make it on others too.</p></div><div class="sect1" title="4. Finding binary packages"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp102752"></a>4. Finding binary packages</h2></div></div></div><p>Here is a list of sites where you can also find XmlStarlet binary + packages.</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><a class="link" href="http://www.suse.com/us/private/products/suse_linux/prof/packages_professional/xmlstarlet.html" target="_top">SuSE + Packages</a></p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><a class="link" href="http://linux01.gwdg.de/~pbleser/rpm-navigation.php?cat=%2FUtilities%2Fxmlstarlet/" target="_top">SuSE + Guru's RPM Site</a></p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><a class="link" href="http://www.freebsd.org/cgi/ports.cgi?query=xmlstarlet&stype=all" target="_top">FreeBSD + Ports</a></p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><a class="link" href="http://www.freshports.org/textproc/xmlstarlet/" target="_top">FreeBSD Fresh + Ports</a></p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><a class="link" href="http://fink.sourceforge.net/pdb/package.php/xmlstarlet" target="_top">Mac OS + Fink</a></p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><a class="link" href="http://rpms.mandrakeclub.com/linux/rpm2html/search.php?query=xmlstarlet" target="_top">Mandrake + RPMs</a></p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><a class="link" href="http://gentoo-portage.com/app-text/xmlstarlet" target="_top">Gentoo + Portage</a></p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><a class="link" href="http://packages.debian.org/stable/text/xmlstarlet" target="_top">Debian</a></p></li></ul></div></div></div><div class="chapter" title="Chapter 2. Installation"><div class="titlepage"><div><div><h2 class="title"><a name="idp117360"></a>Chapter 2. Installation</h2></div></div></div><div class="sect1" title="1. Installation on Linux"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp118352"></a>1. Installation on Linux</h2></div></div></div><p>Execute the following command as root</p><pre class="programlisting">rpm -i xmlstarlet-x.x.x-1.i386.rpm</pre><p>where x.x.x indicates package version.</p><p>You can use <a class="link" href="http://fr2.rpmfind.net/linux/rpm2html/search.php?query=xmlstarlet&system=&arch=" target="_top">http://rpmfind.net</a> + to search for RPM appropriate for your distribution.</p></div><div class="sect1" title="2. Installation on Solaris"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp121936"></a>2. Installation on Solaris</h2></div></div></div><p>Execute the following commands as root</p><pre class="programlisting">gunzip xmlstarlet-x.x.x-sol8-sparc-local.gz +pkgadd -d xmlstarlet-x.x.x-sol8-sparc-local all</pre></div><div class="sect1" title="3. Installation on MacOS X"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp123744"></a>3. Installation on MacOS X</h2></div></div></div><p>XmlStarlet is available on MacOS in Fink. <a class="link" href="http://fink.sourceforge.net/pdb/package.php/xmlstarlet" target="_top">See + fink.sourceforge.net</a></p></div><div class="sect1" title="4. Installation on Windows"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp125920"></a>4. Installation on Windows</h2></div></div></div><p>Unzip the file xmlstarlet-x.x.x-win32.zip to some directory. To + take advantage of UNIX shell scripting you might want to run XmlStarlet + from Cygwin. Consider installing <a class="link" href="http://www.cygwin.com/" target="_top">Cygwin</a> on your Windows + machine.</p></div></div><div class="chapter" title="Chapter 3. Getting Started"><div class="titlepage"><div><div><h2 class="title"><a name="idp128368"></a>Chapter 3. Getting Started</h2></div></div></div><div class="sect1" title="1. Basic Command-Line Options"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp129360"></a>1. Basic Command-Line Options</h2></div></div></div><p>Basic command line syntax: </p><pre class="programlisting">bash-2.03$ xml +XMLStarlet Toolkit: Command line utilities for XML +Usage: xml [<options>] <command> [<cmd-options>] +where <command> is one of: + ed (or edit) - Edit/Update XML document(s) + sel (or select) - Select data or query XML document(s) (XPATH, etc) + tr (or transform) - Transform XML document(s) using XSLT + val (or validate) - Validate XML document(s) (well-formed/DTD/XSD/RelaxNG) + fo (or format) - Format XML document(s) + el (or elements) - Display element structure of XML document + c14n (or canonic) - XML canonicalization + ls (or list) - List directory as XML + esc (or escape) - Escape special XML characters + unesc (or unescape) - Unescape special XML characters + pyx (or xmln) - Convert XML into PYX format (based on ESIS - ISO 8879) + p2x (or depyx) - Convert PYX into XML +<options> are: + --version - show version + --help - show help +Wherever file name mentioned in command help it is assumed +that URL can be used instead as well. + +Type: xml <command> --help <ENTER> for command help + +XMLStarlet is a command line toolkit to query/edit/check/transform +XML documents (for more information see http://xmlstar.sourceforge.net/)</pre></div><div class="sect1" title="2. Studying Structure of XML Document"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp133024"></a>2. Studying Structure of XML Document</h2></div></div></div><p>Before you do anything with your XML document you probably would + like to know its structure at first. 'el' option could be used for this + purpose.</p><p>Let's say you have the following XML document (table.xml)</p><pre class="programlisting"><xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml></pre><pre class="programlisting">xml el table.xml</pre><p>would produce the following output.</p><pre class="programlisting">xml +xml/table +xml/table/rec +xml/table/rec/numField +xml/table/rec/stringField +xml/table/rec +xml/table/rec/numField +xml/table/rec/stringField +xml/table/rec +xml/table/rec/numField +xml/table/rec/stringField</pre><p>Every line in this output is an XPath expression which indicates a + 'path' to elements in XML document. You would use these XPath + expressions to navigate through your XML documents in other XmlStarlet + options.</p><p>XML documents can be pretty large but with a very simple + structure. (This is espesially true for data driven XML documents ex: + XML formatted result of select from SQL table). If you just interested + in structure but not order of the elements you can use -u switch + combined with 'el' option.</p><p>EXAMPLE:</p><pre class="programlisting">xml el -u table.xml</pre><p>Output:</p><pre class="programlisting">xml +xml/table +xml/table/rec +xml/table/rec/numField +xml/table/rec/stringField</pre><p>If you are interested not just in elements of your XML document, + but you want to see attributes as well you can use -a switch with 'el' + option. And every line of the output will still be a valid XPath + expression.</p><p>EXAMPLE:</p><pre class="programlisting">xml el -a table.xml</pre><p>Output:</p><pre class="programlisting">xml +xml/table +xml/table/rec +xml/table/rec/@id +xml/table/rec/numField +xml/table/rec/stringField +xml/table/rec +xml/table/rec/@id +xml/table/rec/numField +xml/table/rec/stringField +xml/table/rec +xml/table/rec/@id +xml/table/rec/numField +xml/table/rec/stringField</pre><p>If you are looking for attribute values as well use -v switch of + 'el' option. And again - every line of output is a valid XPath + expression.</p><p>EXAMPLE:</p><pre class="programlisting">xml el -v table.xml</pre><p>Output:</p><pre class="programlisting">xml +xml/table +xml/table/rec[@id='1'] +xml/table/rec/numField +xml/table/rec/stringField +xml/table/rec[@id='2'] +xml/table/rec/numField +xml/table/rec/stringField +xml/table/rec[@id='3'] +xml/table/rec/numField +xml/table/rec/stringField</pre></div></div><div class="chapter" title="Chapter 4. XmlStarlet Reference"><div class="titlepage"><div><div><h2 class="title"><a name="idp145280"></a>Chapter 4. XmlStarlet Reference</h2></div></div></div><p></p><div class="sect1" title="1. Querying XML documents"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp146176"></a>1. Querying XML documents</h2></div></div></div><p>XmlStarlet 'select' or 'sel' option can be used to query or search + XML documents. Here is synopsis for 'xml sel' command:</p><pre class="programlisting">XMLStarlet Toolkit: Select from XML document(s) +Usage: xml sel <global-options> {<template>} [ <xml-file> ... ] +where + <global-options> - global options for selecting + <xml-file> - input XML document file name/uri (stdin is used if missing) + <template> - template for querying XML document with following syntax: + +<global-options> are: + -C or --comp - display generated XSLT + -R or --root - print root element <xsl-select> + -T or --text - output is text (default is XML) + -I or --indent - indent output + -D or --xml-decl - do not omit xml declaration line + -B or --noblanks - remove insignificant spaces from XML tree + -N <name>=<value> - predefine namespaces (name without 'xmlns:') + ex: xsql=urn:oracle-xsql + Multiple -N options are allowed. + --net - allow fetch DTDs or entities over network + --help - display help + +Syntax for templates: -t|--template <options> +where <options> + -c or --copy-of <xpath> - print copy of XPATH expression + -v or --value-of <xpath> - print value of XPATH expression + -o or --output <string> - output string literal + -n or --nl - print new line + -f or --inp-name - print input file name (or URL) + -m or --match <xpath> - match XPATH expression + -i or --if <test-xpath> - check condition <xsl:if test="test-xpath"> + -e or --elem <name> - print out element <xsl:element name="name"> + -a or --attr <name> - add attribute <xsl:attribute name="name"> + -b or --break - break nesting + -s or --sort op xpath - sort in order (used after -m) where + op is X:Y:Z, + X is A - for order="ascending" + X is D - for order="descending" + Y is N - for data-type="numeric" + Y is T - for data-type="text" + Z is U - for case-order="upper-first" + Z is L - for case-order="lower-first" + +There can be multiple --match, --copy-of, --value-of, etc options +in a single template. The effect of applying command line templates +can be illustrated with the following XSLT analogue + +xml sel -t -c "xpath0" -m "xpath1" -m "xpath2" -v "xpath3" \ + -t -m "xpath4" -c "xpath5" + +is equivalent to applying the following XSLT + +<?xml version="1.0"?> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> +<xsl:template match="/"> + <xsl:call-template name="t1"/> + <xsl:call-template name="t2"/> +</xsl:template> +<xsl:template name="t1"> + <xsl:copy-of select="xpath0"/> + <xsl:for-each select="xpath1"> + <xsl:for-each select="xpath2"> + <xsl:value-of select="xpath3"/> + </xsl:for-each> + </xsl:for-each> +</xsl:template> +<xsl:template name="t2"> + <xsl:for-each select="xpath4"> + <xsl:copy-of select="xpath5"/> + </xsl:for-each> +</xsl:template> +</xsl:stylesheet> + +XMLStarlet is a command line toolkit to query/edit/check/transform +XML documents (for more information see http://xmlstar.sourceforge.net/) + +Current implementation uses libxslt from GNOME codebase as XSLT processor +(see http://xmlsoft.org/ for more details) +</pre><p>'select' option allows you basically avoid writting XSLT + stylesheet to perform some queries on XML documents. I.e. various + combinations of command line parameters will let you to generate XSLT + stylesheet and apply in to XML documents with a single command line. + Very often you do not really care what XSLT was created for you 'select' + command, but in those cases when you do; you can always use -C or --comp + switch which will let you see exactly which XSLT is applied to your + input.</p><p>'select' option supports many EXSLT functions in XPath + expressions.</p><p>Here are few examples which will help to understand how 'xml + select' works:</p><p>EXAMPLE:</p><p>Count elements matching XPath expression:</p><p></p><pre class="programlisting">xml sel -t -v "count(/xml/table/rec/numField)" table.xml</pre><p>Input (table.xml):</p><pre class="programlisting"><xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml></pre><p>Output:</p><pre class="programlisting">3 +</pre><p>Let's take a close look what it did internally. For that we will + use '-C' option</p><pre class="programlisting">$ xml sel -C -t -v "count(/xml/table/rec/numField)" +<?xml version="1.0"?> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:exslt="http://exslt.org/common" + xmlns:math="http://exslt.org/math" + xmlns:date="http://exslt.org/dates-and-times" + xmlns:func="http://exslt.org/functions" + xmlns:set="http://exslt.org/sets" + xmlns:str="http://exslt.org/strings" + xmlns:dyn="http://exslt.org/dynamic" + xmlns:saxon="http://icl.com/saxon" + xmlns:xalanredirect="org.apache.xalan.xslt.extensions.Redirect" + xmlns:xt="http://www.jclark.com/xt" + xmlns:libxslt="http://xmlsoft.org/XSLT/namespace" + xmlns:test="http://xmlsoft.org/XSLT/" + extension-element-prefixes= + "exslt math date func set str dyn saxon xalanredirect xt libxslt test" + exclude-result-prefixes="math str"> +<xsl:output omit-xml-declaration="yes" indent="no"/> +<xsl:param name="inputFile">-</xsl:param> +<xsl:template match="/"> + <xsl:call-template name="t1"/> +</xsl:template> +<xsl:template name="t1"> + <xsl:value-of select="count(/xml/table/rec/numField)"/> +</xsl:template> +</xsl:stylesheet></pre><p>Ignoring some XSLT stuff to make it brief:</p><pre class="programlisting"><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> +<xsl:output omit-xml-declaration="yes" indent="no"/> +<xsl:param name="inputFile">-</xsl:param> +<xsl:template match="/"> + <xsl:call-template name="t1"/> +</xsl:template> +<xsl:template name="t1"> + <xsl:value-of select="count(/xml/table/rec/numField)"/> +</xsl:template> +</xsl:stylesheet></pre><p>Every -t option is mapped into XSLT template. Options after '-t' + are mapped into XSLT elements:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>-v to <xsl:value-of></p></li><li class="listitem"><p>-c to <xsl:copy-of></p></li><li class="listitem"><p>-e to <xsl:element></p></li><li class="listitem"><p>-a to <xsl:attribute></p></li><li class="listitem"><p>-s to <xsl:sort></p></li><li class="listitem"><p>-m to <xsl:for-each></p></li><li class="listitem"><p>-i to <xsl:if></p></li><li class="listitem"><p>and so on</p></li></ul></div><p>By default subsequent options (for instance: -m) will result in + nested corresponding XSLT elements (<xsl:for-each> for '-m'). To + break this nesting you would have to put '-b' or '--break' after first + '-m'.</p><p>Below are few more examples:</p><p>EXAMPLE</p><p>Count all nodes in XML documents. Print input name and node count + after it.</p><pre class="programlisting">xml sel -t -f -o " " -v "count(//node())" xml/table.xml xml/tab-obj.xml</pre><p>Output:</p><pre class="programlisting">xml/table.xml 32 +xml/tab-obj.xml 41</pre><p></p><p>EXAMPLE</p><p>Find XML files matching XPath expression (containing 'object' + element)</p><pre class="programlisting">xml sel -t -m //object -f xml/table.xml xml/tab-obj.xml</pre><p>Result output:</p><pre class="programlisting">xml/tab-obj.xml</pre><p></p><p>EXAMPLE</p><p>Calculate EXSLT (XSLT extentions) XPath value</p><pre class="programlisting">echo "<x/>" | xml sel -t -v "math:abs(-1000)"</pre><p>Result output:</p><pre class="programlisting">1000</pre><p></p><p>EXAMPLE</p><p>Adding elements and attributes using command line 'xml sel'</p><pre class="programlisting">echo "<x/>" | xml sel -t -m / -e xml -e child -a data -o value</pre><p>Result Output:</p><pre class="programlisting"><xml><child data="value"/></xml></pre><p></p><p>EXAMPLE</p><p>Query XML document and produce sorted text table</p><pre class="programlisting">xml sel -T -t -m /xml/table/rec -s D:N:- "@id" \ + -v "concat(@id,'|',numField,'|',stringField)" -n xml/table.xml</pre><p>Result Output:</p><pre class="programlisting">3|-23|stringValue +2|346|Text Value +1|123|String Value</pre><p>Equivalent stylesheet</p><pre class="programlisting"><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> +<xsl:output omit-xml-declaration="yes" indent="no" method="text"/> +<xsl:param name="inputFile">-</xsl:param> +<xsl:template match="/"> + <xsl:call-template name="t1"/> +</xsl:template> +<xsl:template name="t1"> + <xsl:for-each select="/xml/table/rec"> + <xsl:sort order="descending" data-type="number" + case-order="upper-first" select="@id"/> + <xsl:value-of select="concat(@id,'|',numField,'|',stringField)"/> + <xsl:value-of select="'&#10;'"/> + </xsl:for-each> +</xsl:template> +</xsl:stylesheet></pre><p></p><p>EXAMPLE</p><p>Predefine namespaces for XPath expressions</p><pre class="programlisting">xml sel -N xsql=urn:oracle-xsql -t -v /xsql:query xsql/jobserve.xsql</pre><p>Input (xsql/jobserve.xsql)</p><pre class="programlisting">$ cat xsql/jobserve.xsql +<?xml version="1.0"?> +<?xml-stylesheet type="text/xsl" href="jobserve.xsl"?> +<xsql:query connection="jobs" xmlns:xsql="urn:oracle-xsql" max-rows="5"> + SELECT substr(title,1,26) short_title, title, location, skills + FROM job + WHERE UPPER(title) LIKE '%ORACLE%' + ORDER BY first_posted DESC +</xsql:query></pre><p>Result output</p><pre class="programlisting"> SELECT substr(title,1,26) short_title, title, location, skills + FROM job + WHERE UPPER(title) LIKE '%ORACLE%' + ORDER BY first_posted DESC +</pre><p></p><p>EXAMPLE</p><p>Print structure of XML element using xml sel (advanced XPath + expressions and xml sel command usage)</p><pre class="programlisting">xml sel -T -t -m '//*' \ +-m 'ancestor-or-self::*' -v 'name()' -i 'not(position()=last())' -o . -b -b -n \ +xml/structure.xml</pre><p>Input (xml/structure.xml)</p><pre class="programlisting"><a1> + <a11> + <a111> + <a1111/> + </a111> + <a112> + <a1121/> + </a112> + </a11> + <a12/> + <a13> + <a131/> + </a13> +</a1></pre><p>Result Output:</p><pre class="programlisting">a1 +a1.a11 +a1.a11.a111 +a1.a11.a111.a1111 +a1.a11.a112 +a1.a11.a112.a1121 +a1.a12 +a1.a13 +a1.a13.a131</pre><p>This example is a good demonstration of nesting control. Here is + corresponding XSLT:</p><pre class="programlisting"><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> +<xsl:output omit-xml-declaration="yes" indent="no" method="text"/> +<xsl:param name="inputFile">-</xsl:param> +<xsl:template match="/"> + <xsl:call-template name="t1"/> +</xsl:template> +<xsl:template name="t1"> + <xsl:for-each select="//*"> + <xsl:for-each select="ancestor-or-self::*"> + <xsl:value-of select="name()"/> + <xsl:if test="not(position()=last())"> + <xsl:value-of select="'.'"/> + </xsl:if> + </xsl:for-each> + <xsl:value-of select="'&#10;'"/> + </xsl:for-each> +</xsl:template> +</xsl:stylesheet></pre><p></p><p></p><p>EXAMPLE</p><p>Print all links of xhtml document</p><pre class="programlisting">xml sel --net --html -T -t -m "//*[local-name()='a']" \ + -o 'NAME: ' -v "translate(. , '&#10;', ' ')" -n \ + -o 'LINK: ' -v @href -n -n \ + http://xmlstar.sourceforge.net/</pre><p>Sample output</p><pre class="programlisting">NAME: XmlStarlet SourceForge Site +LINK: http://sourceforge.net/projects/xmlstar/ + +NAME: XmlStarlet CVS Source +LINK: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/xmlstar/ + +NAME: XmlStarlet on Freshmeat.Net +LINK: http://freshmeat.net/projects/xmlstarlet/ + +NAME: XMLStarlet Sourceforge forums +LINK: http://sourceforge.net/forum/?group_id=66612 + +NAME: XMLStarlet mailing list +LINK: http://lists.sourceforge.net/lists/listinfo/xmlstar-devel +</pre><p></p></div><div class="sect1" title="2. Transforming XML documents"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp197216"></a>2. Transforming XML documents</h2></div></div></div><p>Here is synopsis for 'xml tr' command:</p><pre class="programlisting">XMLStarlet Toolkit: Transform XML document(s) using XSLT +Usage: xml tr [<options>] <xsl-file> {-p|-s <name>=<value>} [ <xml-file-or-uri> ... ] +where + <xsl-file> - main XSLT stylesheet for transformation + <xml-file> - input XML document file name (stdin is used if missing) + <name>=<value> - name and value of the parameter passed to XSLT processor + -p - parameter is XPATH expression ("'string'" to quote string) + -s - parameter is a string literal +<options> are: + --omit-decl - omit xml declaration <?xml version="1.0"?> + --show-ext - show list of extensions + --val - allow validate against DTDs or schemas + --net - allow fetch DTDs or entities over network + --xinclude - do XInclude processing on document input + --maxdepth val - increase the maximum depth + --html - input document(s) is(are) in HTML format + --catalogs - use SGML catalogs from $SGML_CATALOG_FILES + otherwise XML catalogs starting from + file:///etc/xml/catalog are activated by default + +XMLStarlet is a command line toolkit to query/edit/check/transform +XML documents (for more information see http://xmlstar.sourceforge.net/) + +Current implementation uses libxslt from GNOME codebase as XSLT processor +(see http://xmlsoft.org/ for more details) +</pre><p>EXAMPLE:</p><pre class="programlisting"># Transform passing parameters to XSLT stylesheet +xml tr xsl/param1.xsl -p Count='count(/xml/table/rec)' -s Text="Count=" xml/table.xml +</pre><p>Input xsl/params1.xsl</p><pre class="programlisting"><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> +<xsl:output method="text"/> +<xsl:param name="Text"/> +<xsl:param name="Count"/> +<xsl:template match="/"> + <xsl:call-template name="t1"/> +</xsl:template> +<xsl:template name="t1"> + <xsl:for-each select="/xml"> + <xsl:value-of select="$Text"/> + <xsl:value-of select="$Count"/> + <xsl:value-of select="'&#10;'"/> + </xsl:for-each> +</xsl:template> +</xsl:stylesheet></pre><p>Output</p><pre class="programlisting">Count=3 +</pre></div><div class="sect1" title="3. Editing XML documents"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp205696"></a>3. Editing XML documents</h2></div></div></div><p>Here is the synopsis for 'xml ed' command:</p><pre class="programlisting">XMLStarlet Toolkit: Edit XML document(s) +Usage: xml ed <global-options> {<action>} [ <xml-file-or-uri> ... ] +where + <global-options> - global options for editing + <xml-file-or-uri> - input XML document file name/uri (stdin is used if missing) + +<global-options> are: + -P (or --pf) - preserve original formatting + -S (or --ps) - preserve non-significant spaces + -O (or --omit-decl) - omit XML declaration (<?xml ...?>) + -N <name>=<value> - predefine namespaces (name without 'xmlns:') + ex: xsql=urn:oracle-xsql + Multiple -N options are allowed. + -N options must be last global options. + --help or -h - display help + +where <action> + -d or --delete <xpath> + -i or --insert <xpath> -t (--type) elem|text|attr -n <name> -v (--value) <value> + -a or --append <xpath> -t (--type) elem|text|attr -n <name> -v (--value) <value> + -s or --subnode <xpath> -t (--type) elem|text|attr -n <name> -v (--value) <value> + -m or --move <xpath1> <xpath2> + -r or --rename <xpath1> -v <new-name> + -u or --update <xpath> -v (--value) <value> + -x (--expr) <xpath> (-x is not implemented yet) + +XMLStarlet is a command line toolkit to query/edit/check/transform +XML documents (for more information see http://xmlstar.sourceforge.net/) +</pre><p>EXAMPLE:</p><pre class="programlisting"># Delete elements matching XPath expression +xml ed -d "/xml/table/rec[@id='2']" xml/table.xml +</pre><p>Input</p><pre class="programlisting"><xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> +</pre><p>Output</p><pre class="programlisting"><xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> +</pre><p>EXAMPLE</p><pre class="programlisting"># Move element node +echo '<x id="1"><a/><b/></x>' | xml ed -m "//b" "//a" +</pre><p>Output</p><pre class="programlisting"><x id="1"> + <a> + <b/> + </a> +</x> +</pre><p>EXAMPLE</p><pre class="programlisting"># Rename attributes +xml ed -r "//*/@id" -v ID xml/tab-obj.xml +</pre><p>Output:</p><pre class="programlisting"><xml> + <table> + <rec ID="1"> + <numField>123</numField> + <stringField>String Value</stringField> + <object name="Obj1"> + <property name="size">10</property> + <property name="type">Data</property> + </object> + </rec> + <rec ID="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec ID="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> +</pre><p>EXAMPLE</p><pre class="programlisting"># Rename elements +xml ed -r "/xml/table/rec" -v record xml/tab-obj.xml +</pre><p>Output:</p><pre class="programlisting"><xml> + <table> + <record id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + <object name="Obj1"> + <property name="size">10</property> + <property name="type">Data</property> + </object> + </record> + <record id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </record> + <record id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </record> + </table> +</xml> +</pre><p>EXAMPLE</p><pre class="programlisting"># Update value of an attribute +xml ed -u "/xml/table/rec[@id=3]/@id" -v 5 xml/tab-obj.xml +</pre><p>Output:</p><pre class="programlisting"><xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + <object name="Obj1"> + <property name="size">10</property> + <property name="type">Data</property> + </object> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec id="5"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> +</pre><p>EXAMPLE</p><pre class="programlisting"># Update value of an element +xml ed -u "/xml/table/rec[@id=1]/numField" -v 0 xml/tab-obj.xml +</pre><p>Output:</p><pre class="programlisting"><xml> + <table> + <rec id="1"> + <numField>0</numField> + <stringField>String Value</stringField> + <object name="Obj1"> + <property name="size">10</property> + <property name="type">Data</property> + </object> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> +</pre></div><div class="sect1" title="4. Validating XML documents"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp223616"></a>4. Validating XML documents</h2></div></div></div><p>Here is synopsis for 'xml val' command:</p><pre class="programlisting">XMLStarlet Toolkit: Validate XML document(s) +Usage: xml val <options> [ <xml-file-or-uri> ... ] +where <options> + -w or --well-formed - validate well-formedness only (default) + -d or --dtd <dtd-file> - validate against DTD + -s or --xsd <xsd-file> - validate against XSD schema + -r or --relaxng <rng-file> - validate against Relax-NG schema + -e or --err - print verbose error messages on stderr + -b or --list-bad - list only files which do not validate + -g or --list-good - list only files which validate + -q or --quiet - do not list files (return result code only) + +NOTE: XML Schemas are not fully supported yet due to its incomplete + support in libxml (see http://xmlsoft.org) + +XMLStarlet is a command line toolkit to query/edit/check/transform +XML documents (for more information see http://xmlstar.sourceforge.net/) +</pre><p>EXAMPLE</p><pre class="programlisting"># Validate XML document against DTD +xml val --dtd dtd/table.dtd xml/tab-obj.xml >/dev/null 2>&1; echo $? +</pre><p>Output:</p><pre class="programlisting">1 +</pre><p>EXAMPLE</p><pre class="programlisting"># Validate against XSD schema +xml val -b -s xsd/table.xsd xml/table.xml xml/tab-obj.xml 2>/dev/null; echo $? +</pre><p>Output:</p><pre class="programlisting">xml/tab-obj.xml +1 +</pre></div><div class="sect1" title="5. Formatting XML documents"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp230704"></a>5. Formatting XML documents</h2></div></div></div><p>Here is synopsis for 'xml fo' command:</p><pre class="programlisting">XMLStarlet Toolkit: Format XML document +Usage: xml fo [<options>] <xml-file> +where <options> are + -n or --noindent - do not indent + -t or --indent-tab - indent output with tabulation + -s or --indent-spaces <num> - indent output with <num> spaces + -o or --omit-decl - omit xml declaration <?xml version="1.0"?> + -R or --recover - try to recover what is parsable + -D or --dropdtd - remove the DOCTYPE of the input docs + -C or --nocdata - replace cdata section with text nodes + -N or --nsclean - remove redundant namespace declarations + -e or --encode <encoding> - output in the given encoding (utf-8, unicode...) + -H or --html - input is HTML + -h or --help - print help + +XMLStarlet is a command line toolkit to query/edit/check/transform +XML documents (for more information see http://xmlstar.sourceforge.net/) +</pre><p>EXAMPLE</p><pre class="programlisting"># Format XML document disabling indent +cat xml/tab-obj.xml | xml fo --noindent +</pre><p>Output:</p><pre class="programlisting"><xml> +<table> +<rec id="1"> +<numField>123</numField> +<stringField>String Value</stringField> +<object name="Obj1"> +<property name="size">10</property> +<property name="type">Data</property> +</object> +</rec> +<rec id="2"> +<numField>346</numField> +<stringField>Text Value</stringField> +</rec> +<rec id="3"> +<numField>-23</numField> +<stringField>stringValue</stringField> +</rec> +</table> +</xml> +</pre><p>EXAMPLE</p><pre class="programlisting"># Recover malformed XML document +xml fo -R xml/malformed.xml 2>/dev/null +</pre><p>Input:</p><pre class="programlisting"><test_output> + <test_name>foo</testname> + <subtest>...</subtest> +</test_output> +</pre><p>Output:</p><pre class="programlisting"><test_output> + <test_name>foo</test_name> + <subtest>...</subtest> +</test_output> +</pre></div><div class="sect1" title="6. Canonicalization of XML documents"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp22448"></a>6. Canonicalization of XML documents</h2></div></div></div><p>Here is synopsis for 'xml c14n' command:</p><pre class="programlisting">XMLStarlet Toolkit: XML canonicalization +Usage: xml c14n <mode> <xml-file> [<xpath-file>] [<inclusive-ns-list>] +where + <xml-file> - input XML document file name (stdin is used if '-') + <xpath-file> - XML file containing XPath expression for + c14n XML canonicalization + Example: + <?xml version="1.0"?> + <XPath xmlns:n0="http://a.example.com" xmlns:n1="http://b.example"> + (//. | //@* | //namespace::*)[ancestor-or-self::n1:elem1] + </XPath> + + <inclusive-ns-list> - the list of inclusive namespace prefixes + (only for exclusive canonicalization) + Example: 'n1 n2' + + <mode> is one of following: + --with-comments XML file canonicalization w comments (default) + --without-comments XML file canonicalization w/o comments + --exc-with-comments Exclusive XML file canonicalization w comments + --exc-without-comments Exclusive XML file canonicalization w/o comments + +XMLStarlet is a command line toolkit to query/edit/check/transform +XML documents (for more information see http://xmlstar.sourceforge.net/) +</pre><p>EXAMPLE</p><pre class="programlisting"># XML canonicalization +xml c14n --with-comments ../examples/xml/structure.xml ; echo $? +</pre><p>Input ../examples/xml/structure.xml</p><pre class="programlisting"><a1> + <a11> + <a111> + <a1111/> + </a111> + <a112> + <a1121/> + </a112> + </a11> + <a12/> + <a13> + <a131/> + </a13> +</a1></pre><p>Output</p><pre class="programlisting"><a1> + <a11> + <a111> + <a1111></a1111> + </a111> + <a112> + <a1121></a1121> + </a112> + </a11> + <a12></a12> + <a13> + <a131></a131> + </a13> +</a1> +0 +</pre><p>EXAMPLE</p><pre class="programlisting"># XML exclusive canonicalization +xml c14n --exc-with-comments ../examples/xml/c14n.xml ../examples/xml/c14n.xpath +</pre><p>Input</p><pre class="programlisting">../examples/xml/c14n.xml + +<n0:pdu xmlns:n0='http://a.example.com'> +<n1:elem1 xmlns:n1='http://b.example'> +content +</n1:elem1> +</n0:pdu> + +../examples/xml/c14n.xpath + +<XPath xmlns:n0="http://a.example.com" xmlns:n1="http://b.example"> +(//. | //@* | //namespace::*)[ancestor-or-self::n1:elem1] +</XPath> + +</pre><p>Output</p><pre class="programlisting"><n1:elem1 xmlns:n1="http://b.example"> +content +</n1:elem1> +</pre></div><div class="sect1" title="7. XML and PYX format"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp257456"></a>7. XML and PYX format</h2></div></div></div><p>Here is synopsis for 'xml pyx' command:</p><pre class="programlisting">XMLStarlet Toolkit: Convert XML into PYX format (based on ESIS - ISO 8879) +Usage: xml pyx {<xml-file>} +where + <xml-file> - input XML document file name (stdin is used if missing) + +The PYX format is a line-oriented representation of +XML documents that is derived from the SGML ESIS format. +(see ESIS - ISO 8879 Element Structure Information Set spec, +ISO/IEC JTC1/SC18/WG8 N931 (ESIS)) + +A non-validating, ESIS generating tool originally developed for +pyxie project (see http://pyxie.sourceforge.net/) +ESIS Generation by Sean Mc Grath http://www.digitome.com/sean.html + +XMLStarlet is a command line toolkit to query/edit/check/transform +XML documents (for more information see http://xmlstar.sourceforge.net/) +</pre><p>EXAMPLE</p><pre class="programlisting">xml pyx input.xml +</pre><p>Input (input.xml)</p><pre class="programlisting"><books> +<book type='hardback'> +<title>Atlas Shrugged</title> +<author>Ayn Rand</author> +<isbn id='1'>0525934189</isbn> +</book> +</books></pre><p>Output</p><pre class="programlisting">(books +-\n +(book +Atype hardback +-\n +(title +-Atlas Shrugged +)title +-\n +(author +-Ayn Rand +)author +-\n +(isbn +Aid 1 +-0525934189 +)isbn +-\n +)book +-\n +)books</pre><p>PYX is a line oriented format for XML files which can be helpful + (and very efficient) when used in combination with regular line oriented + UNIX command such as sed, grep, awk.</p><p>'depyx' option is used for conversion back from PYX into + XML.</p><p>EXAMPLE (Delete all attributes). This should work really fast for + very large XML documents.</p><pre class="programlisting">xml pyx input.xml | grep -v "^A" | xml depyx</pre><p>Output</p><pre class="programlisting"><books> +<book> +<title>Atlas Shrugged</title> +<author>Ayn Rand</author> +<isbn>0525934189</isbn> +</book> +</books></pre><p>Here is an article which describes how PYX format can be used to + grep XML. <a class="link" href="http://www-106.ibm.com/developerworks/xml/library/x-matters17.html" target="_top">http://www-106.ibm.com/developerworks/xml/library/x-matters17.html</a></p></div><div class="sect1" title="8. Escape/Unescape special XML characters"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp267248"></a>8. Escape/Unescape special XML characters</h2></div></div></div><p>Here is synopsis for 'xml esc' command:</p><pre class="programlisting">xml esc --help +XMLStarlet Toolkit: Escape special XML characters +Usage: xml esc [<options>] [<string>] +where <options> are + --help - print usage + (TODO: more to be added in future) +if <string> is missing stdin is used instead. + +XMLStarlet is a command line toolkit to query/edit/check/transform +XML documents (for more information see http://xmlstar.sourceforge.net/) +</pre><p>EXAMPLE</p><pre class="programlisting"># Escape special XML characters +cat xml/structure.xml | xml esc +</pre><p>Input</p><pre class="programlisting"><a1> + <a11> + <a111> + <a1111/> + </a111> + <a112> + <a1121/> + </a112> + </a11> + <a12/> + <a13> + <a131/> + </a13> +</a1></pre><p>Output</p><pre class="programlisting">&lt;a1&gt; + &lt;a11&gt; + &lt;a111&gt; + &lt;a1111/&gt; + &lt;/a111&gt; + &lt;a112&gt; + &lt;a1121/&gt; + &lt;/a112&gt; + &lt;/a11&gt; + &lt;a12/&gt; + &lt;a13&gt; + &lt;a131/&gt; + &lt;/a13&gt; +&lt;/a1&gt; +</pre></div><div class="sect1" title="9. List directory as XML"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp272240"></a>9. List directory as XML</h2></div></div></div><p>Here is synopsis for 'xml ls' command:</p><pre class="programlisting">XMLStarlet Toolkit: List directory as XML +Usage: xml ls +Lists current directory in XML format. + +XMLStarlet is a command line toolkit to query/edit/check/transform +XML documents (for more information see http://xmlstar.sourceforge.net/) +</pre><p>EXAMPLE</p><pre class="programlisting">xml ls +</pre><p>Output</p><pre class="programlisting"><xml> +<d p="rwxrwxrwx" a="20050107T050740Z" m="20050107T050740Z" s="0" n="old-resume"/> +<f p="rw-rw-rw-" a="20050107T045941Z" m="20050107T045941Z" s="12" n="resume.2old"/> +<f p="rw-rw-rw-" a="20050107T045924Z" m="20050107T045924Z" s="81" n="resume.xml"/> +</xml> +</pre></div></div><div class="chapter" title="Chapter 5. Common problems"><div class="titlepage"><div><div><h2 class="title"><a name="idp276272"></a>Chapter 5. Common problems</h2></div></div></div><div class="sect1" title="1. Namespaces and default namespace"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp277216"></a>1. Namespaces and default namespace</h2></div></div></div><p>One of the commonly asked questions about XmlStarlet 'select' or + 'edit' options is: "Why nothing matched for my XPath expression which + seems right to me?". Common cause of these problems is not properly + defining a namespace for XPath. This chapter will show several examples + to illustrate these issues you might encounter.</p><p>For example the following XHTML document has a default namespace + declaration</p><pre class="programlisting"><html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title>Query Page</title> +<meta http-equiv="Content-Style-Type" content="text/css" /> +<meta http-equiv="Content-Script-Type" content="text/javascript" /> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> +<meta name="robots" content="noindex,nofollow" /> +</head> +<body> +... +</body> +</html> +</pre><p>And the following (initially looking correct) query to print all + links</p><pre class="programlisting">xml sel -t -m "//a" -c . -n </pre><p>would return nothing. The issue with this query is that it is not + addressing element <a> in the right namespace. XPath requires all + namespaces used in XPath expression be defined. So for declared + namespace <html xmlns="http://www.w3.org/1999/xhtml"> in input + XML, you have to do same for XPath (or XSLT). There is another important + detail: namespace equivalency is determined not by namespace prefix, but + by URI. See query below, which would return expected result</p><pre class="programlisting">xml sel -N x="http://www.w3.org/1999/xhtml" -t -m "//x:a" -c . -n</pre><p>Example of deleting namespace declarations.</p><p>Delete namespace declarations and all elements from non default + namespace from the following XML document:</p><p>Input (file ns2.xml)</p><pre class="programlisting"><doc xmlns="http://www.a.com/xyz" xmlns:ns="http://www.c.com/xyz"> + <A>test</A> + <B> + <ns:C>xyz</ns:C> + </B> +</doc> +</pre><p>Command:</p><pre class="programlisting">xml ed -N N="http://www.c.com/xyz" -d '//N:*' ns2.xml | \ + sed -e 's/ xmlns.*=".*"//g'</pre><p>Output</p><pre class="programlisting"><doc> + <A>test</A> + <B/> +</doc> +</pre></div><div class="sect1" title="2. Special characters"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp286656"></a>2. Special characters</h2></div></div></div><p>Sometimes issues appear with handling of special characters, where + 'special' means in XML sence as well as in 'shell' terms. Examples below + should clear at least some of the confusions.</p><p>You should not forget about the fact that your command lines are + executed by shell and shell does substitutions of its special characters + too. So for example, one may ask:</p><p>"Why does the following query return nothing?" + </p><pre class="programlisting">echo '<X name="foo">EEE</X>' | xml sel -t -m /X[@name='foo'] -v .</pre><p>The answer lies in the way shell substitues 'foo', which simply + becomes foo before the command is run. So the correct way to write that + would be</p><pre class="programlisting">echo '<X name="foo">EEE</X>' | xml sel -t -m "/X[@name='foo']" -v .</pre><p>Another example involves XML special characters. Question: How to + search for &apos; in text nodes?</p><p>The following should help</p><pre class="programlisting">xml sel -t -m "//line[contains(text(),&quot;'&quot;)]" -c . +</pre></div><div class="sect1" title="3. Sorting"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp292496"></a>3. Sorting</h2></div></div></div><p>Let's take a look at XSLT produced by the following 'xml sel' + command:</p><pre class="programlisting"># Query XML document and produce sorted text table +xml sel -T -t -m /xml/table/rec -s D:N:- "@id" \ + -v "concat(@id,'|',numField,'|',stringField)" -n xml/table.xml +</pre><pre class="programlisting"><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> +<xsl:output omit-xml-declaration="yes" indent="no" method="text"/> +<xsl:param name="inputFile">-</xsl:param> +<xsl:template match="/"> + <xsl:call-template name="t1"/> +</xsl:template> +<xsl:template name="t1"> + <xsl:for-each select="/xml/table/rec"> + <xsl:sort order="descending" data-type="number" + case-order="upper-first" select="@id"/> + <xsl:value-of select="concat(@id,'|',numField,'|',stringField)"/> + <xsl:value-of select="'&#10;'"/> + </xsl:for-each> +</xsl:template> +</xsl:stylesheet> +</pre><p>-s option of 'xml sel' command controls 'order', 'data-type', and + 'case-order' attributes of <xsl:sort/> element .</p></div><div class="sect1" title="4. Validation"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="idp296784"></a>4. Validation</h2></div></div></div><p>Many questions are asked about XSD (XML schema) validation. Well, + XmlStarlet relies on libxml2 which has incomplete support for XML + schemas. Untill it is done in libxml2 it will not be in + XmlStarlet.</p><p></p><p></p></div></div><div class="chapter" title="Chapter 6. Other XmlStarlet Resources"><div class="titlepage"><div><div><h2 class="title"><a name="idp299120"></a>Chapter 6. Other XmlStarlet Resources</h2></div></div></div><p>Here are few articles on the Internet.</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><a class="link" href="http://www.freesoftwaremagazine.com/free_issues/issue_06/xml_starlet/" target="_top">XMLStarlet: + a Unix toolkit for XML</a></p></li><li class="listitem"><p><a class="link" href="http://www-128.ibm.com/developerworks/xml/library/x-starlet.html" target="_top">Start + working with XMLStarlet</a></p></li><li class="listitem"><p><a class="link" href="http://blogicblog.blogspot.com/2004/09/xmlstarlet-gentle-introduction-into.html" target="_top">XMLStarlet: + A gentle introduction into XSLT </a></p></li><li class="listitem"><p><a class="link" href="http://blogs.applibase.net/pramod/index.php/archives/command-line-xml-with-xmlstarlet%20" target="_top">Command + line XML with XMLStarlet </a></p></li><li class="listitem"><p><a class="link" href="http://www.pinkjuice.com/howto/vimxml/moresetup.xml#xmlstarlet" target="_top">Using + vi as XML editor</a></p></li></ul></div></div></div></body></html> diff --git a/doc/xmlstarlet-ug.pdf b/doc/xmlstarlet-ug.pdf Binary files differnew file mode 100644 index 0000000..228e406 --- /dev/null +++ b/doc/xmlstarlet-ug.pdf diff --git a/doc/xmlstarlet-ug.ps b/doc/xmlstarlet-ug.ps new file mode 100644 index 0000000..174f196 --- /dev/null +++ b/doc/xmlstarlet-ug.ps @@ -0,0 +1,5030 @@ +%!PS-Adobe-3.0 +%%BoundingBox: 0 0 612 792 +%%Creator: GPL Ghostscript 905 (ps2write) +%%LanguageLevel: 2 +%%CreationDate: D:20120826125706-04'00' +%%Pages: 31 +%%EndComments +%%BeginProlog +currentfile /ASCII85Decode filter /LZWDecode filter cvx exec +J.'GP1)YJ2:a-L/6rF=&5]f",9VMV4PfsINPg$$lJV;<[.@O%03.smQ('PQ#V^%=ggiP:i9P6m1 +&e,,#6QsIUEP1^W4j%>VfmLeP21i['0XteJ5'-rMBI73qYi]MqRS:_)[:!GtMG0%^!tgdCBfAL( +FIC*'*+_5Lbn>92]]a#cSAZ&>A@c2Y\jd2S!P$:g'tTf,7oM*o%:D37/I$S.]\mgscphMRIG413 +(Z=Q;")5F8)`Qr"=NfCOoQ)ibUD`CCLE1_#S2=*J!5rCj3Lri1"+f$rI5+n6R8\*imVK6JF'6bb +K6LhRl->%^S_n48hjF.$II@,f_rC4^-LP1_'P3RLc;\MOTYp+S)1DfDO=9f_O"?+02SP(nbd7C: +,PLpub<")6Npp03rriEO8hG\t/)iPl&$ta\\RQ9Wgl-k@=tkndE8\D75lag+XU?*o2[gpEb1/4_ +BZAX`K9TgZ#@RV(1FmBR-6\B/B\N?BO_@Vr7L=<GnOZVd5W0)A6u^^ICXf(>"T\V8$O%^;5Vik% +X'glQ&<tJ?WpTttQ@o@Eg;o3tUt"B_1Z71&/.QIn1Sq12j>*a1@^:p3EN%"o$GpU)'[TYQ@QTSU +nut<Y5Z5rcNg(['3%k@Njom:E._tDY%t$;S7b!,<%>?#Tir:g;o0>'j".6sSKF-Xc[#\]9nh?)( +b<?`oQ1][Td'K/fhp0>\N%g59D&*:Me&:ml/dmpA&6p`Qi7t=\`/p7D08%F*.t]<`1C`Sqqum6* +.&89uifotYZKZeY4C2)8?UnK4`+=N/GJKdp#f8![+pfH4NXuJ*Ga]t831^&l@9=Q2N(T7;fdk5j +-51q_)&sA#L#[RM0o^>`HCq,iX=brZJd@)WLJoepSnHaW;jH<eF=!=:H)jE7jYFDP1Tp!N3s[kW +DFK;=K<5)!N`iK$S;"QTeeWs#m/Jk"%?dLjD+JpB3(ERm2n>Z0*oX:*$]*2UAuY"YS;#osg,n13 +/AH&NLq_jibAl$W_pN5YY,J2/V";SV>dCW*9R7@6!'j@)`#%q8b!)^^R;Np&NjT&!QOJq%fVlK$ +>Y[%\ULON#p>)Z^_lsM"*47!.#jO;XJsc"'/m#dH47DEKK6,B<_P4$T#b0YioA.<Kb(m'WHoEg3 +OD5_0?TT\1"l\or4R1gbbfR8upWiGZIt3Vc![)2.iQsT:J7*;HQo'5!g`-EXJe3MN6jTJ''YCj: +AO;%HJ)T>c"+l-[6"i"Y"d)V#!jkZ&HlISi%<+8dHKt[-0g5WjWgVK")kHS)!C5'G5XOrXN]WY+ +"[VMqL\aUDH#3rY80J.;/eK-tbB^9R3^"=C;W:eY$)'Tq709G&So`6f"C`Z5_O)!Glqr%jL+:1s +?53O77Z!6g1r]7A'dBk[%H5\sL/L'&bLBjD;;O#>J;gEOpgoOAW[Z"c?4b<Mn<#IY4%S#X7L7B] +;ac;$a&rWnU9YD<kD20^o=!>GH05;1Zl#_CJoZd#'Q8QM]E7bf*.nNBQAs:4#8$S>60V:%meQ>e +d\=DdQmcW@)+4]Y:9jt($3emP(Bmai7?3;6Ls2Fb&X#'sADtrpEU#^m8Go?E!&'H)C-Vh&jC`"S +09T8.G6]=DfmuCAS<<M:K"sZ5UdXiIe&HG6.4,<95ne3:+>tO!,')\:F.:X_O:i\YdFMbGLJB^K +^KK/6kCetje-PbDH(YKm,kIS'j:G.q&l4Vi+JL[kO3WV:S"4VZ;oNWa!qh4Bb'NeE-]OTH14j2] +.[tbKp$=%$NA4\NgHDea,_n(R*#kUc%rJ6Z";"I5%3)?QTV*l:pgDUM6as'b<&(A6A/X>&Hp99W +]?l.4/lb:m2tFaH2(Ifpj_<n\.Jt'8$M_Eg&YlJ9]EMD9`,:SY`a!L!A01MO&REXt%KVa%fK/r\ +$^q6(V$=oQRgh7@m=gh'nqPg2O"qDBigZ&S[YHq*hUDFEZk'SB=RbouWgS":VHc'[?ka+PjL25^ +l<:#Fg_mqRoTs7Jk?6!$VHKW9QLa2&RG-@3CO<!8<RU$a>2BMcn31_*co>6QiYfq'J>KO=_;4G2 +)=A]GL%ZSPJ?"B8.JZ40<[aZ.i6IVj&QJrLW"<.JfL*`:'.W:&"CS-5@LJb@^u<$2W2X!0_nGSP +Qd*@_BQ,#+jr^u?pCRV;MB.>g**fK=mA1/W\gi<$;mib&"=14r!YLAABQ+mm:hgETXh9&n@&9fR +.YeDj6ndWFb(T9&)OHP-$:l3/#EYAk6blB1Fk,H'%*b&X^0/WjT.ZVbM3STp<m(Wl24'ILDr*3^ +:^ILdk=iFWo)<(AG(dXJKuiZBIK_%nb:M)nQ\41G6scRR8J7h89>[)C-=j37PsW&n69MbWKZd'0 +diFq$*dK=[]Hi6n5T37n<%\4#0:=<dP4c)Fe[iDnlVr;7e'>]]H71giNJ)YaM12g4be!*_g)N!> +C"O?cphCO5WHBcSe@:IT=(uV]p9(.E'9nSK`b6%gHnn'D*i`u=A#sgEd1715RdJk=\2S<<%@Y@# +CJBGg\#/BF=mbttKTMK%OAib(-kJKr_jiZ#GbM'd,;3.*_f\81bMeIE115tYNtF*p)RRtK,iTcM +H%FWo^CB/US=FQL'i@Q$p`E&06A#3Kh;PR_Kef1-Lmu3BLX";dU,j;C-uL\C3<JgsYL*\:7[0U* ++t&JiQI/%e/,VN7]FJG,$E4m*>/3$!?2Mrl-E$0c2$=!MKFuN?`!er90XF)0F(N9E?D[)eR8Bmp +_O#6qUqTafo>SQQC"^='Pfe\U"0h\E'^QZ$:NHRrb=\^;j`+6Yn:Dd2_k'4'\BhALmhl(VVi]%k +fJZ,,-f6R@aOlt6h.5_%r&Ycrg=hK?m?OThF]=+Tdt`NCJ;/KK_)"7p/%WKTfs>gm@RVA#`p5ar +2;`@I%HLUMQVai4K."kOIoG$G+)-@U[O3i+LM*6N%Xc#&AI6L=]`T7;JURn,%&)=A#$n;aC6C?N +T`9P^%%sC%i.SrK9[YTfs.G)QTX"lC'RR\no5DpmaDu_0@LM+)#(XEJ."$^+^B81LQ*<<)W(`!R +;E.#nlN##cU0`I&MZ0b6g7gLQJnD@9E6CrS%SXOZ%)f@8$mm+`2IbC^`S:XdG0[2C1i-d>.Y81M +Sn@04,@[IJY:9s^EjuB/37)h5bZ#ddq[%4g#OM[#5gp"#N6/6.6]dPYY^"EOm]>opQ8"sV@Y2U7 +R_aq&[Dq&ZY`B6mrsY"N#Kk>007sb=`srZJck(`SDUptkBYt2'&!&cfkCF"WG_m"N4qPN:nAGG0 +Ns>+3Zc;o^!eQ2c$P0/C&.#M#@#ekBOB:Eg$mI).,R3^OO@@*67O)fTl%!qh(riH4jU56PW_@4O +5Qq.dDs?'f&U9(h%L!2A.]7II!6goT5Y8aW)GF0h8i3FmhMA'jR*,gqll<=N7h\6H2Y#69;9Eq; +TaT6*.O[j@Nl2EI3[LH?-o"1$OEN$,N5=TYD=FiOWh-OND%8,`4p4-WdJjGf8Im4SPmh7.&gRW8 +-qkiU%DY^i@hBYHb*`SN5=-h[?r.%M;?bK+*!>t'Ol16!q%Vt*,)*u[aB^#&Td*GfYe]EHdQj9( +RRA>N;!M71b$kMSAL2A#UG?/NCHWeSHR?Vm-O%I:9]dmHGpb@q-j&WY;Mn5%RR@dO#'-*'nsi"/ +@^<tl*/]!@1),QS8j.lj"n!r@A8D`kO<Xb(>:C6iXu\c9-6icp%>2#7;/E3Xe.(Nl?.0K4+S#u7 +`:L;>NUluW?s3h33]V7'0XD5t@)FcV2_q5\8&O:B5hRrP+sR)p<+*q#-d][^0/<%p0-FF)./5h' +a"jt`,BFD"XK4Gf?mLq:On0GI^u[Ncjpa,%1:(aLo//B]E%7Sn2hJRro0YP]aZ))D,h!hlV;"!d +[6'SA0h]rD!/=V6g^#AJb@'Kmn-W.QpD(tn('\hC,nW:]g6#=liJ3A*8i](s>Wr_V.kqtS_Oe*W +FKV@R`bAXC_gj^5K"p?eDDGnEb\VVWE@NS=Db?ISX$""pUi-mC"lNVkmUW8jIgY96$S6=t@,T&3 +"GpNDM6UMs!/NjsY^Zd^Iq`G1A[`7F0Ha>:DNhOJ&MkIZFY36OHm&9kX!g/)@g2qsJ0h9l@g>;: +#g/3\8sHF#,NO<<1:I?I/mudR[&G\g)%'r1,&;/Fb?B8S4%^r@Tq[5<_Sg[U@1@;D7];hi.BOjI +>fgR@?rVIh`u\H'$Reo1?IYT><:*.rlsCFq54dD9PMJI"^cdn^a)^/lW%pgn[`Do`!2]-^<;f;E +:_.)AEG!]K.>A?Y_bg"G[M8(%+T#*30,%g[$:XAZ.E'5HX:5NJr="H'Oe4-O=RQC`%5.?TVYqa& +Ij=%U-'DOc;21ir[k3-W1U6s%A3a:P(hEhH!C44dBK6V/pJc/Qj9G3[2*W06j]#lgQ>(*jl_c4S +hb-WZ?W8SqX>*H7^c.1_L-e(le4<Wjq]-8$XWs-:[,.(BT3K/k>S\@j2AX-;)G8R'2teT8jKM&Z +HXY-6$O=9e$DU'#?V.O9LuR^J5b*mEn9kK.&#\=m8P0>EnER9!=Hq]26H*:YoPI.U\ZkL9+NAl8 +!m1.nDO,N(Y*?$]+>^HdCN:jECj0YPG?uV*b4SNli2&o-ChG0/;s]iOK#^D^@od-T8)Q[MFd#m! +o,/:Q1l7mC$G$\sP0pH#4r'PilGkE_W!4!=/M^a=2*GNf0QrC7%9C3"<@.kc(s:oE#GnkH2Lm,t +KU:30"kP(15eg"dHYSYA$-!is;.!<Gp&u6p4dR+00l^q2c9[cD([P1i,s*\n3HGLB6tpm^G)-GM +PXGsgSBf>dX9'kN>tJ's6koH52^6]qj[YWkD+1lh[Vu],F_TH:mqQl![UEc<nIit`HOTmZdUPl" +\U$SGa30@/2c3AZ`b8q[IEY2u'EndHPCC<u?"O3rG1N;4K"#:8G,F;,QS!DrjUqgda_Q<Mp[mjs +It+dBJ*1!RfHC^+'(Re'1j@#<7tH.L21Ltj/7V/7Uel6E7*5(VKU=5tEnWM"\NL/rAs`cTj8F1V +kQUYg4r*[,M=Dciq'3;H0N`W2<skiA&SlS)T2YP>bpZoa*2na`W&BI^JEL6J/S`n0CfLC@'f.Pq +W./s?<'i0BYR7.LEu8_+*)``TOLB$TGdVND8f2,@Jh`3/:'`*BYA@:$d6if2]JHRgMaJD*euiGk +gDG14Z4SmPo%\UHoM<"F7QBl^-)B!8:0UBWC_ub8@#!<s,nF*hKldWTa\"*n^j$WOL@r-?phC7` +?$t,YM?;ZPF]!Tq;14GIP@-\Af&'K7I8MIRo5V'#2XkD<VDq-W5:E2c/NO=gR1m`POE`("m".c^ +gimu]Xoi='Qh`*K^OE[>LI0pB;)CoLd1s2TK3:QoOeF7,6YmUQ<EXU271]p1%Ri;;P3fmlH$c/+ +L^pPZR[C^-3WG`tCS5t\6\gXIQkE?$2Y.=u`bXI>%nc12[pfYI5dlM.Guh4S3!KpiS"oqOMoIN- +[?k>GTNVW%3JA9s'M<,cI(E4*0mY/>fRJ&<&fPS7g2K^G_?ZG:Djl=a^pjj)dAO#DZ*E,F\itie +SRIcMKfWq4K9'8,$Y1W"$_gP="TXrW1RXZ,dY6cZH)$g=-M3?Ok#r:<7Id'3nY(89I08/s#8qr" +@[Yo<TX<5JYO6Y2%b4s=#lsGui.<)%OpNO:XREZJ!.kFUCU"fm#s0H$qTq!jQjZ0^"oC1bq_>A> +O9iYSSPJC=gHu%-H3oH#Pdt)-,:Wt,L'YmB#[igU!0#,@@+$0P$A&Gj]6==[AhXfE!tha^!.q6V +Bs4;j5$Hj1>EWlVft!,:6+ZT;9*g7Ad\%N/FG5Kl`T9K:C2VW^PG"hW@-P7ks%$mQFLX!:2X;s< +r=f=ks&l!>T]AlF]Vle,Bf3D)H&eQ&Li8LrL"%/tebH@*-,+/CW`ZI;j5ms7V6A50]p>^])remA +4+la@^7,Y@47U'igUm@[NTu-9AG[Km:b*-96ao&dHaR:p"+;"?D>ZDSFu6V>B5m%/'3([C<11;\ +SPi"cMhIIH]&fd"l(PW;=*W=KV9tVh^8nl2\pPm9\bE]0'-@3]GiD]W>a:M;adoqD>du]7=[o^l +AX0A%Sf)%(Gb(.q:R:-5b#MHb_i:?moaNp6G.@U=2W:#?$Z3G1;n5S)06668`70gqW'(UomrmK' +9X.^!aumd2J=`eenifD41iIuF\W*]%_KL^ZT/i1<R@UV:e%f."YoKeJr3*]3F'TRK)-.p3G[?g. +PunW]%:E#tW;(+(<:=F0gr=(;."GUUNHeoAeD3_dVRAJ7S.4,7*&s61-'"D3P*uW.aB\.ASF`n/ +oQHb30"il?3T&(!ioN1'OD:eX1fV7kLe.p6hl'odi16NoO:DHJSNJQIi"a'n`3b0:F[\3E7lI,t +;H$cjM7oP*>jNjse:(rGiV)A(;Blm_ha7,Pi&j.t$m-O2!?SmNP15b;rS?.nM@@/2hCIn\%k#QT +pBn?j[#Kp:Oh8Uim@tsA1VE8%)18>:cc7RYkEKQ$]trnMo?"A0I_"pk5+%_gL]u<Y%Fm3[F5uD0 +_8"_9[ANSf'@g"[Xq"CjahA_;J<15uh@4S+EVECu5aZ+4@P7%/in@jL<f'Ns*N#[A^9jl-TZ_[k +-8]n&n5LK>*6_oB%:iu1n'^[nI3%,<S5l0Q7`[?S$N'-s'cSCN:njYRj,R'Po&AO-n6PGhN$IuO +^[bPAn3C\tg\]aFF%VJD\H[afr]IB>:^k3I>SfD`V\8VdH3=5WWFj8ATX^CjgIk(RK'-AB!4W1T +>B6^(;?[a<!4tK/WVNaJq>Te5EJ)<hXBu@aDI5jZo[R\I>u4N?oAK/0"Zi7iWU2n#6_M:L6@)/& +MfrVj"[)c,#D%.;hJP@dN@)Ol;"AQ\L^`EETY+TB3?4%A+T[hsAMJdtVSd\li!P%O:6Dm!N6i\, +*DVb"&Z"2m&/bnRBebogF#k;"VA!VkpG/13V\>bLidj.b`<l`70hB#H,*7\XH75MU3>@Nb_YT6e +W`:C1.J>6R8qT)`$d%NU<-[YD1R_ss,KrJ"+<K/GVO?!>FZ_D\N+V[_(dKbd)iV.&BnYP_'G4ng +;jkkXG))Io-US/k$QG]T9P1O6KKsW96h&es2Rd!8RN3Tm$3l=MBnD7s0hAZ\2&qZJ0N`t/??gQJ +6=Jmd5a4l0-]tnb1T?6D$6i!"o77-/fsj$DN5ic7bgGK,iZVGl+f*,"e*:Vq=hNlkCcRL8@ltr! +M2:j\%\nW53$a%T@bW6.i`)3p+s>_i%IJ1L1STs&!<FKA4;O*@UG=SYNItUR&O.a4p_Sg$PRo5O +.#=r]N2*t?YcMT6XK3p;:f/&>Od'N7`mMRe0asg<^>p_/G_df)@ecQ:#bhT\a289UN]@LmJC+-" +D;`PQM'HufhSeDh69,K"_YB@UBTjd8c4YFs-B,-q_BBB[MB\;'j*8G17:D]-S5(Vcc4Ei&4<m>' +ZM<38NK">'7"qjc0ba`mS$to(T`mP:6:l#\0i\3Per)_1W*U8H!kd5I0(cFt23#LumPds>!61b[ +PVQL,,RPs>jerG=i?K]PZfs8HFfQrr%X$<I?W[dqKEYJB4cV_)XED\*al=f&3aEP#hdng6D4WN: +,94rGU*>uQ4X'M&_.+ath)bU9oi4M5;s<4D:fLOfcimjc*@!Q%\:l(3@W'o;+l;62o6m_qii9&[ +.bod8fBIC::gZb<kVn.q96Aq<R$&j=TVGujDM8s_AB$mpK)IgM=8jG&kgW^")$C@=i&nPOJESeb +6PN;c`:KfjM/$OLX&ID*4B$IWK;G)og(oii"9])HNK57Uh0M"/pu^Ho2/*e`&R8^Db/.FC=tmpm +_]>MK;,E;VrG\N(2E9[[>$JsbS2Mspnp4pW16*qiCB["ng5Df5P5=l+Vo['<*X@s"ft-:9BRCn; +>:nr_4lbjE1N3kQ>WGgjSjP>/6VL6"MJ.W;ga1'm'fp)5Uea+jOMs#9%Xf+[OtU<+;B'ThO2$Mq +#tlD8_;?)Fn,s"tBqtW6+5/E`<T7N&%,/a@_0;24dJU/defMo*6TLrFl`pTCaH?:&$;XZcW92;A +6"?H4`jhTsa9nEi6>A%5!9Acr*(CSlI0:(sUT$"tr7&<G!Do2[^4qZd(b86C@Ft`?\&S334>S>H +FN:2m'adpGQo>QJM@b=&!PhYgBe[('_cPXA6+cH;Yhe\'kK$M&CI:CI!DitW:B$+"+B5R)pR(07 +UCq%#Ki&I;5K<L!i64eC&1&DR7"Q!%W<OQfBp=_s3hBei&Vj(-*^s39pg79]1U.*U_RPLD8/c6" +;BufE=J$,"[$XTC<Md(S\/cdBOc,2'0*aJP6BfTB?*F>'Zp[t,UkGpn$Q_?p8FDQP&hsk)E?kd0 +2GI(hKLL[_V(oc?8e,NU#_@XaL=-EhV7Jg#Ep1^ZiaEq+7*6Y$11s;]gj$o`4bH/"*&Mn&:8G3* +"nO')#D,jl$$e7=$(No.eG/Q.`7GE4:ca^6joVHZ8IfQWIo$B>4_JcESdEJq,W(C<;7s\KZP93u +@L,8[k[g0g5%q`gEA^ADr0o73N0&+S7qVta,>?*t\9GtSBG(RroP!G"_Ao)?Zf?sbe/+Fi%8"Ef +(^sit<%XEs[g;9USk(Vo\&0P(5t*/rC6Z/hC08\-3f@X)i&:^X;Aqo9E$80>4qh>p7#h;b,4ghm +^U[Q*i)Fs$A>5(3UInsl)9G<UoU2>O024g-hj"M\3&9FR?3>;t/Q@H.U`)f,_$)3jJW@WMM\T9, +F#0k17[ZjB[pY<^b?h?[J>2YD*=-EX0=.e%fIAgT%>0dgO4q@CdZbJ6EFT9[TeI?&B.9<Q$<QB# +:a^E_iBs0P"TXJqVaDk*$7h_oTV*-S?q(MiBIU9e`5a^B"Du5aG'[%h7,@tkG_;:B<:YTiR"_:A +-^2dZ&M<[_\LheBkq-Uc(@]Aff(>2$m[eX&p&M/cCOfFfHZkh>ht,*DmVU8u+j#F&>Gt/X<3%9; +*#&Rl@>-=j/SLD,T]0bG@dug5Q4&S[0"UsXjtS3k<[]u>Z:r:G-$#>+0^o9gd_<i.UOjipR8Blm +IB#Wg0<959:un@)OMYI<&Ss&W\%krU2%,gq.#QN`fV(tu?#ZLqYa8hgH'Sj:"U@.P:OmR0aEVo' +7($>&%(S;_!-]QnJL+,!b+CFGY!nR_PZ_3C7WI7DR[-&M(;gfI).l7+9`3.<@+/Q*c@_LJertdH +KUIC<EQOEaV7q>`VtCCl;j!=Z&PI7b/bM,.[adLZm6+a8J0<@$cIa-@a03Q\16md$-*-s5WSo%Q +,)B5,Tq&/41:rhsOWRjLl+TH(q&[a0(^4M:m?s'q9[,G(Vj4hgIdA\TYnN7fa_#E0REI]%%\53) +4g#ZEjtCooha7rl(<CL\6.,eK8Rs&IV+F6D5PC:h=0cs365-7*[%CjXU-)V%M,LgfK3Djp5gt:6 +'2G$oq3)\o<QfZ(RKe+=:Psm%;hK:gXc2DM`k8?0ac,25.gm5iG^Al%/*/5tMZWC.7$Bp771&R- +nVR-MDPi)4r8HmSg1b+T^54H<NGWKk9u_?Z'"B2bJnBU^7?c`IU`)/&,'&4-MqL?JrM6)"CGsMn +>r(\9;^lPe*L3qJ26^7/FqL7XX]s(\bdj?dGAPm9@hscA<WtC9[Q74,#]6LD\=te['p[e84JYOP +13X;`9<'3j,g?%Jpp>5H6C:^Z8RNm1Y]pM'D(kSr&n3!HJD,X+06+S3e&CcanHgtdp&N$p-t7&a +IR[e_E@d;'D7X0T<aT9B-@,QQ_lm#O43ScmqYgKg$3<\G,fU5]H:o>b]q;\<52;?M4hM1$GMiW) +qqXKchEIZC);s/"GhJ"uc+Qq4K,>C+i&<mtrOqFU[f^V,@_&>ae%eVdMfX)(d@cEn4Fr.X/O8_Q +8FR-$nddIr$"/Vl#WN*/RZ?V'.Pdp(],@UC`K'af.nDE\aIt.n0,"@@!uWj.aYT,P21o9d#iI`W +BfhOeZ9'lg*\8U(A1&%84@1IG\gY$S3T:W5-)ZDHPCtLi===8todS@OT&@>8E&s@O31e:e3O",s +Yu?MUJ"<As!<G8K_:H2sk`n2ZVBK>$,$Qm6PsY*g_[IlUF>=::eAFC*_caU5F6GKcMEJMp]gL)S +18TM!W/X\,ZR[nl8B$4TQUM2"U%l_<TZ\Zqd2ubdM+H'IGl*Is0S;/=%2bU$gU4g^Tb[uONVMFf +Wj[p=:So6hO,,eb9NOB5WPhBe`*=f\F=b@`1IFM0*'3g0!='Gke&5386tA$l\C:Uc/il+/`uJj2 +HnrX)D3b:oLnl/W#r.VpEC0kP_t3E:0bM7-^o@+;WY2$U0dW+&)D,1V+;>2C)b7sdPU[XVK:!H, +O;PK[Z@Qu4)X'$[ps:GY2ZhVM1<:8`5`p\'M`aom5bhO3)LJC(9W-m&`5!V9%%0K"KIsMJ4Kp0R +Y_kuY)hO_C-i2LU$9LC%LT1c=a=N4k(ko(sN$k]d$*9.Xo5)MWOh;s'"+6=>6Z&ae`Q;S>X6b?I +i55jT(C;3>4Btht."a\h)N8aqW4]KiKXJ-#[Y[B0a>fUp0Zes_]VFs8!N6n;KXj`0R`e'pLp5`l +-n0to!f8[CWu/t]/;Yb=Lb&fSLq#.,db6+[#7u"%SLdnr.$hmKN/Dj*PDm_JE%;M]J'A\Q$f':% +]"inp36ePS'j?NQ/DNZrntd97VB?]"GkD.fV9L"*JHXkr!fP>\fRX1h:.%,GI*)d!bK^^s%SYsl +gu$&S1't>PRTe1br9p"Xh@JP+M&;E$m,et?n4sbN""=IC)%qumm\mB,-^Zrt\>$3:/-0E(&lCLs +@)3.AJ=)#bSSIJA(c)Vhq33o%Z&6=mfU)c>)1e%PU:@n$iU;Vjq\'ZL/Zer&Zk]e&e^"[/0#\(B +H4!Lnld*qS!H\d1&2=GeU:%hF`3B2.]YKg/i5Jr`[;5+_K(6&V&5j[&\^:OE;=d'/++lPi)D&0c +fb[MY[Y^F?K+/d&!\[4F.%asG!*(Qa2&di=^-eS<';.?$EA)rYC]^gf["1n$&\EU.V1Z!1M?ILC +$F)`&Od]EO;9?5p!ot&<*!kL\4o+d#1(=q?0[bYBROPHuEDtA-58@"V0^57Z-o+^\14nm,JH\28 +jZ88<a\e0!MeFRATHb&u]$%cC%WoAq,<s77(Y*9#2;Hc?:b#B$mfQ+?<RZ>WCAu_R8Q9u0X:7uU +2.A#>p=9*oO;NsK)*q+K#+kTJ_g:@o<FhlpU/khX*@0atCsoNCClP_K=!52T]kLLQN=9rF01u9u +?kc$p0nV.oSCjQfLan!I,(cL?V%==B)>UW1HASb;b&Z/p<9h&.qMk#<1,RtkFLG2BK3'ia^*#?f +?o3K][hG,cZ2u`"3W=tXl]#ah%+TF%1u6Y(P1MPp*rR<;#o)']*eU`AS8'Y'[<<BE9/Wse1f[N. +o\"lMLeo+-d)jkm;&J"qmXs^>9O)2^PfLdYpW*qUf6WHX'pa\nF"g.N`4^-m&37&0UE(qR!<oA6 +,n,<&cHep%N,e:?>qjiUPTOUq<r%t7BTh,.kZZ?&<U'L`l[C$]oNQ8P;@UE;%98]G_HXmWR"\=6 +ePHPTqiNlQK'J9;4UNdVP<)5q!b;Ie%&1%Q#?sm`gC[<u<OLX^cPTUNf9&'I0b]+'f9A.@_hoSb +j;KVFn]QbL".^9[IF9>DL>4(D+1%rs9qdV2cb[<B!cU2QCmp/n1bN(`=])3DSZgj_mG321hXQD- +Qk3>ePH^&$bP4&&fV6d$hqaL%?UYTa2<nMQS<FEWM/COj`8TQi_qofA&Ud#uTJt^e0W(-='1&GL +-3@.k-d[/%`E_9J%G![&%:FuJ@%Fm3#R+U)L6-P,!*0LCrXE8sVqbS]:Nco13Iofje)>#:iK4Dm +>/9)F1Z:=-iPllE9Td&@JPT:5@3n;"krE+R(#JX&'93mC`YdMa"qZe@PpN^JFrk%W*TA\&@J(=n +3fDj9WT%(%:*'DbjoO9QX,XnM?pPf?^$FS,.T'2h?8^0WFi%9MmTKM>=a_FKJ_&^9oNe[Z!C2bl +"nu<iZX`m<?<tFQES[I/!@%*b#]LU.N_,4ah@+QI?oA-@H+j]-/Ys>=ADRFE/^+e]'G4A9+6Fj' +<N+W>92&ot9SQ>9.&C2\.u;8(OObB`em+0:*#Cd(K/E=7*ZSXJ-jbe5f;\!8IU@_0+Tog@.Q1_t +.@c#KA"#LA$0?7[%V&I%A,umQe:)Aq[.S"<d"n!#OOe+-RV?DJc!WE=ga6[r#fgS.3TlL4h6(?% +9B9^Ej&6:]!*4EqSpY1u@ci,e!="1/ICQKRH='^&/foNX9hFOiK%<c=@VmFR?AStHKk?U9Bb"k@ +As$`OLM,:lir4$\5`'(oHmY/4>TD(Nk)rkZ:gN3gA_(0e3BZQ>B5'qHLkqeiSSk4n0/'K'C"USk +As9@"5p,Ni;N;8@Y)K.Fa(bg-B`=&j5)G+KTE&#fC=Q$nAmL]$?L'MIB6LH2ZU.uY)lk,>Af>Aq +Xn$2)V(<`MB!=D[-1>,JV:O<ug%rMMeF)K._hq8;*Bhg+/d`20-UMDolq!=V=J'E#l"7YGRSM"; +G$S\h9Gp8QX:D@KTVCOajm7kL@[loS[`5'FoL%OjbQUS0koFV+^$U!o$guheG-^@]C[$ks?M<?K +/o^%5:TZh?bjKH<=?Pb!0!V#'!=%DU#&q"_lAZh$,ED-R%b5E@0]reYmf"[(-7BcrEs^FhDR#ts +Fo:+<nn%N#Bo[1peo9r^dTpDAJ6)SC?M]rdl\k/8(B"tb)$CoHJo(BWlH]4jI@@B([]hj?CC[af +7\=G+P]1$Qk[+RdQO(17WUR_oE7S]AG)5GT6>-5FC-(FIfEH/3&8l[OdRg[N[RNFR1='SL\chrs +JJV"ic"G*I7>:r&/QgZ=ONZC!/7(GKp-$_eVn&A8A+Q,'(`;%&$mDH6m@>rY`?<8@BF1o`+#!ji +)CQS;3/P*u<ok`\GfU!#0]6pN"!oYYJD4[/)=r81N-@;2%hFdt4EK%Eh.JqD*fB?F5'.NN(l(H/ +<RsRJa%s$1F0h;,<H(d+!+^En>@0&p$rumF0Cn3rf_Q\,#tJeH\Ot!m:gZ)I,t%9D*-7.QA4!&3 +X0Q_FFA:NK4sek=i1-`i7\fXnFLM[<+?";;8b;ck&9hS_7mltVP[.^LoM8T=T13ug0(_A!=qpl, +V`UBX1lL7'g)!GXL&gr9-JomBoKGHLQZZ&/o(B[:o#7JK1+]+G5j.Il!C<^NmR*+Bd:!+,n)0%@ +FmL_e1e`Ha@qU!r:O%_P.I3'VCSs6nXs\>-+G.,G'1lQ(SPVT="=GXi*LIcHTI#4)#<U4BAR7ng +S\oQsgii)2Bl$KGQnp)V=A)^@<N,cE]Y:SOpg&3rjK1f1\]6b$pn-sJqAr9]?_ag5+?fDAj\=oa +R2#Kl>_8golP5]9V6ArL4a1IS<otMQ^S#dq4QR=W;;Nq2_6Dkl4*Z3<qIcQ!FqO3^mZh?aqV!TI +[3af;XPu+S:`GVhbu*Nq^L^))Z@5XISk=<E>$^;]giF6V@i0NtSY:p=Hep@&&&dfTa*\@KSSF)\ +,2,iS\!Vrh'd6Kf<=/C`<"V\:f4DMhj_<HC!S\-%>^!,^8.\tfYBEesEkUlH;PSD5J@u'E:P0P] +&'#>BaCN)\nrcm7s5c81RI<qJIXe(kJ"pEol53UgE'NIXs6Y35&cI86qPX!kel<#0RF8=97+0`h +V8^&_$]<j</RSBT]Sm*r`*a]C)GFd0!Jnm21n0%_nhIf4F=.o"VGR?35n,Re:D!ks;Cr_AR:-]V +1d3,t.NV=sJY:-kAX(7[ACCk3jCp^lj%q]Tr'2qgasBpu&I@6<N5j,if_hi88Yq4gZ?`)kaE9I: +NeJ],bhdJ&)!$ipeSnh`2]0g/;fS<mCH!3Xk2Y5Z?;MgXX9KO+aBhXs*=OXVA\-i@X,&"?;]J"8 +Dhd:(#M[A9hJa#FNi'^%./IX6),5lB/3`hual;j2K,LCr2'JCs-R,)H.WZ.pUQOM`me_LLMrt;N +.8["Og[8]u*Tf:%A(ecFAn[e-I8Ad@N'*,?Q7^$1S@/.m<tgff"V_G9q_?=Xas'SS+Kdk_Y]MnV +X".B-at=h>E\OK[\B*7,Y,_35V294HJZ-I)a>j[-RL4\Pb'N^1MF.)o,)ARaNkC&Vb$(./0\FG\ +LTM4\d0rS,(aGin8DH50blGmA.R6o&XfJ.CE?,HBjF!&uM">)dY,f.:]ZH.s1cR<i$FgWUaPb:( +TT[B.VS2?uochFdA9t46P6s0%NI_)f3f]>T9%10mlt303MZDHiNl*?BMPBQ[BV%a)#^[RPl]B+J +2i5oHe>OMjC:q/nK3ot*mKet9MPGc0o/^^OhE!GDgpJB7%=$>^ZtW)./rig0:_e[96Z1Q+m,Y3. +=4Ct*4@Y2^?J;[e>^eiW6$uS:Nf*Eh19Vp<DDd+U!lVAq_#RCf\)Y8#&.PD9F:^@Zpd&LY(4]X( +\1]Ai;%F1+?PusarJWIjE)P^=83m7?FcFKa!ghUr_RjE[aYX":6">&5"^6PDX_]P(.PYh?b([`Q +gp]=!FX?g!"M%gIGia1_m#C=scQa\P_D'2%!la'?<VX*WMmDiZZ^+p<i86KMC<F%GYh;6sR9k;l +65'.+gQ"W,o7E_>.-"!\!I3NVhbig<WbTb$Z8[eDgu-H"qJNANi+TjFX=lRY>qN&F[Bkg/G$'DO +[2K<XS]V6s=&N#=Hj^%::elpthRfR"]*t1K0!bRVRN<Y0N@ZWhX=b"d\F>NKUt@S,r6Vs6NL%FD +KF;bXf5h3>0na8o)B(X[D_C$/oWi=[bQ1WQ@Fn7&7='qI"!m*Z2%::3,IBWC@orKN:E]b]F+iZ; +cJ.2q`f/l+&i)`k%Wa3HS>ETOGlIH0@8BoNAHrO@13PCe[SkU*N?OG7LGqJ^h%9p7J1-C/pTe@o +Qnel=fRaZFk-pB0*suH+_R/to'a'V]@84lI!sh<K_2Ie?+OQ1=!1Fg%Od1FC!NijK#]uE$e1RmD +(b=N[$;-+g%S5gG(arq@+eb!:`TA/D=<S1'F%ph<R&7R+;An:n9b),N902Z&l\`<@M@`WY4KoM/ +iT"*MC!D.2o/p\%Mcp;B\f6fgg4=l"H%HEO&151XS!q\2Npp'TLM)AXSVq2QDMB?i30;f4>*)MA +OmAeJhXH]0L60cM[E2LKSR78[!E*W28cq'HhFqKQB,UUYA=!uURg;"#YW9S`rp&D]7!*Cu90i7r +6,6Bb3"Mi6[+Ns!fR\<mO`!:Nf_-9EA<TJ9"mDgT8D9_1J<]NXh*7j_1R3WTHgf(D/3o`)66TJb +,tOOFU6q(\H%;(+MJ]AMVNltdgE<3D50m?)4m1%#+D.9-)\[*0jd9]^;uDg`_AX;*,VYnQ%<3cT +9H3*[KQY,RKeWSl74,%%+EV(HdBF>'$^9>@Od_A/W[J_%?uIn3Ft0G`hJsF=o0;2-0W4UqqbNSt +5ca*3KsQAdNtK>;iNP(9[P2V?#^`L_%\fOn#?!$KnVlU>@D-<g;p4i20L6-TTlB4("&Y.'$>^lK +&j9CMAQ:99S1`@0aC)#28LuJp\#'^?Rq?,JGk6JLQ5VZ8X)N+ca1O=ZnCLU!'jWL.9"NYWcI=7g +S$BBHWRkbR<NFYtRBL^l=_`e'lMY-8Fcs(#Fc0FU`GA]N9$YYm4rjai$!u]B+U:im;BcI'ZKQiO +,",.CD:iBT.r[HfnkNA>GWd6:Z.VKE_?t0R\Q@*nKb2*@qHhr_Y#bW9U/m_@f;r^Cl+R]T;hI'I +Uu`$01#YM6gjCDNZ'MO&"&":qb%hVq,&9J=fN[eF=]g#MFQ/imH?^/RnV1CNb-*@#9j#:JAOBIl +elq!=C]O]d[T3,`1iV_!V^Q@rM"L2!B*u'u(hKq[*&lN?*#d&@,/f5*'8B1Y)d-HM2%L&ec9c5m +-M-cKVPO[5b5ee"WYg=[clN;->`^#Z4TkcW*ig(#oRKad#Jg3cjKnlM6`'cWCa%]IFL$hY"6+-V +U@Lq9UlH)RA<"X>1l#O\e_;Te03ODGhj*D3El=?cakg^"*5kQ<Qt&\GQ>AdPpI@dH=cX6Q6*9qf +B<_N@d5$-XBX/]-'DOjBiCoFM+G(V$``/RAE=UM,8VF;/Vo#m?$kYPPC93]W.RsUc#5d$k)E&P; +m3FHoZ_nVCZGd7\+(+AD`NhC$2.smT!Q^e[-)[5JQ-`hGY[\Uj92a$+X_(MJa?7r*^`[I@\0cmb +c(1=^gK1NI^F05uGIB8T:[/(FW'n'm2I53.2h_n[/!4k@L0%I1:oKNparJ;:3t<#8-Srd*DtlK4 +bIf5Z=F`XR;USkr]Mj_j2;<BgNt<`#:PnU<e&C'"^t;8G@M]f@Z.`,MgCXqn?sT.b2%LWnf7T+c +NYT\3QS^hEf\RE@6,K.ha:+T@?Q9br*>:6W9dtF#k]YS/Oh*PHrHsI_8NDqS2V3@0L*OKiGlm?) +&<5:^<^#%U@*C)1mg#ND^JZ#HAQ)9D%\X9L7o'8dZV?e)IUEqOkp\1hF7>7VCs-lCV4amMK+3hM +_:+RrjtCb+;kTYEZC#,m**lq>dGJ[Fl.l5*lL(pK-YE0($s@=""ou4H&Zma+FDd01nuk@UD`W$d +cP\A6a+tJpe*=$,XXtU/2u>7m<'HYJ-_B5I-(eQdrSP:8YEMI'O,r"ja**pBVJUTI?-@SaI5Muo +0)0J:&V<YK`+"[.@&a[OdLIQIs.DXWij'j;(<jdeO%>^C&*/Yf>$&\/g^cYYKpk[`5k$E&Aqh:P +9ro[3MN,m],3cO_V3\h_hO@.he;]X]NL!^VUgZ[.IHL=696`A9KXd+c2WqT0"LA;M_!`t/1QWZ] +U\o#HBI#&X"HQ1YBX\$sMRr%SD*gAeMomVJ/qZtU64_*<YdX/m\lmsGs0-2Fn$<Bg]*jV:@?A\d +U-`"WA:t-O@V)YA:>j@:DIY=@o?G-T`_^5A_POA$aR4cc%Of`op7Ms8e4la,NCq^f;[KTc"mo"( +;(*W*<oAt>&`?oV!mhHsU6)CD!CIcfaYK),:^k<BOm^etWPUmX>RdDG8.eC8^t<Vh0OCZ/A`O^E +JATjA7\[c%(N.tDX[<odL]u$)UN#Wl%)3Q'(b4J/"s@`?0M!pkE43[ZfRV0h&<Mm,PRN:S0rW&' +iiWc2XtMN1)WELV^d\P76m,n,h=7Zi;<\Z@0cFV[)PC[H;6lT%gk$-p7WH'tOhsdaqO'j>N:F!$ +&^_J+ruFu<+@uq];;WM8=q5Pe+\as?Z-+<\h]b^2+lL@DJDaHsW'?!S>,i'm_g7Y9Y'2,5cTp+n +Cp[qjfR_*dCSngn`_pQ6@[EtS%UbA)@(m+YoU/.)..WWPOgtGpZ6iHT"nGIu1/nHC^(,\3FXYKa +@lT/TXXb$k$g^Rj,b$>-5_9Vq&MfIu"iN4\cR,=H-K&5Zi0M*T:+I`5;J7%JTG9+8p7eD':%ASe +@QcFt>8KsAFN%RLnoQq.OY#QH/.`Lg1>8'mo.Dg-jDi<C;T]Er[k"bum`;O>;Wu_1lq$^p$fK;: ++G2H/CG\qt%-sPr!72,:>:kA?#,#R`F*SXeC('3b#k.V-F,3DoPrDEn";/0eniJ!B?R7Kt$fb_J +i86?\A0iM0LZ%Bu,!.iKZT?R>V4^(J'14gd[li-I432q(k,on9j:<`g`*s<%d<#C[kV"]_%H,G= +aoEZ$P!HlV$1n6`8B!TQZ@,Zd4<cL;$'d3npEWW]1_QE='4e_L9d1*gMLtDKlq/t\[lm[32UcY) +;g<Y1R0<b!=)A@!0#S9pN?8Eo.C&D.'9bS#Y;r9)2KK$N"*m1RSMQFq/lN9JOfpXks$/#O/OHd2 +'4WWP^IaXn.J/THP?0+'4\6c4"nUV6'B;UEs!kCe"mX&jPO.Zcm5#BnN:GLme3Z"A7nnS5?g&X_ +a8QEF$4O9P8ZVGSi_ijarBUYp$kfa6F5&ftbrZT/=HnS2`$?iU>r\%,s/8L11i+C9E"(6=7+?KJ +Pj/9L.7\M3#`#'hbm]fTH;\g@2WA"215-Mt&rND@2$[tue58/IA;nU@Qu(Y]2.9QuVRe%A+DUoR +K/Z7k4]jL]=E9.d!#,Wljs7a[2)Rd=_b^d2kV1Ia:DCB$TOJ+ic7.eQ>-h,sj#^IEapsU#-KD*Q +8An"B(LAi>0*;Um8cg`t\sZ+Z??N_77s-\BhC-qS?D,@CkPc^2FQA_5?`='6ecR8;N]OTmH$0g@ +FI?KYX^U<G@PkE!<Sf.CHV<RM7me"X(%GX,X:CC:*WS\q'Prei)b1M4R&MP>'-LD99k<n89GUGj +KbWZa2@]`*C8*EtV!LC&O&bdm*OJ[7<5c3npiuA59NH]aPIVd1r\M@EAHR3U5g0E*RLL%JU&nn8 +,f<[B*XsgeT4@l[Pf-,CniE)k,\S<&K-<o^PA[e]A\sFF;oNC,"&)7a":"%.G(FTV0IXqE<_4rW +oYkFLCa?@6Dq>:X=!Kh,,;9eX,8OlE2\Skd3f\io2bn(#[Z4`+6oqAaF>kja&)0L9KI\t%2i+A4 +TO7t%`aU&qFeT%`EgS76FY%^0F2q6<=+P3ZZ$+45>pk\=`/cZTRdh2U,<(H$F&QgmPBmqN25c+* +GFNdmPC"GHH)J,RjQ/-l`,3<UCX_<[_GP's`G@"GD&(Wi2V2@qh,#>uBGTc<<p_#_)0'1iDmo+D +\(tii'5/1>64s!>F<ViIJglD?ECcdTjI7=E!IskCK*%McdN*,5(Lm/0IM@57p(p,?'i&X<J3lt* +"0+M%3kR^TDB_+HX/P!EDBfOZ%EkEfUE*n_Em0o)9NZ_!"iH$Z_ha<jM/9?*i:Da_1I)eGG;KLe +oDg+Zr>k<.,q&_N/)Q'S>931:]d6O2JnJMU[l:XC3$e-f[Xj;+*!Xl?3"ADFQA'GsN-A>6,kg>5 +(J(FB@?9%'65\c6.r,^baA,dXI:hY#p,%,=`EcL-R56uLedm[`fn4C?FS:QPJh]8G!H`C2Nu#-G +f`-#<&Wi+b;KrS/2V'3R4d%e4+k@Z$GfU*8EgXB"6FcEBi5m_iR7.ie<cs_apMF_jNE>imAa'&8 +e\@GO90;o)08n[on[U-te!f20J\sN$=@6+]*[=h&<lhN^$6XTX%5LBPS)afb(+(ja-9uk%$qG0# +EonKHfS'V$QSr*9kmO%r7@;?1$H0&M0q*\kSm&)dW48QfP0.pFD.T#=1e,_9P4f"j5_``A00!RR +3,:(<FQB+V-&re!md6aY\k><@>`&tG%`1WLL-WOL+TlO0jO'd7:PW&UV._!o^s/_(4.MIE;R1El +;LE8tOXN)CP8Z^F%(i<ZNq$5Qm5M'89Wm?V$>%XZCPl@E5g(H/>[i:+#[k_QV2MGa*%\rR10W6\ +HIclcg.l,.U.6$%+H*Bfa0("8#l<M`j\)ak`$+',Xr@hS>5>CQ?40rqZ+C[QZELD2a00h68%R0T +qUr,]bHC^#ZTADof#Oonca(.uW>a6mq_b`'or]6:Z5X+D64]cE.A=W[U(R;K^qSk\@jsce/gjgn +%d\&@KQU#Ap*dLs7&M7%B6qEfF>[_i;c%=VE`J1`((t`4P[u%JCS!Eh[n@=BV&-WP3)^cO\&bPY +dFoktU<up:]]dRp-r<S_gih;hBt=)%',o=KXGRsmSnXB6%D$dQru=Bn^BH@'89U%1`WR7k,M07. +dKW[hVjM)H^lfI,S/&em28+4H1d!Tn*#pD`_(f0+95mF']Dn2n%\aL,#jBIJS"0opBR6oo]*-6K +S$f<OL^`sJ%l0@Y+S7N=pbSD`;.k6dpQ06*Sl]/6H$jMW>]%)^*]$3,-":mROeG7JK-#PND$"Yb +@#m_\E\p<!;^b$<>e5*trb\Q;aVJ#7*#Jln+hq3R\3Np6U(PQ-&-bp\.FN*`mT66r?Pt!E$XgR4 +I.MaZhBoo,[oQ1J)Sp`QZd#mhc0DGgK<*DL^lLIc9@g`&GPdeN?u>2de/++:,i/`=;3S[4X;n5i +e5=_jGZ]h]7rp2,h%aZ,K?'L1a;fkP[L7N8Rl?c"fQW=H`D/p/@FiAXf,D!+cK3RK?oOX>rPqTk +ki0Zurfc,L=5A#QL==gj>W<q2]DHloPZ6Am_)ETacTP]P2EEq4:"e9E%D0J4^!qkWJIrpZV:aI: +3ksHr1apo'^o9Nd8Nkusl.0s+g3q]9Fa;WTgNgJqn^NS[4]s%9fke-ggq5^Z4mTa$doVWAr(ACu +&ih2Xbd8`(K6!mpZ+7VS_9>nemi4>Vcl<6TD?ee$@Oorg"\Wj7EuU>f?i9NS]OG>4lpR\e"9:[j +?D7Q&mPaP=/ilR?LrsM0b/l6j^#2]4+AQ;ZXA&h'cuM4pYU@$,5Y#-"QTj*(3l^UA30r>IT^U*f +0#cc(0[mRlbe0_rSBM+UkQZFap0A1WRplksAds*&XVcM0`JI8%Ml[rg?bM]7I#;3Wh7Yr/HG$,7 +iigZg+[lMe"9R]2,<EL+Zg!#7cPjT(8RO<fc)=nR1nP>BR_d<[H1HA(a,2#^iaqP9nY>$@#hWfY +h".>3pSAeapV/6!Pe!,_U%/1["e'c)4[#iQCT*AZl\M735S`t,?:S0i`,PCE!d"1N,$_]0+<S(k +@*hpREQ64`Fh^1%5bL$q:_$0n2*q:]3J[k>Tm=KXF:]COVScdiHp0;'9[I:3PeprlNWDY[]Ohpt +3Zc+,dg=+H-mY:BB2^OPdUP,%:!fXYK]lhU)GS'NTqKON3LqDWd;Ymf0/B&X7e;^lb'5\/_+2sJ +<;L'q)$CO2W4kJ7(lb;qUP1&4)lQ_p@KF8rZue<s.e'HpN6u<t7]l>%R"Cl/XW+=+kdBd?@ufE@ +-X.Uos'lY$"rU8=ig_.5AMV]_((.NVMIH%M0pS!hB<Y_4_eb%9+*"jID0LqMMd:e?i+k@n2QefV +dqUa@*)>YLRb)AYL24'SD8=qBn-:NL'1H7WRa!2]TtI'#1n>(&o61h1<%8S-k;l_[_ZM]_:4TCY +jBq3G*50l%]AS5uUHh((%^2oqK0B>ZN%#.o+Gq<LU,kgZ4)X9?SdaQX;E,.Xib[,D+m[?1%kW$& +\.9gWauQEZlDgn99/6dO%OiS53'`+@i2WT8QtFSG$>LOa"U[Ml3fHBZdP_N.,,R;n@00gp7;fI" +NeT";#cO^H&D/q#@p"DN%*Dh.`$g_kFWAMuE6b)q9h]4U`mM^.2D&hcXGXgrm(j]n6%Tk-Ukpj' +PpMVD@[X*nl>W:AM=Q1j.#>[n.C1_7]^S$Z,Kup^.U&;@/WkXhX,Nf`h!;2H)tG\Ao-.NtL6Sc& +2nLIop@g^:TY`ETU*.mBN+8TP4L&j))$`J>PUToI[Io)Z=GiZ03CLaratn`+I/!jL+f`,@TiTgk +Sk`$2=OT<iP:@CR2h_Gp:oPp>P_u5Tei+&u\p>h96`P_f%jQ[X4"4[/au<9L;OG\;<B\jd[B4[[ +-OungIpg6Z_[Nk\XF#%*MJ0fd]F%"7hOqUUejAV1fcZ0@gGq*[@q%'D#EV>6N^gG\q,UTH\ZU8K +>q$tN(C%_FN$fh038LQp#I)uF%tkje3@:DBr*ukoK:I@^=7qg$1Utn6F+0p/]au?Hk\@Z:bm=L% +T2mpo8"D,SR)V3Min.foU1;1nG.1CX'uDJAmUO2bdK^f1nf/u%0#9SSRAX3c?pHHeEARS1`+*m^ +'C,8-'HZT(Wsh1dpc<?t7hA>cp:]pQ28X/hl3>:gW+\GTX,njs0oi8CBK?Qg.\OY">%O2$g)\G9 +NnAM,Z-feAp*SY.%K3$o$u%PC4m?:F4/`<)+K=r@1!S&5g];ob*56)___<>VZ9V&S%#9IXaK^YT +gg)S4c7J/4&Dg8#;8aW3WUbAcOQ3B)-`u0Z,QN4QTHH\]U&6.6-Gpu/WbX$-f.IjH<)=/u;eLLQ +SiBE^TZYZ7NpZcq#!22*F$3f@24tc[Cs38\6O[d>NAF'ko94G%L[)Qa[+H4L)O*of-tTSKKcLoG +FA7ZiJVfK,M&2oi:F(d2auG//WLR^.Ei#VR\)`'2_iS:paSZT/8-GJ$g&s[dIEE,,)B0A8A4J*Y +r;m3O*"f!)5nZ&m-\SkMSi[TTC=s_"eF*AM&8t+"_:]EQlAXe$oDqj):QXZ,Jg@FIP40qN4\uj` +?<K.2b8?C0o]@/20P(FOI;Tb0I)440,\^#T,XUO5MBKN6Ff=ueUUM#2'iM+DTpV`B_B-3%Zt>4N +4LY@sKd!$90:??]V1c^!S.HZ;/*H%(+3/IgTtD=sTRoVXOsV0H@W*X_&2H@^!^UH%:(6NLE._Of +%Djt5U(S%^95#I>="J'>U#;P9q1;=Q(il"F[2U3%@5T>fqNV?2EQBuq+oqbROD.[W.qf#5#^hr, +Pi3Yge8I2b[+85cQ>%^mI]@,l6`8'2TM:9N*RZ4=HB*4a"Rs?)8`FMA`9!#YP+OP[F=MuY!^9Oq +(6BOBE(&")Xp.sO3S>k:;io93)XnJESJ$0Bl"U)XH00Tam.[*5jT*B4,n$:qJ3`M'1Ou@PXq9'! +:s7c2"?'9eaAHAjNe-ed,a28lCO9LtQ+npWg<q7YYmdeZqU@q9736!M0$d"c50'cg+"`s/JW]f( +(W*51pd[N'W[pu#Pih(u;RcbUiC3RZL7b7lYB9$Tf<s]@=#:1Fo>i.?b@^nq9D<i(g,rG0EqH#0 +Ziq6mji2C"DI39LHj1)<&7S\WB;NL5,^%*/;dF2^3p8]ibr8DYJnKW7/PA@EOuQ(ZM6;auKouqt +98B,'(ZPF*LHMQal9YmI&h97>*!JRBhFK=@!D?H8&%k5`;lUQpF82gjimKHYk.WK<0#FL11jOc< +Zj+1Ooq^B)RM\C/;@V]S2d_6qI99K9I5+F/T)=M/nk1LTJY+;c8l7$9S7I`'et/Y\X-,5==Xc@I +pLTfWbUteP<2SD*ja<D9-q7r_ZGJl0%#"E&0LH9PS13*`VM7ucqN"UqG0h.=+Ja'2YB6=]UZ4k' +/S.#Bdpk,W>r.E-P=Z*!s$2>k#@iqA)5D!f(P^kb)c*=SdVZX]KH`Zf%rI1IHF,GlL*!<EU>SLc +G7W+A6qJo:BPCY.6"it%Sm1oT.^_0PA'(RQ6`,CeFur$foUE&VlE+bP`&>FSbI08SM@OjqmbWrB +\MlFCN&NnV`i0u8clOX/G?Y$^OBgO4nh`&B@_c(/,XSku?]_Q7Or''%]l[TTZ[n#:i0mq[B\&8t +l!fjS=SG9NIf1Nrs,If\2c'(?W(b__Cn&@Q:667V4rZ"nf^40qOs@EUfD>(+\u!#0(?O%m_JroG +=.`K>n)1jqj&HoMdKiSI[q1&@jk#=g?8@(qcjKALGT-bAA0cnbRM460l+lJ`*d*;UWPL4)"_-I6 +7kh,m8N03L<9tpt:tg1^MZ;Pr`&`PC_FI^R0/!pY2?oi()6Pfb8I?N9Z)OnICF'Td8U??]jP69% +[3e^tHC([_K;TDF6*HZAHmF8]XOCb1Ee0T;<mN`e,rG[$g]2'IHpU,b5@1Ii-jmc3@4bku#*tDV +#aJpaN*(9Q6N-2Y9n#O>&h>0#$"&uF"O##g%ldA_ns7h?LXClQ9&E7<I)g,X3g3R(Tu11AXD&?g +r=m`*4J2'4W\<a>s1"l=nQW[.VS*T-Jtmq4.a^I@(nAaFWY$g9nT1?rWMb:MJT:WRO]+=s%Q]t5 +OXN0r"$70"=JD:^/ZE'l/#Ts$"[M%!5l10t!Yr!K:Q>5qK3;miUNa15AO2tE[4+b#P;k@43O<f/ +.p;6T\R[4d%#@!CZNA&^UOn@r$^^]YNR3h73;U7T/tj1P_RKb+CBbdkV*H:6S+JEeZ1ooe;_`qZ +2F.%&+q^3+eZ+!U6Td+h99cg2bsQk8XW)2XEHdA?)4,n+6BF,Q6kQPp,(ceJQ-92s`&L$`>egn$ +MV3Ib)1;gJ."`rb2k#I;KL$$F(lCrY!i%XjO<B/u2jW)@_!!TV?o3`XUq-!h6,LYdJPuo3nYEu] +_uY+LQk2Y:6b6MjJODqj>Xnjibo`)36$*,_W=Ods!OFMG`8PZ(l$4(u;6C=*`/=8R1!R%5)8^/D +1$!0RUH,YCDR75f`&g(M1c72h=Y`Wo3X^$_+?W*A?q'-P6k!GB$a%5j77:Pn7RUf"aI5D6)1ccn +JS:.$:mQpI&-KF!&MPG^5_OcW0p(la#Z*UEnJ-isnVRmL!uR]-!3Ru[Ko[r(\r)2m*)DokF"^_Z +X/'](kcVE^<_";Q7l5<C`,u0(PdYZ)a)%ESI!<Kp4=V%j2]JC.W\Bg)>`Yk'5J_l;(_@N6@j)dV +L`(Ym!'60[1EINh/o6gg'%"&^5S<%J+DcACYRgin*\VcfV:u86$B?uR=#M=E&J5Wr*&S$HBY\%# +]6kF'MJ\M!'F9Y`\hNLR)?'^d.j*dL0d6Q2$nS@*8@[qKV^d6",B++e.Em&aJd=@f=HZ@YX-)Je +3/Y;1$`uT"5J<<.'n"D&K[PK4-T"+L\$M+!0G^0'"WV#B,b-k?1&WF13<QY1WtXR-ar!hi1<m\I +9k<+NCY9=-_l9UZ3EYSrr#$5rG*"C5Ji!(c0noc*GregqU8]?_&J`VA0;,-5PSnPd/BgcOe'%Nc +O[,VG0K"FIZ5itV'Qb0bZsGI!40TBRYULj'l=j"q#!O%44o#tXQnpn,f!sFrPIoSrHPfL6g&lTD +]t3HhUu]g'LWrE0UO#MUm,k).=.2JY;1c)Il/JtSPt-d$:MS"lSFOpao8ba)*e:Ci&XXRne0\m% +ci!j4_+-^i!j@F;:CSDlK_&!,2[CsC:LeQG[.7,5oMX-;Raic+>au7',gY*tcfgm_'f-cQ.(`0$ +,Y\EA;O8@I_nJL?1eWTP",JWbq6\raN;LKn"Q%WQW]1Y@-W1FMI5"H^0g`Nr4`(U))qtJ!1t+cj +[6ol`X,Bs1END5+J5Fi^Lki@J4IrlH3nlUpI7M]p/C^1LbhB?CYq.2!51RTt<N9(Y`6Zi4SKn": +RRL7'Pugt>0[^sr_P'n&A)GQe()_/q;7_>+b%sr1@F=IQe;\%()ViOg,YR[Wch06D'fdKP5#20^ +eVT#(OJ[XI08%)cc.K@S,:f"DB"292Jg9\Mj[CkSP(Q:g$4952YQY*^RSIt5#p;B^7'TeVSsMDP +;IM:'"`r$8ZCNReVJ%RaF0Yo3V%-/!!)[ad4C+)l]c1oR^N5a:X*iS_kY8_=!ckkNPP1?^:"aco +:'B_n]g^N6+Tl[:di6ch&AQmC900l5$NdUp[@'`7don`>fd2b!7B4md0@t%aQ^+Q"3tfd8_:W0? +fS-"s/W*U[pWs1udljV\7AnenrEAfn!C`%V743mkUqfjC"2o^Z,9i;4SIk$>K.)^MMuc0<(kH@Y +M.nH&SRi,k*D;m3\h/&\26DLM-s(sIK+L)/O_tHg'O8W%'+N5ln0&S._Uh(lgoqUN*R03gc@\-G +9`9`PIF?r2cX!Bt=NtsDD9Q(,0\;C'%lf_Qde$iGn5k>&fTjs=D)a$@3P1K91bF;?Uu&W/3M7YC +e'!-Cp]XtacQt9@h7,2q2:%B4e#@:'$;Gl!E01O%>cg)+Odo8g;l`6))4Vn9UOX04\<C":&#?lS +TlNc))'@RcktNu^0nofK/Ek?tRbsX34_Pa<SZkG&el5@^U\u&46C2$3iRJZY9k2!bSOBlF5.dOR +NH.=V4RCY-'dd@[T=VYl`Y[2$M1XP]\Fk<`g;5^6^#<]r?o17)%/JWEqqD0d@N!&p:*\8S$]*&C +WXpf;jOYXpQXD%rZd=D7c7P1d2<%L5&2kA!rXuV.'Gn239kGa1/RDl(cV>fG^"UD72E@_cr$1VK +Ze62(K^R_$0&I?d:#uR!+O=C@aB^+`?-V&_`UuB2"k3D,&l&(PIJ8Tr&EE0c:pr^OSO-eKJf[0= +@cGicb*'h0<*T#:g]4#&'mNt4jU)I8'VIAcBTn'/NB7$DX.@?EHMA9[n=ORYjB^nG/B1t3*NNEe +MPMaO,15OD0YscsXtE!^DIj`_10DHee!V'!`Tl)+N3J"(M_s$\fS?N`n',E^W>h0VQ3QFA!`VhR +:)-SbYb^EtNojf^@g*FG4!!L-<Eg1Z01L>tm;Q[n.9BM!-]Wf]/q)Vb([,rg)(BAfj&Ueb6`@g( +:tm_%PN2b#Ooe3;,[.nB"Ms=C8_+59/Nq\$pl'frN"Tg_WL/h]>AgO[qlH"I^X5N-ZgL'o?5R2T +[d^@E);621f;g&G!L!F0+lTLdVN#_5bkRubLbF=@)?T]r$`ruPqZBQ_`eZO>K-ltp*fU.s=d(P; +Je7I)RW]0[&8Psi!e@-52N4qp2DB,t8s+t]LpsHKB^1n]Uc+^"%\18.b%]nZ^YYTqhOrYYU-1LR +dD]d_r=P1SYRO>i3I,qRG./AEc`h+GC>e8Si_A]A5EJ,HlVTIRR/cKD[tp`QRGcJY)qjNeQODZ^ +RdObnk^pK3h._V3&S1R<3iQmAhAGn^BMNH9I0<-p5e\WXB*(SrrBb314CI0t-n-9jD$GV*QPp_: +PJP+Bj"A_IakIXH7&!^5^mtS!iW0#qDkje/T%NA0;K%]9Og(YL:>u^<So=>YmNfW=;nC85aYO>6 +BHjEQ8V,`N\5u=hU\_C_,#iH\HQe-%DH!!`iuPCY<Y:qgeFGh).S;[\m,HPjiou==(BSA4(2)CN +Z.br1VY0EX(nuQIDJoi=`RaR.iUPKTE$$6=^k&>@*jo\Mbpkf@9.8p7$?B"'K7>5O*p-\G!TrPe +!*$00>1d,&o3q,BlQJ'[>R3"i&F[WNDiu.4?N"l#O,Y$=m]D+$H&Qg1kDMOok7,)b0V,nCM0$fT +F+4\e/h]2DrrYpI^n0+mG.7fT6&klpMLS3=R1StgqH+Ku5ad`*j"?c4Q1$(ilo$QTmYPP?*^9W_ +o.1"_80if>-Ni!</OIthkeh<:n)Td[3/`WL,6bJ?-YLJ!n?Ig_m\M4AIuF^UBKXrW+(91"ZL/uB +S+e=o0+/o3/G?pqht-8TZbii2#+of_nmJ=J*e\RYe^BlU'n0UnK_8Y0CCmCf'+4$WQk4B>CstUE +FVd6c2*(b_-\IS2_MN`YSoHI<(,_%[P2QpkMcV=rY%eWT9$!Zi++Yg)7RjE71!-&3-S"jJ241:; +o<q6JeN44AH<6)OV0^P_!&X<Y0\DBCq-Dup.i[OZj5qB'H(sT?:5/FRG'W32GGruCh_ZX[Y:uY[ +<ITbB/S;6C6kQGj$6au9@$475S<kn+paZc!J2+pK&*@uMqU_SG*)Q`dVt`cd'Gn"j%OsGQ8WZAo +p-[q@jcbRY*9s2sd9545[SeH<*U]:<PTQk5pT+?r_DphH,tG;;Ag!p=>h-4)[7@cYHN@S]P>6.d +e`rWVa1Z5ACD+EHqrpBCrP%A%_iD)MPAV]F5I``2EHe%H-28?g=:bM`E8Hl&k[hs6*^tX9)F;tS +nt/sCV7o8lfb,mp-28C,^YI7%h=k+Kq3@Y!m<\c3$@&ZXKAMX/0C7;7U&uL0%SjaeUQ4c'Pl:W+ +UM.FB2ia$B>CTC9q4I2+#jQnaMV2\?h%e!g8:VRG!g>(k`b6%l%4<rNSEUA=S.13OBp@Cp1787M +P:=j`.2RodV^%>:j<0&B9OOX[Yhj:X9+4:RFD/a,1BN9kA#ZuXF>TK3`C"o;8n/_I!Cs@k5_qlY +(W_8-&QFfb'Mg++$5F24DkmdFJc_'fgh20K?tTS+dN2p[S-AUj4:9IH*fjleRE`V0:H;.p;A33C +hKQQKjX*#r`'A2qedA`d)5\VlMT+U""#T_$5rT&VLQdAs?m*6mKEF44kkfb@hek1^RF(#+0Ula/ +)'O\)-p1+Q=6lEGclfrV,'J%$TL"#<%&F1I@DZFrX_6t,=uh!"0ZRYaPg5DeaD!_Z1Y'ViEl$TL +BRF"T0pL=31<cVZBuK>Cp++9HQB8)gJu#Crb/=5*5Uuh"0asg<f!_=3!6-sqX2AE*Xs!f/dL;gr +cC`#A/#K1'Jfro.N%(N`Nk%]bcK;\d;pIHRE8]Xc4>*9@lRkc`f*4CU)oCNlD?/*G6Z.OP1<7fF +e?-fLqSM/:;H0%[!E!7c26/JNKK4\f]U%_LK6)JqN^Gekb`7l4fS^ooJg?3taMKco,KU!TOsJJm +<gKTHM#*u6ML)"rWiER*-Oo9a_TkhL$q<9/@gM3Wc0,_U2E'S$aYe_Z@_dq_Xh$^)/^i\Cq`bD6 +?NSVo6EUJc18D</,mgY"[mJH[.b?Q\l=XHNl,[0k]#1:)>n,7.]JZTRQ%UnAK*]FO+K.7cD+otS +/iZR8+uI=aEC;iGNh^*8D`S\Gh,.GOH_!n?:Daed?OhM9G2CX)6%7ZM"mLSF%?4cnO/^K^1q+qL +YQ\8K%P)NG(Fh6X#2uXnF[pYA"+oBR2?e!Tj/qo?JQTn5Dre`j>T!`jp_4ML)"pCNaS,<@Q=$%[ +rK,qT7M2>)R>'t!YF&W1qr*CYMDbor8DsDM2Vp$fA^13iO_DS(6(R)iXpGTFj'_*9VA^MrU7feT +3KHZ,G0#YZ>HW=;j`q%6)=<RCpOVQFrS=5fGY[Da]c4BhPA`R$K>-LCp5OObdKTdrC%[HmW$Rmu +WN/5b#kt-K_9UrUmQ>YcHLgl4)Ae5TE9r_5>+VdqN4h/IeSH7DPFc`G(MDQGK.)H&_n"=u*-$V? +=-<")[S/]A,Ea.ep0AJXr!7a`M0F)+SrM^k3">E2p:\5JN;4LW_r(CK(TZPDC!`691-Ek9`Ctep +G&Q`g"b?<.+<14d+mo:7#A+[fLilI$m>A8_0!JK*C4VA_qC5P#!*tsZ,cY_h25i(X+Mkg3%&+6B +W'IaX67WI1]^nHi\Ed7q0RU"Y)P_LgMO@<T789j$#I%eLNB8<oBXm:c=BKFb-t-"HRJ&^TE(4:: +@YdWE4iCH`&m,901bgl-`:1qa@[S-gi4LM,AFC)e'D5ZBh=S;qN)$!]<t(4ubD'-WdU,+YBlA)0 +KJ;:#U\%dq+Q>(-j=^tnoS\j4"Z\>Oa;puN(lM2_f#`(;(SX:GN)94'_8r9e,>;*cam(F[O;-*< +oWX/"L*]7.U:l3GVi"1sa.X;9$^A/C7;8t`Jd"IY$4q#4lQi#(0[NFE>_XQ@a=2lE_ALVBIRL,g +2?tIT2Wa0s>%"!P##OH:"-hF\Ct/EF;A-SDR1DUlI*g-eHq29b,:'(Tq5dSVIhkjZAQ-PoLJfgW +As"F/ZWo92;H=j];=gFC4T<@C##GDu"q7j]2pFB"2A+,]2!*Or`?HuUO-2[f#;$g`iuHthdr#@8 +L1a3f'/_,DfH`8=F,%_Q&6'B!Rp`lf)j37<-OR/P95]\cW]<SKbmd<%oUNEFiB`RY"\EDcZm,#' +m0o]),=t.t<M['>%YZ,PZ*H0_aJ<J]4Y]OXdV":pUISut;5\K(NmmiVF=J;",-ug@.#KTT-nPZQ +o\PYZ,a24GCR_@>R][mHeQ9U+T*Y%5hpt6j=-:i_#j14a(de^@%S;R-JSgWT`o9OA_E0'dLb=E9 +llI*cILET5G2%aJ$c4&:%HQ:k"ON]MX#W2J`#_6uP,P76bs5hUm`HiudoW=pT*dk(+]fRg7r8N+ +MFFm7>%8%O<"Y*5<J>c$qo!?(89hYR*R*&lXDI8@D7#tK_VTW;Oqu<K,>N:@L5TJVK71,8_;GJQ +;]JA4TF/KE*9CRia_bn/%:E:'2IS+b6#]:#_`0\e;;=4WB<l<E,aeLsl[*tr$5^4=)WW'S-4oTa +6Fm2Z+G:kl]rn#QX*<FD?%A<NY4\GS!M#SYTZ4!+\JJ0,'Y<.::lHu(T>Js$#7%J:$pfHBbQa[m +jqN*.>l(_L=dU-Q>W<!FDCJfbXP9jUN:1cX,GM]fiTG`G(;ncZc7I"%4V`p)_q6ijd/&72h%k;n +3Ah2N1A>*:j,\9WNmgZ-e*54FR/r>35I&6eK-sXS913c6/'1/e/PRhKmU1>@i#3Hpl`1q>:l"cQ +)2-qWKVrDJb=[[F!W]AA&mZH2LfV]Np-jM9`XE5lM\k_B#2=;baU/t=mG3boKsm!SA(t&cCgFA5 +p>Rs*Rsu#XbsWGTij)U@*Cc<N%(&a5FXQ<f1D3O<#VnAK"9@p4!g<5?aWc".n83(ZU@KBn0d]io +F;+i8IDN1rc+3#t*bV&VPXD13\qJX9j<U,U1+&X*(upV3'MhlB:<hmfl],\>?ceJjdpBh_ai<?p +SkRiSRVWJ4O?7o`kM8F#KY[O;MCW-!,oNsR)TGbq*N./Y(U5f7`Rfue6PV1T/p6`W44AKs>+0[[ +jXmXh$NX-8-7PGk6$j9FEZ3$FEiC)+P8)$s1_1i\mF?=>e2#g4?,q:%2Y-QInfKhQO(Xr&]K#X^ +?etV*P4:efP;,C>=].\N`U/QgiblW!g^`l!/2=rNhcProD^a3iHAUlYH!`ol<M>0<c;<Me7"#Q- +TEOI-Ol(:>!gmC[W98H)`"K4:.!57CQfOc<*e\dT>iY)3Tb:q)fK4AT"o[[!=mTF@.Nd^o<dL%+ +,\VIAALp<:GV^f?n_J\/bW3\6`%VuSA,m=tMqD^drZLYu!,#Ifi"WDu8mB=mh_3Q'X/]:)+q@CV +-6egA!9j<QjSS4-AWL@cVa1FigB184"3)2ODdIK]9^C&%ou6S-Jia,#UBV6t<l2*;0;eTLeg@T+ +T>UAsKp;<!b5-%$2oK`6,RjLfDOca.G4:IWn#euB;H8B"3WelXY#M3PC*r5a]?9iFWda=&dS:/K +6_g=Eb(N.n`q*!K8'\EF%]&ENW9_VFW%c*_&>Jp!VXu@>^<]^\-Cj3KYkY3!S&<m]+D23;b6[O_ +kN"*T6_J%k84Z1B6)u(!0%sp<lK%B$&;j!c$;;^[;K'nBV8JC3@f3RmP5Hc>%F<Tqd"r)@m&Dc[ +nW:Ck7V^-58nsD^4D5<179h_^DVh4/hWa#0:%Wkn2$8kpli;.f&?o8jPZD?0hN+98d)>Z5CA2\C +,/Q2EUaRhU3t!?>p9(#'EO`"\]aodZ"q_^gOk?-8*>e.a)fMV\0s(b$E*!Y$qJ`<5n?3h4.Q3<8 +*GY/=J=NR[+?@XA0`rJTMaJS)V]i.C]aIg@URZCePZG&K)c62HWRW0P6O2UkAW^%=UMqnY$H`MB +$/i`26<#,n8D`>[%h`QXDf/Q(YY:,mOKq8B.tA)j+??00%.W><b(AjBC9Gm\.3OHUjECJV@'23C +l7/=iZ0)05Kde_L2q"N/;CVeY>o0?mWp>iQ"M#b^YmI]8-ma3[0Wc=JG9"t[l,Ao:T[slCkbR.l +7jEjDP5I.T`4q4+,7FRL,96fAa!YTL+@&j*:qRqq(0fo*%0]0Kil2JqOB]N?/B$hFF"er8-6l** +,%ke!^gmVc#+m1AT9"R^&43`[#U!#90'*[!;+RZB)R#<L1(tq(`nm:05r/a`"9;deW_5"OG+T8+ +:b*\/n:K)N6nQ?Y5]UZ`Z>rNoFsj>B%>0$Q,AL10rh<>gU9W6-8l78DiW2=056Crr,(C\DUHM&? +Zjr-Tm'/8n)IHB@5*AqlEa%EG0.%<B-gk"`;K"X:m[Xu:ZkJcZ_Ep[hMV/'W.MA&TkmFT!pCq@> +6P1UR"(s\NE5nZ01"(D8EemUM/L_APm'<??D<!;q=sE%/5a6!nKm>6M'F`p^$o<r-i^V(-k'!Pd +@K>$di23Qp"s^L&%Z$oF0=E(_c6^9E;s"/\VP-SSkt7W+9'eSuMr)+)5Xg_&Ra[ZfB.lj+XAeb; +2XKWl,G@Y,j$%>C514hk'$A+FI_O0.l*#iDO/2*[#<n=*#;;&%d&//5SL)-+#*6PeWrf6Fk"7=# +#'C2_NLN,[X[VDk;j:hq<7*A<o`_=m/QDa%OI8r\#3^'C;3-D:8FT'"cj=+&%j]4#-L!]cj?bDd +"lP%@!/FYZQ4@;q,\[Z2,(r`LA<<I^-ka!lTSU)eGT]^/#_8UPN+A\ofF=XtdX[9(@+&mY7p2LH +"lPINT[F8,cn4N4#p>[[Q"UT,`"$L=dX[L^$;NY2^`sS_$K,4tj30uLR7_?a=-DR1dT2bbQX0:H +$H51=WQ[ktG<lY(=5]-CJF,Ncb-Q-(p<1!V<]I^,]$c+`$)"R1G!qf8:LuDQ?SK&;2$+%+OM%6< +$>aYf2:<!Dpa5[&#UXQqp2=RjF(_n^U7dk]<WQnWY@uIT#f,(?Fo%0LX')*k$%h:eTU>\nd:q0* +#^*uiCiB`3W!L2VB9oT%i._SsJSfSC5ILtup(Ebd)-NVn;)5R4K$`nCf*g-&+XtqB;-aX33Dup. +!CXI_1Ch1Z<:g_B'CtTg2N8=!F(2P'acc[8Fuls[p'Y]T$_[B#i6,VEZ"01^bYD+lf0=@.pN1R= +AY>B3m5]?6<(E9@?OFXp-:(aej&k7$=X1"'"=cDZ"t!m?f`97NV=;:'<4ZO@dZFs?_qB3-6ZnR_ +a"2CUf0+<$W%A"$,W>*k[fE,'mSHudRCBE_XF5D];fs4pH`[0n(@ccqodbR5I.lT/&]%mE7;fT- +lVQ^mDpN@N%):9cEO%Fo=!Lm6ap^Q#%,d=U@Z2neNuq5W)`T#M,EE`eoInK,^qa7][d#SV'-'Gl +*7-1pA2dOI9LWL[,8`4TGBY/B8VV8;Y)7(NofXa'AN"'tC9gDT-J#OZT7F#G0iJa)Dq(p?/jj_. +>.5nf2],A,=**k>J78l*(98+S$\gP&d_P>[DrGWc":Trs3A!AKC;X<leQnBIQ_;V)6V[jZqB3<$ +?$4l%^q3+(T7PW<Jl0Q:mZee*o7b%/L&g"DUEPQJ/K4:`)#4RbTZVGg'p<_&;/rPA35%5C6&6`p +Lgu:*C611"Gi^YTEKh#G(EJ/G]iN['.dEL1e3YcQNEg3nXtGcnefYEf,S#*-lX^4eXGLl`^7@nZ +AJ-AW<[2't'nFr!JJ7lkP.`ITW+jqIE@0]GnT)R,hitWK_CB8_3+8!GB"/,B$m;H6_?B81'o[D) +BL(K4U2-(&aTK)+O-L0:i)+_:&!D2NJ!do%2.;T'S")ad$0ht_\JQc]%853dHA$GMiXVCk\Y7O/ +<DiXcH4?PJl(M64a`SF]",PC.nN:<#%B7KL<Q[%Abt8l&2tTd%Gsk'R4X+%GO1E;`=7)2OkED<) +Wrn35P7NDr[tbTeLJcSk011RoWjCBV.rji:=aporT6tC+M[Op?nc=Z185Rh9(icU.n=-&<-)6nl +Vcj7f1tPC-g;CF&cX>Y(D<6o61.>@KU_tsYe:C@o7u(%9RH#/acb-8<LPs^J%<=+ZG_?TLZp+]' +%q@2h6s3j8&$dD+olT&\ab7sN0dHP^S<//_3o4"=Q*4_>Y=EN6@\H%3#@kR.1S\_X4(>A;[d`9P +E'n6E8\MP'jgH?f[V:X"KO>8.g2Q=W[l[m('VW#.TWZJlX;$]$>BdVWU.-g/Pl`%lWmS?rVmj:( +qO<ta0G;#7_7QA\\'Q?U`\QBq*+"e.V,Ld4S!1J=A\:*>1L&laC[IdQ7&QM4Rl`E$4&r+4=h]7/ +]DI/nq/6:(->7c3[>WeTgX3hh\YWqCT,]/n)oIP;agXOQ\"!u?V8bI^;880d#h0P;H:Pk7Wjhn& +,3[_k>LU>c\VFRE-G3,?;";HY6+m>D5ubk<,p3Z4O:&oX;8o(l>^dmpK!uPQ8V9bn&V%0+Lk[&? +$Bqko]N?BlP<2@Y15%%ai0r!)Ti8V46m/WXaS)Ml"cWp/#"<+IoJWhrpR&VI7KSh!VEI_EbJX4V +bFDlKS=@TIMQ=p$!EeOhUSXH_Qt+qe/C!5&cUu&7<s%_Fg83&F3S_*]W7WhF?A,i\P0A#+%,rHa +aaF>O*6X<KP1+5SPl)FPqeQblYeaj/NDR:0^urke0%ctM[p\aX@h)j2_G&V+%3:*3o$jo!jI+fe +V!:1iiZA,\(XKa@]DYUR@YN1(PEY7p%%Q@jgjREl"54sFbc^.\`[:fj/MdCg9`WOI>q0n^Q!hM2 +=9^m(<;D3JYLD.1/He3S63JFlg"l]CA)/KLT\9k<DO="TiI2[SrPQt9l-#WfS)!>b`$Nrajl->' +i]q*InDVEXs32P6j'9df^)>u+=5nY38j0M>*=9g7>!p!:Q!Jad]Tpi+S(2oUQ_S$'>-YZ]>%m=- +em%[qM&aDnYqt4"<=hRlPKog`Xih>r#YBCSIBDSC]-eT40N*tUG(%o&);`Wd1'$e"#05h>KnXnK +lEdi'Y"@qc8`HO5lG2ZMj!lVZ`%K6KN[/rR,A[hWn4QTcj?f9B!X&q^`a-C+:)j1?Ig>JI-8n89 +'81f#`I[Cte`5N?jX.pPh\7l=)EAl^`IoddIgkEd/4\Sf)*\BZhbH*0;JP)j]4?*0^I:ZaO7A?\ +nbY3:+(+SgAb\K(pW$CWIrGN-kd/(Foj930XG/%HRDch;b+fL9('HXjNgX*XgLum9Qn.TTVsYV/ +67RSI.YelsO)W7,r7_3Y8-7$&*^)^Q`'",e>\!6>*b7W5+9s-*]^02j)o5%n8XRY:3LO;&@sQ/4 +Cc2?KiprM1hKLFe:Bs38\B#eS),,"5&Z/)A1)Wd5Jf1:ZCEjeCa$<MgaE9HMb(l13PX&l6$coUd +3DAXF3`-@+;qNMP@6#7F"X>J?hK:gqk^nqaJls`h$3UR^WQaQK1`0Vp$3^^Y8>T66`_g]P11`Hc +U2jb^U([p"=_6%f_+kD<MAqRp_j'RC0.7D<`?P*hMF&eTcXMiAdi;f;A:t.3.@`XP3#nc\diEUP ++<JCs1Xgl)l#[`lU5,<,%SUjR$uD(u!.aQKRMa:Y"*)'0VD;,j!Wf,5%C*YgU7qpm]Yc$T)pSG^ +H.-AAM4HBs)tYJTlhG2.=Zs\]+-k$U/DE53Zn34he$$kK>1YYAX(FE$Xh,!*V.j[NR"adnC8?lI +>+2@eD:7S+.)VeH%PJ09Uo>i$ZEUG]MXnR6XD9:NZn4p[gpebp''g"EX31.MYNuTkPd_&`.`Fab +Gh+,aUG<=X`!Pp?-]O:HE&+@E+P,e;j)_$].VbudXK-+$^9GV;;U2YOCMM_9b0ks>/Zt6J?GA/r +P6A`o&=X7>,8#1W2B\_N*\i\-8oVot0DdTO1X-'JY#+.1&iW[0Cr4^[OBZ1\-dAk]#=9%gAQ(_o +bIJ7>i^i2ZN'gLM1Jbn,Vc>WbJF\YTK6WpO%1-FfN6nrIM-L'S*I1\G"01)H]erMc?IdRFG2]U, +!5d\IN[k7q3KA,pnKk?*l!7KCCe+^g:#gY>g[63,j#I^MnT%4-'<73FGC\=$NPda>1cXFojuSGe +!*\Ff(L<S=fJXb-&6T8eK6PJ48m\$I/aJ:ng0k//<Y&^-TUcUnRPRZ:M86&KM@9L*A_FJ!6'Z(Y +6OJPkaG$LIU2QneT88>S_E*[7D="7`RPeN7;4.oa"^61=l$-E@Ghb!4W&;Dl,9r]'3XjM<(n;([ +((YV()0XJ(k#nA7Rn26(pkV.\#4oRtO7%"'jZl^0ETgS[nM]dBG5V?f%)jLn;Rj\%\L.q\92N(+ +J9i9eE-g7EVDJ^H$hCiWe2I_E$5f>pf"AYUNS.uPe8k-jnK`)cU.[ei"-C[<b4<]L.LdF)k)Kn' ++Qgg75!P7mq4S%)0OM<mX5Zn&ie\:-m`qqZ6m6fD0TBQlRGdDre&ql4$3uZpqKliaKCG$l6g`'' +mBLmO2=0?(ZJd!GADOsibk`D[_@<]UQ`&Hn$c3MD3WTLIL1='VhJ)IgbmAp)2@:?@0Hb`d`A/Xa +:_:e8b[7#p%0?d/r7!OI08\p;5m%=RbV<p"L9ZS&(R5EdWQfnX7B!u1N4967pd.MChO'N[B[QZ) ++qE-o]I4hU$M2(].a0a_K%c%m_)Nn)Ki^?Hd#:TONC:kgVm/+4_3QRk9a`7Y^LAsQ:4uP5`RZjp +EXK+A_BB5:>`?@.#XO`locV)TQ3L1R)FG_RB?`gk"??sYj@`4&1,(a[ih@:-$IgcX&1'o7B(s_1 +Ss08?2$WVS,uFqB$'Lu98uXjtLbiEfiQ=Xpej1jMW'ls"DFMaAkSXI1b*YTp.0Q&s/dXon9Yj[e +#*@OY(_^:)+dA/1`.Kl)Wd@:@k%957SeNN1MNr6*Jf!HRChGclST8abcJf0NVhmF(o;!_Z=cSnB +`7CCkBJRiLT/Xs+I0J*rEPlpbr_f^S-StmJclc1O-Ht4PF<hDm!hKduTQHmlnqbFfWXsbDeWW\8 +Pt+CGjcnN"=_Ffj#/J)t$8GC%NiI0KV,\]gE(:+3_*]W+E3dk!8.<`lVD9AG&n\_6,.)m3e-?nT +.CD.59FSZMjZ>K>W'^nkZ.ZG:`Y>F.Qusm%RZM&%"4(ZpGU*^e&UG]ulV0[AUgh$g\rf\PFG#rt +-)J!$9iPkpBr\Nk]Rp"S<ajg'3CS?`=%Wrg#d!1rQ'S*UM`Y;qP;%2:R#I\:ibBLa-n"_3^/fSG +'WN^6W:l7?=@S?[Wd@cMA7her$Q'g4Ys>`m2"@/<G](i5Et1^r".uK,C(J:`SB_/Kg;L'-.($Oa +G3["$3U!Oq?&_8Bp?]<<em$S>G%e$E!%B`/$3EM1;rFM"[<'^'DTmAtYp)Cm=TrMkRqAduimD.8 +<pN@&n3G%W"CQFmlNgtC%F$F^2V=%\?fL!jlbFFA([SS*ef]d-Q3&Gd$IPM(^/dkR>>03nieoU0 +^P(2<0mN",Anpia@(\6!PnpgnJg%pB;[;&Lfn=<Bb:".%^LVP,@#;l9_027)4<gDIU'(%e:MUD- +PXcq%qZSH^CpB?//TP8;gGp.G]L:1WaW*SZ,(s,la-YDDEr'!h;$H)M1C8DuP*@G?a=7:mm>?Ep +1*ck6VGulq!eEh%Yi($Q"3hL8=qH&!/q)%Nguq0t\0qTtqa@h$3c0H6Nc06!4(r7_I=VB1%>Cqs +,`G(&0Wo+>3YX*0Bs,8Qcl`W<SE[r?`/_$)=p,I,K5?X:)+Z@rB+ni.)dCh^8gF:UA[VJL\,,jl +??0\\64[YpQ^Aif@OS:X8SdhWYX:UlfXi/^"qX)-G*jC'HY#9+"i7ZdelotS.rju[4hm02XPoTS +!9d-bHM*T2f#duH\#IXbV5Q&0'1lHQNG)7CThu;<3kUTSs2QD:*g=FaJZM%,af`EX#WHXJT"'"a +ha-?58]%+jSi]"[bo!3T)MCiM5@^Yu64(#bEi8nKq1G&Mk1kH\9mS`akjM'B^pkid+P5)9a&"]D +<$Cj><@W;/pZhAdN_S4BGu>/clr9U_PPIYtAu,Uq*?2-T(u/Go(Nm-6g_YVTOqdfA/=O9H\'aWU +iW>a*]!l&s"MYc-HI#+N&Ps9hIjs&(_UOG1r]LIiYns/:<%$X!L#adG`sSe878>QKPB$ioA&(nJ +Iam[9F0FU9FD4H?biG(#DO_<eF7mA-+Y+(8;%*^`pAqW4I6VtJB.%2E:6X,%[=RUCVlP^#7P#A> +ZsW%cW_mc-'i!?*(mHRdD2Yn?r[>LTj+A(SQAYa%,!6KGR_Q]n5P$M@CY-'ESIl,Q^5Aj-&j1en +XGV6MQAS_YBJ@,o#aPT%5gnr&>M^i\8@WpG[#h)?6"ma;&4$RQ"+0R&>>pJ;#T^/TRR3MHb&8D* +YGd?o^8qR-lk-FOcp9E,_+B5:9HQMF(c>GA1_]J5POtU-3^7(-\e+$CLs&";pE@?81qOYjH8;;T +EO@>G^K_Sm&gG+o.\AI+(X_]2R8&QYW.GR("+3$Q;WEfnr36Pd0q!_4@h=o&I$dKZTlMgh)Fk<0 +A&5*uQLl/XJd*u@/<%e#_YPk%1]5-VSK]ee-kWn=5mP#CXZM%E6;Y+r&/;nfmCT]`0!g9Q.Gkb? +-]/h6Lmb[PW9gedp6>DUJU.t8aJG$P>Xa5m#f%j@ggC_=K:WK[^A/.h(cKB!TI;cZ6X\O_dUgF# +U-jN0"/KBHpb[WUj8j:/'+"9A$u\USN$UIVV.rj:f_7!ahh*$fO'6*9:_6-U=HL$M8#f%SH<5r6 +I#fP$Lql*mnkZ'-8>MZ+a4+Rj/;,>O?D[IZ8/umf=>PSs4ee.:""\B3`.S4Pi5i9WJTs0j0_NOI +0eR""8:.?h=>kfQ29BBa*V_A1da947pB-T[WQQcJ6IU`ISHtaWMZYFWN-.Xh0uubO80itCQnb/- +TS'&6^>t?:\0K*(OiaRKJs<@Y82J@kbEM:q&A-.XKUGGKMibFl]MKEd]SDK"NQMs?MUKY5.]Ec" +SBA@\Ur)6:*1!/j.=rBa7Zc$?XCd\/-%fkIX0@3YI)(nI2?A,)LcibuI(,"&K$:U-Lql(SfJ1=S +S<#[-+;n08EDoQ\a33BWK?-3HJQC#$3DA'ac!fP:.hbWFa%WgEPp#Finjgp.m#)a:+`Tk']\j-U +b6j'V:&N.i6pq-%LP(,T27_Us7(85!l-?BRLqkqfl:=[FB?]S!8#Z2Cd%X;]ND>H"[X4O:7+MGo +(P=CuZV9ol0GP8J2p\;s8o`a?&3\+Y@8GnkaUkSod=fh.pe"(39a'hc/FaZu3RAcBcme&&7/+dp +Uk0-m:^m_hLbd<4$ApDCLmXo5bglk2%aS\l:?;LR"VEOb!t/ZR:e8Au>f@8c6UX0ra+XI*==__B +&CKS]93@,o:oTt`NK5Mt_j[*J>`fJgP-"TuLk-,[XJ31+[`eT>Rk110Eh*U?\<b&qY"=;&1?KLf +l@TX&6a-_^&]MZ``^AtOdujM-;;d[E!WZ4<`mRJN<B\T8?q-@L_PG,@0T6&E,g?J>"/%H2E%qk1 +VO@ZEe9+:fX%U]F,_@.%[4/&++K#;I.?d=@9p@)&i.t<^ZTb/']Jplbq5XOH'Edr*#gn?X2#;hR +U^`]X[@I)il:RW$,=%1oK.<ic]E]Cn&<C*e_/defS.<[:,K`P$e6LQ+&1UNH*QA):"+an`)CdBQ +i!?9BM%"/%9KS6!7Z+9*Y"[CJ/Sro''2;ja(!UVB*H.[J08k(4'Ni+B.>p%1B\/n(7Z\kGm<k\p +)HS=J2N9%M4b6*t*3B3$=>bae"aqW7L.efWQ7+)4I9tQcH:ZND.*KY")NPFXO9;.)"%\3\%;FI^ +TEDlc=2g,#;EP#jM1[+)=G%6S<I+br^"G5>4Q$b[(aKBS1kX43=!a,`RSb@21YI=)aXAVK]&s0a +S.S<YNm->(XJCHE:,UDKLr_%I@9d"jP*.\K7ZDcGop`%/hl<>-=ClR*9hO#JCQ,3QVTl`6'cKPP +DF9\lMb82L4aKrg(gDEAXF5h*F!&7Zn'5LP<'@8a<5T""O',R.%:->se]h3-c\U56fO0ir=rbdp +'?6+`!EIP'%@,atdb.pTgpDif&3Ypke':+_"1_YkTV*78*/MZLh6GjhU/TkOfnftbR/f&F3&V*T +1]i?p/c_CY[H#SpN<h;%aETIF>34AsL!Lb]OLR%HN2A&FRL+4#1'I7,/OY15+bSUrK/f/=0WV)C +0IZ/)",K"*(pI=\K,^mq%Ho-AFbs'a#m+u>hlZd<D>b\*rYN!BPhcdOO<WUj4l&:!+$_SgfUUje +$B#('K#RQq=I(+.Co[Q$Ui>1L@a\>,'4!d::CoAABoiGB(`cUB!e<G6@RoAE#c?gUhOrNZ($UY] +!e\c#Me(B?DBE<fW8\R'i0GR`KY>N$hG!u3(Y,ra<Dt=4>oISa7$u4#Ra-L5+G+=]`L=!M=gf.Z +Ji8'4ND:/iE6@3_>(`*':$D5$g]2ohS6h%8+j?*+OOeu/I>_oi!)OX9!#s3>3uZdt$i+]r&[@KW +6]s^A$g'n=3%fh)/sgh%2#rK@&-ZPLSE$T"a/2!,FB^o:;N*:GJT9W*YdOr5!*KIPKA1E0-(+dR +$RC1,gk[bK##`T7(Jg^c']*.5+J%S0en%iS<c\Y$\=+HESXCg><c(B[?p3(P97pV9O+mV`Y&=TE +5)IsWB3U:`l11gp.6s!D#p!>MBY4WoWrj\qApiaMi#J#$mnK2=djtc3nELA6@[I]1B?FcfQ@<Fh +@h-lPJZ8a5-@r5-nORa-8J*!,BVstDLhH.4J^-f;R,hqtDWi;QkV8[A4!3S23SAJkU$2sn"!<?' +0T&2eQAE,(ECM!W\q5BuSkb^UY+k,V3K=$0OSI_sn:HYp0nW$#K;^]9UIN[DR;&D"C(T:eYVGC] +$L-7&9aWh==GdA4N!VtR9b+4k&3LWWV!4JIXCedHW&3diL]MiFCMp1f`jhh+2!WqoR/X9"-G,)L +2s\g,S$p(IHUd,Z_JF+_M0Os]Y,7,U3p^68lCP$BL:Dl=\_1q\-;ZLU1aiZY!t2'3.'?h#9U$b& +:4[XE0X.=tTSdFUDZP=:$E0+:\`ZOB'Q&/796jPIJ2;gD&s'PhW"u@Ho,hciUM<mI(J+us3$P7h +XX73`AZk>*L.*u#QO.'-mdTLZ^?Y/Nn3P"]McTEr:@N0sp^k18Das3AQMU%RSVUfsUjg>IJ?$bC +V=4-Uc]Bi=XQ_1NAjuCmMd]A5+kbp-6lQ(2'*QHo>9F3NFROM4[AB]prrV]Pn,kX2d&P<cpm;B= +hJjs%EB`H$;*>2m*p]VJcChC(5/mX6b3C&hVag$*I_Fi\mM!r*a1UbP6A2>KJJ+"JBLjm-^DHEA +,RA<&nnMLscPSD8p5+82&@aji*i4J70Me6gSQ*hJ;,)\aN,^->l'[-CD^KO5LM1$Cc^6Q8R#A6A +%.-P4ba_iNBJOF>?LBHqo6!RQLkkQ,D^iFhCYf,Ki3eTO_sI*+C]L8QVSDGL_sGI'!\Z9[0#drf +ba!rWD#fM3mceI`=DV@mob](L0#.b5&;#AN!j>IQY?5Rl^MINgEC5o\^Ke-a*JhM2K,DC!pb<g" +W:fGGoG!K6T!<"V(P>!YK/foHZCD\j`e-9'3hfJp4ZDT0SPjcP(RP@[qaMCQ>AbNKk`mLW&=@&W +G@lF$!Y5PG<TmbT-AuVi#f%RC3#_l8(]f.*!KV^307\9Y(]tToGWs@H8/MA`1C6hCFt[A#J/Ene +)0e602&Cpu0H5WtL@j?7pkORu2j.nLNjD7np^`Gg09cMKA@@SoH#J67L_tBk_tf[Opj\cXcNEq9 +Sd@YENJAAh\!qUgn+mi3-Lg:0;"n8iT7\OHGorH#DS:9jN.VZYH=rZPj.-8]2N*WqK,:))^RB0" +Xa6WYGP?$Ga/"9B0nUj_CMA?E8/VH+Wr&sFlj&^V+1(YH4F-[Oq?OJ$T#^1&?M]24qc]Nek=Y&q +XSS;<qR=:f!&aWdGPlD"I"tCP#F2O.RsBM!r(abK=3:UU[qYStJZpk[cddo&d.mATK,;FW#Vl0- +$F0nmGV?5aJt)\1JGINBp\-@gs4d,Mh"icrH:QqFTJCjY0R1(:IM`pg[[;24\p^3uq%)Q_G_Z-7 +b'j;:%]AS*&%I6FnpVC/"!@4%8?IcQQ?d\9s!Q$<f<TcQiHmc)ra4K;!K98u)[OFc6Qj_i0-H]X +a($R>k[cLdN^d-(%LOm-7j2CV@DL5uNBr;/Oc4`V,<?dg`q,^b?o&c3UZU#3N9)[[$q:=*]XhKi +S=*ob@kc&($oaU9``$.9%j*f!N:S3DN,)Cn:/8&Sl'T@n2]9h/;dm?-,oE%_p-UjcE,7F0`o^I[ +1?;lT?&$k7$..+:1/X^+C<4[bK#/CDGMG3Imtui@9L]\X[*!8CQqc$QW6U\qX:5A1Z4W&DE\X%; +cr#nO`&H0`%Hg=)O#D*g>I<D\(>.ka[+b$Cg7JAf@m&:ZL6r_t%PcAno,4XlHU'CEOGpf.Pb5O# +2k0(q+c,/JCkimQQEBAfD88'VNc\"G*g>E<`%gSY+r^s3;h4nOcK\Rm1?4OD*&ljr9$.EL$a.a\ +XS\g?N2Tu.0rs\f%%f_&RWf/_UG-L=XC6KIQU&n'be/aO<(a+uE8u$q0OnQ_kpn?]=WGJ$Ucbk@ +lYph`,*EpQ'<^m/B%=;o"(EuV1(9s>NMA:74=X7=L>aUZ>f,7)/_nAV8Sb!:-A63"XUZUqX0WH^ +_5M#ec9j"s0b%h6k6nh\F4f]OD3SrS%1ZU3*P)Q@9dikT.-B=pbUDR:cgtuW7_/.H%,"!i;CKR` +eAVY_<!YJ&&^k/],0(-LXZ]#!&01D+ZS8_n%#0k/(JTm1D$&$`2#SOON)SFQM)l%&juOl">o>t+ +mZV39%0K8?0[``IcAfLmKX38RZZK%Y6]\6Rql$^FAI/h;Ub:!uW`Y$u#2um:+uHMHLb1/-?3;)n +O$La96C$?kmGUDfWteCGK@;sei[,+kVpuhC291^AI"gSnP?a9n\@+lX92a]j4?`*f$FY[@r\0n% +/`Y6?ipIN+2eO"ch%ba+(1-d`+sj9i;?;dX1:dR4i5&E%R*1LA%g*:Z,Hm]#2E(_!/uUlUc2dDt +cu+P>,4l4P!81KjeQEAk%#YZc"!3N5m=IJVN:"M0iE5K6d).AiK1O9ANN'q6Wn]$WaeOi!9p'6: +fXocp4j-4O,DI&sfV.-fMN`QagV\5W5Z.T<3QHc>d%9E+C?GRg_6s@I_/O7XMiUL@BK]iSlEu`b +;rmmB;ms)7)D0f).9gi9aG;uVG!DfjL''1H,.+DlMQ]Rlg9Z]b40A-1r5c/u&7V)@]A_p-=Gn=s +T4\%p"uK-A>rrGE%"gLSC5l^LCF71"5X[`FR;#bl:W7@[_!q,]!GsCW6'X^T>iuuT,A'MQqS<lW +d3.D]$tmis_3cM#!t4pWa"3kbpeq7PP@dp*Lc<31g)/*41M(?mg6Z@G"sK^H0npGW+@k_!<kI(B +6rZ'2aBV4F84?$D$!G(,HPN$uZ[FQF0f,1ncQ,A:G#=4QZrE'U@?>)J&N*CS(V:BREERr,dIb9\ +r3$s*Th#2")^j9Z"]'43E<2bI#4c`(MGQ3lj>gh71+Ic\F'F!bUt^WcbcDeC9R3f"mY8g>o0J=> +28ha='=en#La2O>"R1QA->*!`H6n0%JeUjU>oadc8e&(cV8(&;]8t.2##Bb.9EhX/>Qcf[lBohr +M*.R9$p?/;oGTq\b4XncfF0J_2a_;DTu.k".A]2J^A'tC%,!cK0Z5/j"Thk0R4!@qaMF&!>.[Q9 +3.qLADQ%S:pLKq;%V/E@W\B>sBKVi2MEi%Qd#+qRHIsZBF?-<h:./_5TgFuPfUdW1q3TGdHjsJC +P'HtD(h<UkAqgj9M=sUjlfJ\AL%5F>iD%qNAuB5N,Y#9=&_u'YA.R$JPI=-n$-V.N`:Va4i6_Cg +'32&315$^)fFa)lo*E\m!uh>Qmm8jA;U#+VQI6N\K.M@XW+6gsk+!:BK2OfTPl_)%D**VW7L^^( +Nf\3tDsQu=O\58u&5)OJcbjoT20_(0R8m\s*/u_))Np^HNbMAk7gME)3/:EdL]No#Za/BY.tCq< +geg%IAl@2>Zm`j.HQ$^R0%Le:4'`b`E$fQ7e\?mpFVP``Wec<`fr+2WcU1mF'nIh_Mk:9JCH56N +)FY<oHWh8_cF%YGEDSa2l0C>m]KmS%gYc`RD1No?Mpf`M"Rp?H3f=H@UbW-A>r\biTsjZs7BI<& +H<t8F^5=I&[2P5aDs7Ltp>WcWJ9,N/8N<QU`6d6D-X]661Ue"]3u6Ss@iZI8.5l=_[q&EWED7a6 ++Wcg"e,P(lfJ3[apD?GdW)%3F$OI$&.tiQ(L062f$u^)$j</E5!M2`Tq'R>hI%9Xl6WsZoh^5am +C)BQF8.$,ad1LClBj6$X6B<Ef/8Q7`EX6*K;audZYf(Is6'r(<">euY.mT5!89]87q<-uk)O^X] +caPJIkZia^))8FbTcsY-ql=s<+@qCWXt6AfAY<foB[^,4&l`^*V/[d"`5'P=Y<4H[E:,n!lpeS@ +k,FGV/jTuDPftGLGZW$K.EMT8>I]dVY(I$fF[;K>LTJ=*o,/p1+XGL@@$9>%=>Iu!,UF,Q\3e&' +<Ps@/;1tE8q#_V]geXXeR1eu!Xqg(r+XZ6S9TQY>A-[_E^Na$P]T8''o\WHBE8e^r[j$L<3^e*@ +KUjaNTQ\rGD6n6!rP?;om1a8-@ik*!*uDCY:(4cpg[2,8VdhIF#(2Ff_GlQupVH9\QuFf&0U%&+ +=a:<)5VRqsku))$eD$K4Ec1[Ba&@8-h=:ai6_g!b:53OI4*!k()'un>4\Y,N_cMUe3"0tr+M>ds +,iT4l),:->51VT9D'QBecJ-#=+hrRB^>;eYeELRlKekVMUmZiEZsltGR3lf0gM'DYmI\Ks:YroZ +G*W1lf*iXp!0^852[QFO'8^W$X^Au63R(sf!X,,R*B`co`AhjcOM.r\VU)8NDuU5P^K%s_&7W`^ +.nILY["/9[1ig]C,q-@\99Zoloid[%BQ$mB;-6IJY4O$nqa7[u4f-82/1#t_Q^GLc1Yf`R5,Q]R +)Uape$o#UGnIjTurs)d(\[lHJq>m2Vp[>khd"@'/.JcD_6u6eun\qHEJ9"V-dZPoJ%?LYc`=<,! +&d`F7/YoQNjuh$:63^r_!Tlqa+NF?ekdF-mgJBTR-TYoM[KYTTXfLB@V""6`XR1fFaT.VPD8%YW +A?KcYC29"0$tr$OEro#nc!n!U#;W6^8;5u65_,0r"lT4]TK`k9#7o2g^qt)g`&^.q0X%]W/3!j\ +$DaSG$%kiI+IMh5`13P;$'<"h05V..,%?."%A;D`9AXK(_#b1Q%1Nm';!e?Z)@U)@$'0+Y:GD`d +`rjMlN2sJ%OMJL?/BImZjH1,\E?><s3rNRO&e7f!Y.R<bBak'j%cH.H6amJ3e9HYL$'9];$p%k5 +R0\o\%%q3$@$q=8N=9H)r(4.)&TDn&NtnZe;';;aWL=-sUs(>[-A1FeU2i`!!iJ@$)/3If`sBd! +U-mseC6>1_M^epeGo@8=2m$6ei0t@a_DgDB"j^T,KEqmhC=Md0Up5a=@,uAoaIU_1%]76C+Ik9b +7L@Ga6nVRJd+i>f-je6C#)%OMn0jb-o-!Q!JFE+REZTp&]+to\"nE/8,`'+.cj#XR*!D9+KEqn3 +b9TI;$-6p?^s*HVEg`Sj4f]olJd>!,SJ9'TGHu&dAO>\11DT=WBE2`nZ.r(5P97Zl'P2\=$;2Je +-qD(o.:A[EML-g-o*Y%n+^gluXH3bO]KH702tFQ4jAlTVg]dc"16Tf9!r-raM@@q]6"2I?c7VrO +b"CTa/g;_5DT=;gW*Di`.ki+r'*:+(@LSEi>X3?\Og[.p'/2$1.fpA=ng\4Se09]X$1S.OEA\$= +g'j/51IbR3#[Rq&__`M*km7PQZQo_G1>hMU1.tV)djP_?&N#.'1G51s@%N5g#R7UhoZ14!Y_=s< +#;S)T05T5F;i9S7HT;a"'#U#4+J/"QT\/FS3fHum1;`6qfIk%).kcXp!,=/0Sdb\RQ&R^b-,>U; +Pi&fN4H\hTYKo@Okq^H>5,Bnn"+'<to/(MO3cj;N1YCq@#n&QIe`M7X#mbhJi7KW%%BXgd;h$;D +\>3$>l67JtP5HH>4#_.>0Cu'Z'.kaJZG[FU0,$#q7h\$AECFe/'jtlI5g"(#WgtkT@_eU)ic`oD +k&R:.#4fl)irfjDde+;C7YYgN0WkWn\A%L/Cil1."A5P0#UI3*6r)%GZARAaZ?&oSQ'>i1.F.@_ +Gq>3$.MP.Y';h=T1a]N7(Q*/d'0f4s?NtMQ[53#%.XNf59.Q)=+Fq]qDRB$.#=3DU4K=5ndCUnY +M)`pP:r=3LU@JWmYsNtI$5?#rJ>"][]2FeYBF<`B@%erXVTBQE4AApHF\'74o"SbO_goTf@%^_8 +]2ilq@Yqj!F=cp[@L<]4;_VOSj$QddLa`kf;[!5,Uoqo/Rh]=L=2ji9!Yu,#/1Fu%;lEJqQ&RBg +Y?F8Y$<8W9i2$&0pbW^&"nfrSU3d'/dfKMa9&QNV;SG>;jWY&N%/&F$E'[f^((*ulMIMg)2?(7J +4]F<!,h54MFpL'@3DDioaOU4m22"`t/db?mk>$8;,H+H^Uca@C>QV"Zp,bVoVNQOA.94D9m6su# +7LE/+"Mgj;<Q78s8ujLX4]VGmU)rSd-k:&++t533NXf'`((,1814Z5-`[E4oI`SjPBh54;XGVH, +?YV2hC2C7i<hdL?Z8MmS9(o#=p:R]+6;]Y97TRTti+6`uQWb0S1aEBB0V`LjpLr-DSbD!%<icSD +I;,?_C$9&@6`G"tSi?BKD`4-/6N:r_4)hYFE8Z^`<oI"Ypr_2:0/f&$2]lhsq/NjTEE9e[pD[pm +6YrE18/F.#2b]UsC72OgD>.0qQJ0k*3HXG2Bi$I+f32-tF*9JBb<Tga(NXJ\ABT/ag".Zj5`Kk% +A-U%*BhR'%C>qF$UN+nVE*&HC(QEbs7s\]EDXp#=pJZ@(=*PNCCc@c+m#%#Cq']=ZF#TM,2pZU? +TEs.BGh:AMpSUEfq(*?XBfGL-GNbFPD0HfbH+2Ep@&Gs9(4qf:L%j>QJD(J<&8X1A6(k+W'ZFh, +1P,\^#1okb/WY&Ik$1/eGG)qb!:Kud.7pt-KihI>(;kkXgu>JFJT\;RP9DIMcOfY-@+77%p8ru5 +PAjP9Ji=2Q\;CLA_d[W9>k_QQWD]tkB7r1%:3J&";A4s&@4mArCau=eD6%sd(2<)]#<*,%(rmA$ +08g5g-STMBp<IXc>mfN-Bcth7'Z"9o9k`*dBcu:ZN:>.q^**.&B[rqn,6SG<)1pnd56,!sPq51N +W7[rYP-"Xf=Kdli2j1[E6m-;)i2Kp-/X27f()<a2[J(7WH^$i4$CI2LH"0'LO*hfk<230PAP,k% +i;S!1RjA[SK/\jL'7'C]46d<nJAm\J(8V(,#MENe!+Mq<,sYBQ<+)[j8pd$Mctk_"ZD%YiF;EO) +ZP4!?Ma['V!3'ON3k78WAf3)K=J11)9I]3aMJ5_N6Cq"*p09k&SjtUIJF3m<k"#KN,3]_pV85?@ +Z^FOf5%(=4)0,odH_OGH#4FjD!:DEH%$c)7U=opD#oY7#X&?h*$F7p>3`@V?+A'Gg+^h?<L+/GU +]JBk'6o*/e26oYf]n_JcGIi2\R8Q4pKSZL/Vn.K7j!Y8@HX1./Q!0Ub8>A7A%r/\Eij0h+3j=MQ +4/q>[%"s24NA(if;E+HlDGp[Ig<a\q32bJ>n8h'.Jh*u6.ns41V%3d.]!mLtg>a<VY#<TJF1\9s +h5t`rku3lT\ZV`%Og0!A1=GQe1^1(c5))-@*gBL2)_jTfbrrEOX)nM'gAFos(I@GD67n*->+uHF +:=t05XkM*5aX2GE:`u39%<#'8i2a$F>Ga$l3Eo+o'cq$&K=CK[eC'5)>%:8:m'(eFT*a^c\l$$_ +>R!23XS]%47d>`Djps0,%Jm#Cfcd>a[-sk9^*u^N]=#/#9M`9nSmksoHb6oREP,,LV))3\]=#AB +_(DBo1qV\<-@JI#;?n.5.]KR6&A+elYTcgG['ca,$j6tf%oABh$p5_;>Ug0H&HQ%$ZL_q1Rs._5 +^4kK``0;(',R=b-/3[ID>:4_(gF=i8((/`8Q=+(>pfX.D!QS??c?sJ@*+,:[bZD`c$ItulqaM!e +DG_O[;T+(mo.32E((0`@an&7T\hjTKYJ%.a5b,MqY"E@AhoiV]TA6P;&>RD!@EMTG8-#nm`3'I_ +ZC.AjbOY!s4RpX1d/kRo$Q,MWb$PYZ?4.KnRKZ.g(1GLRUe9RO;T:6q3`MN\-`+-'2E`O%n@1F8 +ZWe_Ge(T7=02_u3Zb<4b`<$k*e!m*6Ok!Ql_#7W+VLZ'>ZY1r)GJ.hFF-@>UOk!E.4<7)9""4O= +&<MUre>#+GU@J[LSX9hheQL3I22BYh@FA/PdTi3lh+A0gb&J!&7:<IVTYtgV0JH'V,*9<34iDKc +s%'\APF^>hJEbngb`bUY$\YZj7"'=<?40cUXo/MhIK.7A:h%5J!W[,+^(I74V`"Y\aW;%#n[RG( +rQ@Th_>X<E]hipG[=TGZ+auT*BO8L26cT=[$X%_LH%/?MrSL#0X0,i0IT)ZoAd:L(;15<:nR^c- +(:[$u&,ppr*c^:EI/n_Qf9q/05!tmIU;,WoAcu-B<MetW'WM6+Kqm]XCsFhL&j:hX#K,[pPjj'N +bNj*)%bOsUrl#4pl4$*7B)N:?SBO<McD_r?%]'-m:XAE[EPm7l1HtD2USX"T7U^_VqJWkdX%L:F +?:'2//OIjHK$Msh^,er+nAni)0G8@3TC"hY)a>A7=ul25oBtJl;^2Dl7/QJh`.%kM0LB$]`J:!C +KHXn'p&<r>h`<I+5P"VMoq*c&:jqX8E"30hOBN"fUSpUlqdea7n\:TBZRkR[Ds-K=0Rk(P>:QX; +[$$YM$spBP?&U_8`%ms\+rlsY?EjPFhBtK62DLiohCn5jJ,StQqOcEt>:RnTD`$GRB/pf(`_c`S +Ca0db9I"LQ]Y\/8S;_)ZBpdOa4;n[ko3$abDh>ga0XD&I*ta@K@e#Yud*c_c6(njg@>[tu3_^bB +!J-&@3BGI07T3a.mUJ/BUk1=Ob[V-=:5lQ[ACd>+(so0m1OUmF=fp3;Am(PS_dOOEBJrH<*:@Z& +R4KR-)4J'H3ZH>o>6SDH1pOtp-RjnVdUTM@#%Is2OMksd5pqoUQ"qFO0Ug5K;j"HPCGZrG0\d\? +do[TK#.X7rPiQC9RSJ#<JX5"u12HSF1RX:3LW&2rK0=CqA[FA6:05UE`6!7[)%Gb$/]*u(e+Iuu +5&%X#A\mJ@`_j+?)-#deN1PZ)^LCX@9kjc8F?n%*n+_.T"#/.[Vp)YiVR#0=>5phgJ8cL4:af^* +[kIO)(oPN7(CHumS1:X+MSfS5_f2i$$jKPX!=gmS_tl(*6%EJ__[r&0!<uB=&JiBKG\4q$&54MR +#*?aK+2oD)0W@Pt"C<$7!Q7b[L-`I+PXr"m4J&cE%&"BROSE:T9$5@31!>FETaX)j&8)qTj"/EP +a--=r,t!V!(<au(S<"3#'@`L8`7%th5/iY'B.PLJTOf"_@@Y"^L/Glo)?pknM)qQ]FSd?3PAMNl +bY2R;.aoPkBd$9Xh*jM*1C["r:_\l3;,EL9eQ>[+3+Y%u<.u#(:6BVa`O0c;CDatZI?.1O8pua\ +9/Skn<8(<AF;i]<FYR=U<cpK?<n;C\;[0Y[.oP#BrD*\o!OXLj<Uk$FAD1%[9H.-DAUAf.+W/EB +% +!6;F)d9`M")H"e[C&r<[roB=`%fVUEFH3hnT0G,2CEXPQl:>kh@e',3!T,Z'kCjadi!$n6,!5Og_*_- +K4257>T;X\A^cuT$tWL=#5G5:H"GXQn!mm]ST,GN)&3i'hjSFYL=fAMEL"tYJ8prV(mL=+B!k)] +VWUWb\"?Y=hM)qW0]6qleiMYK)J2h+<lKf]]Q>.YPt$$FLH<_3(C*"bBqk)Y&8@qYRl6\KD*"!Y +[VFS,cb@[*c8lm1OeatUL:H#i$Lc/KbmNQUcVUP33H%JfoK0@ceoX"2@@mb:#>,hH@BU!`_0lh- +hK,3*8IG)PT1QK3]XLO9Z$4Mk]!5\Y4m$#FVbt8Z\,aS$oXm+MkGqEtV:#3DemIiXg!%^DAH)UA +Y$&L=D[PhknB&HM>hT]Hks37qo.CFkZ&N;`(!$T@C<OH2<!L.ki'>@'Y*XLUJZ:k]5ni[LTZc@G +&4Ne=p1je;`#iEL7FAsF+Ttb\+(DHCKYdF8"B'mp?#W6#5h.@5_1WDDnF3Oq(a@l^'/3aQ-6Y_f +@ca<u3D[`q*^#fV%&#a>"u&:[6Fa9)e7:Lr&Ks_8!sJusPHTj_V("l#&J5&.6&Q;ns$k'\%%s+h +M@h;+,,hOH,MZIRE:PMKkEd<d'Ma^.Q%qdVpBjNGA;p$j2G"0``h\8'0JYs7Z:PmC+n.AoEM8gJ +LdDO/gnTL:+u1mP,nZsnMN7&N9#O3,-WJb^@'GYo6+%LH'c\B5o%F_bWGMuHCqbV*b$./Doe3#[ +1mQ=o:P25JgL,YiN/i'b8*8P=!Mk9YKsFlQ=i2ti6Z%OTg2+YB;^YX'7!#VqONU3jIA'7FN!J&P +K6bOdTnk[m8(n=QR,ECdat95?Ag.>&>d>L,E1o!0bfIbc#t#E3=V0XL7<_0,6R4Glnpt]sE5O5/ +.guWY(,.GMF:CSW>_U.M)MUdDK]$Z%VEpAN5o(V;ik.=M1r(&.d)c[[#W>t1cB'bOI8&`9'P`lX +;mAda9]La>Ae`Nl0h,qPkqb>t1$OQod)dAsUD9YIJVmDuaMfW#dA:\@R0Hi0J18,AY&s'4=#tf^ +/"JA129qsr3`$]/>l_$M4<.CPb>d5MF/nFZ\^e.X<WT0.V/MlmL1%t@XNK8'JBC#1(8#4d`/J4b +J2'IE^r`S>B!/@8P?*4Y/t"RK%+/AHYNn1r+S.pQ"SS)0C)L)?'d037TJ9%g),EU7UB`ZL0h2Qg +91'DkTp6lX>8S:-Wbn;c%6CHA]>BKjOCF--3in&qY1'E7A!]nNk=Xm-FJJG4]2O9bhDl/"C8bXS +PVN1S:rMnUU5Vqt^t'e?%qLNs0Es.hH7-+iKH5C2K.&jo@)NQ"0[pKJ'nZacpQiKAN["`F(oT/[ +L^gTld$3/p>T#:d<Xl\^1SLa$O>:3X6,GT;VL6aZ1J<>@JYO>rSG=(d&n>M@7jFgWOQ0526P3^? +.&"7!(kU8BLk]"@iP;XOnB;ioBi#s`UbnNle:r#><B)/+`#,:78+TbAa'j`EQ%Dd:6V]p(#)L]? +bhO%&8]qU3,gU-DM4Z,4?Ob]L0cW2GWC'3o5Pdc+Be:`"6SVSS)IH>T!5k\T*g=m<GcIeB/fRG; +C"0_8<3Pkm^%Ai=%Rf[))]YefQ@<0N`?:op0[:WCc<JY+oGiTCa;T4-GM%3=2eKs-U\$Ijg,g*5 +A'L08Ll17<iR#j1]Zu0I^>[jn6o8XTbT6:WF:Ab*1GWE;Hd@Q?ae6Qj-UKR+WQZC?]#lrWSbcrN +3O0(pTJD6H@NF=ukhlK+1MNCiWV#Vc#7L-Pm]bCdW@h*mS6K.6ppNe>fO<gQI$&D#0?$Kf(Xqc, +PAr38a,[]$i)*JoEdgs3_nQo8gqR"`(!4Jj?Obojb`$Roc,-tuA`;3VTPr+$El0&h,TO"XbD<:K +]!kf&*<WG6L+g;:=DJCYHBRhJBW6>5S*_I3Z$+;L`41V8m/=sl#2mt03Y&*8gdr9)rmBH-EP(>h +"1j4sF2((sH42n`U\,*<Y<#L"jVd8Bo^7jkQ4Gb])oi3B*d1"?Liq4G'h0iqg$!Hb:'Pp(LjIn. +?Gg`#2PpJ1P*>NZMSl:bL%F)EnA]$aR=b0a^t8lJjBXLIBDFbFk*I`=*<%>*[L-D#r1N0C2OJPG +H-,M<J$^3o5!(O$CA&:2NL4c.A^')QY)s."895A`rWgpJ)k=9KO-%`r)g/UQgR\68"#u7Q;*;Uh +"1gIJK35fGkW1XO"i)gN\7>h0K8B]*>R>p8]h>qfR6!+Q$O@S(^jAJUpbY6tq?c[i_&NZq0YIlK +1Vm$#$qq2>;Hf-G#!e"HP@PIpA/W3_+"[$fK:>8dq#\<n=1u,QK.C%3#t,Cs2Zp#'"/BioULbg2 +q?*ZVMaLEq.kNV0!N70"_PAh@bUeWje\a3r_Y>gngH@e=0UfeAK6T21i%fpekHZcq]R)e)_t/kG +1S>SL]Qi)<^_)f@A]-C[6:9,1$WfFJq'hO0Lk@EK39J/0\NXu(XV#o4J2fe\c%3ch`%X.\BSa/s +gk\QQ-WEaX5W=>21;>e,4]?,b#j0*r>*";'_gonKEJqf[=[hhhK?RL^6sD?j7M3FeLh&XZJ;-H_ +W&Vk_`c02BN(Q=]*#68H61anAZkU!%Fpp/Y%`gDVae2-P1QA]X7gq*_;r=\;GCquL7l_YGf]Igr +OLKlh&8Z,Pd*4]*l3"[eOao3L?o^a`0YH0^]c+IQ!2N-s1dVlk`Fssm]S/n@L''\%K7kN]'SqCO +a9,t%4VWgS/<NLLJk.TZ85+PmN/'tk%`m.^N/WY2;N8dpaN4"DN#\;.A:I0uM$cL,8X)XEM9X.A +U<1=#W$J4\-p*D*S]Ln1afC+)e<WM\\q:u7a4.0m,RDQFX:)Cob4p\n,`9bb:FU[R9*C;K=N_Nq +[mfLD#gr*#aX#!0UQL0^8'%JkN06cVRRblCN/UGdoO%]U0uiRs^seRi<,k6%n4=<"b*0Q`;"I6m +VT?<a9\aVZ,fDrqaciNhaK2HFYWS!sL)8q"7hj$;jMd,&f0Q&j9Y@ArH#cKWE=@d88Hd_eeD<m[ +UdoB[8Z\N+FJ$V'NrpYnMd2B>@q,V2`C$Hb",)sg]]m:4lHV6J`>%3%ED0+imt3=-O(>!/S?E8f +O%p\/bLGuT]Ze]HUd4"Q`?`\6JDZFgM$Tc4%C4069`5AjQ&)d34rB*i_5P]dM*'pgM4!$FjTU_G +QjJlP^(]g/6[;K2r/U8'K7o-kZ?F<#%aau3%.M!Lm1>Ysn22UP1.4)\,SiR3r4`Lq2aEG2MfOFU +_9laQ;7e-`=>i*RGKDjpQiSJL37n\94hc37;Fn\-R#cl0gGoY80kjljI3lKD+0fqgM;9Q^>=;@= +.gh7h;H5-l2%2Z!Go(;pdetK>lt&%OH;c[L")/"GI"k2b,nGRq!OQrF#X#iR]tj"N`]RGD\JA$C +9d&g1:jX-P5a6nt1qpSI5Z>p)X2':k=4&]^;*__3GVFcNA&B6<NQk>8F8RgMrD^EZK.+)_D,\?1 +4c/BdeWWG-*'(LTP_5onZI=%.=?-Ih;DR1\"!JqGZTU-D+Z'bYS7Q"b^c"(q@m^W7$W&RE\2r3# +Bu<aa&8c77gM'ZX3S)!1Ma5Cn?#H/e>Q`-,N;PB;KLCf23XC6u[(<sX9m\_I.Qlb64Rs!6eUG)e +i<(Mp$Fl\<+GZo/@RDBrJU36j0KHMpc-Q2h=G*t_Qo%d=%'8);!M,,XeQ9G4D_U"&_gjeQdr#UH +LFBc"<QNVA.Z;]$,uMl%)%D9^N%;[TYfK)o.(p_UX!WCLRT[Ed:kau>r<q,WNi@/T5I:+7>C<_4 +!f:/Z`G0=L(blMqEE:"3d/\m.rN-R2HO6gY&3uu$?nr1YQ\-ln"%4JqOTM28M_tVi`W@aH4#dX) +3B4R*fMF?4>IllS:l6YX4.Rl`X"R^.;72%k\V,'.c+jUU(g71WN,")OrJ`[]`8#ad=FItBE;\L& +c8ldsJ^'fm"h'%sg&l[r[F;C51B:Z+^cf3A>W]n]naI2gU=o_$N+r8qqaf=d8_9%BSt43W>++0( +EC,QP?:9NI&<Mj4fYc2eg*Pf>1P@`68)D0k]\S-Fh<!Mqb:1uVZq2%g"3K15Iu4Df2dM.G:u,5R +FP.55!L;KM?#eP'r)l0p1i6FR^%nsn:_2k`fpru6&b]=O1u7J<N\,qkMjLh"0sdDt7.dD8>A:GB +>ZPW((1%/sPV0lfoU+11[+l<jjpFQZQWa"qK3Q8XV%f/Yb#j*/8RjJ3\<p:k_a3+Z6rK9%[MM2h +*!:@)"$Ro,q#[O7[Z$.M@Mh&_b=dIM'OgDEYQ]_i'sA$??Er8n_2(-E3Wou--G_QH5jg6,Q7kNd +#f3kY;j1BJN\"X_/I8CU@oO=>PSPIg3Fa[&@n&Pr7,$[;*+O^GicAN1PR-9E(ZJFciN>PVKZME@ +7DNM)fJXNTLbZ@S7PK,Fj>7N@Xs@JB,RoJS.)%kI?;TX9,3"n\@IZoA?;sj]o0#K-jQ_oiQ.:g\ +/H[kj7;>X4%Pg+8&`QV@iuT"'4!!(@WSqr[53>:Bk"\?[bMm,G`<b*eY#f%:ioV"hAR6T[Nbr>c +C;>"2@ZDJ\N_8C"k@/*`@'i?:?396CKo.R[8%>N,Lc<..,q+J&f\JF;lR.MrMoG;%g"<A:&QOYt +"5L$%fW^E!KcFCkU"H_>_[-CAL#%BA>!GDA95TI#/[g;M]KBbZBagc)#%6[X%0I=V"#Np6/sXa7 +e^7-YXj3,,7'Tor?W&YDl,2MrNB"Q\T4nM"^sG,5r),,LT8GH7A0*\:qGV->iL'l*kmWI6DNYb& +02bd'l)'VY[00-'S`g/O"#?;0S8i9W]%V%r^+O6e92@u.Me]nEC4!am<juRDn5r/SA-<2'cD>"j +''n?DcaLADQCmLq8a@Z*ku8($#,CL@J%3e+lm=hhXT.Sr0C$QD74uXIjDf!"b%:"[Cr@'$r<2KB +'C1C9'!%q<knesu_DUJ%$\59EMp#f<=,Za(]n.?j2Vp=$fJV-MD8<qLrnWA_iO-b5DE+5o7c<]: +2c$KTK7-UQcKDlpH8oCl\3Ap\roc[$mXla:mUkJAW2/kifE%Rt%VuBY2J"VI0TmP59b?jrM5OHS +[(bHTe*>3,re1a43*1(^RcT5*Y(gVYORP^D_-f$:X^6h.&.H2HK,4h%f&f`Y:@4YV1Q]:+#hVNK +UIJLanF^Jt/7[[<ieVrDU%nW&o,Yc7Gc?rmnS""bX\t-XFRd"gM<PA)PRghl(mS>:?dh2Yi"trB +%U]*OE[MgWQ=:Au6kp+@2OfU_SPeq%@^]/>n\6TbIk:$7VmCRt92@6o-!+)seIhO3ElU$-4^.FN +,t%?^B@_:J59dj01."na5k+`q+>NEp*K0(LD=FIV00bBX0oTgMF8d4?37uaIQEEFfg3lscNr8Ec +79>TYP?"cFgGrCRg[Ya3oa=KMLpG(3.b;S=`WC(C(KSlGQL,RDF^U*f9i)Bh`X](6'+\DQj5T&O +?ZBqjEg%j&s'<$^;%9hqnS`!t55"P<+PQ>>!tSMnd)jdbMm`Rn@FJ#22ZL/U(CldMD+f.FLF$-s +f%X"^"3quIT54.L,4FVWE@5c#827S\)-;K./euTN<VQ(>1',^.hkr??;)!!,r7OG"eY@&-088<L +7TJ&mFLs;3NQWNe[eJ.<^[Tp;OPj?t3K.7GGZ^up$Q\iTPAu5/GnApp),tVaKaF.(_[)[<5EFEW +QeU\jK,8S(T\4K)S9a:\&Gk_g38KT[hg-lg\)1K$<P\-sIgU3)q)eT^pc8-M2gTD0f.V[Aj'9F6 +BgP2mqX9U?B-rLc6$QM`K<K\0:l5P%HUa2TP*_U6GIV=pG=KejOb^RO0=QR''`4N:qm*#EDnu,! +\pC$J-E"f[(VT`Z^K1)_kL4S(re$'m\oK3ZH\NaBd&/Cl.fAe`r6%H1kK<Q1bCb&QI1%"dE/k4u +"*1TXqi2D=T=]&T-%38EHnbC/JKbAd`I&qE2o!9/YJkq5rA9#_qg[LP5N"f)hL&:`5=`G:M^FRA +7s0"jp&A)&"Y%gf2GI.^Y)a@kG@(;.<crL]6L3/sJ)5O61;q(M"(bm'GfHQjoRE?S2h6Dt%&RO. +TYbM$(la7`)6?(X)[OGN;]rji0/8nj7Q;"8dfh`M9]h-^*YSp9_r<C,+N?&PNL`e@BG'6',8^iJ +@qg=(a"j)$:Bi$mYhjRYRnQb#JBVP7T$1ef>"pUm3#U"Qn087^DDJ+!lXlN#*:.5q_X#`lJAfG_ +Z,97i;fU4r9XdHc#0S0m(3D=%Y4g%\](^V5),>r3I0OPA0oYF2>-tAI2T]:rLGQ#\'b#jt``[]5 +F#TXN*R,2f/UoE_N#QF%6Qs\5Fft%Fj"ZsTBeMB6c,T@C_ATq@R>f$X.CX0(`9haFRD/1.H81oT +VV@f?_JZ4[7i6-g)o6?fQt>u_(BiQOY+BFh!tUUJDYJ-1`]cYKPSh))_sTO\:HDPQ50kqF2PB)> +DDM]pW+u"<bZh_=%-+A;K-:^1aJLEU98*a8nB08l6jTjE2Sk8[E\YOP@)=W-lT2&C#%<E^2oUCX +B,\!'&kO%EOj#0R8#Tqm]#!@3,8eJF&B(k'JZrQ"8J.'FmL@OT_MUqf8DOOs,C7r%L;PP/*ks<X +NsCWl]V*3Ej,iCYN04$SV+1QEIk8&bXR7i4$XdL".MN"%#/TeeYoZ2ii8Gg&dV-e5:]mBU3BcuX +Bg&c%^gg&"1$phn:D>9&S;]fL<oX["Rp6iS%a6Ue%]c8dYD,?=O'<*HI5`l7"$6Yk1dR461;.J( +).Y%.b]d\O+p`oL`PI.O!Et+`KHc8=b@+d]iXi#(LDFY@["r/sSJMJh9t>D+Jf(>#d5N8t+p_V: +i;6`fi+7.4OWC'C#'Yd!H=)6"iBQ3e@#8hk_77a4@,bRPGZ"1uMC.0\c7lV]U2ZlDfD%6p-]458 ++dELg.&J0E'm8\PLn^PrG[,NKE\(ES?(N8Hf$.ut#hM/b[q&uVO/5ilD=a,$)/IS9A6HLl->:!' +",MfN%C)bk2X%!9-OXdZXUTlLPAK7U@&>=+4'j/BlIq-'\I+c0YCKr2R&ceBHN%;$M`6*OD;lbB +ckn@HNZoul4%NeL4!T:HOJI$RcnOcJcSm!WK:BVY.cW4%1@uf@29mJ2\jA2EUF08F%RUm4L9X8^ +#jUt!5B5L9*U3ilTa://K$FD*$fUhi?]9S3US>iG\K`M9qg';7/^F+lL8XJ6T))"g%,P'Re;VVh +fCF5p0^7m!p4N>2H/jS%0`''.SokLp1LeD,s-T"MXVpDH%:Ph0T@8$[aa(l\-l@dC5]Y\G^j6Eb +BK)P;_PmX*M_RMV1adrA%TaR<%>!U/U%OQcgls9!.TR@pAN'b0)=hk86-Y'.k^QrR/LBh$,84-n +W>s[(%&KNK_nb>CSZ526bsWKuo^[1Nl/+TX</[a8kS_H$BdnSn0Wh_QSl1_N/V[^j"qp&=K+)6H +EHX8FAAgdVl8+DqA>2RZaI%eZhCVUg0rWI;gg`A"O7D3daB)7W6Q(2G+e1<C0[P&3&m1<;<&?pD +PTAi'RLC@28g\R(:1TTaPbF1m+#%56UmQ96;<@*X`-iS$b$,@LXOYL-jpTY[X"[D$2b+O)[\ZN1 +It<>c9NQcjA#+`LE]I.4kn$/);;hq<ANZ%skpGJs%h(quBUGd8-UTGWS5YSY9nEa69MD*2KMl\# +B^[dQg\44cd3Qf_WXU;d4Xe/'4O#nd5Ytm4R%^cmT)&gY<mW[f8so(oq5@%4XJ-0GjtXisg)Qjj +St7<_0Ui?q(`i8;SQ!gsa$^1M6\4\Q;_B&Q&D1=l)FRS5cl>Iu'G8P'9Q_K3D8jsfL'SI2I'fa> +TG^iul9t,ge><!G2mE7sRYe$-QDD2-'^Qh0&M#J?UK%<?='kQ-WjQ+<"#eb3aP!U'cW*(A8dA+K +_M>4hFN+Q3QtV&,A;\BS3EOqM=6p9]WTiQ)b[jfb6+&lcM\n.t,g[DR0ab4DJK+au&42[*A[7BM +AJ;)e5g/-T5%)Bo&?AWpUk3tbZa-L)!9Is4MP2JlcHh6\i(-W&W[A,pV\#lZ)Zp[X[<?(=>^LF] +Xj*E=kgB>K&BtGSfJ..V)@!ur`k6pM<\]\4[b9lUIj=nNZ+u;8VQ!rs#iY_`[2*.W!e=!\Yt$/8 +[2iRp)#juZ0pWDs$q;)RI:DPUM0H)'9)K>Njcm-27BmqB4<Z>RjqCa6Ig]&00"->Mi1%"*L!aVQ +%N<E!`C(V'i4s@BAC+j0`=i<>bR\0fP]"<Wb8_((1G$`a[DJ#T"QST%)eIg<_M]oIL@X_,<RpsT +[?=o%9V$WFOV,:1MD!!NdXqX2GCiW\rQj]Y%@OJB,<:B2917""e$<<(q5-\D3c@CrA6-',,lY=S +`?^'bX/&%J/<bU")m\hIP]Tp`"):O7grn9dot!Nq=d33hD<i\qO%7ISMXejb:<o;S_jVd?)2]kd +7feN2:ri@.eEM2_'kk0'aR691g0tPcbi'@)A70I'\Vp5"[KDjrQUB8h:r`>aj#r0W[Oj(u(pb7L +:h<5(2F)bZBUg=7Z%_a<)40)c2hpojWlU_XO?r!oBlerI&]Hnk]<?D?6\ZTH_+b,r=RR<pVF6BU +B&BKlg7!XnCCP@1hIZsaL6k`d6Ohr_4>?mu@X_]*Y3P#:4"P<5S\I/@ppNerXRRo1B&Wt^jMiR) +d,!WBGEflP3\"TQV6scb:7%B;11QXKjrG3E$k?L3&_8tP)FL`C/nhaNDQ].-pj!KT>p#l88,P^: +$HWK,82Y$`D,(FI^9Ku,94O^1%7/4n[i&[)?>4tX:7MN=0VU1m^rL]h%'WI(mN<LZX;cslD^?`d +nO7@"M]^m^gOR0jf'qO$_c\;UBrf-m:3fs-eg]D'020Ui20u)TOB8]/[$IN+R0-,>9`^PtH;h;b +drG:\!5l^#!n(pQTQqYN4<+,WJa8N.@"-0^)gV#(Um.[PIBRG7+c&:M;`;8U0KW509V.F5%E!AH +=X>T$4:EYs="'meNtr8.a&1s0.GhEmF0@Y[aA:A09#noGWF;"*Qu`^.2Eq$-kl2dTKHh=[5g\;h +LaO<anA+7]/X.PjFG`b^0FP`FcZ\f8EqFu4+@p)QK8_G0)F)$U"t:*c650j42Zo_iSI/CX0LGtN +mOk8"j/tjN:E9W*SdfIg-QpKf80fg>^4OH<q#nk97+0=(ljY?/-Qm/_`I\R-P4U'[P<eF(adeaa +,)`FDo8bNfUooS?oIg3gRt1,Rl5J!AA.101]L.?*#U#K7oI&sB6ib+4^rf,\GRQ'.%E`Gm%_sZH +BMD%/K2D9elonLt]S*Np&#sdWVW,puZq0]Oipe"2JhIV,jF(MhHZ:OTMGWhNEX*0p\qG;_X0A[! +"A9'ZM/<%(;';m]2D@g.N,6!-kob\ZL;GKnnSTOJ0l%Ni.Oa;65_..TD5sl&I1iei%#TZS%)P92 +I_nZm$uoH$YgtLY@V3_):D!:jBR\)s!uV.K95(WDOI$]Tcjq8J"mE0`W3i.(E&J-;,B,+Y?tccA +O=/6>-q%>NZ0j)/*$KjtirZBsW=L)FIO\f[m?.ZJ7^F-k%Pc2/%[%OL8Kf,_m3)K!jU@pn@gsU/ +ndc9=o4:*MX4g/8Bd2RWHGJ1tEYfWkONu5f-O"lnlKYZiK+,P(&eSU*Y2($l6Q^<Q+tNg;&gI4K +R2XM0r(7195fFnI7*+_Y(K,PfWY6070Zd!H#*IgPd1Xb7pCabg4TNW2;P)W:KYqdq'!];HN9!uX +QQ?.S'MGPBY):"lGm]RJVioR1bFpAIYRNAL'SEF$;&XP0>R#5iFGro;o+H,L37s-1%&VU.B0*a= +k(9]U&uS;Va>U22!`%oP%E2dI-YP>%D?hpXFHUgPjO5nT4#0Y*!fQ.j;c>R5km+.8=0?$gJk7j/ +i:S]$=.jUXVb%crEgG0#28VnN/]0(J]/?j,FFjoPXN[-+D)%s67'2VS7t:eBYTT]q0ER%=.2:_r +rc>6,/INs:"',hOE&sh\*X>7.mufkN6TIsYp($jm"lhfXDM0ZbL]D?J'Ce6G74V<^,a3]In:*#G +U3!Ep%j\1-oH#91(dX@+[?KZmY_;Zu9En;/47=FDKHi3-4VI&G)l3u@'/[hHdZ299/$THhnS%mJ +[OWsT'!uJBVpKig4uklH-@jZ,8X-"`T\N3i82PE^d-?49N@'2/7S^f)ENgQR\GIS:"qo!"6I.PE +jYgL_5V52nZje(,D_cFF2WZAI-nJ:2`\*K/*MQTBPf1l*i8U_@>@NICPj[MRN`VF.(67bM&ZdcD +W$.)>+;+i%Mcg\#"uoMu;3;tZ;IIfSBi2h>lQcs9eM.R7d80!J7l;;O7,E?SO&/d.%h9TC</W>m +jNt\X)Z\S%%rtG;Ys]0Hn-<55CTfF1bncE6;R$S00e0H91mI>'=;<Vjir[Y$f_(Kb(le#;K'";# +K^:D?=J3qm!,3AT0ebJ2]-8V,;%["$r=3t.,Tt]2;#IruMY8R]oMI(Ii6KrY%_ts\gsh`ljGd!V +>mJ=X<]0#;E:bQt#))Wf?f9^pjQqQN!u2Rd@>+n1K8F$]cj$g(@PLkkXCVCM5YMc(9W0F%nLID1 +bgg\VAAgt2"E;a#BKC*q.C"/1%eiqtOpoaQA`IaR08*2t0+t^%6a'IRi,9>4DWqJ4%nkt?E]SD% +G:n#d:K=L^o"6VN(f46a\7<Jj[O"C#bboIH'!:\>nmrJ3BF\pQ8Th(>MKVI4`<5TA:rt:!&<f3* +oTI/:S+2@`!-7UqhesY))3KUiLu=5"Bl;kVCS8`sa':8(pMAd7J*9=:%K?G@+Alll0*d%Y<lFc4 +G37&FP.*R^<-T\<I!N*;KIjieQEle;QY\qQ6#_XC&Lu=!M@<A?0%%WYOi]ZYC>R6BjFG-'EA25T +j*%Yh-'BZR(Qg"Xdemqh^QG`1P^"h(Y/r7"d'@^M(Me>i_g:QlV)P\B2n9]jW<Ft='fWMe&j(L# +8=KYeHthbkUD28pZ>*6]QZ`$o_BC/#2_L=[+d"9o+R^-m$Sh%AZ0aQ%G6C1;=)XEc(75DYd>'^+ +[i.!Z%g"aRKNu@@BnJ_fkZ(n.N+!@/5s1$r5'8N2pbiS_XTdcj_&-=.3+"LCH?C?KL-gTJ[VGM+ +fIaU-Ksrc2DgN_%nDV7b/u\tTJt!CTP(`J_feCpgMq\iRUkM?8:sG2D6LcM7SUL!iMkgG3W2Np. +bf<clfX<IXps1s`U6aH_"o-D`,3X]S5-YL)N_^9[.0uR.f8SmS..\4CYlB]Mp7YUnUD:D#Q,,)+ +F%]Wg1Q[(kGhFLHTd]RNDBpAF3;SVXc'*/!/ZfEd(sL>X8<K<$HQ^C.))dQ]Xd'5%OmD7qBbZY3 +&jd2tN_LX=bp5d^,E7s!1?1h.K(M&p`,Z^INnKFK,F%t>r_N?SFY*MGaQt%5@?OS#3Z4qO'5f`b +Ei5=.7JXG&e/(i;+cV(A;e5Dsb?(2`DQ]Yh1#c6\q25c:n1c'+9+;A(),:WtQ&L\2:H?dqH2a>u +f8OG4TW(DEQfSC'H_=gYTDBM"3Y8!#Jt#1BT<!U=EcT-&+:WkV%^F(`R5CN364MX.,+;,tAL9Mm +=ek(+V)htD8a^]!h!oPA8GW.[aT&,@F<a=D%&c_*"R\YX`bR!hP0cn:9OXn%4s?65p65fQ$S6-; +B;ab8OX7D)M!Q\f&JN:8WfeBi<tC`0OfWUcCD0&lB4`[PDKU9EJ`a2])T=Xe$L0'IA/`'2Z(St& +_kr%3NRX'-HKhXC!]1h&1A\8[j=r`(lT;]p4Z2FW;qNXe6n-H1YB/q6F7$5WHLJ#GXAf,m1G7q' +YH1bm=1[:s'\>X]q5j35PXVqfgD<UA1J(d[BN.1n)](nOfKqWARE"qIKZm+Vn-:sVZfL(apt.UQ +VL\8nNIr-2qg;CSeWX48\tX.<=u0%j0tU3uTGs\/lUaJ^MHEY@hclmTHP3+*Y1QE`X;K!k)6k6< +h2Y_(2FPNd7o"5,?`hRc]jTs)9-M#\2hKK'gTgRh*"PU3S3E1T^f..%\Pf1Ah7Wk!Z*4V@l&W/4 +dBZ^&4hE?3Hj-iu4[.Pm]c32aPrZ[737mMK9\R4>DO\FG7mJ_P#(0<IHW)F^@D2K[6)JM?'0ioj +CcQkH[`]8_HsO3KkI2DfS9sQX)nJsna2asq^g+(NZjt(Q[..*d#/#-mi^h\4L->Bj:r(,mI!^T5 +b]d^s2_Sm6!sK3+4>Sk'4VKRSkeY8UMXI#1;,LE'JhE!%#uSA<N:X'E(Ve>+^Rr&T.D51tq-B<B +(*Of@:[#S&fkZl[o@!i&N#WEG>liG[*>_umU`qYCE2rL:-.1=.GSgV2,^S!h-D4)BL;b!+g[:"' +Hca58b'b6s"2*&3+K`Y"%/ChrEG*s(<)muGd(#r+!6R2"cFjgu0,8ujo4=(r\(d&CLs`;$4g%Zc +I?O')/\SVA6OAC\c]ZVZgHuC4QJ!TVfTMRXR,D^X#q=FSNXT4g/H`LLb,hJundMs7=+G)CDCIVb +Z)&R`9*n7bQde,O_pH+9aT1<r+PYlra=oG)WU?L$)G/rllla^&mbT&F\)qOA9'j8jV*'mdKAfgc +JQX0d7W"b2d6H!]&U/S4#-WC:f[.Udqp18.YH0\G^6%+ehSPkFk:#fHA[S62Re5k5QLV<FM#^2Z +?Gj`#L*!ih&[g*10:)b4,]]jJ<u0.:%Gn:&bMJ>DV:Ks!i.BbRKXYDion."A$[e[<g6g<nm18C( +N@OI@n@k#ph0JB1cjrd\mX4NdI9,L>2s&>+FI,;b(e#EX\+4%>#pLhUN4p^O%@TVSd(`4"H5;[t +-6YTPc_":83EOS1]C+TmcN9'h#fB(",lgZa'lWrMn00"=6ZJq3dle*5@dM;mS%j*8Ic+e-r;$/\ +N<uh0-XP9uhjeiA\bSBUqk&nXp,5`sZQl*/pqOH=QRUPrd.s<7rEmV?#Gho9kPS/Grg'`Ds.m`+ +p`Kdi$&mq`2[BU4@2Qr*1)PUsk&Y>UhK(YAbcln#R*7B+`!kf"6)<RM1RLnV(sn4R0H,or#4kuN +k[Bn%ATH66_BTjW).;rr(s$B!)+Yt71PsW!5Fd\jEX=1Vdm,rd`^:o&INp.#7VG-iJCn:.0\=N< +;dm?,@lB^N@f`)Hc!Rqb/2Gs3G0XYRS*fqhe^V`P17b7B&]iI7KXIB1AkRs$`b!"Tc-]Y-<`^7Z +?Hi*&.FJZS^ts/*,:q3aEk'o1e_OBW>%OOt9pL9kfP@M<:\OLgOg)uL3UVi\/b[QQR*A)VVJ'Tq +>&W=>9fS.V]!"H%NUaV4s'(?"h$r\=*M6BIfA(7uhO4B@k5mPZBLZJanj%8J%3pM:Ka&"?*f,hd +U'`cZ&/lDBU*H[-P,.?ZKU.@p"0hZ]W0lf.%+#PTYm`6a+>guTki=RZj$Z5=$rJG!%1Zl=gbZif +!jK3?.0O9%`pm#2&?AEVHC:Y0]+TfF:s)BgNiH!EVaARoE0(ScMOOerJXFJ!"lhsV)bSQZ_\*Dg +5f4Kd!uUVE53#2R\>Z_2dbH[3F&nH_;i9QR$ue&O[)UA+d^Y&W'^@BVcglV(%T@3#2G^@ZBJDV* +9+8a8iLL]$%8(AL6S'r<4?C$JXO0n\@gtJT9f#K;8jHghA270F#gb@sXi3Xk:/B&6UWf\Sgbb%D +9m^#F#hrES=",=ePY"GU`\UZu5ha*.,@u:+KQ#5SSkV+*T\IV0=CrEZ28kNE>%u&c1"u4Nh'C5i +@*C]l,9Z5)^EYFPG"f@1\J\B^;WDato-i<U9\*JHLK>=6E40!%A49\K.7@`p`9njU$R%GIRPI?b +38I-d(AM8U.(-kO3">(.4us*EBZ)rl$G^+*%!dkFK1I_7E&hQ6j1H4fCY[Aih%JYdJ^#XBb_r@- +r!"'u<Z\1nlH,lCKW[Am]<LW?^gn>LRcSOhlLi5/1MrU>hlr(B5ftf/j1aceC\rY/P`A9_n%A+! +0)Dg=]Dg2_h!Sec^2MIQmAsZ22^QE5RdeN\N$o8$j7.6+)pe.$Spe%MqQEY_%UkH=eb%Z&?5\Kg +T.@,<h%qrfCL&T9cZZu<#K$5kcTButr/UHloUTW=iXU@ObN*shB]_(G0?8X(C;/<0(l%p#^T[P[ +GhAa<^<a:\V8$YsoF7D,^%V>p1>2NB>2RO[5;s^#?eI%?:\jh"=9ee*HU]V1`#0<*ckqC^1Ep7p +2j9>4$l>]O-fq#/(;a*>!Kn`<##qTEFf>Y1W+.*(N8bS&BGhqG/5cMu2MP^t*[#,O6/eK:)cUM7 +aAa@8!K]7(:r['Aj<5\H@O![R54?Qq%>Up!QNfmuSrspK5DatD#;`U/f'$TQAR[8\;OZgE$\hdJ +Cu'_T!b"YT`G6uT9?!"7*5e7jH-U7(a)t_]PI[N"$2HhW'k3";BJq*`,!NsoY81-d]N_)74=@*B +`^;OAJe)!iP*md?"/'iIneGQ$\Ig4?<1,P9Q;g<8nE:^8,Rrja<@ucH+2\LeQ7Q'?(%BWkhaso1 +1?=G$M'S']3o#g2k#4rm_O2@c`L1bK?cpsm+r6%M>(j7%bpTU$MP@eIdLp%[@)AII$JV#mI/OlG +"#*(k<@"\0/V>`h%H/F@?H^.m!s$G&-g<'e$gE*nj.[##@sJMle=)WPb`o$<p]f.M)[;%2)+t:J +PG--S;&$B9eT>+d^t'Ao(&]B3,puA#@$qll\?"k5CQ&;0eqTBiADer@.]>ad_UF;ZcEXDu.4tkB +8pZptnNa$CcD$K=*Duth&VcCYIT/(!:/0OPWAQT.6%EWb8KC_='eD:DlEZ,$eQbF68ID9![b!l@ +".QY!\Q;B1jsWRs#8JBs#8Yt%aWP:-+N<+s9*J\DFb-HV.*5SL)dsj\40g$Kr4$KAA.o-!%PS#G +=Z[:*+@V]C$]R`UP1!k"?oas\JEIMSTYLT(dZgXdTIcP'97a]L,Y.rc"r10pLhn?GW(qhD$1t:? +P@7$5`8o^Rn89X0rJm[m**+MC)d?co]-,$3h7Jo\6YX0F$%hNHX33sc'pH7rMTal"_WWQDn@[A1 +dC>#Uf'_Lb9a[cTg^mj\DT0eN7G,BlKEb(eiA*%J#T-sRej\0S2,[lH_V11+K1jB$]Yqm`TTJ%@ +""8E3"glb:P-]1b2"iBVdB9$Nirmq#))`:N'aLHBKcjg\"ouXaSRtlYd1LH0NefY=Uhp[#**fq/ +68oP.]31hZX]>#ES(!fa(n,,[<9`PcTJLd&:lO/=lVnhc+O[O9Wop*tiE*%KR@-W[AB\+DI+PF! +^fgeI%]U/^=QN0n.LH1[<`r;muned2NlO?5_V(9>?oE,RYr!`6QXV,=5g79O#XK4)k5FNHeU +k%u]4aoS<FTg1f=iU3iNp80\aDT^[UO_OF]WjJk&K)"mFOUM4lde_&oF?1p[()a@jF"G=i]m9mJ +#"d=5LBe!(BL+ETLiquUJ_O>G(&3!Y>*/ut+N-#O[,Xt-F>6IYVAd?sEbjc[^h%5tAqO;k^B5$` +1aVe9i;J17K7<dLEMaB:WjE6oIfePk9V9j;?WsN!!=ZULP3GBpX0'4'b#PAXn@gEj;i=O;r-"h\ +:gUms%i6L2,cbn`&R)$g']QraN'ri[p6UVGk+%;SQi[H:co3H:]\L8Ve*IrLb5dZppQfhT%DQrG +';klCP>qq\e%)q>0CBCdBWbiBZDT/1SNP'aDQ^R?QWiP5=OuPYjk<p>am?]X38u_DL<ernT&@[0 +pJ+fGQ^Pfq#A^jgT#oo9]W,O9F1tYT=kbrTN.m#H\H>"dh0`?N%)'dqq'=sg9)k5[I1r4c1g/l7 +OZ`9lRPp=/O?n[6EhcXMQ[/pC/JNtKWW;4*q6!o1@$<?=<BYI,5C_\,%nc0q6\tFfXmd!\O7ce: +bl"9s34DM*qR&Y3qh;G34Ro]L^'KRWD`ki80/k1-CWlS#U_r@)S]g>!!dfsdhYlI!#="FIO-hZ& +/)mSU)@m5K\S.V@39#h%bI/AiN[QiO4,uQFO$E7&&,@A4l#e>2g`Fgo%3,g=oERXlm2*s`]drlT +&f(oq8\h*b^bcb51S)!C(lRp%4Lk^43B3*c2kqV@\f;Eii%dT3T>!%f&M+q))DF4Z(HTJQ5p;eY +BKJ;7-GDQ)_FQbJqp.U@pn])lK-S])"/<>A$OA8R^5M);#i%]Qlb&GQ]PH[ll%(s\p;+*q]S#uC +<$f?d*5[(X_T:k,A1g&F0*<IX49808:p%57H4DE4\!)NaC*8<O@j5Ej]-Krp$[S&,B!i"sU,s!^ +?noMb5)ZaY\$7rm@&h/uQG>$kWgQ18ij;$.1U[Eg#s,C]R]S=:>;S0>.`<PBN*_XR>o=PM\P-5H +b[;pM7Cc'?[fEY:$nIS<:mOD$2QL4&3@C1c;FY=VX(lMgM3kXPRAK^2Lg_qp")&#DBeTYH2eb7j +4AHQZj@<'A(8D+cKQot]fJ!A?a4XD2fTDP#I7I/]OIUid9S&HR`%sqC%qsZ,8e.T"X[5?^W5(DM +<-^oIOg@S?$Xg@[5W:TX6BjL-7oYP%]TA7X2b1DGaCsq^!&dC_IMEHK8NW/h;?jIKPcLL&QP3a_ +ZK\FBNIro(]e!X$i#=p82@MB-_RMK+W'$_DW4>HM#U"aCga#M(E^aM6^bC<A4,UP[,D15'"%gjt +:cs`AVDWV"N+66d30Qm,DA?ZBbD;$-JBfa1@@9raQI7(>n?"Xj2^J3/K?2jYS!93mVT]+s)^$(d +5jf]GP07gGb`LO;kVaQH;%*H+(K7$OSBV-J+jC*s9bbaT(s]Wj*6gf9RRi,O:p!GSbfm"H9n8q( +;fk^#3C*2gWd(VWo\(W"2@=fcbZHqEd1)6WP;d<5^?QaA,eeo8qN3k9/WA?)>U2W%NOQNn\/<Z- +W=^7oB;.M9!LZ?a"S3f3T:uV-)O0n$XS,&(*Xp4<&_hD'1TE%Jh6n<p'>TKa&[/VFX,80q3Ct@: +UkP(EUUC8*O1]EfOdA<j#D6QZ-i:0G#l@H)32e%c1Vi4<*=!hBSB#0'N)2;p;$7G0MGY%O[Ao`S +\SsD.A<((q#W2mgH"stg?r=;gd(6^h2&_T>V[Eh:2Ap$tBtY^L9/]=%TTTX?dL8kaP_6'@':Q/6 +"I.#2PfY.aN)25eI4`R2Q:Z&79=pG;*1?u/:e0c(;[Zt8d#jk1J^3L?`N,6PO^j$37CV&bMtK.G +W:U@KSOSDS(`?.DC>5d\XT>s7'a66\E#c4;:fB(LJ]Xb<,e;B?Rh[5@eC8>+<.@lg(P>^92TcCM +_dCqEEQZNN"#.E@<9PK^0@c4$TsG=SeKY*_#M"ofN\J>,W=t5]*`X[;O!s$C!<nFL)OI*S;uoQZ +BH!'\B9;+cR*`uT,$,r!8liJ#5OE;!iaillG,3J?J^%h.g[/&l<eCi`U_7aW'l##eDPoNi\=HN^ +'baLD9@bLK'Ze24`Cq+[J(37ga7Xoq9i0$4&H`D^<$H&+<5pN2)Qle4`-Qp$F[@r:lk]Y^e3sFr +/RHhW:D"3OQ5oE&'Zc)\R@1oTK3B&?#m#o4"'KJhe<'umRpqAO-4?B1;ls`ACQo-n7Nt]"d^_u7 +7A&)7&QH`>Rei;3.%/IWGbea:g6t.I&j;3<9A5N3g<)Gug.fm^T8;TTV.!c,c*F!7kCJ&\f,A7& +ZO>M>Ff!'a(2Q?B.$BYAYmK*<$(RI([80tSL!X+[`T=QEK&]_TQB\eLWL]hfQnaHURF2+NOX6XB +'bD2^)m*eAK7Jl=&Y*#&ckB5<Mg=rU;LT#h=C!2[^kaoOC7^&oUkrOMfrLTJHTnsVWO/MUP-)l4 +bDP-0SqDaST,BChrS9?-4qY"Y?7k2g\M&f,Jrs$l.$Warq)&Hs4G*ur/ZlXPe&2Q]4dY+`?Ms[\ +:pc*o+4ds,h\e:Jh9-+<1Ko,@&tg4N#W[_npC6&oh]pbhSZ8BCT@$c/<eFutSTJ$1X;6c#Mcgu^ +R5@b:K<r_Vg&-XcbaI$_"@YbTg\k'DX)6\!!81kF?b(90`TbogEn<Jg(>9HofWG<^=kcrc3]MZr +)C5u7(qRu$,(*4E&;Ed8"dP%e<+5c5c'BEW10e4R=fQpIlFNtN[pk1>(7MnoW9E*(-(H#$fUs0" +T`rfFq4Q9a>u3Hs.&o#!*o9V>'IA33CWP7M1u*p")1A%-"@UbL\mqRh;ftl@on?4B;</<ohrkpe +NX;MM:fd)9j>(IO-+bM7@"Sq,Q%cg1F:MfTH&MIuR:mIj/kb6TJH;n;V2`@4p/>+'Z,fh8_i<QH +IQ&_D$-#l@7G_1IR5@A3>H:akj^qZu7H<0H3bAk+.f-ORJUs"MR27(IMhj.'^,fkA*1&!c:-N8C +kaH+.Yi^qGW51;Wa^aJADV3NSP'Tu<+T\t[W@=<-AN8u^Yr%TODJ*1FA"Ytn5qZ-UQ:Cj#X0)M. +Ek11oTA0?rik5jY^+EUP)2TShPr[2?!N7Bb`*%VBQI+$>[YZE(53T=1hSCZm2LaJ1SMsSO[0Dc' +Xj=^6=Q(l`BdR.u6DFo8P_k[cg%Lcs<b(,Wh-]q6kogrNY++.YBB-7`!NSA9>1:o'eRB(Fe`E)g +SDo^,hcX>F[OAMN5,jl>0\l>]9AH9(+>nddHYV,nC?:[4.^pq0\6Ep7CF60PNW6.fENTL]frF/t +7Od'*]U+)#arUq&=dg5"I;#KH+ILF,Q90Z;]IIn(#sr*h4k$'f=-l`&it1M^1ef_:\Nha4=UqV$ +q))rFHkSB'&Z2<(VD-\3d;:$ZitF$IP:or`75Gt'kQWatL:p1Xgt^J7asq>_AEn#N0j[C4ln%c< +Mc\S14h_Z#PW?1'H83@??'lLIg1(AS:l#nS^rQ04mcHhQ<paddRp_X'"3<0j5'8Ih)A%5b%E#"g +^./8`k+/I^P=f19/#?H68eu,kmb[h%<r=88r?_k[aH$(Rk4e>U=V2i+n!1F\:B3FH1N4E@%"A@5 +RQ5>D0CW<HVAB[g/b"hL:%4bL"#,9_+Z"&g#]Uf[/T2/>5t0Z!!q?>$Dk?\DXoXC=nH0Cdh%::i +l9*u^A^WH4D^'0M?M^Q7YZfaFP4&^90.*IRr*&83E^7LrB-m(crj@9oE1'g4Km"!L,jqqaEu%?F +E5Is9nQ)dF(,e`bng*_hct$K?F-KPkRe>ZQ)fS5m"!BB8)Y%@_\Rpm/keK+J%lddS&Z?!kF<,5i +]mCquqLb$;:4O7o<pd0F#(b(c/P-`fhWEc+.2a"KDVc.#hW5n8O@R;3mVWs6$EDXn*9%;Kl?S*d +AfMI?QV7\io":io3X35e@%p+2p)(L:03]Wl+*LO1b2l]I\riDcNfGB+1g;,SNpAl<,Qh6`p;"3> +O%53]qhpd&pE[0XI).j]l$#DNNj/0cpuHVNj(eHiNgFgI180S-m-f^:$5s0A(NO_Mq2SkSnV;[V +Dfj4/R.k:S:o[Rj@,b+JQu5erMcqkC`G+aTRBZI<e]O8%a_6ge"-f07iq5b##3ODa#00L'C+dJ? +57Y)G1DBe!m_+.8i:*F0maHZVl<e,^+!@7HliG5_masEgqiVVP8<c(hO>-S.;*omWU8*L>HB_0' +<0hiD`G0n'_=+B"d?OL2S_]Jr%OECK.kk+4l$'AqJYqSqL9m''F7.g)K0VK%T(T;sD!mL<i7>sY +dKfZR1Z6X(O`k;RDnih1_oSA)N%E<*=LJ&WP$'?ooQg(krd(^[*db4=TPhsMYWM,V*K=s5V/7d\ +pX,,%dkF-4mhj+1?Qko^qN'3XMd$Q$Z8ZMflYQk1".=&tE<`[kmH;iO@IN3mMd$VU:i9.eP[E80 +k34:<]ngSDHH2n#Gf9^'k5NE$H-A^+n$%,^R7S3t<4I\NhsYn+QN%+]Q*0M,`oI4En?1;/(gqoE +4f3i;f_0qj#Q]V&$5]1*-8UdsggW%.%HhdM[)=((NJ(dBR*9%CK0g_Y(n=VZ1DgQGOEa@.*-X<1 +b`PH#^gpq18`RhTBt3#@3'kcp!?%9KAJraQVb-fB@mkma9I<+UfY]rk%Rroj3LoAL0V"(L6VUCo +@B<D.7jD`tenD;/L'AR/SBt]9g<Bh#&]i+=WXVWWC3@heBJp`%a%O,.pO0g3NA]`VK\]Rh8I"lj +0r2j23ZSVVEt#5[LVt$HZ"#KGE]''CZ^L1`XQ4(ORPVE94U4u;bi\6g$NB%`AJuDn]Bns5_K@gX +%&YZuhb?AcNbGf[8X.i$_fW@KOhm)_g=^=$g0XR4EQ7?g]c8c"j2PlsF1NCLI#GdKf%fh+>/'48 +/OS%E1sb[/!'AIE1tK"N9%H&=:)!9m#;C3n#f(,cL`=1J5i1ocOJE.%.BL])&>AK\CB_SK__BP. +0\Bdm6LMciqRQ*bV\c58_e0QMcm#Rs824>n+h'b[2]rPaUPSn@dF7Ora0HgqerM$_=uFG'TPTh. +:eN(V,0;%&0e;i?-Fo+g0^^cVN'jPn`9dnpMZuJOBGi)UE999V6^ZjoX0]l:N/!GbS2d089(]hL +_5\?9N^K7d4jU)eju9?Y)]g`<["B/dTN("\6`::3E9j5cGi1NWUG1S*L*;6fM,9Eloi6`V,C*)q +<>?&_#(n/=JrF3>(c#08;^rZD/Rf&B%IET(0oVlHkb'A5Uma3q_kJ!5gWh*M15r.e]J237V"na7 +[ntd7%4mn!Y)G;Y`p-i.ndBbMnp&U0hcJq;U*H#$jt^>Rc.dHW=&XC!?pf)DK46e*oU9#E[FR1` +\&sdf@/,p^0toVLauWJ=Xe/qR2Ehnb1(u6?(^CoQdQKZAp1$K8/A;oT^^QfT1?83fb;W00Pj&&S +dOkSZYHq!)P76J"jto,O&8'-lHIfS_<0WSDY\Z[Ec`?D+RaH!1UN62MihM[f0^Z8*jQGtV>7CmW +9>r*p9K3OO\aT\["R,;gMZ(HLHqa%In`[R_GshaZeuAp?]tuT:=q,n[%C;/;_VBHJg<f*UT"V*- +f9]?MWe#]>>e;5\4&E/V>s'mJ<F7t@FQ5$!\kqF2JA$2DW+6b?h:UIj=IsGb\p>%L3U1r4I*NSa +*q,1KVmHHPSbrE<_AgZH0;tJG?>"o[;'D)qnoo_AFuXnbfGb]`W#X\cF+<=OMP>(<c%?=bBa.RB +5c7_PPXmJ:O@_=:G4b*aMm,sLjnH?*grpJUd<]bj3Nc7$8.)"GIh-]:4_"j+6-GEtm(epMo%XY+ +,J&R0^c"MG6k#ZEY(l$]9Tb+-Cr6ip%SX]<ZR!g)_4jhLk0;=11i=7'E,H*H'JkM0l5YFqAVW[m +cb^7H(1Ndk,EGi:7VLGK<g'U5,j_,)V!?21-uEWJ3[h?XAe%ZtDh4!2$5,UCnYA!jO=L#[Xqs)& +=i:j[Z8)`nkW73f6W7"+L,kBXaQ/VK_+Np2k`N[;*KGAcPUf=1b.1^uj`k2t6l#ML[5/P/]B0MW +eFlDs?J#PAF#f"=oS4Zj!)YjfN00OS"(Y.I?+=?M6.?ar=g'L>HI7jcE&sDkcLZo]b(sd"@*TDk +f+c0d#16O6L1st=B*@7#:3<rI0Z:7i88"N-r3XOj.[eu>+Y?Si#LG`Z6);^EC(A6YUrgFkk3QrR +iNTOS!:oO9m,4#Knj*AGd[OLO0JCSY3i:LKi>!l)$oF[["uAS@U-q?Qe%Td")J6D;0ObKKAt.)7 +@MtRZ":Xb'&Z;jM5T,-ACSc,4<,.OnVOXf`Z-Y3f@-Sc0)j1])hI4aGm(CQ$_i&YXX-&`h7gWR7 +XL4pR,'q(1!tmht!5KF:&dW$hA6q)>jJpC<p:f/&-!(ikA^aOdpl#6;.KrAC'kqPrb0aHE`IP3q ++CA\))/1[G!4Z/ioOHfr"+mo>c)*ik#+<^kY]M`]agrTk9hNnjC;`,f64t7G\Q!rIgr[l!RR5PV +Z46*H><@`9(l@38G2\/LL?`;AD=]9aCMAP.b6hIG'8O.oq-pFOm.Hq26k#dK'fLS3\'JX6<^[dW +XeiRNDXui%.rB0gUPWiS*U-ho0"m!C"[[&hFurYI7"YPTJ8KqBPEsSg?lHgd_hei&;'`Eu\`I', +?$e=aoZ2d1!"Nuq*\$2?$5HBIE"%_k?WLRD"rp9JnSOgK7Bj%+]KAN<dSR1ADZSd[X^9f9gH2Q_ +)mB=uO\=69\E4JfA:q&)*^Q!E7qqhLLg;j<gUjo_/d%tpn5FA(.9$g#1$02`$pgGmbLp5[A\3_a +Mdsg;)94X@m(Ju7VHq?JScV*WZN)PJ?C*=mk@LR]SFWh6JD(J9"(`@<<oO[9!Rj/0I(PJCa>U`1 +6NgTK5D*g9FU&fK]U$@sNt4uA@iD0kV>BPle4"VDH$1sKFuW00]ti3dK"otP%B]dc=-m=L6H395 +^#`^iCPGG_9Rt?a6+^*+&XLJsQtr*IVCo1JK43HH]8`of@`t6u17(,PY*XYsfA!+C#&s3j-DV1W +>J)_h+NbYd)0@H]O$gQFA[6O$DCB,A:ILCHYp6s,O%i7fDN4?/(3"@+0[0ItI;d'6$q!m--YnH8 +m.t3T8Ht9/@NT7hrN"+?fRtN&<A7kkpa!l?HmU#;NUTg]hT"U/-Xq/4h8`IAn]t(!TlYZTZ%:%q +j=*>4g]5lCQHaac>802q*(@$O\25khmKp4]c'7lI%tjQ/0I"DO(IL@"#:5V"C[rB2n,:&\Z/n@f ++DKUZqTt583kd2Y6\suTHa24taFc%AB.U;pZlU"-ftu-rm0AO<hB'`RiiR/F25H?QGIU4+=)!L8 +g95s^2F4rbfp\68ZXbK'+I2C[]>`+-,V&^96og`"4<mH<7%FmkfNXR$h@8NpHS:G7C)9ska+9tL +R6R!+o_2,UnU'I(j!XD"dedSZ">NGC:-t<c@/I#KM2#:`p%l9D@iq+pII=T_M5EoDN!YW3ps&I2 +TuHq=E/_dXs+St.Dm!Dbgg`"sr<?..MerI?n3er%AB$MgL/ddh'_j9h?LQ2:n)su`lrr>e+[dAJ +$Ol)'GVGuV^1kkBY>-MX;SNU"Yg59X"]D8_h"K[iT$R&!`:QiAaBJ(VS>(*Y:i(f_5m>Vg3UhhY +WEff!B\uN6VGM19^hj"p<h5%=Y>8L5$!dgeb6Z58IF)5J6UEK2W2V2$pqZ)'!qa)/\:gMp#:YVB +L0G-<)HuBa>:%d%d,MQSnsJg7^G($?&0*M2iaWI##,#kGcA:Q*A?TaLU]l,S98;TNOQQc=Jh$IF +%Ofo$?jt55hP+JO9'd%i3._-Hj9cChC^B[<<pZbIorTPm6Tj!07'\98YAn<qmkQ47XVM"$gWpij +;09-aGV&/C`scD]EE48T=uM9+-;::\Jf%DUU@.?;C-jWkEM"07NXfM,]1)W%XN5U<ShqpmT#7ph +VX5>-d#E%>-"EPfC%2mfDRRs<+XJlJ+tFIEmKT[-+6LX[VS37mU89UNCs#kn5g0X7%j1(0+=j1g +&LL[1XKQC%,06Vi9A3$YDT$GLY@P)r.j?E_7Y.;B`Tof89/]F_P4FQP/>[)5c<;?@hB:g='CNmf +mG^_DGp_aD%RTgKU1GDZJh+-_$uW?[/%#358dqM5%J#3$L)`59\7AL'lVa>CA(`>M"P>@aaC&@) +CPl/5BRCq4/&N'dMlJ5!hPNQn%"c/<Y;IE-D_<g.,qg1V!b0/;Rk=dh00nkIln',2lPJtb0,"I= +dg-HT%&i]O0;:'Ant`j+'Xtm!?kVD1$$L(t3*9t=ap2em_Z;RtQ<pYd-S#nEB[&4=aYbTo^TQ_4 +6C&%D/6"Dn]^>SJX7QgQY;Gim%h+>&Bk1K<)_VkG2B_N'U7jR.)(lPi.F,FKVSab=aJ[Kfet?IV +ZN3,fff+n*Ift3HcOheYJL\P/J;Mu,0gK^;>\EW3%W\s+Y-og?pGrt">g)cUElgCNCH)a,d3WVp +o#M7.E?;tLLQ]>9kfO?J=J%2N-M,,3P;b6p=Z?KG&I.ANYmVoK:nWWF6gp%#!6$qHq(:YmN/N&l +1BBp<XX@&./(@oj:?]G^'eGSV6Bcg[P[?D79fJdu2UkW'bpsIHc=p6AV'@1@kdWWm"sWZL0FIjb +0-C_kQoX;%/X+-f&oR%a+N#tV(+^LT;NFLG+FGm[-KR`@K,H2V3kC6ZO,6IUo<_cp!@IHsa-.E= +!gc!Uo.^;!2.tcH9&.B?Rjq%P7AsCSFRr>XkrNnR#1ETM7S$kI6ml]ALL>$]'bhfH'2fM1/]AN# +oaEA\=#r+G3e\A4Pn[fHFZk=Go[:eiZn<mpa\[af-KnVA;VtPB;cVh#Ks%IWJeX7X[$..s/a1?# +j;TY0ErqDZ;K?Z6Z9[&@T\37)j1oM.Q*OM%$VLr!%W.jKD5>m9E(WoG:a2pf<N(l!GU5k5.M-p* +,%WUPb24IJ[V)=4Q/#]`4&\LCWF_7e'l:lCeQpU2goP!k[@Y0#%R:c'f9N7B`giL(aPI38hI,4T +BI]9**8aKc/'E/n;&k;2?XsWU',B_\#'XA#ZJk%00(p9<B-o.j4^-/h1pu+,/h5lKo&EXKN3O@) +dG86VPa?22B^qbWM5=l^^fQB8R^NK\Y$c_!UC;;d'(-?<MX^O$h!,ZH0`rK]F1F7>q*>C90+r2? +'HKtAml&bM@8W@EcZq'u9".\rnobg&ci%bAS?Cd\#.%$;LoXf?!";7@0XRNm5g)=Ki%,NqLhL$s +KfjtV&Qt949K+LFe)itkBUZ?W%Ra5]UI'X,@kHiS;o%X'A=55t<HN:&1(r\2dh?"0k$KkO-DOKd +pMcJdeOD(!-s(a85hSO2.ksrD*&,W1l3S(>Q$B[U[UOp=f6YQZ!D_7#FYNrc.@(Cm#S*+e.tDOi +o:%+O.t#sT84/4rQd%ZLjM19B=d%"=o$GX)5*eR0F:N@Qd`C+C7+k6&7sF\&PXU)S#2)<gKrRio +p\r`u9P_'<-mWY\\.GR2fJETpULkhWQ3i,`bC_c5J?li@ZfZK_T.TeK*\*4`0n'OU8MIYUG*.2L +<rA5-@i\HHgZ$2+iWp#!DegPC98]I8BA\MFb$0I@XoMuqJpW3Z"\^?9GW41XV5PcN=p@Bj-`4=U +_!^>U08IUeGo2!d?t*mg[tdh:`]0`3;3^X]['XF`'ub,`U3[7o[ej%--fURIX[7U>ac<5,1X&5t +:E1VNV!E+F-6qM(!dZ$-2F&(t<FEk'c(KTgnU-_@1)<?fG._e`b.BtYKXV,K7CG6)DaH]qd,UiW +2-tN.,UbHt/@eeCTZ'M*;N0:%?6]rmj/>ENPEph2?LA>NY&a^@F?2<fml.tHq19*CQQ0Tal8aqf +[^VX/1^<#jRF'WRf%60WQ9$Ud/.e[cbhJIZeOg2<hYGGg3El.fq)A*DH$Rf'fmS(4^4(@TQ_Z)> +`>Httd?o)XiE9fbA<WELlNOig>C"Vb&C;hI$_QLDRaEotVMV!3h45FoT:%p:Ug'?V20?hb#'r:O +AfbBtKWrGr-ah),1*r*N_J>o0,"uXGC>jHtH_s.+Xa.[Y;>[7or(USHN7rc?3b=41M5Q+$,$K2g +#4ud7&e=c)W#B3(.Ee_pMJl$H^f9#cHC,*`oJuIg7C[b6`FCIbPEYE^kd\Ho9C37/=,NFDf!5C? +Y-Cu*mKRq2s(8`a7a_L0lQJbO+klsO`RJPB?CtF/qi3+a7_>m&*]i>P6VlcL)D/6]]*2.n;IFF$ +>.-.Ye>1!=Yb9CKDtodTj=QGM!*N_R^h]@>"S9r1<uX10"rjss-pL;)7cU%bW%)?4$?Y4IFY!\a +R3b&T_lc>=.!m$(HO<kjnWarm3U>`^fjM!6:d3X5T^fM&>Fo&f)IM7(',$0L=_GBo0Q'`%p!/i6 +P-;NeRCm5jonbb>Ng67q\=%LPQ!;;@Bf\_qSE-0URT`_(H7*$Lb^_c]M]0fW;<s?27T4[-%T`X= +`Kjs=8m6S37lA=>8<P6f$XBGh_\rBiE]/rCd>,U%M<b8#U?@FS>;("tZTMZ6D_&f-!?&F3/W$d* +1Qdqrl8ajR]F<e@ppJ0NG^2gBaHWaE-i+8\iCsRG'jR5eD"#Lj1lmqob,l2qN"sIB/T<=VaecND +"JAq'RSY;;49G0rS9p.;Maa/m<Wi9oq.<#&GtDq(Qio][B?Vu>Y4k>"AI&$5G`7-H&'0.$F8I3/ +r413Um!kDBbj!$/)*WP_Tg38"MT>Q&GjaHsf97+Qe"!Rg>t'^#*RcRYJXKJeXW>l`o@*LiOhFt^ +rCO5a=c@2;/-c/'q(^?Ca)#TGb2#t?FZG5tqq#[<P8tNcj"8i/H;,Dmbqr/>C%"oi/.U[Q6[R@h +."bP\eVUuP]f[>\(K#tD]rb,Z21<c*#]JJ\EK7`FLF55^\Q.KdN8`HU\R"Q6*!H)!Xkeh>H^Z@4 +)``].qR1oiLsGjS8E^JMRe+&M_)\iWe?75u]O'Tj%iDkeg7h1#Mc+fqikiOl(MF<]UZ9g*:LI\" +*_,jP1;*G1jZYsUq,QP59B/C-k%]I+hCI:c/Xo1:A=Wd9=ILU_#$mH+,_r5UX)^$\Opom'A(Zc[ +V>#blgl0V=$s9o#64aSb+FPkRk-3PK-0O,uGAI"R2J4?d.9hBonXSIc--=&EN5t5AhWj%=//3]8 +,"[[/'((M![>5t)T'eV^[GZWoRB(LrV4#7Uj/$*";XjkZl-<;D%<[-:KV2tMbBNP2Kae<EkIFQB +Q%td-A!%SJNi36%5i@U!P$9#+><!?sD,5r7,k&m\Ls]#,39SrI<>CQmB.?!.;ChJkeWI-pq!%EC +5i[Y'RSh[@[DE7H+q:VFDGf8c]#=AO+1&>d=H(92q_-.$n/$\+M>KAO"-;T'hlob*^Y@j!rPB#3 +j_q&(kPc0rrr8trs6D^t!&ZJ@!CHC7K\Biq*6(?c!5r[u(dOaUBLF<e3JYO^E&]Bi'+5\:j)HKC +IP2'a).^#)XF`->174(k;nTP7(6G'2`Y4KUhKPA^-I[eCl7iN)(erL?XPP*IUWam'WatgQ6)RRp +1?h3pXDU"gB?*@gb-t3-:25PG$/Eu[[*b`@RrshSB!b7rpIb?miGuY6/Tj)D\B9(V:Q.4nkgXWb +O-kpi"*q91AiIh$@iY,g`b@FMc'$5*aCo-%8'M80H*1=+0^@TLK5nQeM_XIj-=\aZ@irq?%&87` +R)i\lR8.@N.@A%1j$C"6SmODs^$,+63M+HaM]]p_:"!<5KZ>1I?FKQG0\C2%ob`^n\hT-+of7t$ +++MEK)$[;8$p)+Z&7YaBE&3s!X\+fI!^US<J>#959FC_LCF[WuUTfCcr@fHI3e9ZYX-bpW,C@S9 +L&mbi!_!]!YV;#'8B-sM_2Md,`_foe2N4DMd\\AmW64d'_f3\i`JEG[0h7?ck7kmU@.#r`BLpc6 +3T7WG,g)7:cC0]oK";hSnjHtB7;]AMh)Bm(I3$NeXKsM%Week<`U?X[ZODI#od>J[PlF"q@h?L; +c9[P"(sQh:!&Do!i6!hcO#8'P^m(ZI2n(G.jPL.U4Zu2mK7N#>a=QEr8Ii-+#?B<T36F<6oOu?J +L*IuV9$h]gc88Ho4X"1_""R#<dr4?!Ae'["E]I3EFA5A2Fk&!XfG5KcB0K?r^,ej,OCB,5<1;#k +N?`Df2GnR5S1rS3D;N^;[55?r?'f]l1=S+<ShgQ\R,r`#of2"da:]2DF!>&+4,+/A&C)thK1];e +N(p/d0tsuZ+<$!5/f9k6_[\XDj5UEe)riS*A/O0sISlK>UViZC%(S97Q]:^3k.@P?P"%.MGt*Kn +BW7rPVeG%V_\cr'M`Ici3+1!nTN\Lt&]2b>_4V4sW78gU.;WddCr;@g3fRW=2Qi!!DGJ3Y:/[LF +W]=a4EFFK''JT#jm9VR;4>.#Y0t><K^lFFsp+lq54u/e4q1FqShDi5*\g*/lK:i[SLre$9@m<&5 +?2XsfK'reWRQ$7/Lh%G/S&D@qL1.Mcath2Y1sRo5rbaHgd99]jZ5G`JQqNq63Tf8e$V,TOm8$:# +ZKOs.h2TuEW#FUd[)arQ/W2i_abj3@nGH]8,NjK^"tVY\.50ok%UX;P-mU&mPQf;0)Ub!RiOI^* +OQ;hNMN7s[oh707k(-KInkd-\j-*<a"Tt]B>B!sf",7:'6TAdPMVVS_ern/61ak"CbbbV'GSs&O +22(IqC6ihe)3/r"3A@s"(rU6N$KsB(YmH121l>eZ_]M9TR<LBQLlK])AVI5A&\"VkiS3iU#7OHc +36(aQ,85\YDDiYm`unVlP6;+AfUA>ZM%.a<BKFPrn!sGm*KJ$H/TBD[1c6b?6X_KhYT,_M6qHF8 +)FSHRU-Fl1*(8k0=q8m@'>0FZHVZAeA+<+V)X&//LhfVI6(letosG:g=WATe<[#'*0ZKL<A8>$O +PeAgt%RI2,1MNL:]ua>)=5:SKiQsWtA[kf4C]0X,.V:OD57\d6Yma>(Zl=Pd)bco@9S&Hb'%C8C +'EU4\VIEWL@TLUg87`:)Yk/hY8=?$M=BrYcL:t^d4@9G883sD*`6okoT44mn!O:t:=p.Q5+=!LU +,'QkLk<&i8%A+.F)DV'a)Zs2V%j@1hd>AuX>+H=u1k(OTp"F:4,l&Vo#*..+M@Aa7$$=Y32Ub.n +$t,&C<D^pT#<I,r8:qVOZiE$a=s4"u!-"[:IZ)Q6@%Wk#8Y;]nVG_/k6:6H0V6pr94A]koB^K6/ +FSW%9f-NXdQ"^G>.^fPCf/s/3Ba2u-Nmb=;;ePJrU"$q%:?@:0f><P[NDqae=5FkR!-\imH?'*+ +ARcH`9OJ:RZ7<lV_]nH[DtWBP34QXf6%i@2erDUIpEJ\Cl]m4jr7Jq+Y.O%KOUP0N!7']`DC6P\ +Y=lSe_::7;Pr5%<pC1fS[NL^3Q,7P,7bcTAcjXYXd#ErPpqj(D%.3&mEU/d(="CKmQR1+i.AE;; +qhDX6gJ>7o/U&d8'"4E<hQ#P]3]g1'e_BRL3"2@;(lKI7g%/3n2B4NB(+4Wp>6#*'8An92pDfP5 +UL8W&KnfIchX)m+N"'IP`_8S><3%CbEM^BS4'N[HmJJ,)%FC4[apbJhEiDQr)D_"]`E`>L/"krY +0h,!B-/^H^0dW=Bl'C*DQ8?#Nf-2CuWtC0HnU#r=1drU84IE3N:Ljp:#9`@PjPi+aNkZ^*XF$@V +3+J:kE#UP0adJ\"@r0D`L,PppRke;fcM<\dXL6b"_ffb8%YujOXT+iYcstF+'#gZZN5ksrN$nH( +8*LT<TiZSRD)jlRBo"8F'kGol@+[7u_!%H_1o3G[jcA@LRk+TPJ_$#`;^/(N1QIA@%_-].Wpk!- +>E0u9(8#)?XB00^FfnJW<PZj[!`,n@5KX1!L$_StU,L))`peFH6ht`+*0=UO(tVGqXO4Hnk/Cm. +ZT)Z(Js83SN^ij-:q"'qc1dNogUk'?L-0Chgs2J=H,h%[:(+cmLBl;_lTOMc#XMmn/Pj#^)Xo+B +;;m]^4iMR+Taj9-T6&p]:WZ.[Aq(5L:1)/^8gJH.?bIHk1EsKD/k&ND("?S/AdJn\o>GF3%I#\0 +N4g@E]Y2^<Md-Z_Fr>9D'r\Y4b/pd)\[K4l`jQRmMsQdiCs5M93N$D-dBaV!7)-a5PL;=bP'I:q +A0'00)4jY\V]>3I)4@ie81hpB3_oaDUVY*5k<.u'64r1Ob`a]jKGo*]""L)Ii:2a\L@0K=5.K45 +%)-\HL0l=kfP7PE$#ap3,.m(rA2<a_TiRIL`JhJP%.qI_ee,^?8H$lH`f8aiqZ`8R/Nk'F_5&oi +++P5[`#AFpVrN-\BZ!#>`VI85lMA84lTq/H0o?)$qnQmErZW^mIq/#H5G-4pBB]2+Vpci>RJQo) +,lW7Jp"FV<r;V]L(goCcX8T`rE<DWeN4@*/$DT/IM]PIl*ap'SETIg95WM.#0JFFUQoUajjen7' +!N?o$i&!O"fUo5W]<F#Ba]9&7UBlr""!dsN*"j-8GGCT@5u\UVGa?0uP!PSL-7fflqLtN`#E;CJ +-s/N_C>p,cOX9o1*q=uWK9W!5"$&Im^qcnZ>J_KXAY7I(""K-k*%ml)42SQ'^rum)_6Xd6oHtb! +\r\\")(QEUh``#?'!hIp6lD>1jr#!R*_VDYOZSoV0YlC^&Y^J3bW?MQ+Z\;S`)/[SS+B$6G<V-5 +7"c@;K)A#M2`b2;197$1H4pC+64/k8P\J[#@\3ua<(/'4U%,D,FB(^3<l>\P&KiesS5PH9XZX+R +`Rm'[d(GJ$?\fD(MHWKfUfA!@>fC_,RsBdfH&3;.7_8K&L_N-:6!&[POs:n\$0r?bH%H]/5ohdB +YXs6lr&_q];N^jJU,X"0oQIH3$]Whk8!J',]QY%,]HXj(`>R,\.3"MO"p8#JQ$=:dN.D(YJcd9N +/R,VQ)9NAH5p$^R7N&0>1lF$@s!T@F7,_A`'Qlf(>f9;P!J'r:.3UV>N\NXXaYY1UE#K7?5tQr[ +%4_1>g)1OF7[7LdTR0n&Tgm-[KcLfBaakT;.`I]%1cW&OSnU()+cE`1M47b:b*u1rH`].>Ue8cQ +K,MMGK.FaeRh?>WQZtYTM-#LLZP"+?K6d)=JK(l9^D&M+8MPE-j&<AN#GVEe`:4S+K+&`m(sE+\ +RXdF$bT`7=50O/@_Cuq@r/h)&?%[HGNBs/ZF&NlkBsgpU$35aG0q&-U]FklUVR4'g)+T7j^^Dk? +8Wt.q]V3QFf?C4h9c?47*0X+(b=o`o\]idC+nE.J9S5UL$'C%H"DXYLk!kd0^tMr$ia0UQMb=0f +_"<jJ]:>_EjM_HNYRBF8l'I2ln&lS/K,b1n&XSMKjF_--S)j0n0JS_QlVCrh0o:Y2Pk<*<nXLFV +][Zn2Zh$u_7Piip]@f?nU_+p#7gt(Q3NJLSJB1.?#+3iUO"eX;,mM<c,uDZ&d"J/?li,47W\`Rn +&ZeqU)7MABXdcF*%V^l`@+(R0@kpaD5XFAE>)3UYQ@hRCO$r>#CRB[*9>E6L&esf?]C4%P6puGL +':>38<(a_9:f!1@cAY.Zqk?K:UU]f]8(]d59d2*I$A0`dQ<?qLD'm^s2@fOQdp2E'Yc1Fa,>m[" +;lQ$'D*1^1PnZ)>;jBQcl&Sd,`l9l&<"/P`Ug2Bi0ZFsC<+SD9D*uY9lbV*<7dTG(6oi^1PUh^T +(NAA33HmT4BHuV9P$>jeJAMtekg`+"NbqZ."3!Y39iXaMb&Ou-XW""3=uqpS<J=QtOQZ_1:fY(g +Qaui8fJ-DY>?4^5-66;&+iMp==Ol5248iGc[:e%U0TD?4eeM@K-#HZtAV$+dV'+EA_t,E]KVp&P +^)_BL#m;RiFos^W`-lj]Yq:U,SsNo(VYY80))MFQG"0)Sc6[_Tg+S'm%BH777h@F#HaYu!jb'Kk +`QW)LYW.r.N4?,n^0%!Jm>BHI&d'.t%DmC^_L!g>c3S4;WZ$B3_QB6&QjpjXVhD:T)P4u$GhKa" +=^m?5[$o\=U+$/+83NND1s&krQWdB1!Mbs\)'Po0V:p1>]5=:B<LQKRVN&a"X%42^d+f4*\rWtt +fW6E_I2E&W4Apisg*(Wl`0R`8[*=Hp3G"8(`0j3F*Qd97+lo:j=;uh0&R0)a1-cd_9bTAu3Et#L +9&[25<P;$.Yu"-"77FZ.5VpS[2hS3?>f]#8MNLPo\UtmC.VdekNR7iM]sZfn^4k+XYu3Gbd*+d* +9Nb7,mEjZSe2=qQ:%KA+`Jju<c7WiVK/M$#$AZkPW<:)g9ArUi/\Old]>?@(?DKt,#bT@l4Gd1p +SMbm;Xh#Mbb215`?0XVljgNG!CJFXugQUlQXAgR13Y?$C5o'6K7G4%N(gkGkSmWMpq00_=.RO5s +\?XKuAATI8,Wku(*2"4gi67-`$J<=2@%?7P7$40RC5g5f[%&,]bp#!VWA*<a3s*ktHf;5%dPaWN +@.Ua-NJXcd!B@GaMi.M<8_'-%\ZPGq3R/TH,6".+]UE4g@Ii[hi/th/rYKA7JWp7>8pOm#+G60R +2ac!%[MC!er3oC=^);LZ]V1OKb1h2?@j@G'HTAU?`JIb*^6(^B6WakR1uigA^6#$PO[fq7fAB1O +RZ'0Y;j'\np_q%=\@+_VBrj'*7#SlROs/A]l2cm`(k\V%U6.')a=tCdN/_OP"47j@=uJY>9tbq5 +K3JM_rPIW8UB=gkYP9*[Q;ds#jJr2Vj??`-H;9pE1-?h@Ut/ke1lR')<Cm&44s"/s?=(0[@V(4R +aAu>uWS,A8Fdbd,jE]ILPdm7O8fAlsjL[#*.+<aG0Z?G=T_hYOA9TjIT?:P&AB[s`$q"WiGQWRs +(F&gq.'o5"Gi[VLaNF>sc@9IL0]m7Cj3Y+?J]SPR]OR21jP3KGXGl9,Os-+]:8A?0FZH`pq*#as +b,_P3?&#krSc_-G"0J+sC7^beP,uO!X9G:I0H<)jP:,U=X%Fc(G+;_sOkRC=5;n^/V1,JbR]OB0 +kH_J.`fI4<Zt]H,C"iooU:Vq.SDJtO[7u7_Ye;_3@gJ7U7-:WgrWk*#1;"cE%=BfFIO!iEo\s-n +CI5Vl.fJ>i0S@Xml[+qjZd>,2Fh"lnQRPN<ep/DX^[)#KllNm[7[/nc9$2P3VLH:rRrb8=/YK4u +Q$a7R4E+_V")Qg1@@^=1jD(0DIbT485;XYm#oT/!p)pHaU-kn,WZ@cE*(8rBTXa^E41T.mP&8+` +lpfh@3YB0[4%Spu!Lk7BYWU_4]*gVgBVPO2BG[g+K/?u4keeYJ%dW/C/'SpaDWJ$fM4'j;Jr3jP +;$QGn@C>O[o/aglZ?`j;7e]B+bINq"7SP8Y]p%o\90+%d\pQLk`+7gpC_;>2dbb$K^-lk6F9A,s +&NPS`4sh%<'l;rKE&ko(k0TJBST&7'1`9ll461?tc__KG"0gc&YbcuYa1P=kmroPt<DsBg'q\2u +emB85BKK7e'pMtR'SNd[V&[9JiiWLW5^DJ%'tit.pa06E'eh=tY"Ri,ks1:1_4)oM4I"Z^E2&4= +n5D$pcS&;J9@Dlq=D:P%-NqkJkZ\iK=p#d.ml1ar,sl)C_Z1XH-;247$a)1>E#G#X\T[=b8>NaV +?n<jbMj9BZ6m'&p&9F-+X>s/m*K'/UPrV*i@IT+UdIaO-1$7bAf)&$60FKdY1@I,k8`TJ)+nI>d +o4d:XaV"2d'LaF('X(ViLG^:3.e>k)oK"S*p(Xb8U3/FQ-Pc.B2_^6UjR_%:p-F6%[OQFDrSl^5 +TO@puf2>E_EH]-iG1QV1Z*",Ql]E8I;Rd_;T6'^$s&-=GSkjE7hfe"oC,pcg/O&b<(u(0[EDl/q +36tH(>168CI:8=P=I.?O[s\]8W"E0&!K!7i?o%Lu![j:i%6HS6=L/jp(lh`G-]o#NT8"LU+k&cq +<&JQO?;>^m"`o[9G4C@2L!n/?gf\eKq/,cqIo/nApG(#7p38N&>g^bSR,>2OB;\TZ110c_6ue^8 +3q&nb_on'qW/EN>4G^Ct-`3,G&Q0Si-I7)c=M=N,P@-mXHQA-o[mnZ*f/-*+kVi$/BpBOseMf\b +S$0?iV%pSepm\J!,@8j5'6E7_<78;KH]Y*`3OoDp1;BtCPM*`lS@!ZME'l7*^TkQaRrc9B_WM$c +JYtAQU*9GDAS8`+5?Go8l+hFLR;]9Yoe3aos20$u`:73dGB[Dg^U)=kH+IWgArjWj\2)kP.VsAt +&U1c#\BP>ZhX7nA$<hHW4W92`H=C2fIScm1H>c5(JL3;9o@g.P4IK?Khtu-:+s!f>\XI^9nPT7X +=e`5!Qh5#od=4[ZBj-+QJ$oe$lM5[T%>847T\.6k(S)!>PEF57AN(S;-RaLq@fh5l"qZSi1*$oc +),<YbH'0`r)@f6!_a1rj@5f(KZKP0"'O`i?`+<`+(>WS'?#JJAf<8TH"CG=hND73202<<!/8o +LbLV&BG5];\o0TecKCsKh0-P1(rkMifrW3>@@dlt(/q?HT4!4T7aqO>c<t0;Sn)HN@ALq3)@e6? +Z[MQHF#fXt7jA>ehiu8#YgbtG)Ynh@))<'XSl[Qg3?6:"%-Dlf'Je4Y@l\/=9:EcR1V6A/4N.jf +QuKDuacpkSLR@%T1M4YE"<1h/>7ONRQt8+DNm]J=K1@.B:52,U`#j;:1)Wj,*['3ukNj)2&>PkR +@Q!b!iT>3\X%GE+$/!,T3<Lf,3=Va^eqL&T$f(l`iu$A%ZYe'*hEO@W\hfC=B^2,m@=Vnt%1Rj9 +oSqlm.&AWAROYOr@?b=)].1rmbIg,kE=t/9R+sW\BTU6s+@@j,(rqGWgcCFo'21DFl&15qL&oB> +]tEBMf[11]bF4t1_7O=]`QGNY)@#cN1=RS+1sR'L1F'E[bfe(D1J&f>i]<fIF&K'Jn1=;t]7VNc +1(5Cpd4bdN9F<chj(hc[L*=1*&u"?QlS_6@J7(*-.sgbAL9Vln3RDH85T-Chi6m=bNXB,)"p)#Y +KT.[QkV0krS7!0BFh@`\=,DIEVi?<_mh;Bn!6cEb<QN=[$neT`26u6o-@nW0]%(6CFkk/V,*pkO +(p,Z7f5THhD96Wi[l@p^h,b'CEs?YOa]r+dA]JWE!L-#S96)5")))mPdbg%:Gj[;GUCrC9gZ)$: +Lgj#16O[GM8B49]/'^)-4Uc#Bk2R;GD2R8HHVl0';&f+eN2(a.3=UTHo9A9$RTEa%\\%ns\67r^ +)66cURQ9361h7T`DurA(N<:TIM@SnoC)kJc:8ZtYUG<RbCDtd7<t5=_df[E?>c9@2eSsc-YUg_# +1$Ha6'93ReHk;*/Ra>q.,E+&,WslLUZET'./FJNgdKG8V8AVHXb9Ct?h8$/oX<*%Somjq_4dGeY +\b$X`Hd^Z7#>iTd<]-"N=d3+-,6o4"?)o/Z..B8QLg/r.c-+1>;Bqab`SU@UV\S2>SibfPE;iu$ +i=-i[iT&0h;CCY'^50taqp7`,m<HN$UYUmH9=CQ!,8--cE:$Klp]gi'PJ`E5\DI,c$fjh@eVuYW +p8SecW^[A=jH1a3)V#F/.h<n[L@EW8>,d0ilW&):2SpILTJ:Xe<XXX^']MJj)aZiV%lPQmUl6L* +<0,8H6:`g<+]KIBXbi_g@tb>VA/$fGQ4q*0.14o6CHc]krAk4$$)#KkM"#MKT-3A+c4FfH5h2[J +=GI@F1`V43<;FG_M&)YlAHlkfcmuDl<""7?M4r:Q1R3,&$#)_V!Jla_;oB+I$\TZM;"U_0jA=@# +1QZ/g6P2$'GEW"d>=<Ku8D+J`:BHI`On(fX0]!\-BR#Rn+l`Z[?:`lhA6pD")MTL..K_`R4@eAR +b5rV6hHZ:&BCIlRK;ASi1(GO_pbF-d\=09=-Zj>o0Er^/0ZlN#%.QW`[;a:JdO`\3'1Q`F=$#B= +(hITd=hC&XSjHu*"pP^K3R3^q%%>OPSYV(5cDfJV8>%_K,jp$)M<Qs2]^_S(;84O[mm&5<r16jG +4[>8167<QW=_FUf3SG91)Q_sQLfD$>8R!mufch\ma[RY033L\d_)Q#A*2RCG,7dqq"u6HF/$o## +N1p;<[((e<@-W=T;@G/YL7-J31kcC]Fp@D/LB`Of9A.FTUO\:Z"s@a3C2)?1-ii4*M43\o1YFnq +Y,I'gEEDF6:SfL6iW^.3:!ZNgV2PbFPko9IgO3tBY)]-_g4Wd"%<SMTrPQ9K%LsD5F`^B@=p&Ci +JrH_K=3e0-f_8iJh453^Y2*`],5Vcn_$kF$)TJJ/58J(IXBb&mdm\lqC2D)$=jB-_LNaASg2)6C +dW,9@F%JYBqh$,ZfJXbX3FR^d3C=SpS#I.H%$[m,[`*N_S@$"udhTbE$$?]Ndi(uH-o>u=9eOKI +hUHHdH+<DB*8N"AVictV%J=uS*@Lehkui9kY.aj>Pg6D7P>++ih!U@.^)BcRcTIQ*\D!aZ==pKu +-H&13aN@%pd1gYO_2t-p;q$HA`YlKmEXuSlbn&i,+hgt5S@814MX0XqD>6Er\emGU'=.8I2g#W] +8JR4^4#KGmKbakSbdS1I_LKYXOX]'P@]tuX81R]_,^\lNP%%1@\)Ae_Cc"sdfQ0]p>p?-sYE?mE +BZp.P2n_0JC(4)'<hZ!5W<FRte?2D7%fi:uVrN,gd[\5Ym8)hg,#86BL/nM7q`/*sLXbfPM5fu! +Pf_EU,@GY?cU8`orA8IDALu<A4>AVQ,:Dr+gn!l.9bBnP>R7t5%]p=60+s-[)?-tRbr?UG?#m?9 +A>".c?E35fJ/`YCG[ZOjSN+u6^@dnGS<Zbb?6a\8<(/[A(cWLf<H#;`3n;[)^`2\:2B+CmYB\+F +8)VjPQ$6nUSqa7QBL'de[`7k^S'u?gkMR48AB!DE?Y.TTS[J5.qh"[kQZ)gY_I5A2g/Msc\"o(t +GSkMX3Ve>[rU\$.OCQkRr@Df;D8CC0&(5iD@VP12AQsVYj3=nJ+Pl"sXBhW'o:Eo8'ITl(:a9t` +X%/?$Wr)r2C?MEpI^!^FVn+UVjR+C-36&kFqN!2mc!-p1E8;r.1H+L95?W+C!5WqR@HaQ;i.iSF +c:V^0lQ*3dp@,pt.+I?2!7I'Nlip":FIUh0Wp":-;QV8^*ju:[g'12.O])bA%=RDS-B1.$f8BAg +)F'>S4^i7+imlVo;i9sKe]5>e0&di!P_46@P74Ir`\"_*K2'+FS=7_-\kLJA`]jN_bj1?Zf+57- +ZanK+Q-oU'eGJnI9:V;I=hrABr6LA\aD=&"#o5C8J$&<p\7#l`jr&BhQ:WB+1=Ijo!b-a8^q*Dm +GB/e9WEl]r#U`3kiPC_4oH]`32#h&^`/6#t.;8`k<+2nF#%5I!@,V,><8UFphOn9XO'_qM/HRO[ +HA$fXDtN):0`ai34"WG@0L@+IT`U;mej/.pA0g*1o)bRp"cusuB@(&RE7+,bW"3R?CU3!;7OBM@ +[Y"A>_!(EC&;uMh[ECm;/p)694UGmhnE#*-/LLjc(0N.EG0_:Piqdm$E/N#(mqDk1E57<$Y0VgR +$u.g39touSdg0eR%L'5fXo.J,QI53cjUgq0D*CQbng@gc:(89!"4Z(U@+-7`jm$rdE<tUP(A;MB +5Z&1+V'QN[Ba:[=#(m[$T^!$,*-!3&%,fpaK89qU3tq-N%?X-SWoUol3=rG\\<0u-L>N^T*u8ia +D/i1t&HYS$K,67D's68fO)5_2BbunJ6*Z"Fi9VrSdNJ_E(p!95BUV)(QDeOO)\F?4nZ<]uMLk8g +[:I/p&Y=':aVsWd;$j*s8Xg[hSK2F1;*\q%Z/6Qem2_%^Cl/:;jZst"$D3I0*5Yll+PN6VBTn)" +%ak[m+PS"gX!'4B+`[YZ6Id5eng(Lj#-KTsbPWXkOVuA7%tXr;aTT'_-LXPf^+l.VlD4'FC^_Y> +4)19I._@"l^EH!%X%Kn'Wm;d)>pb5nR'LV2b,228)]Cub$AVdn_qmIcQJSJ##*LV.&%'f&,!=(E +ULt)'.r\rE-3a_<.q]91#8IFg@k$uMN:P,=$OfEmnL78?/VCA)o%jR9`cVBlr$MDaCubenDJ:jC +kKQ"17<5[]<`XpH)G<Ir;,!g:a"29MgLH$DP9_o;,o\?81,Bb#^uRI2*kt*e1SQ3U0rY^\.l<GR +YDR;]"<01;SG*PiZ\L[^9BRt+3<6t=2T#s)AGkQk>j!Ua[:>+RKSGl#IR!s?.?V_+81cgc$k77j +=6nU#_pLLm<jjY%$]:o4e"&LP64Crf%aXYg-#O4>kk27$%Z:TU%65q3'XULN3g+*\&]H_N_Ir-H +"or&aiXl#Am-Je$r%aRG%l-?/hY]0_[7!=d#mC/^^aG?g*%N::mhlLES-L:`650hr"7C:B_[2PC +<f&+ejV%uB&KG=J+nSI*UjuGl$oW/-7)QH1&_pIG@mb1Q%kib5`Nq(.JNlE;09V;A!u")<m]#c8 +-h"T7J6r.'%jAa\$o5J";K+Q]#tY2i%CE$*[$<#eNdPBA%cG9V#C9BXaF7_Bf4b/R'V<tEP2(k^ +%e!GMmS\NjrksMj87K8-jnDN1VK#T(5r*Wje*ou+DRRg^bX3d6"7.X=s!`%g;"?ZUcS7f6PtC+R +;WM4Lo[N2)8pkao+^uE"5jC%Z=I+'aT^&tU<7j4kn<9,>+j:'N71,>ga[%dTS5-^B890E?G(^$J +-^4R3DglZdTSdlBKCj\R+D<^!B30\c=4NOl.'-I*-V<uj=1+3M<NM.bf)<aif@0CoEem6/O?XHZ +>f0WK#!OQSE-#Jtga"0PQ-T%oB.l-#<NJ/uT\tF=]K77^$&F`k$"@Vj>=%r+@DX6s"9:$q:aRa7 ++DG%S<HhP&r]<"[?u&&9[O#>^a''62KD%*/2BYb\%pq1a<MQ$k/LmbXIYG1_FeUNr@NB$WLK*7\ +Agkc5CKC72[8jY^A@=F)Q6Tru?jp%XBMd)iQ3CdLO<Y'9?$0?XPg&n<.'2!9KYZ;Nece0(L-.jV +NKp8Rp(40g[`h&cCdi,TG&B'%>&a2g@9$Kha=N8UV-DK%KJYtrG3k$@UM#\8KJo,>`A_MJ@qaFj +@VJr=oqQL"*GP5.EJ[n'"^aGm<(`n7=`bhrf/?\e4&`FF5P&H&1MKYJ6ZWtP#9t"6f/n,LKi3"E +$VP$:K0)<c)T)Qm5pBTVXK,?5*'duG0&iTfF8n@q`HAD:%.7%*F8jN;Ra>S5$rm6iQ)?7mED8^h +%F&^<.0P+e,'<nU9!ZeJBBIlA9I=/keKrKg_\Naq50Y^9"lSoGXm0o8Z6:%L-Ihb$FRG?CnKl45 +2_"PO2s<kaAl(GNGL(DZ=-,@knTk=VH:NuSO3#`oh@DHA_j8MHD0d?B2)I#k%%ps[<!(^-kCZ]. +8t]^V=>`@?b<YG.KG.Ik"<3#]2%q\l&NF!LPX\a<%>;);3bMXJfP(^H)Y*F1<Od`]NE"ZbBMqd) +-4LI:`fl$S7<MQH7p%?2lVVgoBT6,.$Q!A9=Hl@o?%Yt7,qg`7pd'?Q#fZR3:'j8BL%Z$9m+@\2 +:Ial(cE0Cb5pU?Hi5WWjT^sJZMDL(iKEO,X_ei$,ljSL_OPnNK_B2G;E2n\[Ku>j4)'N7$l&gMD +96@c/'WmKSYY,i_Pa&/3ffbT2\InX=8m,?a;L#:21+OJdPF6&VR;+g(LR/lCQUB#\R;YZ=_XG#a +QoU8fU9Y3IJ!jafCSs*=\T9Mc;F<j@:rk7^6Rk5:Xp1e$P(\91fj@=.W!mp=P(YU/JEGe#101'h +<r!8_f@r3n8k&3$$J?7*fGLrX6]g;]F?#nS`bPi((0Y+nT#L7*),s2\.O#K\-?;%;R2C/oUS;;+ +KDI'WR1:K]fPaY6T.\rKg-XN!SWSP(>%2!8K&rSa,Gfq9,!ap@7"M2`@?C=dm@%i$H?#*]=FJUU +#<G"I%YSXX/<k%7RP)F@c;P^m8i:[00C:'=!tC6N8u(&-F;SLTb]F@?Z\))-3THlg^s[/!12mm* +ar!dDmiZCj5^Y<6K-Er1<,S0RK7pi%*dL6tM@ur#o-5C",B\(1+N^ic2j?ArYi89+`K)2Sh1aHZ +:tW4@g>f5fiBtn%,;^X*><.YL06XNAD#3h$b!3(3Za,feNoYa['CUj'k9Dt.[J8!.R*gfNCdgZ3 +rfAXu5i7:lEL_B)=.0GDWtDKo1kHO"N[Y\f3l!Ahi)Fa9KGTc>2?'%\L(1Ws@UO,LgTEfj0n=Un +.<<fC3(nQaNKmS3H+5Y^8k++L`LM"tlIo0i\#cg93K!Fg[9/!F5jP`[n1Ik%51D*A48k!M0XHbN +KEN%"V=J2F)4fpAUuDcKK).8gc6S&CIA>3,QjlQ9jtNfMAK%d-$Eq</7"a8O_%#HZ*(o[45K!pq +LZ_l;(eV1$?]5/<TKI0&S.W,,]>NRmT"H$q>V2UPEMM/R(X0H!QsGDC%QKeE"lT%l#h_k^VUidM +9,+:Wm:!W$&P@:KgSm2*G][g":J,)gPN?N`B2QoVcV,J%bCu"EoYHs;`*[oBMa_?P*7^IImY4a7 +b*D"Y,VCfnVFIk.cm[?FoVY#*Xiqp)%OT(M`3lOWRnA)W%)Cl.0#+U0b\-RF%UD/pI,8L48KAf8 +\bb^%`Bi$aZdlZ1#(9q/l)d0XC(-WBe@#=)=4gk<J.GBmHa<gu38iD`hq1;^fJr0]^iEKSKW":I +@/Z_A/4eQKbR[hO:R6AVTPrRF"]/Kp2h:Oj>[Je)oK<IS:Q.NTMHe:S`oB01akbpqMcTFsWDZr, +<f(,="X#]ie_HuEd+ff%,p@q0X%hFR,eTkJQZ(g#;Eq[-W.#F+?6]]BG!Xooil!$-I+U6h"6.Om +Jn/p&4s@&W\m7KB9169_a!aVf6;e6NJ;i[R,_2[S8AbYliY\["^246ceR/GHL.%$Y`Z0/tILY.d +0!,?W*OFbP[`Wef`$IY)"a:((\WXGMeJ(,;*5ZI%dkBLa-9f0dP#-&B.i02(UHQn@?"rZ#dV4:V +h7hUsVP3Dh,i5*SIUMhhqtP<E`QU+Khdq;O56OL>YLEe<5^^I#Z:V"m(Wr=GEkJT]CI_4o1(RGr +n:t5!5kTCC1*V\PffG@E?ut6`(sf@IbFA7sppLC>YJ?N][:sXbabgLK>rj)n>c]mo^tAR;dZ@0Q +%S@!:M.-qWQA\?FSq%LcFoI`BL\SWFq&oAd5E'$cOq4I@%\mP1hki@uqtZoY&&5ut&O^=URTcA[ +\\Qu+T\O&AM[2RQWT2J+i_*ZG&cEil#lf?&?ecb.1O5)1DDQluio>$kk[ZH:TdJg!Yh1TPP^u1f +";Vu%&.HQF!Q`bUB/6##VaDoSlsVdX--#N_O?dbDS,l!>b\Z)U&.D#qJH4+i-BoIG;TX$rfeT!j +VZQWuW8_rd$cjSq5s4:G0V$AhpaMX=Bf[;(k6#/Bk&#_)"m3]ObiWK:e]d2$.>F%0WuE2eP:="J +D*!Vm-52W<>m)rO%VJ^S[eOPqi=6)@):ZZJKH(FZ.RBBl=#ZY.L1;gFh$#Qlo]Ai@bf:CK$d%O` +C`pX!2qMj=)Qh:^QSKN*pd6Lga'L[oq)8t4SC1o6<8e'2T2r+,VOX<Ro*N;iD`hC,n5C@kgOhNp +bi_nu;caC<)7/32QdFIqn-n>EhD1gX8DlLf,FYD_%V(%+0oVc%@N2(5j-C5\6%ER>Uae,tQ)1I+ +@[X*m\e(a"9H$V2LB4u2T*@T;D%!+8lUI^=.VqSQ2if0DVMsP['c82MW]V.'JVZT-`i;]tVCBn: +U,S+S>A2L&!L,;T6IIo=-)C&&D^WS&-se5[$Nf?F/0^RbbqP-P'[*0OeD/6$j4*G4$r#%!_2M&a +?6YDf$;NE$!mDWFV*T@t78\Z0d*o4`,ppL2j-gOs%>dF$Zngs7l8U)+YiHU\K=cV1</j%91bVi< +7dsEc!77&@a@/A+Z"[KL=BB62&i2U:E5i]MoAIeA4r-hjKF'7jkm'N>5[QF.W$3WDL$b_@q5_TE +*nS!JW`4WWF3n5Jh(=j32on:h?k<LI9/MMu1(\2o6),Ft1,2PNnc_If9SsAbbL<CMYI5nbJtV(C +*3p$k.gCPILbKP)N2%4(J:I~> +%%BeginResource: file (PDF Outline obj_6) +6 0 obj +<< /Title +<586D6C537461726C657420436F6D6D616E64204C696E6520584D4C20546F6F6C6B697420557365722773204775696465> + +/Dest +[4 0 R /XYZ 72.0 720.0 null] +/Parent 5 0 R +/Next 8 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_8) +8 0 obj +<< /Title +<5461626C65206F6620436F6E74656E7473> + +/Dest +[7 0 R /XYZ 72.0 720.0 null] +/Parent 5 0 R +/Prev 6 0 R +/Next 10 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_11) +11 0 obj +<< /Title +<FEFF0031002E00A000410062006F0075007400200058006D006C0053007400610072006C00650074> + +/Dest +[9 0 R /XYZ 72.0 690.141 null] +/Parent 10 0 R +/Next 12 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_12) +12 0 obj +<< /Title +<FEFF0032002E00A0004D00610069006E002000460065006100740075007200650073> + +/Dest +[9 0 R /XYZ 72.0 358.706 null] +/Parent 10 0 R +/Prev 11 0 R +/Next 14 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_14) +14 0 obj +<< /Title +<FEFF0033002E00A00053007500700070006F007200740065006400200050006C006100740066006F0072006D0073> + +/Dest +[13 0 R /XYZ 72.0 632.0 null] +/Parent 10 0 R +/Prev 12 0 R +/Next 15 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_15) +15 0 obj +<< /Title +<FEFF0034002E00A000460069006E00640069006E0067002000620069006E0061007200790020007000610063006B0061006700650073> + +/Dest +[13 0 R /XYZ 72.0 399.117 null] +/Parent 10 0 R +/Prev 14 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_10) +10 0 obj +<< /Title +<FEFF004300680061007000740065007200A00031002E00A00049006E00740072006F00640075006300740069006F006E> + +/Dest +[9 0 R /XYZ 72.0 720.0 null] +/Count -4 /Parent 5 0 R +/Prev 8 0 R +/Next 17 0 R +/First 11 0 R /Last 15 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_18) +18 0 obj +<< /Title +<FEFF0031002E00A00049006E007300740061006C006C006100740069006F006E0020006F006E0020004C0069006E00750078> + +/Dest +[16 0 R /XYZ 72.0 690.141 null] +/Parent 17 0 R +/Next 19 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_19) +19 0 obj +<< /Title +<FEFF0032002E00A00049006E007300740061006C006C006100740069006F006E0020006F006E00200053006F006C0061007200690073> + +/Dest +[16 0 R /XYZ 72.0 555.258 null] +/Parent 17 0 R +/Prev 18 0 R +/Next 20 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_20) +20 0 obj +<< /Title +<FEFF0033002E00A00049006E007300740061006C006C006100740069006F006E0020006F006E0020004D00610063004F005300200058> + +/Dest +[16 0 R /XYZ 72.0 464.375 null] +/Parent 17 0 R +/Prev 19 0 R +/Next 21 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_21) +21 0 obj +<< /Title +<FEFF0034002E00A00049006E007300740061006C006C006100740069006F006E0020006F006E002000570069006E0064006F00770073> + +/Dest +[16 0 R /XYZ 72.0 395.492 null] +/Parent 17 0 R +/Prev 20 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_17) +17 0 obj +<< /Title +<FEFF004300680061007000740065007200A00032002E00A00049006E007300740061006C006C006100740069006F006E> + +/Dest +[16 0 R /XYZ 72.0 720.0 null] +/Count -4 /Parent 5 0 R +/Prev 10 0 R +/Next 23 0 R +/First 18 0 R /Last 21 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_24) +24 0 obj +<< /Title +<FEFF0031002E00A00042006100730069006300200043006F006D006D0061006E0064002D004C0069006E00650020004F007000740069006F006E0073> + +/Dest +[22 0 R /XYZ 72.0 690.141 null] +/Parent 23 0 R +/Next 25 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_25) +25 0 obj +<< /Title +<FEFF0032002E00A0005300740075006400790069006E006700200053007400720075006300740075007200650020006F006600200058004D004C00200044006F00630075006D0065006E0074> + +/Dest +[22 0 R /XYZ 72.0 313.667 null] +/Parent 23 0 R +/Prev 24 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_23) +23 0 obj +<< /Title +<FEFF004300680061007000740065007200A00033002E00A000470065007400740069006E006700200053007400610072007400650064> + +/Dest +[22 0 R /XYZ 72.0 720.0 null] +/Count -2 /Parent 5 0 R +/Prev 17 0 R +/Next 27 0 R +/First 24 0 R /Last 25 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_28) +28 0 obj +<< /Title +<FEFF0031002E00A0005100750065007200790069006E006700200058004D004C00200064006F00630075006D0065006E00740073> + +/Dest +[26 0 R /XYZ 72.0 679.827 null] +/Parent 27 0 R +/Next 30 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_30) +30 0 obj +<< /Title +<FEFF0032002E00A0005400720061006E00730066006F0072006D0069006E006700200058004D004C00200064006F00630075006D0065006E00740073> + +/Dest +[29 0 R /XYZ 72.0 222.096 null] +/Parent 27 0 R +/Prev 28 0 R +/Next 32 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_32) +32 0 obj +<< /Title +<FEFF0033002E00A000450064006900740069006E006700200058004D004C00200064006F00630075006D0065006E00740073> + +/Dest +[31 0 R /XYZ 72.0 188.592 null] +/Parent 27 0 R +/Prev 30 0 R +/Next 34 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_34) +34 0 obj +<< /Title +<FEFF0034002E00A000560061006C00690064006100740069006E006700200058004D004C00200064006F00630075006D0065006E00740073> + +/Dest +[33 0 R /XYZ 72.0 480.0 null] +/Parent 27 0 R +/Prev 32 0 R +/Next 36 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_36) +36 0 obj +<< /Title +<FEFF0035002E00A00046006F0072006D0061007400740069006E006700200058004D004C00200064006F00630075006D0065006E00740073> + +/Dest +[35 0 R /XYZ 72.0 650.864 null] +/Parent 27 0 R +/Prev 34 0 R +/Next 38 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_38) +38 0 obj +<< /Title +<FEFF0036002E00A000430061006E006F006E006900630061006C0069007A006100740069006F006E0020006F006600200058004D004C00200064006F00630075006D0065006E00740073> + +/Dest +[37 0 R /XYZ 72.0 481.572 null] +/Parent 27 0 R +/Prev 36 0 R +/Next 40 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_40) +40 0 obj +<< /Title +<FEFF0037002E00A00058004D004C00200061006E0064002000500059005800200066006F0072006D00610074> + +/Dest +[39 0 R /XYZ 72.0 640.524 null] +/Parent 27 0 R +/Prev 38 0 R +/Next 42 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_42) +42 0 obj +<< /Title +<FEFF0038002E00A0004500730063006100700065002F0055006E0065007300630061007000650020007300700065006300690061006C00200058004D004C00200063006800610072006100630074006500720073> + +/Dest +[41 0 R /XYZ 72.0 337.405 null] +/Parent 27 0 R +/Prev 40 0 R +/Next 44 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_44) +44 0 obj +<< /Title +<FEFF0039002E00A0004C0069007300740020006400690072006500630074006F0072007900200061007300200058004D004C> + +/Dest +[43 0 R /XYZ 72.0 352.0 null] +/Parent 27 0 R +/Prev 42 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_27) +27 0 obj +<< /Title +<FEFF004300680061007000740065007200A00034002E00A00058006D006C0053007400610072006C006500740020005200650066006500720065006E00630065> + +/Dest +[26 0 R /XYZ 72.0 720.0 null] +/Count -9 /Parent 5 0 R +/Prev 23 0 R +/Next 46 0 R +/First 28 0 R /Last 44 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_47) +47 0 obj +<< /Title +<FEFF0031002E00A0004E0061006D006500730070006100630065007300200061006E0064002000640065006600610075006C00740020006E0061006D006500730070006100630065> + +/Dest +[45 0 R /XYZ 72.0 690.141 null] +/Parent 46 0 R +/Next 49 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_49) +49 0 obj +<< /Title +<FEFF0032002E00A0005300700065006300690061006C00200063006800610072006100630074006500720073> + +/Dest +[48 0 R /XYZ 72.0 628.72 null] +/Parent 46 0 R +/Prev 47 0 R +/Next 50 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_50) +50 0 obj +<< /Title +<FEFF0033002E00A00053006F007200740069006E0067> + +/Dest +[48 0 R /XYZ 72.0 363.437 null] +/Parent 46 0 R +/Prev 49 0 R +/Next 52 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_52) +52 0 obj +<< /Title +<FEFF0034002E00A000560061006C00690064006100740069006F006E> + +/Dest +[51 0 R /XYZ 72.0 696.0 null] +/Parent 46 0 R +/Prev 50 0 R +>> +endobj +%%EndResource +%%BeginResource: file (PDF Outline obj_46) +46 0 obj +<< /Title +<FEFF004300680061007000740065007200A00035002E00A00043006F006D006D006F006E002000700072006F0062006C0065006D0073> + +/Dest +[45 0 R /XYZ 72.0 720.0 null] +/Count -4 /Parent 5 0 R +/Prev 27 0 R +/Next 54 0 R +/First 47 0 R /Last 52 0 R +>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_57) +57 0 obj +<</R56 +56 0 R>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_61) +61 0 obj +<</R60 +60 0 R/R56 +56 0 R>> +endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_62) +62 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[120 680.124 180.461 689.124] +/Border +[0 0 0] +/Dest +[9 0 R /XYZ 72.0 720.0 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_63) +63 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[534.926 680.124 539.926 689.124] +/Border +[0 0 0] +/Dest +[9 0 R /XYZ 72.0 720.0 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_64) +64 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[144 668.124 227.245 677.124] +/Border +[0 0 0] +/Dest +[9 0 R /XYZ 72.0 690.141 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_65) +65 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[534.848 668.124 539.848 677.124] +/Border +[0 0 0] +/Dest +[9 0 R /XYZ 72.0 690.141 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_66) +66 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[144 656.124 213.44 665.124] +/Border +[0 0 0] +/Dest +[9 0 R /XYZ 72.0 358.706 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_67) +67 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[534.849 656.124 539.849 665.124] +/Border +[0 0 0] +/Dest +[9 0 R /XYZ 72.0 358.706 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_68) +68 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[144 644.124 238.279 653.124] +/Border +[0 0 0] +/Dest +[13 0 R /XYZ 72.0 632.0 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_69) +69 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[534.848 644.124 539.848 653.124] +/Border +[0 0 0] +/Dest +[13 0 R /XYZ 72.0 632.0 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_70) +70 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[144 632.124 254.818 641.124] +/Border +[0 0 0] +/Dest +[13 0 R /XYZ 72.0 399.117 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_71) +71 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[534.774 632.124 539.774 641.124] +/Border +[0 0 0] +/Dest +[13 0 R /XYZ 72.0 399.117 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_72) +72 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[120 620.124 176.035 629.124] +/Border +[0 0 0] +/Dest +[16 0 R /XYZ 72.0 720.0 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_73) +73 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[534.925 620.124 539.925 629.124] +/Border +[0 0 0] +/Dest +[16 0 R /XYZ 72.0 720.0 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_74) +74 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[144 608.124 240.536 617.124] +/Border +[0 0 0] +/Dest +[16 0 R /XYZ 72.0 690.141 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_75) +75 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[534.775 608.124 539.775 617.124] +/Border +[0 0 0] +/Dest +[16 0 R /XYZ 72.0 690.141 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_76) +76 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[144 596.124 244.386 605.124] +/Border +[0 0 0] +/Dest +[16 0 R /XYZ 72.0 555.258 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_77) +77 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[534.774 596.124 539.774 605.124] +/Border +[0 0 0] +/Dest +[16 0 R /XYZ 72.0 555.258 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_78) +78 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[144 584.124 257.563 593.124] +/Border +[0 0 0] +/Dest +[16 0 R /XYZ 72.0 464.375 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_79) +79 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[534.701 584.124 539.701 593.124] +/Border +[0 0 0] +/Dest +[16 0 R /XYZ 72.0 464.375 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_80) +80 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[144 572.124 254.828 581.124] +/Border +[0 0 0] +/Dest +[16 0 R /XYZ 72.0 395.492 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_81) +81 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[534.774 572.124 539.774 581.124] +/Border +[0 0 0] +/Dest +[16 0 R /XYZ 72.0 395.492 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_82) +82 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[120 560.124 192.793 569.124] +/Border +[0 0 0] +/Dest +[22 0 R /XYZ 72.0 720.0 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_83) +83 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[534.857 560.124 539.857 569.124] +/Border +[0 0 0] +/Dest +[22 0 R /XYZ 72.0 720.0 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_84) +84 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[144 548.124 278.473 557.124] +/Border +[0 0 0] +/Dest +[22 0 R /XYZ 72.0 690.141 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_85) +85 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[534.774 548.124 539.774 557.124] +/Border +[0 0 0] +/Dest +[22 0 R /XYZ 72.0 690.141 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_86) +86 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[144 536.124 312.165 545.124] +/Border +[0 0 0] +/Dest +[22 0 R /XYZ 72.0 313.667 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_87) +87 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[534.63 536.124 539.63 545.124] +/Border +[0 0 0] +/Dest +[22 0 R /XYZ 72.0 313.667 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_88) +88 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[120 524.124 218.715 533.124] +/Border +[0 0 0] +/Dest +[26 0 R /XYZ 72.0 720.0 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_89) +89 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[534.856 524.124 539.856 533.124] +/Border +[0 0 0] +/Dest +[26 0 R /XYZ 72.0 720.0 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_90) +90 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[144 512.124 264.716 521.124] +/Border +[0 0 0] +/Dest +[26 0 R /XYZ 72.0 679.827 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_91) +91 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[534.774 512.124 539.774 521.124] +/Border +[0 0 0] +/Dest +[26 0 R /XYZ 72.0 679.827 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_92) +92 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[144 500.124 281.759 509.124] +/Border +[0 0 0] +/Dest +[29 0 R /XYZ 72.0 222.096 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_93) +93 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[529.824 500.124 539.824 509.124] +/Border +[0 0 0] +/Dest +[29 0 R /XYZ 72.0 222.096 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_94) +94 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[144 488.124 256.481 497.124] +/Border +[0 0 0] +/Dest +[31 0 R /XYZ 72.0 188.592 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_95) +95 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[529.826 488.124 539.826 497.124] +/Border +[0 0 0] +/Dest +[31 0 R /XYZ 72.0 188.592 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_96) +96 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[144 476.124 269.12 485.124] +/Border +[0 0 0] +/Dest +[33 0 R /XYZ 72.0 480.0 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_97) +97 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[529.825 476.124 539.825 485.124] +/Border +[0 0 0] +/Dest +[33 0 R /XYZ 72.0 480.0 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_98) +98 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[144 464.124 271.327 473.124] +/Border +[0 0 0] +/Dest +[35 0 R /XYZ 72.0 650.864 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_99) +99 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[529.824 464.124 539.824 473.124] +/Border +[0 0 0] +/Dest +[35 0 R /XYZ 72.0 650.864 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_100) +100 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[144 452.124 305.778 461.124] +/Border +[0 0 0] +/Dest +[37 0 R /XYZ 72.0 481.572 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_101) +101 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[529.77 452.124 539.77 461.124] +/Border +[0 0 0] +/Dest +[37 0 R /XYZ 72.0 481.572 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_102) +102 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[144 440.124 248.241 449.124] +/Border +[0 0 0] +/Dest +[39 0 R /XYZ 72.0 640.524 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_103) +103 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[529.769 440.124 539.769 449.124] +/Border +[0 0 0] +/Dest +[39 0 R /XYZ 72.0 640.524 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_104) +104 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[144 428.124 324.361 437.124] +/Border +[0 0 0] +/Dest +[41 0 R /XYZ 72.0 337.405 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_105) +105 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[529.768 428.124 539.768 437.124] +/Border +[0 0 0] +/Dest +[41 0 R /XYZ 72.0 337.405 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_106) +106 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[144 416.124 247.147 425.124] +/Border +[0 0 0] +/Dest +[43 0 R /XYZ 72.0 352.0 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_107) +107 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[529.77 416.124 539.77 425.124] +/Border +[0 0 0] +/Dest +[43 0 R /XYZ 72.0 352.0 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_108) +108 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[120 404.124 208.809 413.124] +/Border +[0 0 0] +/Dest +[45 0 R /XYZ 72.0 720.0 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_109) +109 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[529.888 404.124 539.888 413.124] +/Border +[0 0 0] +/Dest +[45 0 R /XYZ 72.0 720.0 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_110) +110 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[144 392.124 300.264 401.124] +/Border +[0 0 0] +/Dest +[45 0 R /XYZ 72.0 690.141 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_111) +111 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[529.77 392.124 539.77 401.124] +/Border +[0 0 0] +/Dest +[45 0 R /XYZ 72.0 690.141 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_112) +112 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[144 380.124 228.318 389.124] +/Border +[0 0 0] +/Dest +[48 0 R /XYZ 72.0 628.72 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_113) +113 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[529.884 380.124 539.884 389.124] +/Border +[0 0 0] +/Dest +[48 0 R /XYZ 72.0 628.72 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_114) +114 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[144 368.124 184.525 377.124] +/Border +[0 0 0] +/Dest +[48 0 R /XYZ 72.0 363.437 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_115) +115 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[529.941 368.124 539.941 377.124] +/Border +[0 0 0] +/Dest +[48 0 R /XYZ 72.0 363.437 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_116) +116 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[144 356.124 197.251 365.124] +/Border +[0 0 0] +/Dest +[51 0 R /XYZ 72.0 696.0 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_117) +117 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[529.941 356.124 539.941 365.124] +/Border +[0 0 0] +/Dest +[51 0 R /XYZ 72.0 696.0 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_118) +118 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[120 344.124 245.196 353.124] +/Border +[0 0 0] +/Dest +[53 0 R /XYZ 72.0 720.0 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_119) +119 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[529.836 344.124 539.836 353.124] +/Border +[0 0 0] +/Dest +[53 0 R /XYZ 72.0 720.0 null] +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: font (PDF Font obj_121) +121 0 obj +<</R60 +60 0 R/R56 +56 0 R>> +endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_122) +122 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[120 635.12 168.33 644.12] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F786D6C737461722E736F75726365666F7267652E6E65742F> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_123) +123 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[174.483 635.12 295.583 644.12] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F786D6C737461722E736F75726365666F7267652E6E65742F> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_124) +124 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[464.43 555.482 537.5 564.482] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F786D6C736F66742E6F72672F> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_125) +125 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[286.36 497.663 442.18 506.663] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F736F75726365666F7267652E6E65742F70726F6A656374732F786D6C737461722F> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_126) +126 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[520.56 384.206 540 393.206] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F736F75726365666F7267652E6E65742F666F72756D2F3F67726F75705F69643D3636363132> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_127) +127 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[120 372.206 233.695 381.206] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F736F75726365666F7267652E6E65742F666F72756D2F3F67726F75705F69643D3636363132> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_128) +128 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[239.163 372.206 426.173 381.206] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F736F75726365666F7267652E6E65742F666F72756D2F3F67726F75705F69643D3636363132> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_129) +129 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[444.608 372.206 540.003 381.206] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F6C697374732E736F75726365666F7267652E6E65742F6C697374732F6C697374696E666F2F786D6C737461722D646576656C2F> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_130) +130 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[123.33 360.206 338.34 369.206] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F6C697374732E736F75726365666F7267652E6E65742F6C697374732F6C697374696E666F2F786D6C737461722D646576656C2F> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: font (PDF Font obj_132) +132 0 obj +<</R60 +60 0 R/R56 +56 0 R>> +endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_133) +133 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[130 321.734 200.29 330.734] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F7777772E737573652E636F6D2F75732F707269766174652F70726F64756374732F737573655F6C696E75782F70726F662F7061636B616765735F70726F66657373696F6E616C2F786D6C737461726C65742E68746D6C> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_134) +134 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[214.47 321.734 540 330.734] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F7777772E737573652E636F6D2F75732F707269766174652F70726F64756374732F737573655F6C696E75782F70726F662F7061636B616765735F70726F66657373696F6E616C2F786D6C737461726C65742E68746D6C> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_135) +135 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[130 309.734 190.84 318.734] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F7777772E737573652E636F6D2F75732F707269766174652F70726F64756374732F737573655F6C696E75782F70726F662F7061636B616765735F70726F66657373696F6E616C2F786D6C737461726C65742E68746D6C> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_136) +136 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[130 287.734 251.967 296.734] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F6C696E757830312E677764672E64652F7E70626C657365722F72706D2D6E617669676174696F6E2E7068703F6361743D2532465574696C6974696573253246786D6C737461726C65742F> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_137) +137 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[267.569 287.734 539.999 296.734] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F6C696E757830312E677764672E64652F7E70626C657365722F72706D2D6E617669676174696F6E2E7068703F6361743D2532465574696C6974696573253246786D6C737461726C65742F> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_138) +138 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[130 275.734 205.56 284.734] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F6C696E757830312E677764672E64652F7E70626C657365722F72706D2D6E617669676174696F6E2E7068703F6361743D2532465574696C6974696573253246786D6C737461726C65742F> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_139) +139 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[130 253.734 190.28 262.734] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F7777772E667265656273642E6F72672F6367692F706F7274732E6367693F71756572793D786D6C737461726C65742673747970653D616C6C> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_140) +140 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[196.11 253.734 459.31 262.734] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F7777772E667265656273642E6F72672F6367692F706F7274732E6367693F71756572793D786D6C737461726C65742673747970653D616C6C> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_141) +141 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[130 231.734 215 240.734] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F7777772E6672657368706F7274732E6F72672F7465787470726F632F786D6C737461726C65742F> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_142) +142 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[220.83 231.734 405.82 240.734] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F7777772E6672657368706F7274732E6F72672F7465787470726F632F786D6C737461726C65742F> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_143) +143 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[130 209.734 183.89 218.734] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F66696E6B2E736F75726365666F7267652E6E65742F7064622F7061636B6167652E7068702F786D6C737461726C6574> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_144) +144 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[189.72 209.734 407.75 218.734] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F66696E6B2E736F75726365666F7267652E6E65742F7064622F7061636B6167652E7068702F786D6C737461726C6574> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_145) +145 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[130 187.734 198.05 196.734] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F72706D732E6D616E6472616B65636C75622E636F6D2F6C696E75782F72706D3268746D6C2F7365617263682E7068703F71756572793D786D6C737461726C6574> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_146) +146 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[203.88 187.734 510.89 196.734] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F72706D732E6D616E6472616B65636C75622E636F6D2F6C696E75782F72706D3268746D6C2F7365617263682E7068703F71756572793D786D6C737461726C6574> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_147) +147 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[130 165.734 192.49 174.734] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F67656E746F6F2D706F72746167652E636F6D2F6170702D746578742F786D6C737461726C6574> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_148) +148 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[198.32 165.734 380.81 174.734] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F67656E746F6F2D706F72746167652E636F6D2F6170702D746578742F786D6C737461726C6574> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_149) +149 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[130 143.734 158.88 152.734] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F7061636B616765732E64656269616E2E6F72672F737461626C652F746578742F786D6C737461726C6574> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_150) +150 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[164.71 143.734 356.92 152.734] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F7061636B616765732E64656269616E2E6F72672F737461626C652F746578742F786D6C737461726C6574> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: font (PDF Font obj_152) +152 0 obj +<</R60 +60 0 R/R56 +56 0 R>> +endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_153) +153 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[239.857 568.758 310.697 577.758] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F6672322E72706D66696E642E6E65742F6C696E75782F72706D3268746D6C2F7365617263682E7068703F71756572793D786D6C737461726C65742673797374656D3D26617263683D> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_154) +154 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[339.169 568.758 539.999 577.758] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F6672322E72706D66696E642E6E65742F6C696E75782F72706D3268746D6C2F7365617263682E7068703F71756572793D786D6C737461726C65742673797374656D3D26617263683D> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_155) +155 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[120 556.758 260.24 565.758] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F6672322E72706D66696E642E6E65742F6C696E75782F72706D3268746D6C2F7365617263682E7068703F71756572793D786D6C737461726C65742673797374656D3D26617263683D> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_156) +156 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[307.625 408.992 407.137 417.992] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F66696E6B2E736F75726365666F7267652E6E65742F7064622F7061636B6167652E7068702F786D6C737461726C6574> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_157) +157 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[415.009 408.992 539.999 417.992] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F66696E6B2E736F75726365666F7267652E6E65742F7064622F7061636B6167652E7068702F786D6C737461726C6574> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_158) +158 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[120 396.992 213.04 405.992] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F66696E6B2E736F75726365666F7267652E6E65742F7064622F7061636B6167652E7068702F786D6C737461726C6574> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_159) +159 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[398.766 328.109 430.436 337.109] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F7777772E63796777696E2E636F6D2F> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_160) +160 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[436.669 328.109 536.669 337.109] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F7777772E63796777696E2E636F6D2F> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: font (PDF Font obj_163) +163 0 obj +<</R60 +60 0 R/R162 +162 0 R/R56 +56 0 R>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_165) +165 0 obj +<</R60 +60 0 R/R162 +162 0 R/R56 +56 0 R>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_168) +168 0 obj +<</R60 +60 0 R/R162 +162 0 R>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_171) +171 0 obj +<</R60 +60 0 R/R162 +162 0 R>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_173) +173 0 obj +<</R60 +60 0 R/R162 +162 0 R/R56 +56 0 R>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_176) +176 0 obj +<</R60 +60 0 R/R162 +162 0 R>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_179) +179 0 obj +<</R60 +60 0 R/R162 +162 0 R>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_182) +182 0 obj +<</R60 +60 0 R/R162 +162 0 R>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_185) +185 0 obj +<</R60 +60 0 R/R162 +162 0 R>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_188) +188 0 obj +<</R60 +60 0 R/R162 +162 0 R>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_190) +190 0 obj +<</R60 +60 0 R/R162 +162 0 R/R56 +56 0 R>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_192) +192 0 obj +<</R60 +60 0 R/R162 +162 0 R/R56 +56 0 R>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_195) +195 0 obj +<</R60 +60 0 R/R162 +162 0 R>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_198) +198 0 obj +<</R60 +60 0 R/R162 +162 0 R>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_201) +201 0 obj +<</R60 +60 0 R/R162 +162 0 R>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_203) +203 0 obj +<</R60 +60 0 R/R162 +162 0 R/R56 +56 0 R>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_205) +205 0 obj +<</R60 +60 0 R/R162 +162 0 R/R56 +56 0 R>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_207) +207 0 obj +<</R60 +60 0 R/R162 +162 0 R/R56 +56 0 R>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_210) +210 0 obj +<</R60 +60 0 R/R162 +162 0 R>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_212) +212 0 obj +<</R60 +60 0 R/R162 +162 0 R/R56 +56 0 R>> +endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_213) +213 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[435.55 350.905 540 359.905] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F7777772D3130362E69626D2E636F6D2F646576656C6F706572776F726B732F786D6C2F6C6962726172792F782D6D61747465727331372E68746D6C> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_214) +214 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[120 338.905 303.04 347.905] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F7777772D3130362E69626D2E636F6D2F646576656C6F706572776F726B732F786D6C2F6C6962726172792F782D6D61747465727331372E68746D6C> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: font (PDF Font obj_216) +216 0 obj +<</R60 +60 0 R/R162 +162 0 R/R56 +56 0 R>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_218) +218 0 obj +<</R60 +60 0 R/R162 +162 0 R/R56 +56 0 R>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_220) +220 0 obj +<</R60 +60 0 R/R162 +162 0 R/R56 +56 0 R>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_222) +222 0 obj +<</R60 +60 0 R/R162 +162 0 R/R56 +56 0 R>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_224) +224 0 obj +<</R60 +60 0 R/R56 +56 0 R>> +endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_225) +225 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[130 647.641 311.433 656.641] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F7777772E66726565736F6674776172656D6167617A696E652E636F6D2F667265655F6973737565732F69737375655F30362F786D6C5F737461726C65742F> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_226) +226 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[323.939 647.641 539.999 656.641] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F7777772E66726565736F6674776172656D6167617A696E652E636F6D2F667265655F6973737565732F69737375655F30362F786D6C5F737461726C65742F> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_227) +227 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[130 635.641 208.89 644.641] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F7777772E66726565736F6674776172656D6167617A696E652E636F6D2F667265655F6973737565732F69737375655F30362F786D6C5F737461726C65742F> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_228) +228 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[130 613.641 255.83 622.641] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F7777772D3132382E69626D2E636F6D2F646576656C6F706572776F726B732F786D6C2F6C6962726172792F782D737461726C65742E68746D6C> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_229) +229 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[261.66 613.641 534.15 622.641] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F7777772D3132382E69626D2E636F6D2F646576656C6F706572776F726B732F786D6C2F6C6962726172792F782D737461726C65742E68746D6C> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_230) +230 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[130 591.641 336.017 600.641] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F626C6F676963626C6F672E626C6F6773706F742E636F6D2F323030342F30392F786D6C737461726C65742D67656E746C652D696E74726F64756374696F6E2D696E746F2E68746D6C> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_231) +231 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[344.979 591.641 539.999 600.641] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F626C6F676963626C6F672E626C6F6773706F742E636F6D2F323030342F30392F786D6C737461726C65742D67656E746C652D696E74726F64756374696F6E2D696E746F2E68746D6C> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_232) +232 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[130 579.641 259.72 588.641] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F626C6F676963626C6F672E626C6F6773706F742E636F6D2F323030342F30392F786D6C737461726C65742D67656E746C652D696E74726F64756374696F6E2D696E746F2E68746D6C> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_233) +233 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[130 557.641 296.541 566.641] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F626C6F67732E6170706C69626173652E6E65742F7072616D6F642F696E6465782E7068702F61726368697665732F636F6D6D616E642D6C696E652D786D6C2D776974682D786D6C737461726C6574> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_234) +234 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[304.179 557.641 539.999 566.641] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F626C6F67732E6170706C69626173652E6E65742F7072616D6F642F696E6465782E7068702F61726368697665732F636F6D6D616E642D6C696E652D786D6C2D776974682D786D6C737461726C6574> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_235) +235 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[130 545.641 256.38 554.641] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F626C6F67732E6170706C69626173652E6E65742F7072616D6F642F696E6465782E7068702F61726368697665732F636F6D6D616E642D6C696E652D786D6C2D776974682D786D6C737461726C6574> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_236) +236 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[130 523.641 225.55 532.641] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F7777772E70696E6B6A756963652E636F6D2F686F77746F2F76696D786D6C2F6D6F726573657475702E786D6C23786D6C737461726C6574> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: file (PDF Annotation obj_237) +237 0 obj +<</Type/Annot +/C +[0 0 0] +/Rect +[231.38 523.641 505.56 532.641] +/Border +[0 0 0] +/A<</URI +<687474703A2F2F7777772E70696E6B6A756963652E636F6D2F686F77746F2F76696D786D6C2F6D6F726573657475702E786D6C23786D6C737461726C6574> + +/S/URI>> +/Subtype/Link>>endobj +%%EndResource +%%BeginResource: font (PDF Font obj_239) +239 0 obj +<</R60 +60 0 R/R56 +56 0 R>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_60) +60 0 obj +<</BaseFont/Times-Roman/Type/Font +/Encoding 240 0 R/Subtype/Type1>> +endobj +%%EndResource +%%BeginResource: encoding (PDF Encoding obj_240) +240 0 obj +<</Type/Encoding/Differences[ +39/quotesingle +149/bullet]>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_162) +162 0 obj +<</BaseFont/Courier/Type/Font +/Encoding 241 0 R/Subtype/Type1>> +endobj +%%EndResource +%%BeginResource: encoding (PDF Encoding obj_241) +241 0 obj +<</Type/Encoding/Differences[ +39/quotesingle]>> +endobj +%%EndResource +%%BeginResource: font (PDF Font obj_56) +56 0 obj +<</BaseFont/Helvetica-Bold/Type/Font +/Encoding 242 0 R/Subtype/Type1>> +endobj +%%EndResource +%%BeginResource: encoding (PDF Encoding obj_242) +242 0 obj +<</Type/Encoding/Differences[ +39/quotesingle]>> +endobj +%%EndResource +%%BeginResource: file (PDF object obj_1) +1 0 obj +<<>>endobj +%%EndResource +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +4 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 57 0 R +>> +/Contents 55 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +55 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 259>>stream +J/grZ!H?$`#D,6r&9A_r'al8(`!10X`"Xq[`^CDp5_9ms+Vb#EnrV@;+;kUl_h#VI5ZBO.j02sJ +e7/Y#%KllBaP^;^(s@euiB^l*Cakn`-R3&akTD%<c)/qr\B#d>)GS4K8PmnDPmrIhd@c"n1*"HV +UR?Ch'h'I5-0FfEYh!NdPtkpiOIYGU,FqOU9'(@h-'O9Wio--e?j[iKL80V0QtIn;c)nGFBr'<n +0Ub_'"-M*qBWW9BkF1dcM]sR$[P/6~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 2 2 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +58 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 61 0 R +>> +/Contents 59 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +59 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 589>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWRXJGRac3qK,@K4<SUT0)1KQ^@b/al^2Z3*:P9Dh'bZLe +]iO=K9SJ4t</=49"&XTl7B4pAD-IqgRouoI8+i'l5-GW=bZsa`>k[o1U>'I%i2o.DPIRI[E]*6[ +P97j0_Y8C_T)UHac"@.qC+Y@Ob/7G0SrGW4+kQEp4`[X,qrspC=FRrt[J0G"/hG0/cE?V7cKHtN +_q;aSO=NAJ"t3_%&4.d15_apn&?#a9ifImo6@ke7)?^,7bQT.\3Xh2t!J3'G#7*#^LBRapg,9:J +TY`\uK.,pp#\/,52N/l"a:JZ18DGtR!l16O7&,"`2@X.iIO^@f.-)&%C+/@(N.WNV.Lf54U`1Ir +XA'B5@;o`s`^4&I'FCO*ehdd[8D'Ys6`B-(8OK#J4G=q<'I(G0U8WTm~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 3 3 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +7 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 121 0 R +>> +/Annots[62 0 R +63 0 R +64 0 R +65 0 R +66 0 R +67 0 R +68 0 R +69 0 R +70 0 R +71 0 R +72 0 R +73 0 R +74 0 R +75 0 R +76 0 R +77 0 R +78 0 R +79 0 R +80 0 R +81 0 R +82 0 R +83 0 R +84 0 R +85 0 R +86 0 R +87 0 R +88 0 R +89 0 R +90 0 R +91 0 R +92 0 R +93 0 R +94 0 R +95 0 R +96 0 R +97 0 R +98 0 R +99 0 R +100 0 R +101 0 R +102 0 R +103 0 R +104 0 R +105 0 R +106 0 R +107 0 R +108 0 R +109 0 R +110 0 R +111 0 R +112 0 R +113 0 R +114 0 R +115 0 R +116 0 R +117 0 R +118 0 R +119 0 R]/Contents 120 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +120 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 4039>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWRXJGRac3qK,@K4<SUT0)1KQ^@b/al^2Z3*:P9Dh'bZLe +]iO=K9SJ4t</=49"&XTl7B4pAD-IqgRouoI8+i'l5-GW=bZsa`>k[o1U>'I%i2o.DPIRI[E]*6[ +P97j0_Y8C_T)UHac"@.qC+Y@Ob/7G0SrGW4n&1"j@=L!:aq,\ML^6F7:qWSC+`FT`1BC$E%YFso +J79<"!LQ+iLEUVQ)[@P-5Umqn5gp0r,,!Eh#d<8bofVYoq":IWX*k\hNl&[K4)VA$(kG><1:fO8 +@h0?gN!)WI5*>sa2SW&Jr#1=9W\TFJn0AGC^8YLX(^?[QA;ikEaJ^eO6X\%J%HB--+cYN$kVCB" +S3%7rci`Qe^hR7^*/7:/W$VO3TN!Ls&6M13Ks-SX3NE0GP;<\9GfVq)A"_:+Kd!f?*/4L0DA5n= +#[n"HTpSXm:^pu#:kf]%>>\?74\Jc)'dZRTeQ%$!=&kNV@p7G`c#I%?Q0iKs<Yc-]@96J5LL\uE +rKUhnQ<fVbfp4LZ<f<]FP_db]FK#?LK-1mm=r)O_E8#LNST<O&-.R"kQT`rE?+,aOH/;W)c$N_R +mAk#u:itZ7>SiCgJ_rD`$"eoX]`oAZoY!$U;j4<Z']3:p=rE'.c*e0[+d=X1:SDqQ`1X'E:`t]a +Gj7>#BMM5P%AR=.3Xd6t]K-3>LhISM+dFcI5$<"]GMa;c%tS-"/s2oC3^+"Ml5F92G%.D515e^_ +rP,;qHL@E)lh^=?Yj@i#c)5CSk0$oe\*=KAlZQrNq--s%InaTYSh#_nRG_d)j1,)sf490ZE<_*u +BYlTcgasimK`WsN0TLdaj>+t_ep&1/gUlR<cC+CB[.J]89so)4(JiKP*FDfDlCj#H6:0DW"1@g8 +cWT)srTA1XFZobOW`matCO^;/^OoW4E*Y@?F2<VsM/Q]Q0+%?>i+%gc'Ba"%LGY/@*/5V%VE0_> +JDN:[j!VZ75p<-K-k2]>c1R(/c?C_[qnKuUJXao.:CZ8J=-i0F1^JX$%KsBKMOd]aPATZ;i'=4m +"!Ch`K+M>u6.O\Sg"8'$O88;JLWBf'P8&>i6,,/;!r"uJ4+%/Bei-uqir^Nb%.MK#(m&J>!u$W* +U#mC`:iHaDJ7/jpX>#BQ0FC^i49dDYs$K%Zh4XBLM_J`E7EDkQ@,o1/i5ch*i["(<KNjBiIPsXY +h&>=#C'MoL!!AR]%ibFGKe;\F^*N";T&Ur4N<-U6#KiaXRktS8eOM%l,c.43&!4#e2*nc)-"Or% +P4E>D2,I]I_6OW(D8o=C=PFfA7%9G3W]7/ig@=8Db*=_o2E*Jt8_!Bq+HdQU"#s8ffXq5O;Ml9r +"T4nnb#O8?(cP!I_]mm1O)_KMAOUj(R9p*IDS\'I#>jq)&6a0Rch_KHH"ed?2!C3GSlr]aWl@u, +jH_R,G0[YI4_IaiT*q$CRcmH@B$<DUdeZ.'"=c^7.t_A2+e>5J@L]2FcC,A(BnG"(5u:PmRhRW: +;"r0Qhl(Q).B4eKG39n0jUS!uZ?fF&=\Iqk/skWeMkJ''4R%OmVc2lK;n;V<8N?nXd?4GbY[LAe +r<.gre/VD5')/>,/VM2:kKt.^,:8SAWc?SQ;7`QVC?(/-5s-UHWkh\%`)&cOkSq&>buH!r4f=P, +\^MJ\l^Fb0S06A9]UIqXlb.eP<X!*#MW%/WrJ-`HbSJ2jp4]Mo0rc^$JOFbq<T]9IZBHoc7:tm$ +iP9@AoT9=*Ap"i)Xb3e-Y+Jmu>6h4QAn)P7elQ'_D/9BcJWb\G"-Tj&,KrZW;Z].ZCM.0aq`mc( +THf1fkbEcP41S2dRBouKc<Zl;#'<.n_tsaXY5PiB<nV/u&i'm3UhG@HK(`M4F*k$3Fd;^$;I9ZV +% +%I#E.lVM5_]'J>+,/s@(&DFj,@"6iQm`5+KK4dKa&\1>(N86*1'Z+Z(di7Q"g`/,-1q:;?ilR?Tfb;3 +91X[bCq7IY*i@4ugNbH$0YTNcEA^R1Q"t%l[[5_bj%O)8S!m=]Df*,G$kX)fV2ShBiQbgj@3EC$ +;eLX@+u:q<)$A)D;`RK#.HY4^P[fu!q.tX`g@u!g%V3^iieRbgRM.JX>m16?2hj$O)cK*`]5[Hn +B,P]Mmg_,"3;KPY<"eQMc1I<*"!6[Fki&d^GKZES,e(8cH,7'%Z7sF3.3npaR=d8,N8!GYnh^gW +Wg=&YPVWMF/fTE[A\/BA:Z';HVl7n$crr@ol_q\NDb1,TR.">@c&JuO7YH^r)b!$9V/NWO,U6;3 +'E`^]8[]?>H[$1%WG4.m6ATd7fk0HuU,%+gmV^;eIrh(1ar*"<GL&7?do_UB`#aZHhcfW#Cj(ih +C)Yf(gCn.:m<uh1bK[&Gqf=]!5IGN5!E-GmaQ3c`I[p`m$A$A/#<2&jK5Ojh*+$<%0N#Eeg(=OC +@E<?qm@Fta3DrlH)K<tlb.,aoi8!X/n;:hp<8iJfSGSlGg!gF8i>U-87H<H!AWjR7<!JaNOBe6N +/b5Z##dEIT>qW:F]$DbKok?_Q2*K-lQSG30:%74MbFeUn"m<S>T3%@lRl[%Ikag%pG:VO%8Bh,$ +ciZM=XH`8%A97$qDba:[Au-so-jnEc1knSs\T%Rm#;DXPDSI0er9%bU!R],j/aJOHI7JBbpV$=i +>GF.ZOp73CU%_?"lRC%g298Zdq3:(-PNY!c50MY_'WY9*R[)+U)>lKi]CIosBB:31\ZjFXkdR0> +\%L>B&6aqXmh>7eES&hA$1t[&ih53:$l]:FEUA1pn`[S&N&rp7_nMs8ko<4eId\%JKd=iP(49c; +#])1gX;pe]oWp"sUs?bdbgPQk#(.ekqJ;o,CoC8#Yi[,TJ.&fj&01b3b5P02rbLSGj=6`I\@liT +ouk2tm;V470'ij=,j^d".LuLGWj69-\&aU3a2m10jol/IIE@R:B')F1:^R3.$O=KQX+'*q/nY_V +KLbtJ$sa%@7gi,:Y6Z33Ua1o&i<t`="jkDiU*Q[0M$`:O#KT`&C6nU5`3LZn;^gcoLSRi+M@O%6 +$m=I:TO%u,3tIGN_n]IdluICPk7?Lj%4RnZa7aS9.dU^I&J68l!6,HPC5G@(%SB8Lc-W*q.WEc+ +$ZJ`QnBA?.%#S_EYGfnYn%bXdHEe%L,)-qg$\i-7L/;A^Z446s"="A9<X+>PRu%dfK6CnKEcU7[ +I;"HClgu\4TYZbDI"a3/8>(pY9Wc^8N2t>?d8Lbl^jp9P6"H'ecLhRM`uS%0=3(G0-q+(B/4"91 +H406%.?pcMFSP*^QK^U6T\dQ/1m[;gM$4MbTZVa2Ee]07'M9r!b_I3Y@3T[3Ms9)ABLN)?lPrdV +,-j3-/*@=RJd+JW*earK&g2S#aM7-F,;=5TXYNMrrWN:l$nUo\BU!QH[j)Ln#dSX+9i1]R=:?>; +%>J!GB4gB=g][]6-H@fs/Ro_N6:"<l,8+W6Z9KS]_[FQ*U?CTQ.fCk1[^Et?Tr=#"l#A"7CBipF +/+@Z'%lX83+:<*+&]!'G%DI4p1D==<e]0F2A0CK,nG,Qt/5dbtYL&Gq-tu/N,%ihLcrhkT,qO*G +]BeUZNq0CWr%,`DZ?!j^9PId3r-DK;i%a4BRL;TBCL##e5C76NE4(G_1e*/BE/AHjDRFWE8R +2H$q:kd_rpGrOjsrLsXe-TlQN@"eSs^ZoSn:iu6("RV6qnrG>rP?("B9L8uYJhK,CdjI*gBP]+[ ++G:[h&iVpo_`SU^[ki^h/c$a_kc"*b3ee:$mfJl?7VcrE_s_.T5YqdFkR@u+X%m:C:/5COWmm2l +W_R/`l6+Vbk%-g=egE4FW(eQ/r>IDI4B+I,O'mP%YXoHad<%ZBo6S*Nn9N/>5h%e8c\,c'680U^ ++<U~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 4 4 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +9 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 132 0 R +>> +/Annots[122 0 R +123 0 R +124 0 R +125 0 R +126 0 R +127 0 R +128 0 R +129 0 R +130 0 R]/Contents 131 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +131 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 4160>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWRXJGRac3qK,@K4<SUT0)1KQ^@b/al^2Z3*:P9Dh'bZLe +]iO=K9SJ4t</=49"&XTl7B4pAD-IqgRouoI8+i'l5-GW=bZsa`>k[o1U>'I%i2o.DPIRI[E]*6[ +P97j0_Y8C_T)UHac"@.qC+Y@Ob/7G0SrGW4n&1"j@=L!:aq,\ML^6F7:qWSC+`FT`1BC$E%YFso +J7bV^@E;[m#/SB$&.454:`+m1T[X,NYN&IP4RRgroqb?_I1ioI_S[$KDR0-TJP1nV\iT:i%hu^9 +"?u]HOl@39^JEnf)MZ'.A/YWf^i11.O<b88U]HQC#_rG"DA^KWW"]pO@mImj%YH1jqLu`cOuEl' +OPV`&UDW2ONT5+:%ENQ>:FcWi/-`-Za=(R=L@Ck(/VZ&0Jh[_pW9=d#")-=9Ne7Vu2@Q@R;A6gK +quVSu@A%QN"eh#m(Jj"WBaP9!:pq&G!bdum;H0J.'SW6M>m,n5\54c:"/+j;#=3T@4Aj"e+uohE +SJ!pk@joP[N^GeK(Celm?7pmGV/-rL(!tAhgGQ$;5GGtZ_f4@OpeX!![me;o#%9dR1L8Si@Mo=O +(u@01UBoX1?FNb`1toF@\eJ"/:'W_:[fs0`_*L>r'Fob?hDPjQi)>0_!C6'0%3l_;J;6).rIY:t +TP>/L6S:r`?%X7t/rG6[$RlFI(oS0LGceh$6#Zg5(ug15r&NHjOP1I_q?UN'K`d.s0b6<VBqQ\: +^hanm"0f[oN.VPVWs-)Q!3BGWrgO.I+iWq+N.Xi;ZGBtJEi[`UG1ISt>2[I\N+8g?1<gYZkm-JL +-2i@/q@;8-%+nT"^$iLd#W)%?h:=EBUP1/>CR8YrZN_@;kI&)+SlRk2"";e[FW>i$IG_O6%FTAb +7L>LFZIn?c@8rFK0TR@]jl9SbrX5NT*:Ujt";;(27Ii:3^cM5MG;(M'_FUp$N^G5RVIhks_E3a' +B&YTTg0imEA6NBj2rL-9.P\[YV\V:He@Hit6,RP<m,S=+[8n"[",9dn("0Bh7(O!u6X6dbD*]!W +m+:9UJcN@0Tb(&9fIRbgJA`B\K\jS`99Y$'$l^jM`l[1E(M0gg%^K0?g`Y;@#7QhO4BQ)"(nbOO +l`qMI7I\@8Ho)'Nd<l-`b1GW(/S!&IOi&#Z$6?33<iI2Y".%Zt6=`]HmJXi12[^3q_X\/_jeoss +\G)QS2I>YTh`B@qra<oa%LK,[W3F.K"1t^Z&c<2&^quh4gL>pF[P5b2!5i-dQk&X_&3@o:,srMi +%4Ql-5N$)Q!K:?FO;]f'"X^i]U.^,uh0?-%o&BaeWb>eVY!N=u.Ss?GDU=f*2^l'`V:-_pl\8OS +Kle?rd_9[a&mWT"FW0A[Ws3@X+j@e20q1k@R'P,,6E+FGi0(ZZ@>SFt`2,;'%,%)tc<>sja;i*- +F-]9B&r()q21_th,f$*[X7_(Kegg8$J@T=tE*iQIUiL)Vl(.s,P35f?Al:(k34?1>7Mh6[EM0n$ +X.[W-g`sQDdbV4Ja@O\r'D,G7=KFC$.,jCTnk9A*2`l*s%V]T)H&Z+48BFQ,W3fl49I5D3VQiks +UKe<"&rkCu>T8<,7],]-U'CsYn&#g2WO5Th#$>4Al"*G]2$AhhM)<;KMH^M:4?<^K_^/B"Vjqgn +.7'us4;;!5M_@LP#2n(B)=V`jTRnOh0\@>^JmqspT#!fQ>r^OpRW<=#1VOXCB%DKJ@o)bk8bA2H +V&^!Jn#S;HFi,V8i&I?-WENJ^FKU0Vmgb;6dot6A"K?N":+dI7+"2Z8W?o66^n<Ujp?-@%]7CGf +KeudK:Mo--\tT4kM)PR\D5CK2"T^g'-7b^3>_R!rdsC(C"fi+c_aBD6.Daj8=V:#Fm^arK2r/FW +E2,s#;N^l4[S+dM=(;331!ThYO?n"1Ha'_4%S$`']cVkLD.&9M1q"^'#T0#sA^g<[/1$QcQ>9&q +92TJ4g`@I!!uP.u]o>-ckT3\pRp56=T1<;JB-7)EPY_uj;rs':'qdQd@+:;q8V`CJ)2VpDJ2Q26 +>EFZf0F$IoFjW*6fC!fQ"j2*h0h@LoZ6htNQPq@7r.gDBr9g_GLF=+M<sGtW1iDX=]?_87PVV9m +bP@VZk:f`>QE*JtnS:64[^h\[AkC-QUDO5A'9mTEkE[!mN'^QnQo(`iOioRA\8:]-Uh0_&E#+2J +7g.cQUP8uQh0Zc9<4LE]:SaG];C&?C8*]Z&$oM[#Ym'.[<gr!uJBq8M9_YXrC@Md"en>-@LT=Bh +O2pgdB57g!;0ES]QAXutm?P5jff%+.lf$aW4hREYP8"Nc-Zd578dXZ4[G&4BLs]4:YkJ:'G-]"r +10JHtB3#p#(f1c)HP&[qW#uL#H/S#4EG(pS4/%P8+"JA1h]V&paSS%K=G`BXaNYNPb:](KFK/el +>kST"QDN139YqVEhW<]Q,_\sHan%k%=gZd`j[MGTF"I0_RJSN>nF*Bf%YglWLKX0frE)'=)$]Ss +3,J#QXariZ=OLk;0V.U]\fOhKI=du#eIc2s'Qes;%;#g3Ta%YJD?[Z:0a9hslnL85PI>X2,ca83 +_S!>^8bXD2Ar.WtA?PDnohSU7r=?O^;)P\%3<F@EjEt`JX_kj."q\cmf$B^M;6/(=b&^sr5FA?3 +j]VF01!eMhV9c6-4/e7nj#pCOZF."iqW2jZ]p<]?Y@HMe4YPl:+>[6IFZ!&]Ab&mqWVA=3WAXL" +FoF^0=$[:DK&4t;-uBS,D3Lki(IB-03mq-[e+(XSFa1H9/a59<n?jS^W`pfLl`O\r_9A^*.a39/ +T__5XgaS'>/;S(tAlaqpL^00?O;`eFm-W-S$>rBCTT#PD8EB7=Whe.\`8"TMS0E\gO<DLF8iZ'* +IS;Fl6;<8hX>8mV%[MW]8Oi:JaqE3X<`SOa<b1c#L>#rf/Aq^_"%BO$krq[RFBSnP%U`0WN21Qj +'$?;r:T6O9V09b5rkmic#c48!AZ?5j?>1bi"lOj8V%O7<^'u4+#G`L3^gmhMXU,*jA?7Be0TZM$ +mZar&$Dg:-jmZWVH@&KdPTXdK-3dSt!*=l%_k:?K/Q,_*0#UT%>1"J3&KkJ8T#E"7;F"EiVd*Ef +1k3I/8AYW:jRPm8'PsU0<i$-J_@-d*;?[/-"9=m9kgg$ci*iGD;^;?,V)U_o4B)JP</0g@"L`jc +>eYa@%;+\laU8o"i)+(l$t.]tW1:,.FQ"Pr#>og,#t#I\-3oK_#JaN8+CIit>4_.h9P1qR#o$6k +o[j>__^@Eb`a&$6fEJ.8E+$ajXZAZYepSZ+#_8iZL6r>KV]c%*$:e>0+Rf]QNtcPRJC2FBZ-=9l +\817/%?]Zkk,,CpkR.B`Cdpmhkk:/Mf\i^ZObjEc;<hFtg14n'fjNSEa"EOZRXWFm,):LhdE<Ni +=9S]%M<1+8Ea9`C$Gtp$[V&dJ#a,VSd\Lnf,c_'`i:/*F3rOrb-k\6_;:5^mi,cuH5"(JVl?WeF +R-)RqQAi7`/?04.XEC?h\!#Mrjm^^amk3bXN!iE5_Qm6;9`.ff8J:N%8Y6pKYpV<]0ZH]jZ5"s4 +$<r<+%^O+TC],q"i9IVm158DLo!]0o)_L3^IHHK-AASgSm4@M3@]TbWC[PgIAm!LB@C#+I0h+N- +<^+Jhn#-Fj+L`Qc1FQY*C1-+IZ<]/$;'mbV9X!hCns:B:^1qNm?AmHIa'?3>QTD8`=3e<Q7N-Z9 +#'09Z%!$`-d_.V[dKu`#%3Wl>X=eAqO#\QfeEG1eF.0=sZNZPq_!3.)F3b(iKe*4$""'8<ln/E1 +>*.h&4lAaM8AdGdmTd`HA4?GH;$^QcS4s4+VN]1g1XeUOFXbf_Y`nB,LTr3\Zrg2ZOK&1IJ>rrA +R0h:kB9WWG5_Mj,Nu;i&P,-N#WnOT<:HjTX4(]gc%E`o@`i3U.B>@8P$V]GK1jOi8HmIKN#Z>.T +;_,4l-o*VQo+[&0=Cp!=51-<'#a/Q=aLfr#&:h#Z&[$u5dR0c2.Y7^~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 5 5 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +13 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 152 0 R +>> +/Annots[133 0 R +134 0 R +135 0 R +136 0 R +137 0 R +138 0 R +139 0 R +140 0 R +141 0 R +142 0 R +143 0 R +144 0 R +145 0 R +146 0 R +147 0 R +148 0 R +149 0 R +150 0 R]/Contents 151 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +151 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 2066>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWR3-D.]C?'LCdmf!XNIiKN&*_b!TiK.&^_]6D3g]R)E8D +QGuD3E</rW-mY:BLEh)+l=2jn:$1D+:t,grj=68mX_+s[LMoWrM,ebV@H1_)\(J*pKl<JVVj$'C +"-\&5caV]1%81n8&.M)20$MAQ0XBEF?C:bNam=`VVZ%*k_khG>rB,Lt2nJtl43FW#rO<4Kiq,5= +ldl9?ch!J-\8)KWq5u?=klJK_>E]:RX9p)h0bFI(2R1JY,g%hi>;".)BJ=$8#&6tH*/255C`J3^ +.o$s?Xh/Wb/[0m`^-W-)T(C%Kgc1Hfn#Aqg_Cg`,l8m9k#c5YK])_<<9WJ_YZ)i9raihpZ0[2AS +8m!$e/Fu@P!CGF`*/:0V=rTRi5d2SlN*p*5%Er4s2`>/:`\<C)8G"UE/XTEgMLn`ndYWKNW"i'+ +V!U8K!C2N&d,TZ!(QP80b>8U)&3r8*6Q"9?";BSe0oZ8@j=n"E.-*CA"&/l)%KiZn&.X=@n2aG= +N@dh!F0+gmM?B,l@>oh0j>+.GGiUu?!tBNY"9Te'0oi#Bb10WOPqPhaeDO.H[UZ^f@GDWch@L"q +aKQ3af$N/@"9RLX0jDODa:L7<!/`4^,+(V2KG\Bo&-i6ODB+Rc86KhifJr7c%&!jd?&U^9`YsTJ +!_sO9iLWs_KqY/ZLSEaJZQ+jT+;>MZ+TSB#NWY!C@c66rfg]>DOP2_8ZQ)fb1DuK")$[X[>FFY7 +fTBHM,>ED:WZ(Pb2iPQQiM2F%:7$W1,Il,g%2F]Q2@<rjCc2^1*kW$nF<L$;NgI9ED%0osRs!Dk +h!udn_l3*hE>6rq:5WP1O(i<mL"0dU=)b?M>XQ7^ATB_Gng;riIN0nZ*9U$kLt9)Y+UV[$?70YS +TS_7US5hTq$3=h@eoOl!Hc^sC#a=7N5sV_7Ni:ma1Q<.e`K6$'(@bj?iu$W2NWW(d6/_M4f<4I^ +#i7TO("ITFNVkJ+PN=f2>F2Z6Nb0&]D"_a\=jSQ$J@H-nB0`YQ3$8W%q-,Gdi3!/a@1;FlVP81T +MV=.DC5l=6""40#Rc;"rm=[L.2Td#W9#Xkk\e'X`TV.MVL^n4U1HGa$h&ES=D\$"U/[in,+HiXA +`nBB3Q]TP1Qph,XU_\T5B%9Wn2['4K+@.l1'-_BQ"T`K*LHsc-JTrgXnVe7h0^9Xq-n]k_[8I5` +?5s`BG#=-W3#^7P*@#Z<N<+GqL?BQrc!Y.CnPrMAq!&`^4=E+&+;_=n'FR3c*bumk4?#5lh:p"' +HEGCD[+QQgi7*p&:E=XILm8VSa>Y=d`B"'NNZCKKFTh5>(<Vdq%$P?Q$:-p(`49Y5N;Ta\!DX>` +=I;ATJ2mg3W#:4Q;(ncN"_+`S0#dV'+'`b=1VoSCL-X#lK-I'$_85LgF`\#/ODkZ%Zo81)4rMjY +Z44UZ3!Ook&(ER\#G@;!"CS6G<(JU'dXk$+n5*q$4T#K5<&R<mFP]<2SVWGWWQHLH&XRRD%'Ik/ +YD.e8,2dR$d=O)B5g8SI&9A81\SVOi?5UR>BoVb62,b'8*(-a;%j:S#;!<'/TdY1c5kRMLaZArt +/%u0$C5rEf$FRd@E=*D-&5jE:(h4D,"k9)AcY@/e6$gLPn^K:FqKi]\h%=jq@FM9-5jG!l^(#3c +C=5Xf)k8H8Q2uq"[$W0JPq[<>iK,cb0ZO<3r:LO7RS-\9o24<gY,P0iNiRBL#US+tU_VH7cBab( +Qi30X0:XbO_!2c3;r7cM?p%2@e-r/*C^'@&>:W;04fQ+T>BKGUaaiVd*8I>c+WYX=$9T;tZkKU, +MJE:g->J0XD[!6Mj?sqc)\kn_"gs6(<dT76+tK3[+V6EE[0La;]nWd($?4j9k?'"BjfBsNmb?G; +DqQm1.YU]LJ,~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 6 6 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +16 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 163 0 R +>> +/Annots[153 0 R +154 0 R +155 0 R +156 0 R +157 0 R +158 0 R +159 0 R +160 0 R]/Contents 161 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +161 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 1954>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWRXJGRac3qK,@K4<SUT0)1KQ^@b/al^2Z3*:P9Dh'bZLe +]iO=K9SJ4t</=49"&XTl7B4pAD-IqgRouoI8+i'l5-GW=bZsa`>k[o1U>'I%i2o.DPIRI[E]*6[ +P97j0_Y8C_T)UHac"@.qC+Y@Ob/7G0SrGW4n&1"j@=L!:aq,\ML^6F7:qWSC+`FT`1BC$E%YFso +J7bV^@E;[m#/SB$&.454:`4s2T[X,NYN&IP4RRgroqb?_I1ioI_S[$KDR0-TJP1nV\iT:i%hu^9 +"?u]HOl@39^JEnf)MZ'.A/YWf^i11.O<b88U]HQC#_rG"DA^KWW"]pO@mImj%YH1k,6bm`OuEk\ +TY`SrK*^ZtNT5+:%ENQ>:FcWi/-`-Z_/O#^6=QUU/VZ&4cSWmfCu74*'O[:bNPh^a'SPr@rrAa6 +fOu6-!GH!^Ku'F"X29K7[N^b7.)n<l+TU^_%&![F2pHu"mmmlU^tpu/UBoX1"9Sql&.V'PhE"DR +Y[SPD:_X1l"jg(RK2>Iuj>][2B[RG&")-@U%RXXH3X):o?#pMWD$i,"oBi\=dZh*=qU7?N$66o> +%0dLVoml.+h%r%:8.:,Aa#=F8(uR*,@p$T(eg%Q?3R._G?$N)?V$8CQ6J,*cNT6s&'[sm[D'T<O +Lf&eafcEeMTV9G'3f\?C8;UpZQr#ULK:q-C"lXmd1LPcQh/VQ0`_[NV!oA3pBE<A%3AoM3Mkc;` +GhGVc=r"7ZB9r$oRZ&JQ`\[k:JC$7\iCLO0#uE1LC4ubGlS/nnmCR;]<t3._%V*`216&!k9sX-E +kdsn*i<IE1%2Fu^0oA;JRp_6YKo=1b3(G8LO#[WhK$>O%dP4ahXtNDmZ8)_`cVP`g:"-HI65WNV +0Mp@pdmV_E:"ZQeQATg^au#-%9Ds.h^fP5G<##sY\bB)m<E<-XI:HF2[CG$tN-3s'?eBN:M.9[" +eWj`QP%pCu_)A.`1QJ5LoJDRDjh5V<=!e![6^k@e!44bj[`f+H?uKH3YSRL_oXmJJF'i@k226(e +)&<3(=:OZs/iCe^f/s1d:_Ej73"Z4U>/<pk`R^r2@/HL`S-?(J)1umImS_aHGH)hE.(3<S!c&2N +iCjddLQnXmC79lLI8Hq$3#*/a*X`@#.C[q*dQrL65sV.)7>=VI=\rN:_1XYBd)<Ggn1J9'a[S(2 +ZPnCQ15I*6+i]o$(E%%,8H?[K")q'KP^mOCZ0F1K7W]?^.lL>R]T[t5:sfAeJq,#pZNaEA*12@J +BbD%?[,u\\g'j(+:5CXHB.#$0^b6/uO>-h1gtWOs$Xp,!1:EM"$fL)H>[_dk"XJoiPJaX+:rV.e +;R6i66:clLrC&gp(_t[I[WsO*jf+$joAX9.H@RH*"]t'i)03rEi7J`,WPWG,\29_8&i;@8`.M*X +.$lNNrk\9S$XW<Y2:(+VcJr1m),PEpZhZffRH"97Cl4eAj;W_J:r-6.A"Z-/4NK3\42J`H"T_MP +d<YaZ-us&3F=N?ucqsu,(iE&A6?BbZ9F:lHAu2F`P6-97'7rbWV57djLG`J/.G->PToIMJ"`Z'I +M]?6PKon,WZCdeL%Lo,-1UG),;o+XlS:TL'#>2-b.`r<m[!&M_5]@&4PP)!HWj;b_VAg_\oTO1< +YY`>MeCEAjX!$5d">KBahXqY`kTh(R^kS@]TO^_rkp8*]+V,LGhlU;I)C`&(?f(Hk:[3A*[.urp +_nD`I_2c_g$V%;8I(X=``gAO8R$d#f^R@Q1L'E>T/Q[fM0I9PGJ,~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 7 7 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +22 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 165 0 R +>> +/Contents 164 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +164 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 2432>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWRXJGRac3qK,@K4<SUT0)1KQ^@b/al^2Z3*:P9Dh'bZLe +]iO=K9SJ4t</=49"&XTl7B4pAD-IqgRouoI8+i'l5-GW=bZsa`>k[o1U>'I%i2o.DPIRI[E]*6[ +P97j0_Y8C_T)UHac"@.qC+Y@Ob/7G0SrGW4n&1"j@=L!:aq,\ML^6F7:qWSC+`FT`1BC$E%YFso +J7bV^@E;[m#/SB$&.454:`9K]T[X,NYN&IP4RRgroqb?_I1ioI_S[$KDR0-TJP1nV\iT:i%hu^9 +"?u]HOl@39^JEnf)MZ'.A/YWf^i11.O<b88U]HQC#_rG"DA^KWW"]pO@mImj%YH1j&4(%ZauU#b +8DH"S!gr1*N`-5*%)[**MNc3!S;REJ_5]=/#3!KK-;.d'>l>'UR*m^B!Z9cPNM?d71'OC_e1u[Y +I)%Ruj)F,pK^\7,!24JlBgDp.4<H)H_P#"&Lf@(ar)**G-E'i$!9QD'ds1@&:6cB")bNp@#T6I[ +ODdG.@hfV5<?ZGu&d/<Pg,;nA/>OalJO$FdM3E&>2GEV5hD^FH=OK58<,HDB%$eWa9FeC"fl`9! +.-;'L_gKLCM3c4Z.ZS!Ec8+4aYh0Kp@Gp$;e"`:X/qa8`a*5s?p)/bt[&+p%i]*M44,jmg0oKND +-8[R:FR:b@N7J/!'Ef;PbBW0C!4W_M_$4h#Mh+WES;!X:MDAIGGcE_3K+,U.?i^8K2iM7Fg+q9j +f]Spc=if_\iH_SMT'Q+n`]@co*f;E5""qp!Bu:3BSrP%s`'!<$#,S>7g;_JRCO-b>/.)FaW$DP7 +nE;UmR@\F[9R4q(1%H$?kC/FYDUY>;K9n168/dMdWp9H,!ORlo<7e&U@UQ1<k+f/uYif0Ma4Xeq +Cr<W5)CV`@NBPfHd;PR.s1n?'^;)W1]`r?jLk;:U(Q/?eVC?<`#k02Ir+rj4hmsmWIUCTbd@k6) +!0-R6gW5eroUGQ^mq.usC"ha^DiNh%T`Bnl"+Y1r/`HXej`KPcX(Mp9ad7`ph#&,V]ljY=(kY*/ +fU];B;G)(#]>sct6Q@$Sat;NVVOXOdF;#+AmE%YZmMt+G6Y<G891&oZ)IR&f?d7Ot^??oXP[kV\ ++jLXS!6YV>kXC;aI7sl*N#9H*Z[q(p00/1?R$@K.Atdb#`(0<aioE@]Nq&it=M#/SCeop>/eCHJ +_\L(R=aTMb3!YQ8$X)d&%FH@;Y2J(UP7Vhel)6WIn3@ZhaB3hMAbNI<SCcAMSS5i5,_\2S,sli! +8O2&N^IE5`!L.ea8W5D/=R$qPj$chmr]nPM&dTa.L0tDrLG8rp`fl#\Jmbr$a9^f5+dBfmU!,=t +nEpQ.nqpAOlkZm'fGl4Pd:fj!@fct,*#K5gA?[gr0>Q#H$/f6,jDhq$L2SUc],+?Q_J;%9TXs6: +qb\N]^8El$*>8!r$DC&c_AFmBQ_]_6&AU&U(#og2:i$Sk\SS'aQjNnfH&0ZjCU%$lXdN,$RBsG] +KM\0R![prV:17=$[;RqT'*)9'a`9p!=9ok2(S-K?H%H>0\ee=tOJ%09[r>["_k8Z?NOUitpF<)3 +!ndc.D/R!ViicG<4/@G8Ijp'#kTN'OC[,:a-@k"aJTrhV:r,*mi8u!:=CVcB@=s0nk>5LUG"BO_ +)lKL#!eG*aGGldH"*KER'mM,aag=)6:rj\V;J](Daop@!(u4%j;$`3t^FU&rJ.JZV5aCS5Uk!7j +e-1@'6#75<.b@Zd!%A)La_;A1EXDonBXKb"(]oGiCsS1k;F0Gm=IX;I6b;Rm(B%qq!,$*u6=[E( +Yf,-n]\]bg%RNG%)Zu"8AJOU=\j50lK.q(]"0K<A!Pg]"opckO@sGP.!ji0Nj*JO.pC1kHpf"fV +EC%k#%:Qh_h%3hENGZ^AC[Usb$Q0#IIK$u?G430#'Fo'f-k+J^(f8#Z'`q9;"RU^Q[lJ9,"0Lto +'EA\*REnGVlMD&&/3!k-^I&_Ca<7/<]$Tr6RDCr]@'/G@hA!XG.C1=JPU^0IlCA&g'0Aq_TJD,] +'jO(g_cX?\Loc\KZI\#>#E1&Q<2u?+_<+BqR<C/<:jEO^J7JnXL_t^paW0"O4:TP;,;5PA&#r_f +#CsQLL>;(H),q8^+S,\;SH#/H?+tOAZ+FY^$C^TNJ]t2p(W2d"rGsl1GWDiCB'fbiZgNq\^s!]! +D"jlL[Z\oS%nDA&6koePG`Z)^7Y:SCW3d=edb<kYAtVO#o_+Ku):MQ;j\qbWk/>Ua]agDBW'ET~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 8 8 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +166 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 168 0 R +>> +/Contents 167 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +167 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 2366>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWR3-D.]C?'LCdmf!XNIiKN&*_b!TiK.&^_]6D3gVOPFUi +*(Jr8Og*V+</1edk#7u#dV^js$>2^4aQR1j$;-&G;&:BTL^e,WW8'If0Vh=A]UKEarQ;jnXdj`c +icRAU#Ug\YeS]fQkLaNS$93QN0H#)35%0/2e`ZZsr;N=I0@)TJrU(\QT54#i43KGB^O]0!WrYHq +.`D3IY%mh.6-Ag(kX&$2_ZW13Mm0cY&#,BQ6>mM=LbVRk8qmeVF!/R[N(Ol/ZRf8g)280\PSo6" +E,6Hu+j3X1L98pLhaD6r.h=:pW`87HP$>a6Ulo6[P!fkfXLUDFg`HZuEg4)L4HV]T`$&r4*ls4) +Lhmqtbr[W(19=)M)hoMpF;d[-:f%^!PN[6ONe<O%1Piq>au0ZZo`7?:!jKO"%\kFs(X[=F$U`;s +'/MNRJn4O<KG9g715oZ2;A7OP#[Z3n6X\)9<<5N84:S&s@&=+KQtRHro^G^]%=nZm&65!7?!pY' +6s@bi#aKEKL8Zsk4V$LslU1jXJE/YJK;cdFfRlW.1C`APfJei_(dVpIK7N5J"kH<m2,0BJE#FBf +h0V:f'gQ8(=4ROU0\)pMP@)nN*XW_5@ic/3=JIJd;?c*"l8I)_7N[<C31.`Y:c,QhNE/#n$!1Wh +f\(si(iCj^j"8PLNb%pN>tVOCN`DBWeL#L#jk.!rOlfa-Bnb^F%We@N9Us-^<rnS[BiDmA<%We* +.-r^L6c_M,L@MKc*$YJLf[nmt#/hJd+c&tHlh^rnZ0\6Ycnpc0Nn:^n(M2A_DaAQf)2>bPo<iIE +aD;au!sm_uU4J\L'FOtm_n0kL*r%LO(=:2aNakW;a702F'uga\\Ag@G&[*P5N.X[AbObYWfs_AQ +D^6#"j+f6D"T6S@'FobFD6hOK.,$G9_l"$UF'EhHde(AJ-mjeB&9&Tm"!HGTir3NJh/ZuLX;$Se +TTr7/HFC(ng>aNo)Dgp!?lK7OW9:PeJT@n%hQqBHn+$7,QgWrTZ^:nLp%pt/39Qh7U(,BgrfWV( +nXs+Z#7pkL#2m?=K1KWuO3S2#`pC.OW+U77A/@O>o!O+7,_+0XlNN'K%$AH)H`qke]\"Y;JUfat +mZIbd8;%r?'JY<'29IFJAo1OhJ;&\f)SKP8*"?ta%Vs&U^9sJ!_5dP::V#f)OAZNbauiaEmI36J +I+RCGEs<cJ)$5S*kp)(-Ne!cW2OO&])fqT.Xa2duR.VIe@C6O6qEmdZpq,R>L5p9(FMOjH,i!3u +DK7b>[FmDUT&ZLRTtsf%n8fMt>2Ba?ePUq_1_&Mb>Qk.*]=<,>*8EBJC`oFtLBg!]<-W5@Oo-(T +jT;5gpc((FTlNQ#D\.OGQZk2#3D4nDTUOMNI1N=N/NCi]UG+8M0DP7]=1oP['8N)G&>m.]3"DDT +l^X)l1=$iXN@1OH%B`sj^E?H;Ve@JX@EiT,.HN`<W,E*ng3+'"6LmJa#+kFPAhCAg5N`k=#;G?j +Kc.ctB\Yp`+`J.<l7bLP5UZpq/sE?&[bIL#FeOllJ%/>)rhu)1VQgQacoLtsaI"cDY>0U6\EbVX +N3$F7FZfpX+<.%AlOH4CXtI:%!1"8#NR'Qq;\L#.JHPaR!4J:#3@a=<?uHLJM6oJr.dI*rLNkO[ +/;E9GWZq7@=,TeSKn+ag6@_`8T]r>W7,!S8EqkSDm=[#*LKPB;2-B.oVQ@.2ZVO4l=uJ&^Y4hm( +'ghLdFrnk+7J1"(m+l&$*EP&jC<B\K.qf>gTei`YcPZ6r;2Ps_=r*ZC)N.OBX^78jai'a$N660` +HAj4cM\'-.URp']j\s1/kNVri=#VGk<=1$nY2C_*l2p5+]:i(-^"\0[nuYZVbB)Z+`k=/Dp!XbC +EUQjaLA,AFK/`<\iTP@eQ^0XaB<>+8rV6U51AkJZ:`\>7$,EbL$t.LYjPS^+_4\Vo\C4WSYX>h5 +QuY6B):a-(^(4'!Z>I=`s'mPNGH<Ia&-CI)=bB7eXVJJ[<tO%iikuIp_#u\]+Nl-9o4JNUJqYfs +R:i=Il!2#T5R*aV+$g">%a$mj^F(N"ee=UIDM?KiG,&BF?q%9M!l8%Cd:&BLM'PrU`mpSomT>I4 +`KpAD2$gs9X6#mXX1pSs-0o-o](rOQY<CU:NGP#bY%\=@gY4VM&2N[:A[^!R>MUB=)GRiPg4)aH +P_`<HT`G~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 9 9 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +169 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 171 0 R +>> +/Contents 170 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +170 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 1240>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWR3-D.]C?'LCdmf!XNIiKN&*_b!TiK.&^_]6D3gVOPFUi +*(Jr8Og*V+</1edk#7u#dV^js$>2^4aQR1j$;-&G;&:BTL^e,WW8'If0Vh=A]UKEarQ;jnXdj`c +icRAU#Ug\YeS]fQkLaNS$93QN0H#)35%0/2e`ZZsr;N=I0@)TJrU(\QT54#i43KGB^O]0!WrYHq +.`D3IY%mh.6-Ag(kX&$2_ZW13Mm0cY&#,BQ6>mM=LbVRk8qmeVF!/R[N(Ol/ZRf8g)280\PSo6" +E,6Hu+j3X1L<\1lhaD6r.h=:pW`87HP$>a6Ulo6[P!fkfXLUDFg`HZuEg4)L4HV]T`$&r4*ls4) +Lhmqtbr[W(19=)M)hoMpF;d[-:f'7`UL7E^$q"FF(QLj2`YXF596/jp1LR..:K-?Q5YtE+$l=o@ +W7iI*,:M4"K_16#5E%E.#=?etR-6Ofj#oCu<#$,q;UVs<;c(e_*@Xq8oM&h#eo`i%6dmmJ4&=H# +Pt>Ca!I[sK2ALY&:rSV<gka7lb]t:-i)$?e$Xl;`1B[_LCk@Eq3,TE@,C&Npgu4G**/9#3C,4W^ +7FW"\K6Z61e[NV0FG:T6bVtPa'snh`2mZ^h$q%(6I&,_gC`%j.Yei:.UF>;_??`?cO5.Qp.uT)` +]f\2`!Pi4b"Tt^dHt9cO0G]]$Uhc2)A%9rJ$tDaA2;t<YadVC;^e[`/q/0LQ%HE(G2iYXsLP>s6 +#i%1EM*9EDN8k:QX5TaiFZS>g.-r^L6dEf&2>O*/OQm`IiYZMNL*S`f5tJR:#uk\98-K)j4tqX, +d+Lhj!l1H_Ng^O%4:W&RjuJD^TNu*&>TEA[MZO0Q-jbJRF_%dV<7oAM#`r=1mi;"N&6$CLE"H)Z +FX>NmG-k\'"kM1Mfa7Q4-.CS39\22smn[>D>IF]u(t%+b-"YG(9nDY4K,D()#GF+d'8sTVY?fe& +`AM@2s#k)ag!sA4p3bEBhdQES=2Gi&T<3^I<4^%tMW+:\`@eLSR`Bi[g&jM$^^7iHrIBtb!%^Xl +!h])>I4ugX_1b4<$DCEA+9~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 10 10 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +26 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 173 0 R +>> +/Contents 172 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +172 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 2582>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWRXJGRac3qK,@K4<SUT0)1KQ^@b/al^2Z3*:P9Dh'bZLe +]iO=K9SJ4t</=49"&XTl7B4pAD-IqgRouoI8+i'l5-GW=bZsa`>k[o1U>'I%i2o.DPIRI[E]*6[ +P97j0_Y8C_T)UHac"@.qC+Y@Ob/7G0SrGW4n&1"j@=L!:aq,\ML^6F7:qWSC+`FT`1BC$E%YFso +J7bV^@E;[m#/SB$&.454:`G*4T[X,NYN&IP4RRgroqb?_I1ioI_S[$KDR0-TJP1nV\iT:i%hu^9 +"?u]HOl@39^JEnf)MZ'.A/YWf^i11.O<b88U]HQC#_rG"DA^KWW"]pO@mImj%YH1j&4lm&YVqJm +R-65a6X\%t"9O\-1JC.agbFblbVp]dWB@7"aKQKq)@"#sEiXraTU@Bd+`K[pNjB;f1l]C8bU/0t +!6@*XA#S-D%YL-H'>LaK!enueTPtGGToa%?8Q*XN"Uea,cSWmfCu,^,+_j[e.j;,n'96QRgbFh? +4aCBlaLqin%J(Te?brFd@q"#bAX-u;ctI;8g(OJ72iZBoW#XRN5fPM5[btG+g>`afF'52g9G@uF +.*6d@iQ\G<%YK3*GQe2/+up/mjdfg`3$%s5fX"u*1gsIiAQr(M:h+.eFR;7N<&AaR#)6.iOZMIS +-r;a\GgL#X%jQ&M3"C4G"rngq5g<tr,3YsO5dHKN7G)+gck'D>:rYGRUM\X=#?;d:(l$J'"TflL +G\F/*;V86J9iGTY3!t:_hDPgQ8E_&s!hG9*f`;)s3GF_k1QKr7!4W^Q@c11a#!*NU.ZS!Ec8+dU +0\N7(_#S^9NIuJo0TCX$Aia1,E985F"5%lQNMD$V0[(^0q@F$^G8(gO_bAn3"l4u"0'Y_fmPI\P +W'SIE*1&+t>ZW:3<]kbj-cPZSc<Hj`G0]'j;SC[^1j,@.bK^9b"Xl>?Z\H6,e!nWK\U)BU_bZ!H +W8odg)qa:6%$[ZtQJWo=p,%`Lk#n/$]D&,a_^hF&DO'3B#=RemS'2!D)+c8G/GIZCiFD,f41;"7 +cGO.SJuVhH1DJC])N(=]m;s%%pPeRt9>Yb,Z,AU,"I@lr/I5a8L4[cUdbP;CLJYra1<9sB>W?Up +:a(7@J>Nt]UXB=>8fB$9Cu#2>E//E%3'Ogl'GH+;Jo7MI\Q><,!VAtkOYp/@eA<7NPZ)oP^$`SP +i6A#XE,T0I3JJ+1)^B\]Hggc.!f1:u@jEs1OjW^:\$I4-">l+AFsR8_!Xi:=F:<%>*\"C?'OdYO +D*WZk.Al%e_ipm;,sb-NR/7:Y'TZilM:%(9f#qL[Ee#=G4"iH>bsOI.IfZBg^+e[h!t'9uD:'Il +!9l&21b_p\3QD?ecLo$;4:]Y68@cct'jn7fPcpKNbP?`-=_iAPb'_IMB\8gU4,S)EkS)"YPn`D7 +nV9Dr&4s\"*(+*sI6k@`/K'/0UkJIOO%O[o=EY?f]9m\5bSJFD;W`N5/>=h/2huVD$_gHLLf(%% +4@^h)S!%]!@"9F)5`!TcC7oE0VJnmoC7+5;G?Q/mN4XVm*%:0=LX(m4dpV+`Tc6?l@87=;&FeJB +C^,E2J[S$Uq$j?'#]\?Wc,/[8mFa`eWf`$7WkcY"g/r;)/m8+)_!s)\TP0e?Ah'cJiE02QDgrp< +-j1*[&ci.-RfUd&Y"4ctUjUW#MFOm4WmP"I]N.cC#tVs+k?Vl:H*$SZ^,_RF^nIfpO_MTP55;2s +lWf;WOh%8]GTA4H%&'>:G)]+n.8F\RDC:""43C*J&tdF:HZX"8cs#+3T$VA^NjUf?`TH%0BN5C* +13Z7M=HG)W:(EMKZWMLT%ka+lY*I_R=0!cW6ZbqKQKkcQ(Z-JjZohf7^bqa<aS];[jGSSn*C#'? +H%VbQ"BXUT3^D$tWoV;+X3Sr.WLG^3]K3Oqb&c1!h%o<5>mF5A7*[L0I^$6\M*Zkd\k.s6eG]c0 +JV5d3]KH&.'AZu>7f$S5du%'5`krHS%9gQd,Jt5$$obVT]ps*\ES[sLn2_jnLn"i?RaFk=c;%Je +%+6n2_25GE0t4XXM1[[b\aB1:]8:(jZ=>d#!9btdTX5(T,WZ;DbRamnM#s!'<51_P3N%D_r)BU= +bqAHBZY:EQF+A;V5`.U8<:-7Z5'j96ln%;@R@kC1A9<BW1C'$#Ku"=<D_J1Hkc*GLZthRYH9j:M +,hJl7^&!aMHKRZ"[@76#Ddf]K@_$=YR'4kZ%N8S44](5:ojmRBm+G(t6h-]L0"0,GBeaDjJPZBC +,RTrbH-=Q"]SPYU%5][mh2otk,;!l9Rt;S]c')DA"X8\^"jL%^KZ_n!*.Nu7H.<VGUUHW_:2/+c +f.&#J_d\g^OQ!*MHYpH($jXGjf5#5Y?"!$k7%CZ^qn%`J73L@rM"-IJ3C)F=e;I3lV?En1&-~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 11 11 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +174 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 176 0 R +>> +/Contents 175 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +175 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 2690>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWR3-D.]C?'LCdmf!XNIiKN&*_b!TiK.&^_]6D3gVOP"+_ +)G=Qb@CUie%MTZfVS\bJ_K%OP:4`P0Pg!]!),8+,.&<eV"VGbi8:]9t>)gG0_[8f3]?RSOn(d6q +>1q*.c6lQ4n:H5>]iO=OI[u4i`1r+mUC@/Me*F<n^(qYHYM8^FF"B*h=6m6(4/rDXq`IZTfY;u5 +3i`?Hkj.g)/'jYTks1>^(A4Qj'JBCd98g<k6&u^/"/Sgl+N6&I65VVcb_%1`0dp6Ybcth8Af(_e +:hC]$_6@_qLFk;Y*&l.FKYX;o*#c9&+bE\[5I,XX$EQ"90^,^G]DiDRdUY9_b0_HY,Vpu=.l/oB +@ii^K6&RlC[*6EEb-<C+Ii\g=$Vgj/"2e.N%V$p>&-]2'=tt[2&F_Xf,G<C#"B6XL78]:g@n;<\ +SJObT!L5?#;)I)K):B_e\K\@'P>!<!JH]=\e^Q/s:su+(BhVA<V)TBH5tFb,cW+@L1lbuEauGEV +8F/%=,BIHX%H.<(3"?$unhc?D3'g%CT`E:qNItWq451OtYUPE\V0tN4Jc,I4Nm5B%1l^O7H4^?) +FW_c]f2uN_$C26J4:Yk/F?,A6b@3Jk""Rmn?6b`uHJ\D@+:qi=E980KK4XI-%YLG4*<kDHmurIC +]Q,rk6TABha8s@hF,>HmW&Y8Ge\4$QTb[H3Kbtj<*=d]MgM5-EkhARc@n#f%kLWg5=(k\ia(>dF +/rcZ?WSkWON46=]9833?=qGGBeus&Y=ub32le;W_:MdV(GSfDO-F^JJ]/G;Skdu#r2f&9r7Bu,= +#-#7o@sHooKqin;5Ysfr`]@H!'cms)]N3Fmk@&&H0^66FA'=I$XY7Fi)c&iKoX#-)bZ@bd4k<XR +reG'EK;cu7npQiVg2g7A41"4A`eW1<K1BpnoGM:1k3q/]LVW5.0<;m,Hlia,nN/s@l#m/!:#Yb% +j_rpoH64*Hp`D^tg5Qj1O/_Lf<Xn2*^9@1cS.g<gci&MNTZY.hE-,p3a^D$^YS0?3XYo7ZfrRW< +@fpsmBjnM,'a:hN<eB6=@ARV='p*;8a=dsqOqIiiRcT0(0+Ns"SMJ"7^R,)>J`/9o#!h#^_lI0J +b7lQ1L3?')@bk5smA5S,kSp%dh.-qNOuJ"o_@:`B%Um"2LEh&h_`232_78/"ohN*V@]N:U%PF69 +S-T3iDJ7&Rf0n`c#Qq)X=J;rUL*ert__?+`,nq^0n<sqs^gmkILbPbBUp4'q<!36=5o[W&(;l@r +NBj3^W#2>O=W8YmnSBud5[;JMEo(Ai+Pal`A/I[)C^tHU?_[2<S4JP57d07t"[H$&_*BAm:0\Ha +!)a1jLbVCJlkk>0*?Cl-a-e@:Mh=8kee]7DRStUN&TD=h"3b#;dirZSY]'pp@e4GP>&he@>redl +Fq*E-%aDPM%VBBu%T&<9/Xb?RB>LQQ&k[LGn8gVJ.gode5(]'H:p_VJe-6SV3#d[A6tYf."VGUU +;2Mpm+[#XPoQlA<l(^6d]]Y&XUb7?dPcA<]^BG2F+@I@9*5Qa:#4m3fK':0KOiT4%;`/.4\@FMS +0J9$Vc>,Ddg)--mNJ[<Ncd]M,jJi2.WR,O/e=*HG,NNC6$g8E0H73Ra.n*oINhHPXo.3iX.BC8F +)1sET6Rgi%XODc@="8i*B0?g/<E=a(Lr1)J_d0Ihk_oUY"M/A[J>6p-Kg;)097U!UQji,'K2?:j +JX"9Zb=u`,R>kj]!UR)7@aj$"@Laprd02G&f@$T@CMcY6VJuMWa%<[U/V#6SME9Ns=g)]p%3&QL +`oKhI[q@=1@"\+6g"PA)%;,B9Kbm2"1g-Sj0"g)3+kGZ0)g?RF^aKZ.]\2+=$4\WV-oW_edpD$0 +>H6)S>IV/1?BFRn'Q)6\2I;a'X+_d2C-2]NjG?m;k0[hCaMC;Q*5lPm1m-b_#89#ci0h30/%!06 +ZP*iO9IX#8c!1F>HFG-`clI%B'#XHL@FB=-N5;V,%0=15@=g<E!OV$)n`phI$\ZE;[Md."T+9oJ +(P?/c434q\-K?YL?(/K!a7bHM#B7O$B%Buf&24egS+hl&YUB[K%jKre0:ED`C/FD13+,/L*:=cB +^Yu(R<s#&4nEc`K_;WfI8_K]k/<Pr#(=G^o<jpS=isnr%2[9b!$_p,$WKM034#r3Tid-+bX&50] +E]D?]0LaATQo^_ITWr?A=:,CV6-2Y-`7WY.BE972/_fp,K.(rjD1-0I4V7FU,2iY51c>RJ+W_cc +nhnd8AZd^P$.jOp%[.SgZG>&2g6S`E+Z(SM^krVjO@+qg]unf8M\B9/jTHLF=p@tBDIgCUh%J6r +VXl?N&\:,uno&?V,m^30!$ZEoZoUTWX;`=E@15WD(RpN+$c@'P#f3?'#";:_9m7809>,JkADiF6 +%.?[m"b<MdPGN8L+Gd[`fRi5AWV>+_:!0MdbF.4Y82i,=k,ksCq)6b`UY9HX[u3`VaMhKopiX5[ +2Y"LB&"!&IDZ*M7#/J=5OuZJkKEM~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 12 12 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +177 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 179 0 R +>> +/Contents 178 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +178 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 2127>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWR3-D.]C?'LCdmf!XNIiKN&*_b!TiK.&^_]6D3gVOP"+_ +)G=Qb@CUie%MTZfVS\bJ_K%OP:4`P0Pg!]!),8+,.&<eV"VGbi8:]9t>)gG0_[8f3]?RSOn(d6q +>1q*.c6lQ4n:H5>]iO=OI[u4i`1r+mUC@/Me*F<n^(qYHYM8^FF"B*h=6m6(4/rDXq`IZTfY;u5 +3i`?Hkj.g)/'jYTks1>^(A4Qj'JBCd98g<k6&u^/"/Sgl+N6&I65VVcb_%1`0dp6Ybcth8Af(_e +:hC]$_6@_qLFk;Y*4O2qKYX;o*#c9&+bE\[5I,XX$EQ"90^,^G]DiDRdUY9_b0_HY,Vpu=.l/oB +@ii^K6&RlC[*6EEb-<C'DA\*_lU''O5sR_#ciN(e3Y"MJgbXc(8BNh!Jb*)4d,=u+0TC^`arU`Y +*?dgJ<+(+uZQYN+-;UuK5tj3^*Bk.dZjfnE%3m!A&I(N9='!hei7pAQZqV?+L1-`l9NQB(4%=o] +AGoG+o[OCG=5iYI162m8-VDhZbmA%7eFf#1<8i7(>M4)mGurQSQtKW-pFQJVgU(Wt)$Y71H$J,1 +AXdP`pVi[jg@Vd-J(b\2Q!E*3/QHuL_0]EA2E)p94>h8o?SftUN:It/nd)3m"Tir63Y!#EF`4Qa +F[XD/#`r=3"pd+O5)+>M-]CN'Q8aiRF6K"E"QPk7f*u4<5VTHq@,<p-g/-W`]>HnNfo7SNa]R*r +E9Q'de=bGVKu!bJ2i_&_UtLe)0^^cWK4$r*l%&h0(5QBY5W=]*T[GcYfsXm?B.X$jR:H=@6&KO5 +B&1$$!Gc9_Nkk]`0ob4rZn;L_Ih@GE3.T2*N+%.n@uGn/7;mo<(1n6cJc?8m%aDfP]oCR4ne_Kq +rZjT9@pjFFO"H1M1^pLQ@G,gp[U'Pbm9&.(LL&ik=cEN\80%lmGjk$R_n:&r%,lG@+9s'7YUPE[ +Gc3V25'Y>X%D=q9`-L=lWSWZ,VlVk)!IsMV"/%8o!56MZd+[A!P,3Vg5W6#(d/KWKfmiJq!Pm(G +)B_Y$JRI[s2)*2V+64&\:f'/9(cp6cQn<`[OiIZfg)38J)0qp\qM&W6(uYSqJoD&0K(s/"gXCP) +/2@[Aa79M-X:]s/NZLA$N=b!:c?]h4*5X)n'3<PNM@_6d6,<'Y@RL$J;)/0,8A5p.BP@loas)QO +nD>Fg09&9%(I1tV)k]SeMkT*%51=Q&eP&J\!4X_<!5]T0+>/_+Z1c8;Y-f2&cZXl`(E6KW_LnY# +O)Z3d_ABTR"&NKiJ]K^h:u3-re<u@odHCeMdMSYtEH)$'2hl!:pg6!S$BC!#6O=0>,h/n#:ng]S +-aPAcXLET'U0YYc+E!a>Hj-N$1;`al$U]KU%)J`%6NDGM'DNc'A9%nV#Yrd@pgXF=)KhuMbnoPJ +GR_q>5)/;#)Is522KHB25DFq%,uY%PP))/R5fsI/aE%iq!c1T1\Mo'R((Cqa3A/:8%j$fnEibCc +[s6=A!GdJpZl2d[p87CH&:'!@0gecL[&h/aDZi>=h7M$V+eN3pCTtKTW+JXB'M5Q1^pT$JC2k.@ +X1i@XZoCUr[lFPdLfRotM^mF89nOBkERRsc_;]_n<L@k41sLk;WbkZ!lW^>E%^&dnNDAF,,-4dE +A^u!P*L*:a"gZ^%bs9;]gnU/FNa^0N[lEQA"/9,iOjd5tgJM]cD1gB)N4]CKnI:ZtB'o\cZa>8/ +5sS!MoYjPM\PCPKaAe_(e2%;@L)];#790W:0dot:ajjlM:$f*]1A#JC'CBseiR-T$$SZDQLiSq= +J_RiY2Y<c&gCE[pn&*bsO="2rI;cJQ^@:4]<P,6;(CH/NqE3;B$*0k<.T+W=iC[fg=f'LeR+=nP +7VY(IX8n-M1-1")C)rD5oU%Pf]$X`^Ki4djd;r0RZJ0-M9YhI\YgtlV7I)gn_H'BLUiND6#RC~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 13 13 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +180 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 182 0 R +>> +/Contents 181 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +181 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 2002>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWR3-D.]C?'LCdmf!XNIiKN&*_b!TiK.&^_]6D3gVOP"+_ +)G=Qb@CUie%MTZfVS\bJ_K%OP:4`P0Pg!]!),8+,.&<eV"VGbi8:]9t>)gG0_[8f3]?RSOn(d6q +>1q*.c6lQ4n:H5>]iO=OI[u4i`1r+mUC@/Me*F<n^(qYHYM8^FF"B*h=6m6(4/rDXq`IZTfY;u5 +3i`?Hkj.g)/'jYTks1>^(A4Qj'JBCd98g<k6&u^/"/Sgl+N6&I65VVcb_%1`0dp6Ybcth8Af+"R +aBTYg_8pZG2%29gi&FC;+VDPkCa']B:;crU]TB/2-USB$q^TAMqn4:CE_NGF4OQ#@`%nYD)&=sn +Lnklod>L]B1JFh^Q3Q<(@i_p.3#!&3K>?V-#=G0,2N@lI_a,Z&#hh%hTb-E)KL,6bb_AhGR6?3( +"T(E=6a4Ec%\kFU2iPQQjta@i)!OMK@sI8t%YEV8(QT#-?IoT[LgJkq@<gQgNM8,U<"+B:;@s*) +OAA#pQ)-K,:m<g@AQb=A!'-'lb@3Jk""Rqt7Ir(eLsFtHEZ>;u[.Y](c+rl]"g+0K3"CR3hDYQ> +8EPp@,Cn]-N0hds2hV7JVBuY$"ee90j!\.D$2::_2d^&#bs;h*!)Iimi<*CAhj=$;JI\%o%>4j! +70_QXK:$`pfjU-5)Bs1rWCr,":pqDM+fKc(L<isu(67$J#u/b\og)GSP`WI+#s_O4S`dQ_Jf&02 +*fWlie-0#8%lG3KVeR-9Fe37"#)!cQ)(rHpAQ2rDZ>)FldAq+o%_&5=<&j)%%3lGMBn\Tsla,lg +<j3@sHZo0ENT6,b\np)te#V\PB-".16T66u$mQV:b&6!10G]X0h`*IZHnNUjo(ip72deau6$r:[ +349M,=*RUYUd;4iM2";]aP.+JW7]etrXX`'Gb^Yk0i[1m6WaI4BPZQ2@>JM0??`O?IJ[=dC(s]R +p+u8nhXA08if/#&15B2^JaN9lcSK'[hKR`^"1W%SJ[,3hKPh5"6+M;;/crb"TF)co%<u:A)ZkQF +)-4X"I?0q"LF<iV(V"")!M0T_F&Kj,9H+3Il+"%7k3c3Cl?s!/c9A-kk^i4GI8";iL<r]#R!;S< +JV`*9&D"^N6M`'k@=![l801cNhGqCsJ;/Tk]3<j+E,b;$1"RW\!Gk.4Yo/S,AhadJ89.oGnfIqq +@(?;Z1kfni+Y&$!*SBnmLI%4g#1k'?""8Ck8eqgjop,pd-s-`u1aiLBM]9Jt6WMH@:V]6N)r<XQ +Jg"MKKYThj"*e<X&@mRM#6=H>KN^9B\OA7YB#%rha"``Nfu@N@^-e]6=_:5`.8qd0)3f+FXP$6u +Kkg](49St@_,@9e5R=65n7\JO<iYh%XOZs1%'%EZ/8:e4e[T$h/379m$,E\Y(h*q>\mrbQ_OH[X +_-G0X)$K[=.\nh7Qa=P:1HC4!V``rs1U,D]!+lY7GVN*th*'*r`B%X:jWa<+afZn$NPT\_#6Ys" +8;S'+,]msl1!3rQ[=moa/=hb.D12^[70qNo:f-,EP_XeJ!eZsU":E7OWrU$7.=`cTo;FFEVE5/c +K#XOKmU+!7Bg:hJjd@X7fu)0%$c.6Y%941DW`gE.k:I1<'G*0"6t'#,P!5R\'\^@1jZVB=q3QrH +Zqos[0pT-0X&Y=h;.D=M*e61+[!"jY\JldHM_bQ&j;GiXL8X,GdUWt;'N;M:as7=G<X_Y^^VI*J +K;CD=8qs1o6tJSp'mHUMTn3=kqQa^`I%8\%WQ_f-1W+&cDm*#@49LrZ-M;eZOhuCHRQF_[<GrA2 +imQ$9:K+9H`A#=f2l'?M<<rj~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 14 14 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +183 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 185 0 R +>> +/Contents 184 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +184 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 2131>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWR3-D.]C?'LCdmf!XNIiKN&*_b!TiK.&^_]6D3gVOP"+_ +)G=Qb@CUie%MTZfVS\bJ_K%OP:4`P0Pg!]!),8+,.&<eV"VGbi8:]9t>)gG0_[8f3]?RSOn(d6q +>1q*.c6lQ4n:H5>]iO=OI[u4i`1r+mUC@/Me*F<n^(qYHYM8^FF"B*h=6m6(4/rDXq`IZTfY;u5 +3i`?Hkj.g)/'jYTks1>^(A4Qj'JBCd98g<k6&u^/"/Sgl+N6&I65VVcb_%1`0dp6Ybcth8Af+"R +aBTYg_8pZG2$&MBh`))Z!f06`C>0#K#ue)-aj24^YfZCPU;"drr''R@E86^.`/ca8bcqSXb/Ql/ +HQpSUbqh&u19=)M)oi62ClPg[:f&?o!XP5C$%a^aVBDR_B[VciAFq"'K-8T$%,h3/fT!#[kW+:u +#i%16,G=6\%3lGL3XiC2l8d8aLrMB5UMVk`%?u+[&-V%2<Y,a_Qqe?Ko2oJJ7Pf/m(kuItACFCA +5ftg@"*d'C#D9fu*s=k0p^gKDAT::p!Gc9_`IWHL=kbkS(c2[HAN1Ha+TTS;[FX`83t*?AlJC-t +I+oO56#^3NcPB/g3KBkEAgc)<Kgm(aQ1][N1DfG8@p'JqU=G%8jdC5>Q[;sYKNG#:15&\qGSf*X +p)AE^0plS!UB/UOAC$J4!C9esPa[5%1XMnDN^LlQ/.&%^gc(1%XXZ7fFa-/2%RYK^3k(BihDnQ" +j[_KlD/dGGj^OL)A)\7EMdtqD7E\rj6"m68g\2/_([K>%?JLK_m4]^h6?%#^g#<"[10UF1\V>i# +7?S3dUU?^o[s*A4'Q?D^=;-aH3*8+R686k[o%_8B3RdXs4j\0AW*2,a%:86Plf0C!D!Wm2bC8@D +%/#20\3:R[loQ7mLun`*BH1KT5\<1`TpM+o<"skbHJ\Qi'g2agkDU>jJtU;i"<O.)L4oYaq8E)G +Dkfl$?ENfWG]Y<SjG9Rel87R$[;\/;/VrO-""CO#/3Ok5642E&9$n,WYT5bpqPdj'Z313\ga[j2 +)jp[\?cuGcL>_2(K>\..!MN9o!-AUbG^"j,\3#<s>h-_O0*Wj"*.m[a'Z+62$A$;n#;FBP_e:6* +9(g-<QpUrXHbVIRYV_,#>.-_1A6E?Ff<52'"k`m$<3'"h`?ptn")r0^W`2#1d)a9HfQ:Z/%?!Vn +F;uL)/.KFL9!SUA_LnVT2DGIQZ?Y1F+lI3sJ>*34`CLq8KN(p(EHj%S5RZQbjDg=s*<nCd)]%pS +OV0*Ga#N>iK:jrYDj!=MY]V,M9(37p%SB?M3):clAW7=[6-2+B&&XJ\%&&Ae/[Jn'_k`?2D:C>M +FdF@RkU:G6g/A57Y7ea;;@ZBP.0hYRVU\;hA&3k;#E[mqJJ4O_TnqJU=X>iYA<p:>[B%P!5TN4F +hj5LR1l!GL[9I+`Qlq7.auPYH,blPio<:#Dl1E%:KU*+.:!1"j1?RBXT3YDVdCN=#l.8k5>'$9I +5fs3IBI*kM%"K"C?q+RUfI*<5l:J:<9eIaA]F>LZQUkgJ.TIcONR0]c5nN9").R5hj:mJ-`b:uC +qLN(VkShr]oFqbY;P&HN:<O43*"CnpQOO?O0*'@pK>UMbYZ_Q&2TYu(1WObmX_n3eS@/NeE=IHj +3enj5%[t&C2DID*[ai+PWHE4d:Y=GZ-pq6jG\R]HM-Pfa..$9c[9mkjq6lBJ)l(1kEcrE\=IU+: +CjhgmopPT[-kP)u+cK_B_SfQW(iCo7Obf')63Ho("XgZYK)gc<!rt_"j^kkX@()Xm#QiUio\b]c +eS9hkEZ(8KY-\\],MW#sB.OueBMLmo9FGubD#>81E-`'sg#$)9`&nHNm`n9U_B&_n;%DR0O98XJ +9*##k#c\"N[e:#;'`4((OYk^B^g[Z[l\AOL266uZ"s#BG+Mmh@2Dg5l"i4ZX%;Vat#<!K_MP3ul+9~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 15 15 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +186 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 188 0 R +>> +/Contents 187 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +187 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 1903>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWR3-D.]C?'LCdmf!XNIiKN&*_b!TiK.&^_]6D3gVOP"+_ +)G=Qb@CUie%MTZfVS\bJ_K%OP:4`P0Pg!]!),8+,.&<eV"VGbi8:]9t>)gG0_[8f3]?RSOn(d6q +>1q*.c6lQ4n:H5>]iO=OI[u4i`1r+mUC@/Me*F<n^(qYHYM8^FF"B*h=6m6(4/rDXq`IZTfY;u5 +3i`?Hkj.g)/'jYTks1>^(A4Qj'JBCd98g<k6&u^/"/Sgl+N6&I65VVcb_%1`0dp6Ybcth8Af+"R +aBTYg_8pZG2$&MDh`))Z!f06`C>0#K#ue)-aj24^YfZCPU;"drr''R@E86^.`/ca8bcqSXb/Ql/ +HQjmC/G*E#1CV_^`2/$p@Mm.&$Vgj/!<>A0$:9!+&.M!O`?I)]P>!<!POP_##bmE<&.5.^Th()m +5j1%bNJP(YKE>PE-.63]8gfK_#_jZ3TdWYMK_/qD<!\_H*%ZaF0[_rkA"^Oq%JAr-1'A>jVBOM( +i-6'!".8(+#=F=4g^bS$P8DHlJg3A_1$j?=;1V)L3KBkEAiGaFT]("Ho46Y"1C0(I(e3^H_-%+S +/Qa0RJHa+L=/2$::",jc=;ZaNm6?(0"*ip7@#]tE&7RUSTJqg>%5p/)fU1eYN?_i`3S?/&(KjQK +'a[611[%+pdPRLF98Zgl3DWTh'hAm8eO<J=<S;3e>#rKTEEuY2ompORQ8Oe,gCnsH);CJN:)!u. +^k*nj'kNPbAE'7]/VO7Vj>;k@Qr>.Q5t1o:N+8OGgk6VNg5uU`5i+;7]3o:lL-`FL-Ae5Xg)(%Q +Qr#QH,AVG0Do'>M'Fpn0cnk14f+Gt4%::k/E^?SY`cM(a;+uon+RCekFrrIXL*<4+e;>*idF[nu +^u4".I'u!poXpf!@W'9=A(gIKB7nSAI4's"EaosC2N>Em?fU^0R)1Y<[.mNOMLngZ2UPTXR<dZ# +^QX.hJSk6![UEuS'8>Ci<"jodjZcl.f=4ZTRH(A-MY2`+fF%4;?tKX/l2-&4=rj$hD@A-X9Y\(W +)ISA>%Z4hoWPHs&+K-^oTs-5OfL#h80H^PG3&*b@*#kNnqbN7u(Uj%sgqtNmGq69>5%%pO;=diq ++h;`b2)>[bZZ7uYkgdB/TY$gG10u;Tp&gLNs+0*:"tNjU.&[!8U<7\<MTRVAW5R&HoP'75g_bY< +`lk+W09":r1e(I4%&82aNDZ,d`ou[n(0l6J1'0I*F^iOh#VqIh*]jHa#:!_pK9.4q7l&aF(tsp4 +L^SWMXu4@<_KtI&T]pX67\pgV69&`MBp-Hs_\RfFAnA9b1J8S</CVPFNcNiXaE_Hijl/XodcOq- +aasq4`3u%)nm@#0P88_>[VCooCnit=$^U-FJ&+r<#+'iX6c9WJ#/h'Ii'8,F!+uc"]j_12ar=X] +F:LuZ&&SVF:BN)[Eoo*::E\L5+]q8o!L@c=#G`?1ikQ#>P'r%7V@s$,Ul"Z2+%8]K()CZ3=/"^- +LG7'm9opJ-`o5eZi-GZm^b>mVJ`MRDjpn?7-Og+(FT\Q,*U1?l%eE,E#&mlW;=HRLoJe0!n>SP7 +E+WOpZk5bdqRAiQ)$`g.FY8b@o[MeNGp'P>"uo1:f\IkW60<RC[a@1+9d^Cd^6Q4dkefb6-Ou>j +3W^`GZDs"*2=O;25qpJRgI+I9b_.b$cs!a@c$Ko)^8QfETj5KOj'u%#lA%XE)C[X!WN.<i'geia5Q~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 16 16 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +29 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 190 0 R +>> +/Contents 189 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +189 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 2216>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWR3-D.]C?'LCdmf!XNIiKN&*_b!TiK.&^_]6D3gVOP"+_ +)G=Qb@CUie%MTZfVS\bJ_K%OP:4`P0Pg!]!),8+,.&<eV"VGbi8:]9t>)gG0_[8f3]?RSOn(d6q +>1q*.c6lQ4n:H5>]iO=OI[u4i`1r+mUC@/Me*F<n^(qYHYM8^FF"B*h=6m6(4/rDXq`IZTfY;u5 +3i`?Hkj.g)/'jYTks1>^(A4Qj'JBCd98g<k6&u^/"/Sgl+N6&I65VVcb_%1`0dp6Ybcth8Af+"R +aBTYg_8pZG2$&MFh`))Z!f06`C>0#K#ue)-aj24^YfZCPU;"drr''R@E86^.`/ca8bcqSXb/Ql/ +HQjmC/G*E#1CV_^`2/$p@Mm.&$Vgj/!<>A+%g/3O*=QE`fJWo.TZT0Q"(9#8-\D]Y15DP7kSSt= +G^Ubl+d5SH:P%G25gXUQ)+RP'fM>>nJ^mIadGlf'8^auU79*-Io`7>`6SR@W"f!K_0oZ26jta@i +)!OYHiHS@,Kf*-45>UrhI:-/X-&lFD[T+e2[ppiK3`k9Wb@?Na0Q\=<ou3hD>.*;U6OokCbVNIH +9pQA#e<%g*"TmU\9\n<SF]OJ\`>*C@UN#'N?itr93K58VdPm0<"p?!pf,ca_i)YQ.K3FPr#C2;q +Xm^Yl\(FFl"Sa:<>i=-J&2R_)/Os,Np'la5B/i'9H="L;nT8?LW(n!/CbU(#doi6>RqJ'>Z_2&: +V+X8.'i)*+d!$>tfT'H,b1Ti.I*FVO8@f/0;tJq)/-mG5TI'rTQt8AaiL"O*MNn0<-k8U8gtC&l +@\L[KA!fQW"9ZHd3]1=Ga>]&fXXD$KCm<[M1<dc3(C&j&EO^])a")67!GGXq2I1!#amu-=WReLd +CfsHb_V!Pc:u-QuO,'Dg_@qj$&3qjU<ENa,E&jh"2hV2kS[sWNf;mJ__$)AM>SIo_J-Eah=mG7? +E)6(YriSW>NS\$3l!3)DQm@O*?a]T]^?C(c%EeHgn%nfW-)fnBTPt-/2:VoM`bWD0Et.*X3?,r? +)8djTFofr+\^MnZd@6m8i4p;CGG5EGRZ^OJapGkFl5_#=T2"g/^,ffsi1@GQHQ[jh)T,fr*JdXG +E)\TGAUamb!)m@(p#eIC"T@6$g49eaB#,lE"en*sK4)>O#9_kAR:pY@B!)Ao-p"BEPW)C"jrM@g +>&2B>ZNsuA.E%U.D],%jFV-q<!XP\*_0BH"_9N>,F);\#dB\iWS2>iE`8Q8lFq#UZ43/iV)!#4; +J^FBPOVlRT,@fGed/H#7pYldEb@ORd4;S.\AKG<$I#jC\3^B)5)5Tl;Q!r*/_8s5)is_B8Z,TPY +QVf/>i(XN?^*"@SKb`Z.Eet00bm-7;*oFnaO7?7<6$Td]VP%c0i;>CMi9D9`ph:.eoc=3JT&-:@ +a9rY2AkGnR(dgi1E5A*aXuWZljd^dcYtu7_V8j`'Zp^D3p4A$f%msD;L0)h2++hk\)+1^NK>>tU +!Wl-]!M(6#@'gh5H:U=&_8\=*:bjE95&$VhD@UGe2UAps'-+?GF%5@S9k/X@d=\-0[$V^5:gDl3 +fqtU=THkJ1AODb;H""P*ME'_#ojDGU%Y;aqL+qI'B=MgfJE]fhjP<Y+';fmcc=P-g@MJuiD[h9" +MS5[^9PKs17?t0K\X,4m!C1^65_(o#5i"X+^f(Pj;Lc2!WZ8nb(jf7pXb$P]%g.&q@a&4?KAa>R +<'Y&f+d=&M!;6dfJ:%O'3$'a'-4b[k4CnoM*s^OO[7saTZpr#U/-mXBD(%$H5_(Jp+R[pBbQ_`] +L=+^U$k#VepjP+J`N3J2f[gdKFu<U.^)C[[fXPh0<oW6\)k=PnK8'jI^73a.G2^7@]2htC=YL$! +)&t=QWYQ:(L.h0Q.B%<l_4?-`4'KD$KsGBY3p9p95e&K?Z\=>eZN:-bCY/-7%Tlgei%+\*Su'q[ +o).?P-%C1,6R9WG[gkS*-\ehRNXGkQ+GE(B#QlK"MlV\l0o)&%!>$V`DAL-r*'ac3Lim.kb9>3E +$EDN/<%<P(~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 17 17 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +31 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 192 0 R +>> +/Contents 191 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +191 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 2341>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWR3-D.]C?'LCdmf!XNIiKN&*_b!TiK.&^_]6D3gVOP"+_ +)G=Qb@CUie%MTZfVS\bJ_K%OP:4`P0Pg!]!),8+,.&<eV"VGbi8:]9t>)gG0_[8f3]?RSOn(d6q +>1q*.c6lQ4n:H5>]iO=OI[u4i`1r+mUC@/Me*F<n^(qYHYM8^FF"B*h=6m6(4/rDXq`IZTfY;u5 +3i`?Hkj.g)/'jYTks1>^(A4Qj'JBCd98g<k6&u^/"/Sgl+N6&I65VVcb_%1`0dp6Ybcth8Af+"R +aBTYg_8pZG2$&MHh`))Z!f06`C>0#K#ue)-aj24^YfZCPU;"drr''R@E86^.`/ca8bcqSXb/Ql/ +HQjmC/G*E#1CV_^`2/$p@Mm.&$Vgj/!<i<9NcXjs6-t0r5WCX]#hmrj!<CS6N$/2`3Y"MJgbYr4 +8Eeh;,@lVSL.s@i4pQ^bi&V;lGhb<7_#n"!LI"I,5#=OY=uVGJcrr15UDVZNKGDH_&.]4P6!dXB +9i4mn!T8H:fAj2V3Ro?nH4`pRJ4(K7eWji5ciZPi4,'FXnCcFrS]!V=1nB4S";`pS<SF4=]ft3R +[6$]^PVkK[>[[g.2@UlR_bJ\!35\Bp_B>d$:a:5H8IT)oau52;[:aji'sQKH?^:lqJ@=L8.M-%@ +KnG5k<CK_>i\m)MO,ek,,W4HOW*2;]eaVm2?a_rN&.8P4FuF!n/IjcMmGR/B;YCCPTaYG5(,n-n +Yi%R&RE`R,%i+2$1gjDA4%D5Hc82:,R'J\*kC[ZS@uS#@]oIfA5j;ch1]Ge([UUYRX(A$`:cXGb +9c_.U'n6n("9Lie-Ad9Rc&#pKmPg[FGWe)HN:[R03f\M_VBbYjB0Cce4LUXn"J%b*08O'CW$$qK +G`FG5_FU%<ML3)7iRg5-E')JD:pJOAX`mo5dVXD0W/TP^L#QVf0[eU/6%?Q#$t4RW(\t`B0iuoC +*Dq5`@j"#k%m-H.0TMo@1l0IX)cOm:Xa=O.<.U!0$t)"Xjp9#D!-A\/]J]u%LB<#,E=Sl(4G*(F +)&1Q\@_n!\K(UN/<Eke"6+(V5'g`WWe&ud7$*(CPkb)0;+sW%<V($(Gk#SLF%':tl#=.5A?P0>b ++ikH)0]!g;Oh??5S2,]YBFETfh?Hd;4p3j,DHao;%ACSi_WD@=>pD%%+c&5c2sfjq_*n[H4=5_` +"Kqn@CK8L[/-R_p'cL:NAe>k?6<I"^S27!sJ^PW."ecN\0Q[KB82Gkl/B"6M\Sd/4mC7[E[ukuK +:'E>2"#+VRiBhntTjT!rd%KjXMR,'0[8<9$0LU`D3<onJ4p!N6*2*@RL?]e<[087Y-,PR=@ECdN +#jWM\OE;![`H=PWmg5h`-s@0.M8iBE$g%MJ:D6lkLB'RNi]C6ITU[a^&Er)I%+dAQLtI=NEZ!S& +-Y'.Z.PE*O3!68A"A9<V_;N3m,&5Jg##7l;3FE;,oUp\.)8Idobr-8,D%:W)1Jg)6S*2ToQ;^0m +9ji(=k$'NKb^l0679$\GbkkQNX;t#HY7G(=h@B2%(C+nl,/]Y)"t96dK)(E7_PF\p/mo8CeRp]b +#UlIQQlSS>I+JY_Z<T\XCT4_e#_@Cn<0V]FU;5QYK.>KE[9fr<HBoKNeQjPfJpYdXYu[l)*`I&p +2DB<=k#eY8"n`V6<cE0D6XX^6[E^C+C=]-EW%kFIRIO8"$!gNdE3IhV_c?RF#_St2XpOs>67'bk +=Z`H<0<2];$M`c5'n0P09j=e/7'AtPf*%@t3`s!kB.3GR%(<Sb>!$1!JL(#+(>3W\MOA@ajfc%A +L_GAJ7U^l#-b,)m*a%.DB7he/%2MS%"03k]Ch4Z`'/G]*9!p!Z`32>2->8)+\DSd@DO&Xh)UZ-[ +E34pPTO?7g!Wl+)J[dMNW6?$08S/>rRWo&[d2n`aaIaok+:,2[l)BJ<eJof9?H2q$UC679R-C.F +^q^j#/0(8`6+DZU't4E%nf*iLe5.j?'?rKi4JsTEJ:WhbiQ5/KOcc#\@57bN#!`nG>RaUslNpuh +M!AD\)4^+9.+EM@T)ts4$o'Ob@qXR-"$6LC2@3;5[8s=qfK?MYQlcR[5ShpccipUdfW/uP$XuA8 +<M6rf!W]gF_n-[C2>8eZr5Pkh3qZLTT0hZtK;)@H1Qi;T9dsJq[urIF.YIp~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 18 18 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +193 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 195 0 R +>> +/Contents 194 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +194 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 2118>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWR3-D.]C?'LCdmf!XNIiKN&*_b!TiK.&^_]6D3gVOP"+_ +)G=Qb@CUie%MTZfVS\bJ_K%OP:4`P0Pg!]!),8+,.&<eV"VGbi8:]9t>)gG0_[8f3]?RSOn(d6q +>1q*.c6lQ4n:H5>]iO=OI[u4i`1r+mUC@/Me*F<n^(qYHYM8^FF"B*h=6m6(4/rDXq`IZTfY;u5 +3i`?Hkj.g)/'jYTks1>^(A4Qj'JBCd98g<k6&u^/"/Sgl+N6&I65VVcb_%1`0dp6Ybcth8Af+"R +aBTYg_8pZG2$jqDi&FC;+VDPkCa']B:;crU]TB/2-USB$q^TAMqn4:CE_NGF4OQ#@`%nYD)&=sn +Lnklod>L]B1JFh^Q3Q<(@i_p.3#!&0!<@@,2.:1B1q"Q@hDkb7W8odj_#RXM%3oiM3jrM5RO/.> ++Pni5UMFu)cu"Yb0[mjd'JtIEi(uFoK-_a5%UfA&3K0^Z+>Y6p8EMq\,<31IaCpP'-;S(.c8H-l +&Ag>%_gpr-NT5!@7^_8)F;0DpaCNb%PN<c4<?XdA7g5Z<c!Sf+:")Um%F&QH%`9\\6]E<R,@uN1 +2%DO',Ggtj%/.X65)#`%_f:C>.-G\X='.b3N445pSm!:SGVb>s9a3>2,BIHWNWTZ63T*s-=sr7g +Q,knDUIaSaN.WOu2I.#G=dK7*[5"'2D12:p%G(l1+4(*t5Sn,8pjHN1\0.>,%FlTD*s\Ltm:D<h +SfNW!1`5%oC,GWMO^^6Z_g)afE6pPlJH/K?g-O(]VHYtP)nYPT:s(m*5lgC7N[%qY71I)`&!9]# +rr].e4DsR6Nh^0W3)i1]Si>?V"_2;#(1!"`etI:*a)mPi0?i--Ltc(@@hn&_$oMEYA(`f]0k^/B +(@-PUUHls[%Mt^:hX<:L?''43a?e^.(_C7ecXX_;gs=XiE&S$S&7]R7QL3:.@2XiLfj7VV695Ps +cZat@*t9H=[XU13o[1pS<J6BbaP\i0*uN]R"/C2QJan2E7u#AVj(D5^Zo]lU'%Om0=^;J>X>Mq+ +$UY<=>_.Pf5HrqFT9JJiDqGagL\1TI80EE/!WbPTr;kW);LrdEqnU9'"Q4o8I7t*%.i6&B_l.#R +_7c56i:-R"TIkhYRJjnL@fP?lG^s`K(dOI!US4J0L<rC(-g5UTT3@7DO+]EGp*U,55VZ-@TG^,* +ljHrpiAW?[,=I@<()h^7%cFc!6#c,oQq2?0!KhiF=H<=<S.:Hr8ef*4\Jq(jO\rsS75qX/"QVZh +J^RD$0gfOk6YhnpWd0XU:d?'rPB9o"EBUY'>&2BAT6"U!Q7p<C<"t5\%Y;8OL;;Bc-.j=M/S$jH +OC#%lE%_W;pb@N-?NHPXF'h5S2SH#u[oq.I;egGNWteVkaPqt]8k*Nua0#[_U@Ja$pc&AK?45I: +X>SqG3OZ`aD^Lia%%t/7LHo2rOa:S5j@)._ODYI-S?)kp'J'@uRM5g279]"faX5!8AW4G<"k4\8 +:nU8`![H`U0WHMFdQ#!R>.nPl62ABrNk:S9d@/Q6U;EaCbQ.\fSd)?1L(M:>6$^!L@;I%jON7qu +3&1WqF:gIsG\a;Vqe3&<J>VC>%&bX=8+1R`KU!gZ.\^]QZs]b.Zu/10i$_C`XrY3e'V@\Q:c:'p +FG%_hUae>J"sAf7/uTD\683+tiK,-EY\"CHG]'`$#W>dT7pT,(MdR;)_1UcPA:lia$IDhl=VZ9p +/8]f2eHM@E.dYB[^c_fcb._!SiF7FVTWisj)?XaeCb:pHXql?*fZOO8+;L?OJA0kEHZN]`77+B3 +hP48IB5:udFgi.]*s0f#@I-^HZF7;.>[)8hCtr:%YStjD99Eoj*H\P$atPAMFrMU\<NMHn(B^,6 +6@sNJ;IS"Xd;#dQ9`5s5$[/r8$>3OXL$Z?nU?:(.Tar[He$?D#gYJns^lg-G.YIp~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 19 19 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +196 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 198 0 R +>> +/Contents 197 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +197 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 1481>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWR3-D.]C?'LCdmf!XNIiKN&*_b!TiK.&^_]6D3gVOP"+_ +)G=Qb@CUie%MTZfVS\bJ_K%OP:4`P0Pg!]!),8+,.&<eV"VGbi8:]9t>)gG0_[8f3]?RSOn(d6q +>1q*.c6lQ4n:H5>]iO=OI[u4i`1r+mUC@/Me*F<n^(qYHYM8^FF"B*h=6m6(4/rDXq`IZTfY;u5 +3i`?Hkj.g)/'jYTks1>^(A4Qj'JBCd98g<k6&u^/"/Sgl+N6&I65VVcb_%1`0dp6Ybcth8Af+"R +aBTYg_8pZG2$&MLh`))Z!f06`C>0#K#ue)-aj24^YfZCPU;"drr''R@E86^.`/ca8bcqSXb/Ql/ +HQjn06'Pj-1CV_^`2/$p@Mm.&$Vgj/!<i?cLP(uX3=R3Pc6EcC.+g9[c#!bS"9PgE2@cK1GSe_+ +I1J`n@J#B"c,--A5#:,@0&2D-n4uqY'gP#@N.L1\)2)!i=]1$-E9]@/'NGtcL-_@`?!!9P(_kMA +m7UAV1bCXn#M*`$8Q(e\0gXLCm5niZoe9`P<n:8'f*kB5_b6%"?#:D%dt/f,#3!@:daV4RMC]#W +BV6[X[c8Ylc1.044=^HW6W&O<(dKF-j06Z;;*ubch)8b^hD.$t=C[!0K.+_r%H.:^*Y0!6@M&f% +W-C"MiUD(HA[apP'8-JG6$/*RJB/9*Z!]s9L#W_4&80sH_@^/!S_J^%!Pi`.?D0WU3f\iIWMJG\ +ZS@#bb/NGj@2UCd=_0J!2m?;M?,KoZ)dU*1gu3MJFm3!<\#/Ee5Z)mc2r4@2hsC((GO(s"^Sp*c +W8')d@0"/*>6>Y>16-P?c`$"Eep'2gRK-;'L_YZ!(6632Os4N*=C6(PUNj^7"kgnZ(i*A&j1OY< +Su\jr>/pg#l^0:a'P*P3/`G$ljiMRJQ<08OFSdA"k1Ol7M/?+Wh1QU@p,:`3>#p&57p4?$-VDhe +&$bTM*H9Pi@_?*l=UG%UbNaD]0]4r#j+D:k"3EZS9#s#IORsDjWJ4=>mJalio(s0?%"H+9!'hkX +XIo[p<hU,GL):^++IiF`$[MJ2#M?$.oI"qc&Qo2`VQsO.\Q<^N)1t1jYi2).Ih.*H-th*G""8CP +CJj^UFYrsRg>6'H,T]:[A?@!p10CSC?p2!1Zm&/bI8>.X`'pdDil!NI$[rf)KuOs2-tR9IiOV*= +ADP(C[qZ<p^+Z>Xmuqh.@#c'D2l@:+T9BgE/5.u-7k2NM)jq,9lk[.OIa/s=BJqT,0tK;9WWRKd +B6$;h53HBih4%&t&]q^JVQ:dYlDmIp:oY'<~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 20 20 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +199 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 201 0 R +>> +/Contents 200 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +200 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 1510>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWR3-D.]C?'LCdmf!XNIiKN&*_b!TiK.&^_]6D3gVOP"+_ +)G=Qb@CUie%MTZfVS\bJ_K%OP:4`P0Pg!]!),8+,.&<eV"VGbi8:]9t>)gG0_[8f3]?RSOn(d6q +>1q*.c6lQ4n:H5>]iO=OI[u4i`1r+mUC@/Me*F<n^(qYHYM8^FF"B*h=6m6(4/rDXq`IZTfY;u5 +3i`?Hkj.g)/'jYTks1>^(A4Qj'JBCd98g<k6&u^/"/Sgl+N6&I65VVcb_%1`0dp6Ybcth8Af+"R +aBTYg_8pZG2$h*Ii&FC;+VDPkCa']B:;crU]TB/2-USB$q^TAMqn4:CE_NGF4OQ#@`%nYD)&=sn +Lnklod>L]B1JFh^Q3Q<(@i_p.3#!&3K>U_388Q@Xdg;5j5S+0[E5^DU!BglZd1+1:2i^6J5W"FN +kX68@<,E^J;$1e&2Mf7Aau0ZZn7!7>@GkKi<0]=<:B_I:%NZ*iT]@qh_`^XkeLbW^?A&Ba_DVn! +/R;W6FnK<FKf!pf>6fe*`&.su)eM#;,A>7p$22%m>#s.'GW61#Gi7?eK?AIWgYi_+1lk!U3l=tL +7FcPl2^QX8?WU@kG2;lb20Retk_Lq#f?Mcq?+9Jm='F1o[>@`]I3hKh(7$>-d^6\C&I)5%UJK[q +Kn!6[@A%I=AQF77>M5;'SR;]>TZTATFu>Cn"o59IQ/fDD?'&a.SSt<7<7#9AA(IMeS-?<4@8Z6V +SIqQ-oq&^d=Z0Q.Rqk#JQ&OrDoj(!`Rl+J9%@$Kl1<o)l>T#NG.&fOe![t8qM5#Nf,38*Tfg2pf +_B]p%Bb^ldcX@YU.ZOTX(c$aH[?"jO"*i$$$mTs]3c&:;l8gl2F]Un*H[n@:d_TV^&-P:Ji"td5 +/i@I'@KeG,L19@Rh[G&I5SfC+:dNj`6#J.gDB(/S\jh'Rn/@tTJ5@Wcj+gAMH<`SglEgD%BH2/Y +k2B*YIarAlirS6fVUKjG;-W=.SQAkBqSm(!QR]L]D%2ma->]qlgH]P6Q)LrG.^iC3n6??Xq_iUE +^fTP"?7X9HYAdmeQeMULYQ96VFrpohis#W[+aX=R(;iFc(kbUtMCj&qr*@rbIP8t'Z:HJG?co?Z +XM+V6(3'WtS-rq&l(1.pIb9s&$u"#M*Nb[l%:T-3J'Cik6s-8hRbS!\Whlo7R%W+Sr!dKNA[OUM +_P4ptZu,(+kp$EGh4D73DiOS.3%#!,S2+rAmOe#oLU?-4UR$$4Ad#Zr53Q9tZ!5&S3\kp5h]6dB +Gj`i1]ZArG@EZ?.i5OYC(Q@nj4IusW3GZ;1<ukVBMDOeaoY&'(pOf7!;99NP'g_s~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 21 21 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +33 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 203 0 R +>> +/Contents 202 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +202 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 2140>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWR3-D.]C?'LCdmf!XNIiKN&*_b!TiK.&^_]6D3gVOP"+_ +)G=Qb@CUie%MTZfVS\bJ_K%OP:4`P0Pg!]!),8+,.&<eV"VGbi8:]9t>)gG0_[8f3]?RSOn(d6q +>1q*.c6lQ4n:H5>]iO=OI[u4i`1r+mUC@/Me*F<n^(qYHYM8^FF"B*h=6m6(4/rDXq`IZTfY;u5 +3i`?Hkj.g)/'jYTks1>^(A4Qj'JBCd98g<k6&u^/"/Sgl+N6&I65VVcb_%1`0dp6Ybcth8Af+"R +aBTYg_8pZG2$&MPh`))Z!f06`C>0#K#ue)-aj24^YfZCPU;"drr''R@E86^.`/ca8bcqSXb/Ql/ +HQjmC/G*E#1CV_^`2/$p@Mm.&$Vgj/!T<ItLXID&))T3@p^dQ/j'4;s1^HlEd1f5o0n]X"a<$"# +Ldag3'TE_a%\m]r1lS2;a<(Tei*T;[<@(@7"VgV@*Y)\Qj>;k64\&E"m;6cHKEABp2@cK6<Ee#I +eQl+-1jrk:#D79>2%66!AiC,CBZj'Up74'C<`Fm"3"A<#i7nfpb'@gX@1_QXO$bKW_c9bac#aIT +"iEabf/Vl6h0.='FPQN@LbQ6gXil3"2q:&k>#qK%LJ]4C-]/.nSL[?d6'XB@e$g&p?.Io$BH'rS +*LDXaG"$C^=+Tk>162m8Kjn0#IU-4>Q=ZVBimt7eNDe9AB926LL/jUpTo`oOe2cr"7-AiL?`N8^ +/WX+IqNaE[ep7VBI8s6P)m@djpt8Ct6)\T2,iN][)=?s]=rIVH!*^D_@?0j+%$TU_(K`R9/VI]o +!3df,JH3bMN-,MM3Y$6G?SbFW<r]&dF0jQ8:P(rQ1=Dqb5WOlMFj5.&__Bq-"9C^9&.[8.:<!b' +B\G/"_]X*F9p9WLbQ_"`41A%mk8#C%Xa=O1MM$012@X.ekT+W;B+?tESmNMZE^Og0/d2?E\.n!) +N<h"1_*G"\N$C=*lumfUfgOW5T[GcY_jGfW!nrKJ5dW<OP@=o*GV'E*h>`)j*!cW3?Ol%gdD(4i +rh&6MC[+;'LN#NEgXI6CTs=_\os>SQgNn%'(c!e#80-Y/,n<bA2[3+@l(?mM>u-P;)dpN'6Y#/) +%4/\SLd2>6BOhU7TH6LoaT3M<AUiui(;dPg$XVa6INaDM.o8JC!h_r6C*4;0LLCet^iP?pVC0/Z +)Q][6p3U\?/]H1N('9jkFQ&5e41N;eSV0K:VW9W>&Fcn@b.3BA^,X!N>o&&T>^rWpg;m+[$USf& +O)aeGa7*9s,S@P0&>afo<QM<PR!(ChLc:)J8LU86g4o(9)aWuKl/GsBPJN+e`c,,TQ)H8C6&$(G +86%>QS2jkP\lup(diTY,4:UkY7m4sV)<L3.R/jTM]d\jH@][Y:d-)$7a%\@eKQ;tTp*'Rd"X&GR +F]=+@@mS52lA_=nSA9^H)j':cjgho3E<+[H0]*CR(jUMqJ/K`4g(T'_<!][9mfb]G)-u!o2=?WT +:0<'--l?n5%__9sJF[NHElA.^co7q*.&BYm\IK-6Fso;4fG';gUhfss'`cZ!SX\]*cB'jf5j00g +cn>RiW&]V%bT-_*Y71%T8'ot-o%n)bV#dHQ4,7qH+[at<[&rRU8$,np"S"DOj;3PIaRt+4(CX`R +(TV1n*8P]mI4q_r^#pHt<n$&Mc]Yr'a'S!F`HcZH@U%>95uDA[8Z?=(>+4qd;d`b@Y:ms56VutS +lCr&`%h+9,?soIr@XJHT?m(-LTG%AW+>QNr6<Zm:$]OCoI@uSda#=^m*rUV0E^E>dkeS+#Hg7Ks +eR?<3SE$>LFUT`R14nh`g9-NHJI>-f4"u$iiTPGbFFCY$i(OPFfH=@kU6^BrIr((5Qpu8SPClha +C-b*\%^dAV]Cd7^h@_SgNu9!;E+=8I*Wi^WimZN&<GO1/YeCn#2r?_(DNj1pB(l'^aYsqUADJ)d +W]_RA6E!.7~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 22 22 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +35 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 205 0 R +>> +/Contents 204 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +204 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 2104>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWR3-D.]C?'LCdmf!XNIiKN&*_b!TiK.&^_]6D3gVOP"+_ +)G=Qb@CUie%MTZfVS\bJ_K%OP:4`P0Pg!]!),8+,.&<eV"VGbi8:]9t>)gG0_[8f3]?RSOn(d6q +>1q*.c6lQ4n:H5>]iO=OI[u4i`1r+mUC@/Me*F<n^(qYHYM8^FF"B*h=6m6(4/rDXq`IZTfY;u5 +3i`?Hkj.g)/'jYTks1>^(A4Qj'JBCd98g<k6&u^/"/Sgl+N6&I65VVcb_%1`0dp6Ybcth8Af+"R +aBTYg_8pZG2$&MRh`))Z!f06`C>0#K#ue)-aj24^YfZCPU;"drr''R@E86^.`/ca8bcqSXb/Ql/ +HQjmC/G*E#1CV_^`2/$p@Mm.&$Vgj/"2e.N%`8S)&-\gD#W[P?^udBUm;U"rL"&r@7(%,M_afZm +N;l*OPd&(ANT1T#9i,8[Hl%`o.-qb0_l23G#@RVT0oZ9[5S==m,hEkgbebWb#%>/n.LD<sSiVma +Kod;Y+["@7L/WJ4?\Y8qE77pqm41\+'bs;PZSmf"4pEqJ,T;ER!_sO9iLSF8KqY?G(5?nGEZ.HM +0ZcK_Tl<7A%HEQ(0TLdYdPhTn!3df,JH3bMN+8g?h%#(.FVi9NJ/*?+N9FL`#)JQ;4p_\6aq,"= +5it1g_g(*"jWOWKJ:mqd3LL?83uBo9\/=!V=cNBP2cm"g1`V8;/]Q<!NGDkQ[UPod2iWGldQ.V7 +rW@_[G[;>Ei]*=\3a;]F`GCF,R)1Y<]$>5^KEBeOQXI^Ugc:/,kWg1fJS<7a[NY=Z'Fs.m9tftI +:@5[s%=<G7"T\iR(6--7BGU/kILfEEI$["Bo>,;b>@jq/2i;R&$YRY:]fsFOdG5$nd<48NO_$F\ +^909q'Qm]5EC4qKajD,AC)2h>JAU/?!TdKCLX[YJTAlBMDe(rchY6405#7J"inT;V>BQ@rXqoP4 +*=(8=r>3]2k5S!)fD$;np)iGWZZ2@M_<=:Y!Iu@!mKrDD0Vmf_P(X"9j=uD`o`AK1ZZi+a4M0-\ +"!DTn42IVB15-;1K9L%K%h1i.8.boU+ED&0O?+gM,5XY,\IGcShRHrY&H[2E$@u_9"BR,lTrTPK +mbuQJ2o;1-#Xa:5@?uX%aM@re089\l3'T3D@j63$"9HbM[oY'IK;6'hJWr892Hm+i4-=Pl3[M=% +k5']Y@</VEahn\5%,]QX%"Zs$a!f.K=I\0)n&bDpkgJZt401A;2,q&q()t.9#7U&j3emC3l("h` +ADs%8^S`S,jGO9H!H8`(JBSBe^aoU#n2/5*1(/YP>QlgC(5.Lt)?Z^`Nf_+$]nTu/!i$0iNq([[ +@+ZGFgb93=ab-'CN#WW61/CPSY;G9ICnUBZB5I9%.59Djff4(gD,mXQ?pG]!WONH]]J@S?kR5q8 +ZOLY+3Cb4Sbh*S?D!CJn6rkSP'L\ah"EAt1+Pf4"j2$X^Q'9CFOq*%f02mGGf*<F'*9=>E2j<4/ +!oVjMJUFb.`_DDo1YPjFRb1De'J'@uRM5g27AO]bBe/5t[ActN"Dqk(6.u+e-i9Ht0T'ek-YkoF +aCBk&EDJ1:7a8j1PYc56-98!&k@kjI7TA&K/1P\Fek4,_D%`tXAZE/l>C8;I&TH3\Gb^c:K*RJm +PQjYU$pbVE"V3VM"CTXq6XXF0c'TB$`E?P`rIM.;nqp,\&RVUCJi0tsKS<t@3c$[5P#aog=!^0O +U?Oe%!L<ZfogN1<>g$]ui&X/#h.Y^;0FpI8]U3IDC4h5A%lU:">EIr^D%dS4f!aAcOGOZ']tLmU +//R"7]5o*+MlqW.])j*d?>GbNZ^(k7YDWj5XA+;L<bf\3&:>3;+g\JjZHNCIa;OF%crP?^=k?aQ +%.;#pYCX.WK$\(;Cd%^/f8Man9B1Bf?1#?"`jl0JU::gj<%<P(~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 23 23 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +37 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 207 0 R +>> +/Contents 206 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +206 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 2112>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWR3-D.]C?'LCdmf!XNIiKN&*_b!TiK.&^_]6D3gVOP"+_ +)G=Qb@CUie%MTZfVS\bJ_K%OP:4`P0Pg!]!),8+,.&<eV"VGbi8:]9t>)gG0_[8f3]?RSOn(d6q +>1q*.c6lQ4n:H5>]iO=OI[u4i`1r+mUC@/Me*F<n^(qYHYM8^FF"B*h=6m6(4/rDXq`IZTfY;u5 +3i`?Hkj.g)/'jYTks1>^(A4Qj'JBCd98g<k6&u^/"/Sgl+N6&I65VVcb_%1`0dp6Ybcth8Af+"R +aBTYg_8pZG2$l?li&FC;+VDPkCa']B:;crU]TB/2-USB$q^TAMqn4:CE_NGF4OQ#@`%nYD)&=sn +Lnklod>L]B1JFh^Q3Q<(@i_p.3#!&3JU:WV2Bh^Ib_AhGR6Alk_cK,,o2K,@1BEa.)hnC'EC3N2 +.'OhNU4AUTKf!Qk2Ggc4,>!X>\>_iL!?5]-N+7,!g`qFWfJ<usOP2IKJH2o$M1GZJ2iM7KFuKnr +%1,]3'N!En<ri;).0LE*?8gBb`H>Jjeo3kl#JkZ+1601qgcCFIAX+(UZ[GRb;Ludp<R5,Fgc,e= +TQPD%F)=WC?562%*Y*fNjuNn1IIhgrP\$2-"T\fRJmd4rgb@>gol)k9\1S;Mj#0p_M2l)E`K+H$ +G#^`e\NVO!:QtK&K]..#*Hk0)ScMG]emP,=hcJo2SC08`<E<Rr5%lucQuHP\eX2q)0B<3f1cOH_ +QBeK4)(&(B#MDpZQ>?;F7?6MT<gfFaJZ*F(TRjUc\&MiiBhO/RSF8NbbqR7&L;@go+cIXbhDYlg +*GdQn6O;m4nDOB(1KW-2Kjn0/d-*L:H,WLig-Lg8(K*fDrB5uH^rd2t,FC_VO$#,S3VBh7EY&BI +nAZ<"K5aT*%HD<02[l&-Il1n`rf'%jQ2$`t[I&la.Vf,oehl8hXb4T3gd`&:EL_4q2d'=4Qn",+ +#gP2\<i]9@GCsj"*Y"lm`ZKYQE*>%,1^H>^_;KPJ%QH:0\,+X,li.3@Utpd@lKo=R/IfP?(;9t_ +%ta*k%cO,31+"@ITB#o[5df/rFn56r]#@e6c4IRqWX&[a-t)"s#!0e1"4cG5Ee'YqJoJ4,@.X2E +@F>4ofC9.gEmT@*!FuBO)$9t%^'YD_&-c5>DF9o#E[tlIYpd:%iredpYbCJEG7rojCQEH)F:\RO +nAYQ]Z!V6'Og-Th\!<>$Ma=ioJgBam!>%J2Z$7;nLo1h,E,:,6kViSLqAKI29F!hq(PWK,'r->b +"j4bAJgh?W_f.>mnjGH/0O>Tl]Pe7a`%lon#/m3oP]/qX&4o-;$@r>eP)WF$^b^3FJ^>m%iGHH$ +`X].;Crd)pQ!;H=64Tl#AIY<P%*(oQT4Bb]@DL"I-akB)!uqf&!L=$X81_YZO<B@>Y&h-$.6&[d +Bi\d7N%esnlGJ1`It?R25$"@9UC@6s;SWu+E7c4;Y]>Vpic)^/jQbbUhMi&&_o)9&)l1[DG7oS# +"!C@EVW,g/Dq4a&B-\Fe>Ea6RUc4'RTcD^3;-H5nQUF)C-Qu]sTM[$OR)]RPT)7K+:WPW1#DD61 +F>7$/QnY[nks_JW1T$k>[8V:%:1F_qM0)3C^'N0^cL<Irobs@=&6]HNY[aPk@KP#9OVf<c%@hC3 +T%1u9=58d(Xihm5<>s1eCKs9-[I)5D.cWX(SQ[p.q<leeKieGj@]Yh=OA42%YTAA"2H6%tejg(N +?NhjK:K?_M0^2]WLikWWj;4l;YRA>g*"68X56iPC*7iJRT?Au8X>j3aiJQ>6MWNC(bB$)oPfn2i +6:ja;SAEHp/e2\G3?,rEqS@;&%Y29l.-91.Pa[kNl=E\heNV?HnhOm[#4\_Ga\V,c?F^j=Lc_Np +<3'S2W:fWk194V/V-n?JlWJjq+R0f]TQN1DFn^NuX))Pg,R<Wa,*bKn5X5~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 24 24 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +208 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 210 0 R +>> +/Contents 209 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +209 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 1369>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWR3-D.]C?'LCdmf!XNIiKN&*_b!TiK.&^_]6D3gVOP"+_ +)G=Qb@CUie%MTZfVS\bJ_K%OP:4`P0Pg!]!),8+,.&<eV"VGbi8:]9t>)gG0_[8f3]?RSOn(d6q +>1q*.c6lQ4n:H5>]iO=OI[u4i`1r+mUC@/Me*F<n^(qYHYM8^FF"B*h=6m6(4/rDXq`IZTfY;u5 +3i`?Hkj.g)/'jYTks1>^(A4Qj'JBCd98g<k6&u^/"/Sgl+N6&I65VVcb_%1`0dp6Ybcth8Af+"R +aBTYg_8pZG2$&eJh`))Z!f06`C>0#K#ue)-aj24^YfZCPU;"drr''R@E86^.`/ca8bcqSXb/Ql/ +HQpSUbqh&u19=)M)hoMpG1*bU:f&Es_gq%*Ku%_7162MCg,Lu8QsMm4@<goq%R[273Y&:5>t,9d +,h<g=d>ZkX"i6R8)@$^*R6:e-#\"kZ+ZhFs<7B2Z&61Ng=]YbASS)-WeSSl'=*7L-(kqXrIpId% +'j"aD2:Zph=Oq>?B@rN0Ve")]KpcIR<jcXA#$*=bDh]F+]jTX(Xi;Dd(H%V(<E:q`2TBEl>T!a> +WXL@ViBX#"cblT,a]"IW/BhGN'hMM]'s3E3eedFt?<m4NHX'Yh7>;mj(*/a#=k:SGA)c(j6#"tL +(-.Lg<unhfgXtpYM;/tTCN\0/G#*-X=gc_Gh6r>*BSI?DfhYqUrUG;EJgdiGM5#Nf,3[Z3Ob>O` +&8R*ZTbp$G$)1fn64@@3l8ahKYfaro,B2Ku%3l_,2@UnX_E&,fI=6o[Pf"A9NPPTu(@6TcmPKrV +5[#n%j(R0&%YL-75gXU)%n+feBZIndm9_5,:m<gK1=9(:?d4=XFY5Xkj$o"F@.a]m)G_19q1.b; +mph$H>3,A!F?I<0b`//X3D<MjP=(18UMsT]%Kdj=&5r[MjrJ``kY<rEK:q-C"nkJmi:LH%(cI'B +IspI6+jeBaNMne:l]&`A[I/D!!+%C-I()TA<b%'t_9p=Vn6Z'#F7<dX2?UVdU)d8jb$g>3s#Gj. +l5`]GFcIblKn,i^?D4EGcX7Rlcp[jSqr%r:p!F]pbi:u'+UsNmqSHoBrh&632B[kL0Yk1**saJ% +!UpXa&:b+^*(>DC):CR`GRf;O.LUd&/[j,QUVh=s"gMSRLH"'-U4`f#iKa1lfF8(VC;rf`:oY'<~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 25 25 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +39 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 212 0 R +>> +/Contents 211 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +211 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 1919>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWR3-D.]C?'LCdmf!XNIiKN&*_b!TiK.&^_]6D3gVOP"+_ +)G=Qb@CUie%MTZfVS\bJ_K%OP:4`P0Pg!]!),8+,.&<eV"VGbi8:]9t>)gG0_[8f3]?RSOn(d6q +>1q*.c6lQ4n:H5>]iO=OI[u4i`1r+mUC@/Me*F<n^(qYHYM8^FF"B*h=6m6(4/rDXq`IZTfY;u5 +3i`?Hkj.g)/'jYTks1>^(A4Qj'JBCd98g<k6&u^/"/Sgl+N6&I65VVcb_%1`0dp6Ybcth8Af+"R +aBTYg_8pZG2$fCni&FC;+VDPkCa']B:;crU]TB/2-USB$q^TAMqn4:CE_NGF4OQ#@`%nYD)&=sn +M^L9ebel9[Ypj's*(N<9Af4,>:f&O"US-R0aE(0ecUK^*+rH$M]]RZLPL+P5"sM@9fSug`nC<N9 +Qutq)Tb,R3:VkCa(Q:Y!aug(WB].Nr61@bcZSTCr7YLp]hDYq(d-4WZ_0mIu;Lsg5=>E1@C_.la +87uGP@;'<o"9E1K6j>'YA26qOa?V9_U0p5?NPcl(-jq675Vil0OP2D?D>_p$1<d_0BSJgO>T$_I +.&h"d!^go^KEFd-&.W3kgc(5qScs2k+TP;2NI_)f4HBM)(cRG`?,@UY/<pH&?8OeY7FlP1\0a)8 +HXbZcK6Z62%:_rm*<ZEaDEBcdSkjmg"+A41iKmQs&.=%S`%[3]/]CqI![sokMKXeAW!VD_E#])@ +aLDr9JW45E$DX!*1Q8lA+c0ZZ!;7IC!GK\6[NY/;?3LG@d=:S8#5,D^HZn=&LY@j<2c'8"\e#:& +GfDe([FNU<Vj1!XU5i`Vahcmp)!e!Q6V,F]?s$7\1[B2AAC0D25cMBYpGL?l2L&?@W,Q5p>BGi^ +es$_),D1'5f,%iDV@DQD]<C;N582$+[DiD3%2p9'1,f;1EH)E)Q7rkr(]^EXnG7=%T\X+N?+P'/ +/ckKW+`=/+lFO^9VUCuU=ud(f)!F#i3ge^gh^cSR^jml'-3tRn-t<F?dAd9;OqC"t+:1>1+bL>4 +']>oL"lW]2XT4l^LbhJJNG[+E#>V$-cp9%:g_PZQ_A`SJA9^k.(,XU6e6=&52\=1h]uF<q?,1)l +E4e(6QOk$;^hdEhmFT!q:^S&,G]t]1m09L%Cu7kc;sK'6`><P&K:$S,L@Nm(5[=kPTJ(ttl1Pfi +FUl<b!X&O],=#8E#Qe[L.&"b+#(SuT_h+TdiSHm&k:[C!UDOE4\Q]9b?IDmT/lUo7dlN1rak97i +JBl8pZ'E,7TnGI^be9C53>)T"LikWWj;52#A.-9oG77o](PbQVVI0O%FY)qA\A`R*g+0?OMktq` +2urH:@nDSNJj?=o+QZ=F@#RCo1+ns=)C&0c=Ga.HUG_P86%Cq?!2(NiJ:\G$J4p6KnW,(f6T<Lm +cugq3.'pr$$^cV6S!1NR")qWWkE<1Y/eL:S5Z$D%]+BsC[?)UX0g$,>Q;PJTQNj\VYgn\.#F&%D +L:=Z6?pHjXmmK/?7ZT+:4W">&ni2CoiXfgF8:Z8br!%>c)$/g+Akg7U"2MdG6UL#B_$,H18O#sa +qp;9@omm;q#7P;X0r6<RHDb4)SLMfX%FhDJdD4@8'dXThoBCKrk!_M5"A_gMq*7Z_5<!8'rFCf5 +U=J2b/sW(]$\<7U5),%c>GX$L&STeE@)FPMV0]>1qNdTi'2/L>1(&-M3n%]*q>j<M2laY-=K;72 +)D+OZ+j"%9;Q*S$#Q~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 26 26 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +41 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 216 0 R +>> +/Annots[213 0 R +214 0 R]/Contents 215 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +215 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 2300>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWR3-D.]C?'LCdmf!XNIiKN&*_b!TiK.&^_]6D3gVOP"+_ +)G=Qb@CUie%MTZfVS\bJ_K%OP:4`P0Pg!]!),8+,.&<eV"VGbi8:]9t>)gG0_[8f3]?RSOn(d6q +>1q*.c6lQ4n:H5>]iO=OI[u4i`1r+mUC@/Me*F<n^(qYHYM8^FF"B*h=6m6(4/rDXq`IZTfY;u5 +3i`?Hkj.g)/'jYTks1>^(A4Qj'JBCd98g<k6&u^/"/Sgl+N6&I65VVcb_%1`0dp6Ybcth8Af+"R +aBTYg_8pZG2$&eNh`))Z!f06`C>0#K#ue)-aj24^YfZCPU;"drr''R@E86^.`/ca8bcqSXb/Ql/ +HQjmC/G*E#1CV_^`2/$p@Mm.&$Vgj/!GI'INQn-52[kio1)VpcAG@b\,7*Qq%0Lk9'SQ)9=tU28 +FX]b5"%_Q/;cK\l+H7Tj'2?fYBOi$:+dt#'#;npf:K/&t020q_8AmHHj'?Lq<&@m'?4CD82]']e +Js[?GTqb40;*ppT/VO7VZ7H+Z86QkO6#^i]#1Vl"Ctj.#?lXk&%EWJl@<Grl%>.4,1>R-@^MqUg +96<3'[5G@8?.&.<1K$SR_V*i@0Q7n;FHu08LDX5n-Ae+="*=sh94Mu#3/.PtN<;_k1h,!i(bsB^ +Y]:S8JO%2#A%3!c1^p-ei%kk<AlY-#!p.ltA>.8b4#[8eK5e9OaN&]<_ke69>QI;Zh.4$Wl8db4 +h8=LA,3YsO;"RHV0ob4,`HbkO8Dc[mj%UX-2^:M,f;]XPl$VB7aJpTo2TEfri7\1n3oj]L_f=uE ++BT0`mE"8*N$Gj`(K5"4QlH=;7A2mJiulK(%jSkb&.RZMl*X>En3O,@3$@;%D0d>c3V<CQ`%[-[ +=?nYP>:;dQ>8NCb2hV7P.EYUV.'OhNU4AUTKGj99R^Q:j_DZ%/39W@3,8D7TNc\Z6dptR0,Fm9$ +]d;Jn5.K:@%,<pWf*!+[N&EQR4mD!9UEJD1_l.EZ@Emj[[+_5_Z']RRg_p9L`!QU_Wrro_49>]I +*#*WMJh6+L36*!E!GHWZ!.YXbi.;5c"<E,&J^6VNNb$^51NLSo)N\Si$3GO7K)sC:^i\HBN;O*8 +d+fZm[<`h/ns`jF4sI(!P,NrlV[eI"*s<FXiP>Lm%0=O2L3N8-!T5Vg;,L9p`>kZfPZ:Ne#sq)u +cD3gl:JZN2=pEo4Wg.%r"tIJDa&qC0,7I$NEW/5)8<F;-KF(e#dMjbQV@!Aj\7P`JJcd]I%Dg+B +>n3iN8Pj@7dC:oDl]?]1Ej$P989/h2N7c9<>q(?CW+6<nP"F>58:cG["V,c;L,ZWcf]89^lDPYS +0MnQ4]WNaTJK-7AY;2HUX'q^DK.r.8<a<kf"Uq(ib@rOT,h"B/EgBs'Vc^^2']5*)U#F6&^q(M$ +T:&T+:pD^Apt,9nP/,cUb])bd"+WE9i4M.u<OTC<F57:u\\Eai]%>[F2fm4T2EFcUqLasM"n6=E +Y7SVlNHf`D@('gRa(A4:5]el&]GcE15Y8e6`MLZ"(;SQf%+E.`,3G7J-bs]r_CWA/+i#jbn>a.d +'gr0*cD!/)Y45VfN"$!)geq^BDpqsJ7RgjV!nC=@Q"<'RP!n*AB+U^V/$rQ"ckF:*^_klHIrHQm +*@PDD&#</4AW[Ej5mSc@i;bHAN7oR<Wqu`)Bs0EAbUP-YfG`L`3Wp0$PZ4ZM)/=4RJ!EX+#!/ic +!iU/K0C$Y[l$<U:fK=8YS[HCd]4qB)F*h]D1P=VsWZ%F>[8*.>7#)1g<CA(92@MQM.te:<S(q_\ +Y0fJ7K*^0"<!hLp-eTWrUmInEAaUBj3TWrIS_B,7VWC8sJC5<d"gPLE]%Y_E32`=Dm&=F?10t2c +3T.,Z[R$-3L.DX[PLYFtQ6b*%/)7_:P(Q`W`Hd%?L)]K+DSaX13/:Ol$eO]^"mh8n#.VWC0@R'5 +[MB,$\,?:L'2;_Jq>+BCb.OtmBl.uD19X;K5U[?d20R'mK&Gc1mhrc\cfc/u0^&o5.[=-JrWO28 +)$A_ob^%#?*iA5o&8U&3"EmP9Y=gN\C4d73G';32=I0KM6*m>Pat?i_`Yi16&qs?b?H@q4P?)'K +L9NccL?NfXdP4]NKEM~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 27 27 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +43 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 218 0 R +>> +/Contents 217 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +217 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 1580>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWR3-D.]C?'LCdmf!XNIiKN&*_b!TiK.&^_]6D3gVOP"+_ +)G=Qb@CUie%MTZfVS\bJ_K%OP:4`P0Pg!]!),8+,.&<eV"VGbi8:]9t>)gG0_[8f3]?RSOn(d6q +>1q*.c6lQ4n:H5>]iO=OI[u4i`1r+mUC@/Me*F<n^(qYHYM8^FF"B*h=6m6(4/rDXq`IZTfY;u5 +3i`?Hkj.g)/'jYTks1>^(A4Qj'JBCd98g<k6&u^/"/Sgl+N6&I65VVcb_%1`0dp6Ybcth8Af+"R +aBTYg_8pZG2$&ePh`))Z!f06`C>0#K#ue)-aj24^YfZCPU;"drr''R@E86^.`/ca8bcqSXb/Ql/ +HQjmC/G*E#1CV_^`2/$p@Mm.&$Vgj/!T:g3LXID&))T3@p^dQAo^>%uoK<dSch(=<7YMP)+%8r` +LgNVKe3J6pdPM+T:=9fcAPQ.1[7V9j<7Oi=;tQ&F;:RO`,t_+bpgm1NQ,mDPeb$NR):d:)'2Vd' +7;Ydgo/,B]cN27:+,Z:::a_9uT]'_:Cm<[@1<dT\(BtJ_%;O4?0\ADkF8/Ebh3B!`6IFCbfgsrn +NH%JFf53<kLNYO,Iag4*!J(@im?'KgpY?F5<7l%ZLY[1I=bC#t%NU5^\6*=!<B+"KN7cd:GE?:# +]ml8RR&u.&?WXBl@H8:;@u2s,W,*"jiG`ZPkAckm)@$9C>@IcPQu3mIK-^75"9MuZ3OWE?dbKdk +T\_[>+TTA>KEArX-;[`Zh\kXH0Ou)U_5;^VMOJK\,W>fR6)fM>R.<0Fj+-=*%,0?!'9<T+TK.\l +@,<f$UBoX1#?rb42d@hDa`CdJ:<(kmm>GR+%HD]c22riRFf=SOY-'PG3o7KPloQ6L6<sUWW]?"_ +36Te?ULt*@C0ILM0oi#mE]8,E`jMsej*+rZ"<7^/`f>Um7j2q8&=Lg%%@6Ie$p7T/`sdiUdPl't +f1"+GHI+o:Nig+f(Q>r0kSK1f7p%X&j.PJnK:C9uY0H=A0L-KXHc-AjkW1U%\-a:>*,BEEo=uKc +*<SiNH,7][[p[Q'(=5)Gi4\!T6XC.QQu@5Hn``-.>l#PP>QlX"afOQ8X$LdS8'YWhKn+ag6@_`8 +YgIBtFi7qE.QDK%p"u_!biN9O3a.GECb;Ko':bNL7St2L`2@>\*U9/$EIID5!."p'OEV3IVDZAd +7+\1o-V:8p(^"`V*6>?<$W4Pp`tOhdbVXL("_Kp,R*H*bGs%&RLb]%\EZDuu$Ns)l8culQ#U;0> +%e;YT`fOCD_[M!SEX"UX5\^d"]S2E>ME+35lR?C-WK#l^1TJOQ)l#NVOs-&+"">*5el8!"14!D$ +\NqX?FFoamjWR6qOW>cJVjXj91P:3f/`k&bOq9/\45#.d'`;B=Bc*ib637~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 28 28 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +45 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 220 0 R +>> +/Contents 219 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +219 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 3186>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWRXJGRac3qK,@K4<SUT0)1KQ^@b/al^2Z3*:P9Dh'bZLe +]iO=K9SJ4t</=49"&XTl7B4pAD-IqgRouoI8+i'l5-GW=bZsa`>k[o1U>'I%i2o.DPIRI[E]*6[ +P97j0_Y8C_T)UHac"@.qC+Y@Ob/7G0SrGW4n&1"j@=L!:aq,\ML^6F7:qWSC+`FT`1BC$E%YFso +KFf,W_6@_qLEQYrLBR^?C(uPX:_Y+gNC24e\dRQLPqoK68CBR-$qfoubNr=7/hG0/lb/6>;"cRS +oBc<DBOKQm5EG;K)[$2'BGUmS^h3s=O>I$##!iA5*!O0g@jT!":f&<p!smgG%&9"e(BadVhDU@g +Gh`i?"-D@o%>-(_3PuEXKd%f5W+R;>C9VLj#;WY1.LD9b@knA.#hh%o@t;ENd=D;72[k6;a>/^l +#jO;XM<,IA;:L+o'>LaK!ensoTPtGGTp5R-L9cW61''_o:a_7?-pSK@E+j81L*8h=1KS__DAZ/X +5j1%+<TL,08O5V^1X..`fK@fpI?5BO!sn$HN3o^X.Y]j;i]>J>T[Pb.G0I"(gS5>:3n(PYTG`Fb +^tL[RA"^\!:,f;$)[?DJC(pg2R*.IJA"ZVA?M5)PHX6_9_DL6(KB+$);Z50*?+77#'Fc:SFc?SB +i'])T(<,X(L>bDQ2q_\3gb[d5G\qg;UBp'<fn1DF/rG6[$X$<#TN,2)_gWpJk@&=@5hI<!?)RsR +P`otm!eu(Z=*hln(kt=AauiD*@-<U;3f%E!K`ej32!>lrZNQ#nNYOQb3u7@RN^H@_1g[f`@D(8\ +IdO7FTg]_=KMs!l_f6>Hd5>oWT,KH5=B@:cj-CcO@+fX5S$=/a+Ak&Ao8MkOmJK.>^?s74&"2pu +Ni-:XK7q-Xk^"WlV,l*Uc'r=ua![gd+fKBup&W-<R8``p+4KVnaCAWB\pp+ufK/H8a`##<YS7G6 +T4tD&^4(Vd9HNr]_ti?&dP_Q)=td@=".7FS_n5bm&+hW4AAT0jbKFelBjeAl'H@dElNP74*&A/i +ih0+#.kaJW5Ci#=_k;$_cXI'lG=q%ka>84ZdFj:4d0,?;<s8WdH+XoOj.$d9"9F`G/MQH/T85+! +AMFC^"U:Yd5XoJ7lo[Q*iWpPQ+DJ%=!'H?.('6a#$)'(H#4TVQ<*VZk$$CEG'eH3rd[X7Y/aFhk +c5=H.s(BQ)+eR\%%?cSM5_M^9&7l-5J`DDj@":?m[Qk?h'8-jH^`<LG?6/*W/e78[VZq*H$rDI7 +"l\H,#/EV;U)RW0;'J8[:r4(r!i,u"nT>()iX^WukRL6oY6Jsg%fq'[Q15>aW3uR@_k`1oTp9\R +OR45*1dHhIck`h3nsi!Z<"CVV&Kc\UQm)Zh9EF'4!q=2L_jo6\ntnZFkfk<(KYs1`*"bl4YqlHK +@rNlGB[&6S2--6iRimT*c-XrW6aGR?6)?6[.EO51/AI_hW&i.:OYu9+opV(JI0W?Ng#hXl#A<!J +LF*a)Jk/fHi3ah_:iZq0N<Y`"noI:)b9@U?nd^k<MGEsYbh9:g%fil&`A#sF.9*=6$SkZ-E-T$J ++F0X<\u&B0?W&@R:6W#Gru_F/W[$3"B5FGBV4`F:,(e$r6,"g5Ao7kUj!5)X?o5ZQY#GLJD[g\h +Bnmhl)-CQW"X&A;VA6?>dpmrf<Oet`@+Lk`,^,4`>p_s-+!74FKmtX&r.<H[$W6[COhlceK$_LC +'-Jl$ERdui`;:W+gdcU+/\%u<fXRBp-3dl6K@b)+*CH*e[O`+208FN%ft3D_+PCeUGL9ND9sFp] +c%E<(>dJ<Jb\et?Y[!>KD\p;KA2d!3!fHk+e_S,/5f&hn>Jc#2*#;2Jf'ZetfRn&kgq;6A!$<Os +mOpZI#1iHbL-Wjdk6+i"M]l32B3d:]4i@RA(`ikmI=cD_AS0QU,sGn*E\@t[^odjWhXggD_fD@Q +Yh>f%f80H,#\ACB&ZJ?Uo%013D+]JPr`=B'J2*?A#4Fam4M5:3((MLIR&/MH1,/=XqVfI;aSA0H +-]bNG0SPRG)!)0?"'\4pD/Ni38V`fC!u'<ZMj,28GDse5%P,bFPS=9\0[qj93s?.=-00#AV;m1- +a]WfK_T[\3*kio<ncV!E0N2g2Rtkgg8jg[fK-MX`O:LhR8d?ds-4kj"PHoUBk_@rJX&bbq\gIQc +@,S^U'2hXXE%FG^=fP)0c\@#&<9a)dQXD_Z26^6mC$g,8p$SU+ch1*"<li,KVMEZ<9H39@@<H\c +`s!3T-1%a6ZWG4H$%Z!f6md`;Yrh2D/tD_LUD%]Qmc?BD*D*S+R+(dX1j_o81ksB8e!K]9EdPgf +[T+rpT=ZK.A.[=)/H6Z5-Nr5lRWZE%GSo/KlJZs4P]3O3^XEI*bmTGe_6*RXRA43H6t's;/gJ6C +1Y'H,Lk9OmT%[L646;-2P%G/#_"jW^jIt`L!e@9bJkBP\@?k,(os'lupik9UagsA1mq\/i[^QRF +Zb,?=P->"W%[N8>a-s8CT%.*M(.]!>79C5!,`&!(2Fkk,-4?WNQ]jIG6HS=lAaIX$%fkn?.a(%i +6Zo3)dH\b1oW]#1/5>!K4jb^%!u8=1/'egI&MBp5&="Q?LtJ0I"@a1o>s?M!YZ9HKVln[#&q]#k +j2skLg$0,]W`ul^anh@4a"cd0oLoncq=qj$rJ./[Tp[has(gtL^EBn4kluLYbo/Xp_=h2*e,4@0 +_)%_&qHkQtrFE&(.J-WAs*Nhld$]_:'S"aIJ)>mWLZYW"l3SWG;lSL!n`"m<2:bC5FitQiMbran +e-CNFMoc6d^uk#Y*pnq4"i.tY`MO*D2@gr&R]RE;bo5td,*F(h!X-gNE%7B=dYRrh"9<ZP+FHig +5aN$YQ]OfEJ:sTb9*OHC#=+"K_!qJ_E<`Xc"jfpHn7&BD$4L[J['0P26kZmq[T\A3%$02K+Je>( +9WKT<lqYXD5[*OTSH2:u!K];Dcm8oN.TM0P"R-m4^iT`L*reK1m""l5$M7;N3%uPT+<U~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 29 29 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +48 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 222 0 R +>> +/Contents 221 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +221 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 2846>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWR3-D.]C?'LCdmf!XNIiKN&*_b!TiK.&^_]6D3gVOP4"r +NQ%YQi;lgr-m>))VUKh#5]A_&bXTK![,ree)M(:]Ki0$NXOa.cmJt+d.^&=.4Ic'hq\HV[D=`V6 +npDRQF"^P(pBR0rWGe`p!N<eFgmImA(0ak,fcTe\rU@QQhoGE"F`)Vg^RMa>4tHCBn>`\pr8F_Q +UXnP1YB1Vb5V@.$j")l?m'sXMU^[&JDIas\0IVPf`'e9Hg;brWP:4ACCqDIATY["((l'8RC`<U& +b=^6iXi#8;6n<($%PNp4<9ZPD41u0#P!e`%6dVU,\N90&)[!'[FKiPC;(F-7+`(p8aGN9>C`,[$ +.ko4'X@cS6L*;Ll)Fn13:_3a3R*%/e!GKUe"QPkU&.\kVfJa:KE)[m3<)>t!L#Y-g+&%f$/Be;s +P:.E+%4IW+$0.uJ3)i17:GPVm74sDF;8dQ+;rKud1(E7\I8_pX7:A8R!T8PO%YH1l3X:4aIp>b- +!-fXjot=.("ne^/>V\UDC_.lNE,HQInShYM;k[l;3C[H"$n;[LZd'*h@t;]VN?\_]`XN"Uj=lO9 +#isaL1p"GL!ETF#clf$>0%/Q"fMF$)6R_.TNOBB`'S\o@>T)"ATMRJ*A!lS=@[OGR)?sV8_DkiQ +[O6slprH8nN?b+DQ/^H7iY5^oE6'pH,B1ttAZEOB2iQGpC`%j.S_\Ns=otuJLB0Z\HJ\D;bC,)5 +29hp,j$p4:j>h*r5j<KKfG!McJ8cA0(l6'tCK_L#UB^h8DA3H[BUQ6pH:Z1;%!r1\X/btLkIPQa +GfhoRJOm@%#ue(G_sVUV]uFn*dqfg'!\!OlNMD,?_i.i&hE0%.5i+P]PMjI7AO?aeW!p>2Ai\hD +#)Eh&;u"A`N5MUV1ps\bED4C)`B.@_JQ<I9olujC(L4eDCV,UT='7]j5+enAK`c;Og&%I^ED?a! +.*OW16TuOTI,@Cc0T9:EamTEt[dW)P*rbRFQc&QF^u-':-=lJ8kV,]ge.`.S<ZI`akBuW]hjV"1 +pE#fHJ?3IV#3J2U?mA!Ec%6A,?u-/P.!T%_M*8Zl6H4WhH%@Y$Uq(X1q-_\rB2H/K_cIW`i<2;E +OF?nVA\c_]W+&k;U_^K'+Ke]7Fq0Cdi\q*cbZm5%?1"&+05(F;gc0BbiP!Mj^d.bSKIM!QLbcB% +>+`]G@>7NN21qfeVM`O-<Zm2KL59CPisT1PiP!5lG'_KPM]WF*a>ks4l5Ye)iau(.++bf;R8Z.\ +7F*+rUR7e`)OPG>!:VNQa$:MAA*XT^L`Zb&>d6W25&C>j67?C8im[5""fRq-Kn-TC"*CFGTUo-b +E4VZ/YTO+t>tZBl0W'DQS;JsWK`t$N$<IlV35F@K[d`E"g:J#f+JGA^"iP]6a>!oNCtDC3B/YS[ +8:Qi6P)";D3.[U`#6<#.4d^^_-U[-8N-Zd(pnp-MGV5J&7Ueh@:=a'S$D&f]1^98D5TZa'Be2Qt +6Rj:=_5g+KYZ?ER)=e+\<;<$bh@mJ&d+B^/)5QlLR%otB"_3KQS^a(91!24FJO"5cTt4gFpEC#U +dWUSqn_]*N)SStbpP_UM3AVBL!Ss,eF`+Pt3a")8ACSpp^t]b/3Bk(2<25\a"c1<ga"&HT7@"S- +&5,G!][P=#"g[A+W;1iq-5?t!o,&'5M3Tk5r0s,g8R6puK-ZoXBli]qg&_J)*Mag$@SPst`MT$8 +g72JabO*RY(-`GVBK?7s+k+'F7%TaQ(QAEF'/FO`*5UHs29Q+b4#b(q((`]jl-/`jq5g4G>_Qbu +q:*s%puTDI?]utB:+GKm?0/bGYCM0oK(qAE6JK6a_9amBd,l,F7D'+sTIp;-=:(cris/t`p]k$b +HU@+R"egsoWcb>Lf#l`OVI=DG'ur_3WsDJE=a!!K*m^(F.^:=/JHFC.S6.i9:;JZ?-l7+F6X"sJ +,sj>@YX&<l^f(Pj:tM0Ja;nLmI"j9E6!TN)+g,3#]+sG7;i!(IQg'[7$EOpC0L9EA]J?gDJS>?i +,C&`@4#R,S(Ut1NK;!/I_rf/uX,<$^jgBA0\?`fGfm-l>IH8S%^8Im\%M8`g:'X%mmK<O<)([1@ +]rO:Y=C=RBK,_,0);$\G^ePt"G](X>(c8b9$_cd1_lBg87VM,BIZ8Mabsp%r=*oZ2SlD<eJ`&PC +^iZfubG/k!^<J=@WhU@VKs'\`*GRjlUB<c'<++r]#CUt-K=_nIJXdP%UiS2/:bN06h*a__gFG&P +8QK$I*C"++m*/H`"h!,$g]q1&R!Gf2J`U<B<dSd=)N9&E'o91IW1u"DO'0TZ;<gu"*$Xr$Xcf=h +1Yo70%A^'/Wu#MhL$fn(T$uQ>#0K"Ui9Zo$N!9)G4tNh8TNl&T2Qhsn8o!&cK:jsU9-]%-^,?oi +G7!-;Rtbq%K?(Ia+l\CNMf3:UT9mGOY:I7HE@j$G%AmrIr68cQh5K`DQIl[K!')INJ/m>P3fs%L +1-6Vr?GjqRh,ubdLFW_;1[]\<.HhP]cBt@/X!h`@ZnhoOp)P\;4'sHn6?57?dC6?'?;,jSZsMk? +F8;rb2lm^,9b!ftAr7&/<S$qn+rrM-BCUP:9<@!dT6XO"mm4:o421]h0;'ODf?_'M:.qRs]<uC$ +W#+hr>KR]lXQ\Wl<3.ZP*B0EP.YU]LJ,~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 30 30 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +51 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 224 0 R +>> +/Contents 223 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +223 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 1176>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWR3-D.]C?'LCdmf!XNIiKN&*_b!TiK.&^_]6D3gVOP4"r +NQ%YQi;lgr-m>))VUKh#5]A_&bXTK![,ree)M(:]Ki0$NXOa.cmJt+d.^&=.4Ic'hq\HV[D=`V6 +npDRQF"^P(pBR0rWGe`p!N<eFgmImA(0ak,fcTe\rU@QQhoGE"F`)Vg^RMa>4tHCBn>`\pr8F_Q +UXnP1YB1Vb5V@.$j")l?m'sXMU^[&JDIas\0IVPf`'e9Hg;brWP:4ACCqDIATY["((l'8RC`<U& +b=^6<6+_*l2j"I%$,_\^-C$Vf<06Q9kp2Gi,`qXHl7PiDZNe51>b<RO%hqXYYm=PPa0I7d^s]Ot +dji;4J[f/+`kf<2"Uea(=uh6:86QpdW$l'oK`cSX3XmZWo0(F+ph<!Pe3*LB"p)Vl'EmI3g,;gX +8974[@jotCdklSqM1l$N<&T[[E61q\blp_jNfAkJ4ASq'%6t'VGiUUgUQA4d<J\G%8dp=XkV.^c +T^k&N[J`HWe<Na0>0jTiCJ#"F%6>9V<TSX04P%3*=H+O:l8f?]V%Gp9e7G3k#3!X"*Y/@?fGtHE +d-):$epU"-"VgIK(53srW$O5CP=d/&5sX-ZNPhDS(BksEar6#N!_sO9iLVhA"ehT.&-\bti2jsc +TZMqCJT*k)$mT0/@aL*NIknuZZS@SQN<!3%A%<X\3X#S%;EW8_Y]51',H]F`NRankJ.*ZabG<IX +OCLic(=:Vfg2qX9cKh5:hfJ)aG/bI)!l1ZWD'=^U)MVZc\[I?hB&gGiUR9%X2PUPf'^[ta:ci8L +SW,sqfl0koDh10W:CWTp+0:2YD([9ij-+26Er/ooX(GF/$b6K6$XM-I>G+i]$rjIaKleb'CWqh! +5h!L+\3:ff><r8;2cR\.iQpfLR-HX@(XPE'=$Zhk]S%6u!E9PSE3"eS,@rPci^6E/1,ZYXL8\@j +Q5/mN*pkX?%JZ%(o/4D*2pV$iVC`pjMP:.~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Page: 31 31 +%%PageBoundingBox: 0 0 612 792 +%%BeginPageSetup +/pagesave save def +53 0 obj +<</Type/Page/MediaBox [0 0 612 792] +/Parent 3 0 R +/Resources<</ProcSet[/PDF] +/Font 239 0 R +>> +/Annots[225 0 R +226 0 R +227 0 R +228 0 R +229 0 R +230 0 R +231 0 R +232 0 R +233 0 R +234 0 R +235 0 R +236 0 R +237 0 R]/Contents 238 0 R +/CropBox +[0 0 612.0 792.0] +>> +endobj +%%EndPageSetup +238 0 obj +<</Filter[/ASCII85Decode +/LZWDecode]/Length 1480>>stream +J/grZ!H?$`#D,6r&9A_r'QF9bL-pc!gh8D]Mh[r3F@mr(M[X*-^eift'oU/oZ?ZRZ1FeS\-'Cgk +aql<[!fGt>E%3bi"[^H*&HNqS.#^WjOVjW5?6GCF_*o2c-tYFW;lNUY]k1ImW)Fr3)-#2%:RY3n +ZT>L'D./s[kHk"2%MqU@887b?Fe4jqWRXJGRac3qK,@K4<SUT0)1KQ^@b/al^2Z3*:P9Dh'bZLe +]iO=K9SJ4t</=49"&XTl7B4pAD-IqgRouoI8+i'l5-GW=bZsa`>k[o1U>'I%i2o.DPIRI[E]*6[ +P97j0_Y8C_T)UHac"@.qC+Y@Ob/7G0SrGW4n&1"j@=L!:aq,\ML^6F7:qWSC+`FT`1BC$E%YFso +KFf,W_6@_qLEQYrLBRsN;CW,@:l>60%o^d;099:9b.#b;8F.l^,IZnkYuh^MZR_fRp+Z"ufYBkX +ZfrJRK5:,Y5Ja:7&-bFn>T<tLS0\5%cjE#U";#fs(C&iWPmN"-5__*(,Cnu5N`([<&..Bid4b\) +^tL[RA"^\!%>-(m&.1cQju8<qON0FLnB:b15,_]j"U9On5Sf)?YZr0UY`QsXM%]m3&5DeabVG4N +T]A-C,95]'KEHJS&5:T@OuH%oOPMo#e*<>-$%PjN'anI.EZ0_LBPc6'!l16O9s]6,3X7qN;dBUL +G]F]+!tC6#,;9+,'FLUSdQC\%FeXfu"/+L0NIt?^3S=&T)ek8KI)C!X.*uuPf<tR;JjCQ[0H102 +c.X+@K%SF2%YK:R(PUn`$l9>iONT]pj"T[Yd\CKm1Q3R*doD+>(u@0)peDSXN?ahQ3mPQj65G8! +kbodmW*!4?ao\C\'P(]%^).'jGk!YLj.+pb:-j-:=(V2J,t@u9X`%Ir@=V3_dqmjjE=KfI2fXfj +9n0*D@0QU[?s"`a46>[n>VqC,DDR9+iulK+%&74e3(sFgVE*g<=C*n&"-hY)k<X!6@9&Zlf:h;/ +AS7i@("IS:=;h'm@bBY0X;;(,LiO182Ld7qTV9X"1Q8_0j3Mc)N0"`_j.PHlN.\(L:/kLh6.H2\ +APb>ZgrEE$MIKtmhTE:!HB[2(rW@_*itg]3e%TeX1PO\Ic8gmeGj2WrM)\l]"lXuQ]T&EujcjaF +D%E"J!C__YoUR\Y(A5@jA(ci!([9b0gb@C-d(g!%WZ@k@-BbL$CJ@GqD2AJTaKs]"":#69pG$e; +Z/CL=Jnr:O5lrHsi1P:0&9rd/E,aspK3V/JO[ZU1o*-?8-<b=:Ye8SZ*5QZ$%Lqn^"q]o76#s"9 +J@mj#i7dN81_'qfi"lUucl<(4D[^'I1q*\Y`e/'jAT+QR^=X>A!Gd'_@'uP[^fq).1h9=!RBF=. +1B>ol0i@?nVCTH^*8%l(%`+u6.L.(%""7\bCT4KjpQjI!3,i?cX>L5_3tNUO0+@rp40@FJ*lDf* +"n<Ue6h':[6\$eJTT1eI`8oo%g)D^l:k4&~> +endstream +endobj +pagesave restore +%%PageTrailer +%%Trailer +%%EOF diff --git a/doc/xmlstarlet-ug.xml b/doc/xmlstarlet-ug.xml new file mode 100644 index 0000000..95a2baa --- /dev/null +++ b/doc/xmlstarlet-ug.xml @@ -0,0 +1,1741 @@ +<?xml version="1.0" encoding="UTF-8"?> +<book xmlns="http://docbook.org/ns/docbook" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:db="http://docbook.org/ns/docbook" + version="5.0" + xml:lang="en"> + <title>XmlStarlet Command Line XML Toolkit User's Guide</title> + + <info> + <date>June 17, 2012</date> + + <author> + <personname> + <firstname>Mikhail</firstname> + <surname>Grushinskiy</surname> + </personname> + </author> + </info> + + <chapter> + <title xml:id="s.1">Introduction</title> + + <sect1> + <title xml:id="s.1.1">About XmlStarlet</title> + + <para><link xlink:href="http://xmlstar.sourceforge.net/">XMLStarlet</link> is + a set of command line utilities (tools) which can be used to transform, + query, validate, and edit XML documents and files using simple set of + shell commands in similar way it is done for plain text files using UNIX + grep, sed, awk, diff, patch, join, etc commands.</para> + + <para>This set of command line utilities can be used by those who deal + with many XML documents on UNIX shell command prompt as well as for + automated XML processing with shell scripts.</para> + + <para>XMLStarlet command line utility is written in C and uses libxml2 + and libxslt from <link + xlink:href="http://xmlsoft.org/">http://xmlsoft.org/</link>. Implementation of + extensive choice of options for XMLStarlet utility was only possible + because of rich feature set of libxml2 and libxslt (many thanks to the + developers of those libraries for great work).</para> + + <para>'diff' and 'patch' options are not currently implemented. Other + features need some work too. Please, send an email to the project + administrator (see <link + xlink:href="http://sourceforge.net/projects/xmlstar/">http://sourceforge.net/projects/xmlstar/</link>) + if you wish to help.</para> + + <para>XMLStarlet is linked statically to both libxml2 and libxslt, so + generally all you need to process XML documents is one executable file. + To run XmlStarlet utility you can simple type '<phrase role="PROG"/>' on command line and + see list of options available.</para> + + <para>XMLStarlet is open source freeware under MIT license which allows + free use and distribution for both commercial and non-commercial + projects.</para> + + <para>We welcome any user's feedback on this project which would greatly + help us to improve its quality. Comments, suggestions, feature requests, + bug reports can be done via SourceForge project web site (see <link + xlink:href="http://sourceforge.net/forum/?group_id=66612">XMLStarlet + Sourceforge forums</link>, or <link + xlink:href="http://lists.sourceforge.net/lists/listinfo/xmlstar-devel/">XMLStarlet + mailing list</link>)</para> + </sect1> + + <sect1> + <title xml:id="s.1.2">Main Features</title> + + <para>The toolkit's feature set includes options to:</para> + + <itemizedlist> + <listitem> + <para>Check or validate XML files (simple well-formedness check, + DTD, XSD, RelaxNG)</para> + </listitem> + + <listitem> + <para>Calculate values of XPath expressions on XML files (such as + running sums, etc)</para> + </listitem> + + <listitem> + <para>Search XML files for matches to given XPath expressions</para> + </listitem> + + <listitem> + <para>Apply XSLT stylesheets to XML documents (including EXSLT + support, and passing parameters to stylesheets)</para> + </listitem> + + <listitem> + <para>Query XML documents (ex. query for value of some elements of + attributes, sorting, etc)</para> + </listitem> + + <listitem> + <para>Modify or edit XML documents (ex. delete some elements)</para> + </listitem> + + <listitem> + <para>Format or "beautify" XML documents (as changing indentation, + etc)</para> + </listitem> + + <listitem> + <para>Fetch XML documents using http:// or ftp:// URLs</para> + </listitem> + + <listitem> + <para>Browse tree structure of XML documents (in similar way to 'ls' + command for directories)</para> + </listitem> + + <listitem> + <para>Include one XML document into another using XInclude</para> + </listitem> + + <listitem> + <para>XML c14n canonicalization</para> + </listitem> + + <listitem> + <para>Escape/unescape special XML characters in input text</para> + </listitem> + + <listitem> + <para>Print directory as XML document</para> + </listitem> + + <listitem> + <para>Convert XML into PYX format (based on ESIS - ISO 8879), and + vice versa</para> + </listitem> + </itemizedlist> + + <para></para> + </sect1> + + <sect1> + <title xml:id="s.1.3">Supported Platforms</title> + + <para>Here is a list of platforms on which XmlStarlet is known to + work.</para> + + <itemizedlist> + <listitem> + <para>Linux</para> + </listitem> + </itemizedlist> + + <itemizedlist> + <listitem> + <para>Solaris</para> + </listitem> + </itemizedlist> + + <itemizedlist> + <listitem> + <para>Windows</para> + </listitem> + </itemizedlist> + + <itemizedlist> + <listitem> + <para>MacOS X</para> + </listitem> + </itemizedlist> + + <itemizedlist> + <listitem> + <para>FreeBSD/NetBSD</para> + </listitem> + </itemizedlist> + + <itemizedlist> + <listitem> + <para>HP-UX</para> + </listitem> + </itemizedlist> + + <itemizedlist> + <listitem> + <para>AIX</para> + </listitem> + </itemizedlist> + + <para>You might be able to compile and make it on others too.</para> + </sect1> + + <sect1> + <title xml:id="s.1.4">Finding binary packages</title> + + <para>Here is a list of sites where you can also find XmlStarlet binary + packages.</para> + + <itemizedlist> + <listitem> + <para><link + xlink:href="http://www.suse.com/us/private/products/suse_linux/prof/packages_professional/xmlstarlet.html">SuSE + Packages</link></para> + </listitem> + </itemizedlist> + + <itemizedlist> + <listitem> + <para><link + xlink:href="http://linux01.gwdg.de/~pbleser/rpm-navigation.php?cat=%2FUtilities%2Fxmlstarlet/">SuSE + Guru's RPM Site</link></para> + </listitem> + </itemizedlist> + + <itemizedlist> + <listitem> + <para><link + xlink:href="http://www.freebsd.org/cgi/ports.cgi?query=xmlstarlet&stype=all">FreeBSD + Ports</link></para> + </listitem> + </itemizedlist> + + <itemizedlist> + <listitem> + <para><link + xlink:href="http://www.freshports.org/textproc/xmlstarlet/">FreeBSD Fresh + Ports</link></para> + </listitem> + </itemizedlist> + + <itemizedlist> + <listitem> + <para><link + xlink:href="http://fink.sourceforge.net/pdb/package.php/xmlstarlet">Mac OS + Fink</link></para> + </listitem> + </itemizedlist> + + <itemizedlist> + <listitem> + <para><link + xlink:href="http://rpms.mandrakeclub.com/linux/rpm2html/search.php?query=xmlstarlet">Mandrake + RPMs</link></para> + </listitem> + </itemizedlist> + + <itemizedlist> + <listitem> + <para><link + xlink:href="http://gentoo-portage.com/app-text/xmlstarlet">Gentoo + Portage</link></para> + </listitem> + </itemizedlist> + + <itemizedlist> + <listitem> + <para><link + xlink:href="http://packages.debian.org/stable/text/xmlstarlet">Debian</link></para> + </listitem> + </itemizedlist> + </sect1> + </chapter> + + <chapter> + <title xml:id="s.2">Installation</title> + + <sect1> + <title xml:id="s.2.1">Installation on Linux</title> + + <para>Execute the following command as root<programlisting>rpm -i xmlstarlet-x.x.x-1.i386.rpm</programlisting></para> + + <para>where x.x.x indicates package version.</para> + + <para>You can use <link + xlink:href="http://fr2.rpmfind.net/linux/rpm2html/search.php?query=xmlstarlet&system=&arch=">http://rpmfind.net</link> + to search for RPM appropriate for your distribution.</para> + </sect1> + + <sect1> + <title xml:id="s.2.2">Installation on Solaris</title> + + <para>Execute the following commands as root<programlisting>gunzip xmlstarlet-x.x.x-sol8-sparc-local.gz +pkgadd -d xmlstarlet-x.x.x-sol8-sparc-local all</programlisting></para> + </sect1> + + <sect1> + <title xml:id="s.2.3">Installation on MacOS X</title> + + <para>XmlStarlet is available on MacOS in Fink. <link + xlink:href="http://fink.sourceforge.net/pdb/package.php/xmlstarlet">See + fink.sourceforge.net</link></para> + </sect1> + + <sect1> + <title xml:id="s.2.4">Installation on Windows</title> + + <para>Unzip the file xmlstarlet-x.x.x-win32.zip to some directory. To + take advantage of UNIX shell scripting you might want to run XmlStarlet + from Cygwin. Consider installing <link + xlink:href="http://www.cygwin.com/">Cygwin</link> on your Windows + machine.</para> + </sect1> + </chapter> + + <chapter> + <title xml:id="s.3">Getting Started</title> + + <sect1> + <title xml:id="s.3.1">Basic Command-Line Options</title> + + <para>Basic command line syntax: <programlisting>bash-2.03$ <phrase role="PROG"/> +XMLStarlet Toolkit: Command line utilities for XML +Usage: <phrase role="PROG"/> [<options>] <command> [<cmd-options>] +where <command> is one of: + ed (or edit) - Edit/Update XML document(s) + sel (or select) - Select data or query XML document(s) (XPATH, etc) + tr (or transform) - Transform XML document(s) using XSLT + val (or validate) - Validate XML document(s) (well-formed/DTD/XSD/RelaxNG) + fo (or format) - Format XML document(s) + el (or elements) - Display element structure of XML document + c14n (or canonic) - XML canonicalization + ls (or list) - List directory as XML + esc (or escape) - Escape special XML characters + unesc (or unescape) - Unescape special XML characters + pyx (or xmln) - Convert XML into PYX format (based on ESIS - ISO 8879) + p2x (or depyx) - Convert PYX into XML +<options> are: + --version - show version + --help - show help +Wherever file name mentioned in command help it is assumed +that URL can be used instead as well. + +Type: <phrase role="PROG"/> <command> --help <ENTER> for command help + +XMLStarlet is a command line toolkit to query/edit/check/transform +XML documents (for more information see http://xmlstar.sourceforge.net/)</programlisting></para> + </sect1> + + <sect1> + <title xml:id="s.3.2">Studying Structure of XML Document</title> + + <para>Before you do anything with your XML document you probably would + like to know its structure at first. 'el' option could be used for this + purpose.</para> + + <para>Let's say you have the following XML document (table.xml)</para> + + <programlisting><xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml></programlisting> + + <programlisting><phrase role="PROG"/> el table.xml</programlisting> + + <para>would produce the following output.</para> + + <programlisting>xml +xml/table +xml/table/rec +xml/table/rec/numField +xml/table/rec/stringField +xml/table/rec +xml/table/rec/numField +xml/table/rec/stringField +xml/table/rec +xml/table/rec/numField +xml/table/rec/stringField</programlisting> + + <para>Every line in this output is an XPath expression which indicates a + 'path' to elements in XML document. You would use these XPath + expressions to navigate through your XML documents in other XmlStarlet + options.</para> + + <para>XML documents can be pretty large but with a very simple + structure. (This is espesially true for data driven XML documents ex: + XML formatted result of select from SQL table). If you just interested + in structure but not order of the elements you can use -u switch + combined with 'el' option.</para> + + <para>EXAMPLE:</para> + + <programlisting><phrase role="PROG"/> el -u table.xml</programlisting> + + <para>Output:</para> + + <programlisting>xml +xml/table +xml/table/rec +xml/table/rec/numField +xml/table/rec/stringField</programlisting> + + <para>If you are interested not just in elements of your XML document, + but you want to see attributes as well you can use -a switch with 'el' + option. And every line of the output will still be a valid XPath + expression.</para> + + <para>EXAMPLE:</para> + + <programlisting><phrase role="PROG"/> el -a table.xml</programlisting> + + <para>Output:</para> + + <programlisting>xml +xml/table +xml/table/rec +xml/table/rec/@id +xml/table/rec/numField +xml/table/rec/stringField +xml/table/rec +xml/table/rec/@id +xml/table/rec/numField +xml/table/rec/stringField +xml/table/rec +xml/table/rec/@id +xml/table/rec/numField +xml/table/rec/stringField</programlisting> + + <para>If you are looking for attribute values as well use -v switch of + 'el' option. And again - every line of output is a valid XPath + expression.</para> + + <para>EXAMPLE:</para> + + <programlisting><phrase role="PROG"/> el -v table.xml</programlisting> + + <para>Output:</para> + + <programlisting>xml +xml/table +xml/table/rec[@id='1'] +xml/table/rec/numField +xml/table/rec/stringField +xml/table/rec[@id='2'] +xml/table/rec/numField +xml/table/rec/stringField +xml/table/rec[@id='3'] +xml/table/rec/numField +xml/table/rec/stringField</programlisting> + </sect1> + </chapter> + + <chapter> + <title>XmlStarlet Reference</title> + + <para></para> + + <sect1> + <title>Querying XML documents</title> + + <para>XmlStarlet 'select' or 'sel' option can be used to query or search + XML documents. Here is synopsis for '<phrase role="PROG"/> sel' command:</para> + + <programlisting>XMLStarlet Toolkit: Select from XML document(s) +Usage: <phrase role="PROG"/> sel <global-options> {<template>} [ <xml-file> ... ] +where + <global-options> - global options for selecting + <xml-file> - input XML document file name/uri (stdin is used if missing) + <template> - template for querying XML document with following syntax: + +<global-options> are: + -C or --comp - display generated XSLT + -R or --root - print root element <xsl-select> + -T or --text - output is text (default is XML) + -I or --indent - indent output + -D or --xml-decl - do not omit xml declaration line + -B or --noblanks - remove insignificant spaces from XML tree + -N <name>=<value> - predefine namespaces (name without 'xmlns:') + ex: xsql=urn:oracle-xsql + Multiple -N options are allowed. + --net - allow fetch DTDs or entities over network + --help - display help + +Syntax for templates: -t|--template <options> +where <options> + -c or --copy-of <xpath> - print copy of XPATH expression + -v or --value-of <xpath> - print value of XPATH expression + -o or --output <string> - output string literal + -n or --nl - print new line + -f or --inp-name - print input file name (or URL) + -m or --match <xpath> - match XPATH expression + -i or --if <test-xpath> - check condition <xsl:if test="test-xpath"> + -e or --elem <name> - print out element <xsl:element name="name"> + -a or --attr <name> - add attribute <xsl:attribute name="name"> + -b or --break - break nesting + -s or --sort op xpath - sort in order (used after -m) where + op is X:Y:Z, + X is A - for order="ascending" + X is D - for order="descending" + Y is N - for data-type="numeric" + Y is T - for data-type="text" + Z is U - for case-order="upper-first" + Z is L - for case-order="lower-first" + +There can be multiple --match, --copy-of, --value-of, etc options +in a single template. The effect of applying command line templates +can be illustrated with the following XSLT analogue + +<phrase role="PROG"/> sel -t -c "xpath0" -m "xpath1" -m "xpath2" -v "xpath3" \ + -t -m "xpath4" -c "xpath5" + +is equivalent to applying the following XSLT + +<?xml version="1.0"?> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> +<xsl:template match="/"> + <xsl:call-template name="t1"/> + <xsl:call-template name="t2"/> +</xsl:template> +<xsl:template name="t1"> + <xsl:copy-of select="xpath0"/> + <xsl:for-each select="xpath1"> + <xsl:for-each select="xpath2"> + <xsl:value-of select="xpath3"/> + </xsl:for-each> + </xsl:for-each> +</xsl:template> +<xsl:template name="t2"> + <xsl:for-each select="xpath4"> + <xsl:copy-of select="xpath5"/> + </xsl:for-each> +</xsl:template> +</xsl:stylesheet> + +XMLStarlet is a command line toolkit to query/edit/check/transform +XML documents (for more information see http://xmlstar.sourceforge.net/) + +Current implementation uses libxslt from GNOME codebase as XSLT processor +(see http://xmlsoft.org/ for more details) +</programlisting> + + <para>'select' option allows you basically avoid writting XSLT + stylesheet to perform some queries on XML documents. I.e. various + combinations of command line parameters will let you to generate XSLT + stylesheet and apply in to XML documents with a single command line. + Very often you do not really care what XSLT was created for you 'select' + command, but in those cases when you do; you can always use -C or --comp + switch which will let you see exactly which XSLT is applied to your + input.</para> + + <para>'select' option supports many EXSLT functions in XPath + expressions.</para> + + <para>Here are few examples which will help to understand how '<phrase role="PROG"/> + select' works:</para> + + <para>EXAMPLE:</para> + + <para>Count elements matching XPath expression:</para> + + <para></para> + + <programlisting><phrase role="PROG"/> sel -t -v "count(/xml/table/rec/numField)" table.xml</programlisting> + + <para>Input (table.xml):</para> + + <programlisting><xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml></programlisting> + + <para>Output:</para> + + <programlisting>3 +</programlisting> + + <para>Let's take a close look what it did internally. For that we will + use '-C' option</para> + + <programlisting>$ <phrase role="PROG"/> sel -C -t -v "count(/xml/table/rec/numField)" +<?xml version="1.0"?> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:exslt="http://exslt.org/common" + xmlns:math="http://exslt.org/math" + xmlns:date="http://exslt.org/dates-and-times" + xmlns:func="http://exslt.org/functions" + xmlns:set="http://exslt.org/sets" + xmlns:str="http://exslt.org/strings" + xmlns:dyn="http://exslt.org/dynamic" + xmlns:saxon="http://icl.com/saxon" + xmlns:xalanredirect="org.apache.xalan.xslt.extensions.Redirect" + xmlns:xt="http://www.jclark.com/xt" + xmlns:libxslt="http://xmlsoft.org/XSLT/namespace" + xmlns:test="http://xmlsoft.org/XSLT/" + extension-element-prefixes= + "exslt math date func set str dyn saxon xalanredirect xt libxslt test" + exclude-result-prefixes="math str"> +<xsl:output omit-xml-declaration="yes" indent="no"/> +<xsl:param name="inputFile">-</xsl:param> +<xsl:template match="/"> + <xsl:call-template name="t1"/> +</xsl:template> +<xsl:template name="t1"> + <xsl:value-of select="count(/xml/table/rec/numField)"/> +</xsl:template> +</xsl:stylesheet></programlisting> + + <para>Ignoring some XSLT stuff to make it brief:</para> + + <programlisting><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> +<xsl:output omit-xml-declaration="yes" indent="no"/> +<xsl:param name="inputFile">-</xsl:param> +<xsl:template match="/"> + <xsl:call-template name="t1"/> +</xsl:template> +<xsl:template name="t1"> + <xsl:value-of select="count(/xml/table/rec/numField)"/> +</xsl:template> +</xsl:stylesheet></programlisting> + + <para>Every -t option is mapped into XSLT template. Options after '-t' + are mapped into XSLT elements:</para> + + <itemizedlist> + <listitem> + <para>-v to <xsl:value-of></para> + </listitem> + + <listitem> + <para>-c to <xsl:copy-of></para> + </listitem> + + <listitem> + <para>-e to <xsl:element></para> + </listitem> + + <listitem> + <para>-a to <xsl:attribute></para> + </listitem> + + <listitem> + <para>-s to <xsl:sort></para> + </listitem> + + <listitem> + <para>-m to <xsl:for-each></para> + </listitem> + + <listitem> + <para>-i to <xsl:if></para> + </listitem> + + <listitem> + <para>and so on</para> + </listitem> + </itemizedlist> + + <para>By default subsequent options (for instance: -m) will result in + nested corresponding XSLT elements (<xsl:for-each> for '-m'). To + break this nesting you would have to put '-b' or '--break' after first + '-m'.</para> + + <para>Below are few more examples:</para> + + <para>EXAMPLE</para> + + <para>Count all nodes in XML documents. Print input name and node count + after it.</para> + + <programlisting><phrase role="PROG"/> sel -t -f -o " " -v "count(//node())" xml/table.xml xml/tab-obj.xml</programlisting> + + <para>Output:</para> + + <programlisting>xml/table.xml 32 +xml/tab-obj.xml 41</programlisting> + + <para></para> + + <para>EXAMPLE</para> + + <para>Find XML files matching XPath expression (containing 'object' + element)</para> + + <programlisting><phrase role="PROG"/> sel -t -m //object -f xml/table.xml xml/tab-obj.xml</programlisting> + + <para>Result output:</para> + + <programlisting>xml/tab-obj.xml</programlisting> + + <para></para> + + <para>EXAMPLE</para> + + <para>Calculate EXSLT (XSLT extentions) XPath value</para> + + <programlisting>echo "<x/>" | <phrase role="PROG"/> sel -t -v "math:abs(-1000)"</programlisting> + + <para>Result output:</para> + + <programlisting>1000</programlisting> + + <para></para> + + <para>EXAMPLE</para> + + <para>Adding elements and attributes using command line '<phrase role="PROG"/> sel'</para> + + <programlisting>echo "<x/>" | <phrase role="PROG"/> sel -t -m / -e xml -e child -a data -o value</programlisting> + + <para>Result Output:</para> + + <programlisting><xml><child data="value"/></xml></programlisting> + + <para></para> + + <para>EXAMPLE</para> + + <para>Query XML document and produce sorted text table</para> + + <programlisting><phrase role="PROG"/> sel -T -t -m /xml/table/rec -s D:N:- "@id" \ + -v "concat(@id,'|',numField,'|',stringField)" -n xml/table.xml</programlisting> + + <para>Result Output:</para> + + <programlisting>3|-23|stringValue +2|346|Text Value +1|123|String Value</programlisting> + + <para>Equivalent stylesheet</para> + + <programlisting><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> +<xsl:output omit-xml-declaration="yes" indent="no" method="text"/> +<xsl:param name="inputFile">-</xsl:param> +<xsl:template match="/"> + <xsl:call-template name="t1"/> +</xsl:template> +<xsl:template name="t1"> + <xsl:for-each select="/xml/table/rec"> + <xsl:sort order="descending" data-type="number" + case-order="upper-first" select="@id"/> + <xsl:value-of select="concat(@id,'|',numField,'|',stringField)"/> + <xsl:value-of select="'&#10;'"/> + </xsl:for-each> +</xsl:template> +</xsl:stylesheet></programlisting> + + <para></para> + + <para>EXAMPLE</para> + + <para>Predefine namespaces for XPath expressions</para> + + <programlisting><phrase role="PROG"/> sel -N xsql=urn:oracle-xsql -t -v /xsql:query xsql/jobserve.xsql</programlisting> + + <para>Input (xsql/jobserve.xsql)</para> + + <programlisting>$ cat xsql/jobserve.xsql +<?xml version="1.0"?> +<?xml-stylesheet type="text/xsl" href="jobserve.xsl"?> +<xsql:query connection="jobs" xmlns:xsql="urn:oracle-xsql" max-rows="5"> + SELECT substr(title,1,26) short_title, title, location, skills + FROM job + WHERE UPPER(title) LIKE '%ORACLE%' + ORDER BY first_posted DESC +</xsql:query></programlisting> + + <para>Result output</para> + + <programlisting> SELECT substr(title,1,26) short_title, title, location, skills + FROM job + WHERE UPPER(title) LIKE '%ORACLE%' + ORDER BY first_posted DESC +</programlisting> + + <para></para> + + <para>EXAMPLE</para> + + <para>Print structure of XML element using <phrase role="PROG"/> sel (advanced XPath + expressions and <phrase role="PROG"/> sel command usage)</para> + + <programlisting><phrase role="PROG"/> sel -T -t -m '//*' \ +-m 'ancestor-or-self::*' -v 'name()' -i 'not(position()=last())' -o . -b -b -n \ +xml/structure.xml</programlisting> + + <para>Input (xml/structure.xml)</para> + + <programlisting><a1> + <a11> + <a111> + <a1111/> + </a111> + <a112> + <a1121/> + </a112> + </a11> + <a12/> + <a13> + <a131/> + </a13> +</a1></programlisting> + + <para>Result Output:</para> + + <programlisting>a1 +a1.a11 +a1.a11.a111 +a1.a11.a111.a1111 +a1.a11.a112 +a1.a11.a112.a1121 +a1.a12 +a1.a13 +a1.a13.a131</programlisting> + + <para>This example is a good demonstration of nesting control. Here is + corresponding XSLT:</para> + + <programlisting><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> +<xsl:output omit-xml-declaration="yes" indent="no" method="text"/> +<xsl:param name="inputFile">-</xsl:param> +<xsl:template match="/"> + <xsl:call-template name="t1"/> +</xsl:template> +<xsl:template name="t1"> + <xsl:for-each select="//*"> + <xsl:for-each select="ancestor-or-self::*"> + <xsl:value-of select="name()"/> + <xsl:if test="not(position()=last())"> + <xsl:value-of select="'.'"/> + </xsl:if> + </xsl:for-each> + <xsl:value-of select="'&#10;'"/> + </xsl:for-each> +</xsl:template> +</xsl:stylesheet></programlisting> + + <para></para> + + <para></para> + + <para>EXAMPLE</para> + + <para>Print all links of xhtml document</para> + + <programlisting><phrase role="PROG"/> sel --net --html -T -t -m "//*[local-name()='a']" \ + -o 'NAME: ' -v "translate(. , '&#10;', ' ')" -n \ + -o 'LINK: ' -v @href -n -n \ + http://xmlstar.sourceforge.net/</programlisting> + + <para>Sample output</para> + + <programlisting>NAME: XmlStarlet SourceForge Site +LINK: http://sourceforge.net/projects/xmlstar/ + +NAME: XmlStarlet CVS Source +LINK: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/xmlstar/ + +NAME: XmlStarlet on Freshmeat.Net +LINK: http://freshmeat.net/projects/xmlstarlet/ + +NAME: XMLStarlet Sourceforge forums +LINK: http://sourceforge.net/forum/?group_id=66612 + +NAME: XMLStarlet mailing list +LINK: http://lists.sourceforge.net/lists/listinfo/xmlstar-devel +</programlisting> + + <para></para> + </sect1> + + <sect1> + <title>Transforming XML documents</title> + + <para>Here is synopsis for '<phrase role="PROG"/> tr' command:</para> + + <programlisting>XMLStarlet Toolkit: Transform XML document(s) using XSLT +Usage: <phrase role="PROG"/> tr [<options>] <xsl-file> {-p|-s <name>=<value>} [ <xml-file-or-uri> ... ] +where + <xsl-file> - main XSLT stylesheet for transformation + <xml-file> - input XML document file name (stdin is used if missing) + <name>=<value> - name and value of the parameter passed to XSLT processor + -p - parameter is XPATH expression ("'string'" to quote string) + -s - parameter is a string literal +<options> are: + --omit-decl - omit xml declaration <?xml version="1.0"?> + --show-ext - show list of extensions + --val - allow validate against DTDs or schemas + --net - allow fetch DTDs or entities over network + --xinclude - do XInclude processing on document input + --maxdepth val - increase the maximum depth + --html - input document(s) is(are) in HTML format + --catalogs - use SGML catalogs from $SGML_CATALOG_FILES + otherwise XML catalogs starting from + file:///etc/xml/catalog are activated by default + +XMLStarlet is a command line toolkit to query/edit/check/transform +XML documents (for more information see http://xmlstar.sourceforge.net/) + +Current implementation uses libxslt from GNOME codebase as XSLT processor +(see http://xmlsoft.org/ for more details) +</programlisting> + + <para>EXAMPLE:</para> + + <programlisting># Transform passing parameters to XSLT stylesheet +<phrase role="PROG"/> tr xsl/param1.xsl -p Count='count(/xml/table/rec)' -s Text="Count=" xml/table.xml +</programlisting> + + <para>Input xsl/params1.xsl</para> + + <programlisting><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> +<xsl:output method="text"/> +<xsl:param name="Text"/> +<xsl:param name="Count"/> +<xsl:template match="/"> + <xsl:call-template name="t1"/> +</xsl:template> +<xsl:template name="t1"> + <xsl:for-each select="/xml"> + <xsl:value-of select="$Text"/> + <xsl:value-of select="$Count"/> + <xsl:value-of select="'&#10;'"/> + </xsl:for-each> +</xsl:template> +</xsl:stylesheet></programlisting> + + <para>Output</para> + + <programlisting>Count=3 +</programlisting> + </sect1> + + <sect1> + <title>Editing XML documents</title> + + <para>Here is the synopsis for '<phrase role="PROG"/> ed' command:</para> + + <programlisting>XMLStarlet Toolkit: Edit XML document(s) +Usage: <phrase role="PROG"/> ed <global-options> {<action>} [ <xml-file-or-uri> ... ] +where + <global-options> - global options for editing + <xml-file-or-uri> - input XML document file name/uri (stdin is used if missing) + +<global-options> are: + -P (or --pf) - preserve original formatting + -S (or --ps) - preserve non-significant spaces + -O (or --omit-decl) - omit XML declaration (<?xml ...?>) + -N <name>=<value> - predefine namespaces (name without 'xmlns:') + ex: xsql=urn:oracle-xsql + Multiple -N options are allowed. + -N options must be last global options. + --help or -h - display help + +where <action> + -d or --delete <xpath> + -i or --insert <xpath> -t (--type) elem|text|attr -n <name> -v (--value) <value> + -a or --append <xpath> -t (--type) elem|text|attr -n <name> -v (--value) <value> + -s or --subnode <xpath> -t (--type) elem|text|attr -n <name> -v (--value) <value> + -m or --move <xpath1> <xpath2> + -r or --rename <xpath1> -v <new-name> + -u or --update <xpath> -v (--value) <value> + -x (--expr) <xpath> (-x is not implemented yet) + +XMLStarlet is a command line toolkit to query/edit/check/transform +XML documents (for more information see http://xmlstar.sourceforge.net/) +</programlisting> + + <para>EXAMPLE:</para> + + <programlisting># Delete elements matching XPath expression +<phrase role="PROG"/> ed -d "/xml/table/rec[@id='2']" xml/table.xml +</programlisting> + + <para>Input</para> + + <programlisting><xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> +</programlisting> + + <para>Output</para> + + <programlisting><xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> +</programlisting> + + <para>EXAMPLE</para> + + <programlisting># Move element node +echo '<x id="1"><a/><b/></x>' | <phrase role="PROG"/> ed -m "//b" "//a" +</programlisting> + + <para>Output</para> + + <programlisting><x id="1"> + <a> + <b/> + </a> +</x> +</programlisting> + + <para>EXAMPLE</para> + + <programlisting># Rename attributes +<phrase role="PROG"/> ed -r "//*/@id" -v ID xml/tab-obj.xml +</programlisting> + + <para>Output:</para> + + <programlisting><xml> + <table> + <rec ID="1"> + <numField>123</numField> + <stringField>String Value</stringField> + <object name="Obj1"> + <property name="size">10</property> + <property name="type">Data</property> + </object> + </rec> + <rec ID="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec ID="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> +</programlisting> + + <para>EXAMPLE</para> + + <programlisting># Rename elements +<phrase role="PROG"/> ed -r "/xml/table/rec" -v record xml/tab-obj.xml +</programlisting> + + <para>Output:</para> + + <programlisting><xml> + <table> + <record id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + <object name="Obj1"> + <property name="size">10</property> + <property name="type">Data</property> + </object> + </record> + <record id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </record> + <record id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </record> + </table> +</xml> +</programlisting> + + <para>EXAMPLE</para> + + <programlisting># Update value of an attribute +<phrase role="PROG"/> ed -u "/xml/table/rec[@id=3]/@id" -v 5 xml/tab-obj.xml +</programlisting> + + <para>Output:</para> + + <programlisting><xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + <object name="Obj1"> + <property name="size">10</property> + <property name="type">Data</property> + </object> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec id="5"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> +</programlisting> + + <para>EXAMPLE</para> + + <programlisting># Update value of an element +<phrase role="PROG"/> ed -u "/xml/table/rec[@id=1]/numField" -v 0 xml/tab-obj.xml +</programlisting> + + <para>Output:</para> + + <programlisting><xml> + <table> + <rec id="1"> + <numField>0</numField> + <stringField>String Value</stringField> + <object name="Obj1"> + <property name="size">10</property> + <property name="type">Data</property> + </object> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> +</programlisting> + </sect1> + + <sect1> + <title>Validating XML documents</title> + + <para>Here is synopsis for '<phrase role="PROG"/> val' command:</para> + + <programlisting>XMLStarlet Toolkit: Validate XML document(s) +Usage: <phrase role="PROG"/> val <options> [ <xml-file-or-uri> ... ] +where <options> + -w or --well-formed - validate well-formedness only (default) + -d or --dtd <dtd-file> - validate against DTD + -s or --xsd <xsd-file> - validate against XSD schema + -r or --relaxng <rng-file> - validate against Relax-NG schema + -e or --err - print verbose error messages on stderr + -b or --list-bad - list only files which do not validate + -g or --list-good - list only files which validate + -q or --quiet - do not list files (return result code only) + +NOTE: XML Schemas are not fully supported yet due to its incomplete + support in libxml (see http://xmlsoft.org) + +XMLStarlet is a command line toolkit to query/edit/check/transform +XML documents (for more information see http://xmlstar.sourceforge.net/) +</programlisting> + + <para>EXAMPLE</para> + + <programlisting># Validate XML document against DTD +<phrase role="PROG"/> val --dtd dtd/table.dtd xml/tab-obj.xml >/dev/null 2>&1; echo $? +</programlisting> + + <para>Output:</para> + + <programlisting>1 +</programlisting> + + <para>EXAMPLE</para> + + <programlisting># Validate against XSD schema +<phrase role="PROG"/> val -b -s xsd/table.xsd xml/table.xml xml/tab-obj.xml 2>/dev/null; echo $? +</programlisting> + + <para>Output:</para> + + <programlisting>xml/tab-obj.xml +1 +</programlisting> + </sect1> + + <sect1> + <title>Formatting XML documents</title> + + <para>Here is synopsis for '<phrase role="PROG"/> fo' command:</para> + + <programlisting>XMLStarlet Toolkit: Format XML document +Usage: <phrase role="PROG"/> fo [<options>] <xml-file> +where <options> are + -n or --noindent - do not indent + -t or --indent-tab - indent output with tabulation + -s or --indent-spaces <num> - indent output with <num> spaces + -o or --omit-decl - omit xml declaration <?xml version="1.0"?> + -R or --recover - try to recover what is parsable + -D or --dropdtd - remove the DOCTYPE of the input docs + -C or --nocdata - replace cdata section with text nodes + -N or --nsclean - remove redundant namespace declarations + -e or --encode <encoding> - output in the given encoding (utf-8, unicode...) + -H or --html - input is HTML + -h or --help - print help + +XMLStarlet is a command line toolkit to query/edit/check/transform +XML documents (for more information see http://xmlstar.sourceforge.net/) +</programlisting> + + <para>EXAMPLE</para> + + <programlisting># Format XML document disabling indent +cat xml/tab-obj.xml | <phrase role="PROG"/> fo --noindent +</programlisting> + + <para>Output:</para> + + <programlisting><xml> +<table> +<rec id="1"> +<numField>123</numField> +<stringField>String Value</stringField> +<object name="Obj1"> +<property name="size">10</property> +<property name="type">Data</property> +</object> +</rec> +<rec id="2"> +<numField>346</numField> +<stringField>Text Value</stringField> +</rec> +<rec id="3"> +<numField>-23</numField> +<stringField>stringValue</stringField> +</rec> +</table> +</xml> +</programlisting> + + <para>EXAMPLE</para> + + <programlisting># Recover malformed XML document +<phrase role="PROG"/> fo -R xml/malformed.xml 2>/dev/null +</programlisting> + + <para>Input:</para> + + <programlisting><test_output> + <test_name>foo</testname> + <subtest>...</subtest> +</test_output> +</programlisting> + + <para>Output:</para> + + <programlisting><test_output> + <test_name>foo</test_name> + <subtest>...</subtest> +</test_output> +</programlisting> + </sect1> + + <sect1> + <title>Canonicalization of XML documents</title> + + <para>Here is synopsis for '<phrase role="PROG"/> c14n' command:</para> + + <programlisting>XMLStarlet Toolkit: XML canonicalization +Usage: <phrase role="PROG"/> c14n <mode> <xml-file> [<xpath-file>] [<inclusive-ns-list>] +where + <xml-file> - input XML document file name (stdin is used if '-') + <xpath-file> - XML file containing XPath expression for + c14n XML canonicalization + Example: + <?xml version="1.0"?> + <XPath xmlns:n0="http://a.example.com" xmlns:n1="http://b.example"> + (//. | //@* | //namespace::*)[ancestor-or-self::n1:elem1] + </XPath> + + <inclusive-ns-list> - the list of inclusive namespace prefixes + (only for exclusive canonicalization) + Example: 'n1 n2' + + <mode> is one of following: + --with-comments XML file canonicalization w comments (default) + --without-comments XML file canonicalization w/o comments + --exc-with-comments Exclusive XML file canonicalization w comments + --exc-without-comments Exclusive XML file canonicalization w/o comments + +XMLStarlet is a command line toolkit to query/edit/check/transform +XML documents (for more information see http://xmlstar.sourceforge.net/) +</programlisting> + + <para>EXAMPLE</para> + + <programlisting># XML canonicalization +<phrase role="PROG"/> c14n --with-comments ../examples/xml/structure.xml ; echo $? +</programlisting> + + <para>Input ../examples/xml/structure.xml</para> + + <programlisting><a1> + <a11> + <a111> + <a1111/> + </a111> + <a112> + <a1121/> + </a112> + </a11> + <a12/> + <a13> + <a131/> + </a13> +</a1></programlisting> + + <para>Output</para> + + <programlisting><a1> + <a11> + <a111> + <a1111></a1111> + </a111> + <a112> + <a1121></a1121> + </a112> + </a11> + <a12></a12> + <a13> + <a131></a131> + </a13> +</a1> +0 +</programlisting> + + <para>EXAMPLE</para> + + <programlisting># XML exclusive canonicalization +<phrase role="PROG"/> c14n --exc-with-comments ../examples/xml/c14n.xml ../examples/xml/c14n.xpath +</programlisting> + + <para>Input</para> + + <programlisting>../examples/xml/c14n.xml + +<n0:pdu xmlns:n0='http://a.example.com'> +<n1:elem1 xmlns:n1='http://b.example'> +content +</n1:elem1> +</n0:pdu> + +../examples/xml/c14n.xpath + +<XPath xmlns:n0="http://a.example.com" xmlns:n1="http://b.example"> +(//. | //@* | //namespace::*)[ancestor-or-self::n1:elem1] +</XPath> + +</programlisting> + + <para>Output</para> + + <programlisting><n1:elem1 xmlns:n1="http://b.example"> +content +</n1:elem1> +</programlisting> + </sect1> + + <sect1> + <title>XML and PYX format</title> + + <para>Here is synopsis for '<phrase role="PROG"/> pyx' command:</para> + + <programlisting>XMLStarlet Toolkit: Convert XML into PYX format (based on ESIS - ISO 8879) +Usage: <phrase role="PROG"/> pyx {<xml-file>} +where + <xml-file> - input XML document file name (stdin is used if missing) + +The PYX format is a line-oriented representation of +XML documents that is derived from the SGML ESIS format. +(see ESIS - ISO 8879 Element Structure Information Set spec, +ISO/IEC JTC1/SC18/WG8 N931 (ESIS)) + +A non-validating, ESIS generating tool originally developed for +pyxie project (see http://pyxie.sourceforge.net/) +ESIS Generation by Sean Mc Grath http://www.digitome.com/sean.html + +XMLStarlet is a command line toolkit to query/edit/check/transform +XML documents (for more information see http://xmlstar.sourceforge.net/) +</programlisting> + + <para>EXAMPLE</para> + + <programlisting><phrase role="PROG"/> pyx input.xml +</programlisting> + + <para>Input (input.xml)</para> + + <programlisting><books> +<book type='hardback'> +<title>Atlas Shrugged</title> +<author>Ayn Rand</author> +<isbn id='1'>0525934189</isbn> +</book> +</books></programlisting> + + <para>Output</para> + + <programlisting>(books +-\n +(book +Atype hardback +-\n +(title +-Atlas Shrugged +)title +-\n +(author +-Ayn Rand +)author +-\n +(isbn +Aid 1 +-0525934189 +)isbn +-\n +)book +-\n +)books</programlisting> + + <para>PYX is a line oriented format for XML files which can be helpful + (and very efficient) when used in combination with regular line oriented + UNIX command such as sed, grep, awk.</para> + + <para>'depyx' option is used for conversion back from PYX into + XML.</para> + + <para>EXAMPLE (Delete all attributes). This should work really fast for + very large XML documents.</para> + + <programlisting><phrase role="PROG"/> pyx input.xml | grep -v "^A" | <phrase role="PROG"/> depyx</programlisting> + + <para>Output</para> + + <programlisting><books> +<book> +<title>Atlas Shrugged</title> +<author>Ayn Rand</author> +<isbn>0525934189</isbn> +</book> +</books></programlisting> + + <para>Here is an article which describes how PYX format can be used to + grep XML. <link + xlink:href="http://www-106.ibm.com/developerworks/xml/library/x-matters17.html">http://www-106.ibm.com/developerworks/xml/library/x-matters17.html</link></para> + </sect1> + + <sect1> + <title>Escape/Unescape special XML characters</title> + + <para>Here is synopsis for '<phrase role="PROG"/> esc' command:</para> + + <programlisting><phrase role="PROG"/> esc --help +XMLStarlet Toolkit: Escape special XML characters +Usage: <phrase role="PROG"/> esc [<options>] [<string>] +where <options> are + --help - print usage + (TODO: more to be added in future) +if <string> is missing stdin is used instead. + +XMLStarlet is a command line toolkit to query/edit/check/transform +XML documents (for more information see http://xmlstar.sourceforge.net/) +</programlisting> + + <para>EXAMPLE</para> + + <programlisting># Escape special XML characters +cat xml/structure.xml | <phrase role="PROG"/> esc +</programlisting> + + <para>Input</para> + + <programlisting><a1> + <a11> + <a111> + <a1111/> + </a111> + <a112> + <a1121/> + </a112> + </a11> + <a12/> + <a13> + <a131/> + </a13> +</a1></programlisting> + + <para>Output</para> + + <programlisting>&lt;a1&gt; + &lt;a11&gt; + &lt;a111&gt; + &lt;a1111/&gt; + &lt;/a111&gt; + &lt;a112&gt; + &lt;a1121/&gt; + &lt;/a112&gt; + &lt;/a11&gt; + &lt;a12/&gt; + &lt;a13&gt; + &lt;a131/&gt; + &lt;/a13&gt; +&lt;/a1&gt; +</programlisting> + </sect1> + + <sect1> + <title>List directory as XML</title> + + <para>Here is synopsis for '<phrase role="PROG"/> ls' command:</para> + + <programlisting>XMLStarlet Toolkit: List directory as XML +Usage: <phrase role="PROG"/> ls +Lists current directory in XML format. + +XMLStarlet is a command line toolkit to query/edit/check/transform +XML documents (for more information see http://xmlstar.sourceforge.net/) +</programlisting> + + <para>EXAMPLE</para> + + <programlisting><phrase role="PROG"/> ls +</programlisting> + + <para>Output</para> + + <programlisting><xml> +<d p="rwxrwxrwx" a="20050107T050740Z" m="20050107T050740Z" s="0" n="old-resume"/> +<f p="rw-rw-rw-" a="20050107T045941Z" m="20050107T045941Z" s="12" n="resume.2old"/> +<f p="rw-rw-rw-" a="20050107T045924Z" m="20050107T045924Z" s="81" n="resume.xml"/> +</xml> +</programlisting> + </sect1> + </chapter> + + <chapter> + <title xml:id="s.5">Common problems</title> + + <sect1> + <title xml:id="s.5.1">Namespaces and default namespace</title> + + <para>One of the commonly asked questions about XmlStarlet 'select' or + 'edit' options is: "Why nothing matched for my XPath expression which + seems right to me?". Common cause of these problems is not properly + defining a namespace for XPath. This chapter will show several examples + to illustrate these issues you might encounter.</para> + + <para>For example the following XHTML document has a default namespace + declaration</para> + + <para><programlisting><html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title>Query Page</title> +<meta http-equiv="Content-Style-Type" content="text/css" /> +<meta http-equiv="Content-Script-Type" content="text/javascript" /> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> +<meta name="robots" content="noindex,nofollow" /> +</head> +<body> +... +</body> +</html> +</programlisting></para> + + <para>And the following (initially looking correct) query to print all + links</para> + + <para><programlisting><phrase role="PROG"/> sel -t -m "//a" -c . -n </programlisting></para> + + <para>would return nothing. The issue with this query is that it is not + addressing element <a> in the right namespace. XPath requires all + namespaces used in XPath expression be defined. So for declared + namespace <html xmlns="http://www.w3.org/1999/xhtml"> in input + XML, you have to do same for XPath (or XSLT). There is another important + detail: namespace equivalency is determined not by namespace prefix, but + by URI. See query below, which would return expected result</para> + + <para><programlisting><phrase role="PROG"/> sel -N x="http://www.w3.org/1999/xhtml" -t -m "//x:a" -c . -n</programlisting></para> + + <para>Example of deleting namespace declarations.</para> + + <para>Delete namespace declarations and all elements from non default + namespace from the following XML document:</para> + + <para>Input (file ns2.xml)<programlisting><doc xmlns="http://www.a.com/xyz" xmlns:ns="http://www.c.com/xyz"> + <A>test</A> + <B> + <ns:C>xyz</ns:C> + </B> +</doc> +</programlisting></para> + + <para>Command:<programlisting><phrase role="PROG"/> ed -N N="http://www.c.com/xyz" -d '//N:*' ns2.xml | \ + sed -e 's/ xmlns.*=".*"//g'</programlisting></para> + + <para>Output<programlisting><doc> + <A>test</A> + <B/> +</doc> +</programlisting></para> + </sect1> + + <sect1> + <title xml:id="s.5.2">Special characters</title> + + <para>Sometimes issues appear with handling of special characters, where + 'special' means in XML sence as well as in 'shell' terms. Examples below + should clear at least some of the confusions.</para> + + <para>You should not forget about the fact that your command lines are + executed by shell and shell does substitutions of its special characters + too. So for example, one may ask:</para> + + <para>"Why does the following query return nothing?" + <programlisting>echo '<X name="foo">EEE</X>' | <phrase role="PROG"/> sel -t -m /X[@name='foo'] -v .</programlisting></para> + + <para>The answer lies in the way shell substitues 'foo', which simply + becomes foo before the command is run. So the correct way to write that + would be</para> + + <para><programlisting>echo '<X name="foo">EEE</X>' | <phrase role="PROG"/> sel -t -m "/X[@name='foo']" -v .</programlisting></para> + + <para>Another example involves XML special characters. Question: How to + search for &apos; in text nodes?</para> + + <para>The following should help<programlisting><phrase role="PROG"/> sel -t -m "//line[contains(text(),&quot;'&quot;)]" -c . +</programlisting></para> + </sect1> + + <sect1> + <title xml:id="s.5.3">Sorting</title> + + <para>Let's take a look at XSLT produced by the following '<phrase role="PROG"/> sel' + command:</para> + + <para><programlisting># Query XML document and produce sorted text table +<phrase role="PROG"/> sel -T -t -m /xml/table/rec -s D:N:- "@id" \ + -v "concat(@id,'|',numField,'|',stringField)" -n xml/table.xml +</programlisting></para> + + <para><programlisting><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> +<xsl:output omit-xml-declaration="yes" indent="no" method="text"/> +<xsl:param name="inputFile">-</xsl:param> +<xsl:template match="/"> + <xsl:call-template name="t1"/> +</xsl:template> +<xsl:template name="t1"> + <xsl:for-each select="/xml/table/rec"> + <xsl:sort order="descending" data-type="number" + case-order="upper-first" select="@id"/> + <xsl:value-of select="concat(@id,'|',numField,'|',stringField)"/> + <xsl:value-of select="'&#10;'"/> + </xsl:for-each> +</xsl:template> +</xsl:stylesheet> +</programlisting></para> + + <para>-s option of '<phrase role="PROG"/> sel' command controls 'order', 'data-type', and + 'case-order' attributes of <xsl:sort/> element .</para> + </sect1> + + <sect1> + <title xml:id="s.5.4">Validation</title> + + <para>Many questions are asked about XSD (XML schema) validation. Well, + XmlStarlet relies on libxml2 which has incomplete support for XML + schemas. Untill it is done in libxml2 it will not be in + XmlStarlet.</para> + + <para></para> + + <para></para> + </sect1> + </chapter> + + <chapter> + <title>Other XmlStarlet Resources</title> + + <para>Here are few articles on the Internet.</para> + + <itemizedlist> + <listitem> + <para><link + xlink:href="http://www.freesoftwaremagazine.com/free_issues/issue_06/xml_starlet/">XMLStarlet: + a Unix toolkit for XML</link></para> + </listitem> + + <listitem> + <para><link + xlink:href="http://www-128.ibm.com/developerworks/xml/library/x-starlet.html">Start + working with XMLStarlet</link></para> + </listitem> + + <listitem> + <para><link + xlink:href="http://blogicblog.blogspot.com/2004/09/xmlstarlet-gentle-introduction-into.html">XMLStarlet: + A gentle introduction into XSLT </link></para> + </listitem> + + <listitem> + <para><link + xlink:href="http://blogs.applibase.net/pramod/index.php/archives/command-line-xml-with-xmlstarlet ">Command + line XML with XMLStarlet </link></para> + </listitem> + + <listitem> + <para><link + xlink:href="http://www.pinkjuice.com/howto/vimxml/moresetup.xml#xmlstarlet">Using + vi as XML editor</link></para> + </listitem> + </itemizedlist> + </chapter> +</book> diff --git a/doc/xmlstarlet.1 b/doc/xmlstarlet.1 new file mode 100644 index 0000000..383b155 --- /dev/null +++ b/doc/xmlstarlet.1 @@ -0,0 +1,136 @@ +'\" t +.\" Title: xmlstarlet +.\" Author: Mikhail Grushinskiy +.\" Generator: DocBook XSL-NS Stylesheets v1.76.1 <http://docbook.sf.net/> +.\" Date: 08/26/2012 +.\" Manual: XMLStarlet Manual +.\" Source: Version 1.4.0 +.\" Language: English +.\" +.TH "XMLSTARLET" "1" "08/26/2012" "Version 1.4.0" "XMLStarlet Manual" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +xmlstarlet \- command line XML/XSLT toolkit +.SH "SYNOPSIS" +.HP \w'\fBxml\fR\ 'u +\fBxml\fR [\fIoptions\fR...] {\fIcommand\fR} [\fIcmd\-options\fR...] +.SH "INTRODUCTION" +.PP +XMLStarlet is a set of command line utilities (tools) which can be used to transform, query, validate, and edit XML documents and files using simple set of shell commands in similar way it is done for plain text files using UNIX grep, sed, awk, diff, patch, join, etc commands\&. This set of command line utilities can be used by those who deal with many XML documents on UNIX shell command prompt as well as for automated XML processing with shell scripts\&. +.SH "OPTIONS" +.PP +\fB\-\-version\fR +.RS 4 +Display the version of +xmlstarlet\&. +.RE +.PP +\fB\-\-help\fR +.RS 4 +Display help\&. +.RE +.SH "COMMANDS" +.PP +\fBxml\fR +\fIcommand\fR +\fB\-\-help\fR +for command specific help +.PP +Available commands include: +.PP +\fBed (or edit)\fR +.RS 4 +Edit/update XML document(s)\&. +.RE +.PP +\fBsel (or select)\fR +.RS 4 +Select data or query XML document(s) (XPATH, etc)\&. +.RE +.PP +\fBtr (or transform)\fR +.RS 4 +Transform XML documents(s) using XSLT\&. +.RE +.PP +\fBval (or validate)\fR +.RS 4 +Validate XML document(s) (well\-formed/DTD/XSD/RelaxNG)\&. +.RE +.PP +\fBfo (or format)\fR +.RS 4 +Format XML document(s)\&. +.RE +.PP +\fBel (or elements)\fR +.RS 4 +Display element structure of XML document\&. +.RE +.PP +\fBc14n (or canonic)\fR +.RS 4 +XML canonicalization\&. +.RE +.PP +\fBls (or list)\fR +.RS 4 +List directory as XML\&. +.RE +.PP +\fBesc (or escape)\fR +.RS 4 +Escape special XML characters\&. +.RE +.PP +\fBunesc (or unescape)\fR +.RS 4 +Unescape special XML characters\&. +.RE +.PP +\fBpyx (or xmln)\fR +.RS 4 +Convert XML into PYX format (based on ESIS \- ISO 8879)\&. +.RE +.PP +\fBp2x (or depyx)\fR +.RS 4 +Convert PYX into XML\&. +.RE +.SH "REFERENCES" +.PP +XMLStarlet is a command line toolkit to query/edit/check/transform XML documents (for more information see http://xmlstar\&.sourceforge\&.net/)\&. +.SH "BUGS" +.PP +Report bugs to the mailing list, +xmlstar\-devel@lists\&.sourceforge\&.net +or the bug tracker: +\m[blue]\fB\%http://sourceforge.net/tracker/?group_id=66612&atid=515106\fR\m[]\&. +.SH "AUTHOR" +.PP +\fBMikhail Grushinskiy\fR +.RS 4 +XMLStarlet creator\&. +.RE +.SH "COPYRIGHT" +.br +Copyright \(co 2012 +.br diff --git a/doc/xmlstarlet.txt b/doc/xmlstarlet.txt new file mode 100644 index 0000000..309030d --- /dev/null +++ b/doc/xmlstarlet.txt @@ -0,0 +1,1325 @@ + + + XMLSTARLET USER'S GUIDE + + see also http://xmlstar.sourceforge.net/ + + + + +1. BASIC COMMAND LINE OPTIONS +==================================================== + +xml --help +XMLStarlet Toolkit: Command line utilities for XML +Usage: xml [<options>] <command> [<cmd-options>] +where <command> is one of: + ed (or edit) - Edit/Update XML document(s) + sel (or select) - Select data or query XML document(s) (XPATH, etc) + tr (or transform) - Transform XML document(s) using XSLT + val (or validate) - Validate XML document(s) (well-formed/DTD/XSD/RelaxNG) + fo (or format) - Format XML document(s) + el (or elements) - Display element structure of XML document + c14n (or canonic) - XML canonicalization + ls (or list) - List directory as XML + esc (or escape) - Escape special XML characters + unesc (or unescape) - Unescape special XML characters + pyx (or xmln) - Convert XML into PYX format (based on ESIS - ISO 8879) + p2x (or depyx) - Convert PYX into XML +<options> are: + --version - show version + --help - show help +Wherever file name mentioned in command help it is assumed +that URL can be used instead as well. + +Type: xml <command> --help <ENTER> for command help + + + + +2. Select/Query XML documents +==================================================== + +xml sel --help +XMLStarlet Toolkit: Select from XML document(s) +Usage: xml sel <global-options> {<template>} [ <xml-file> ... ] +where + <global-options> - global options for selecting + <xml-file> - input XML document file name/uri (stdin is used if missing) + <template> - template for querying XML document with following syntax: + +<global-options> are: + -Q or --quiet - do not write anything to standard output. + -C or --comp - display generated XSLT + -R or --root - print root element <xsl-select> + -T or --text - output is text (default is XML) + -I or --indent - indent output + -D or --xml-decl - do not omit xml declaration line + -B or --noblanks - remove insignificant spaces from XML tree + -E or --encode <encoding> - output in the given encoding (utf-8, unicode...) + -N <name>=<value> - predefine namespaces (name without 'xmlns:') + ex: xsql=urn:oracle-xsql + Multiple -N options are allowed. + --net - allow fetch DTDs or entities over network + --help - display help + +Syntax for templates: -t|--template <options> +where <options> + -c or --copy-of <xpath> - print copy of XPATH expression + -v or --value-of <xpath> - print value of XPATH expression + -o or --output <string> - output string literal + -n or --nl - print new line + -f or --inp-name - print input file name (or URL) + -m or --match <xpath> - match XPATH expression + --var <name> <value> --break or + --var <name>=<value> - declare a variable (referenced by $name) + -i or --if <test-xpath> - check condition <xsl:if test="test-xpath"> + --elif <test-xpath> - check condition if previous conditions failed + --else - check if previous conditions failed + -e or --elem <name> - print out element <xsl:element name="name"> + -a or --attr <name> - add attribute <xsl:attribute name="name"> + -b or --break - break nesting + -s or --sort op xpath - sort in order (used after -m) where + op is X:Y:Z, + X is A - for order="ascending" + X is D - for order="descending" + Y is N - for data-type="numeric" + Y is T - for data-type="text" + Z is U - for case-order="upper-first" + Z is L - for case-order="lower-first" + +There can be multiple --match, --copy-of, --value-of, etc options +in a single template. The effect of applying command line templates +can be illustrated with the following XSLT analogue + +xml sel -t -c "xpath0" -m "xpath1" -m "xpath2" -v "xpath3" \ + -t -m "xpath4" -c "xpath5" + +is equivalent to applying the following XSLT + +<?xml version="1.0"?> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> +<xsl:template match="/"> + <xsl:call-template name="t1"/> + <xsl:call-template name="t2"/> +</xsl:template> +<xsl:template name="t1"> + <xsl:copy-of select="xpath0"/> + <xsl:for-each select="xpath1"> + <xsl:for-each select="xpath2"> + <xsl:value-of select="xpath3"/> + </xsl:for-each> + </xsl:for-each> +</xsl:template> +<xsl:template name="t2"> + <xsl:for-each select="xpath4"> + <xsl:copy-of select="xpath5"/> + </xsl:for-each> +</xsl:template> +</xsl:stylesheet> + + + + +3. Editing XML documents +==================================================== + +xml ed --help +XMLStarlet Toolkit: Edit XML document(s) +Usage: xml ed <global-options> {<action>} [ <xml-file-or-uri> ... ] +where + <global-options> - global options for editing + <xml-file-or-uri> - input XML document file name/uri (stdin otherwise) + +<global-options> are: + -P, or -S - preserve whitespace nodes. + (or --pf, --ps) Note that space between attributes is not preserved + -O (or --omit-decl) - omit XML declaration (<?xml ...?>) + -L (or --inplace) - edit file inplace + -N <name>=<value> - predefine namespaces (name without 'xmlns:') + ex: xsql=urn:oracle-xsql + Multiple -N options are allowed. + -N options must be last global options. + --net - allow network access + --help or -h - display help + +where <action> + -d or --delete <xpath> + --var <name> <xpath> + -i or --insert <xpath> -t (--type) elem|text|attr -n <name> -v (--value) <value> + -a or --append <xpath> -t (--type) elem|text|attr -n <name> -v (--value) <value> + -s or --subnode <xpath> -t (--type) elem|text|attr -n <name> -v (--value) <value> + -m or --move <xpath1> <xpath2> + -r or --rename <xpath1> -v <new-name> + -u or --update <xpath> -v (--value) <value> + -x (--expr) <xpath> + + + + +4. Using XSLT to transform XML documents +==================================================== + +xml tr --help +XMLStarlet Toolkit: Transform XML document(s) using XSLT +Usage: xml tr [<options>] <xsl-file> {-p|-s <name>=<value>} [<xml-file>...] +where + <xsl-file> - main XSLT stylesheet for transformation + <xml-file> - input XML document file/URL (stdin is used if missing) + <name>=<value> - name and value of the parameter passed to XSLT processor + -p - parameter is XPATH expression ("'string'" to quote string) + -s - parameter is a string literal +<options> are: + --help or -h - display help message + --omit-decl - omit xml declaration <?xml version="1.0"?> + --embed or -E - allow applying embedded stylesheet + --show-ext - show list of extensions + --val - allow validate against DTDs or schemas + --net - allow fetch DTDs or entities over network + --xinclude - do XInclude processing on document input + --maxdepth val - increase the maximum depth + --html - input document(s) is(are) in HTML format + + + + +5. Formatting XML documents +==================================================== + +xml fo --help +XMLStarlet Toolkit: Format XML document +Usage: xml fo [<options>] <xml-file> +where <options> are + -n or --noindent - do not indent + -t or --indent-tab - indent output with tabulation + -s or --indent-spaces <num> - indent output with <num> spaces + -o or --omit-decl - omit xml declaration <?xml version="1.0"?> + --net - allow network access + -R or --recover - try to recover what is parsable + -D or --dropdtd - remove the DOCTYPE of the input docs + -C or --nocdata - replace cdata section with text nodes + -N or --nsclean - remove redundant namespace declarations + -e or --encode <encoding> - output in the given encoding (utf-8, unicode...) + -H or --html - input is HTML + -Q or --quiet - Suppress errors from libxml2 + -h or --help - print help + + + + +6. Validating XML documents +==================================================== + +xml val --help +XMLStarlet Toolkit: Validate XML document(s) +Usage: xml val <options> [ <xml-file-or-uri> ... ] +where <options> + -w or --well-formed - validate well-formedness only (default) + -d or --dtd <dtd-file> - validate against DTD + --net - allow network access + -s or --xsd <xsd-file> - validate against XSD schema + -E or --embed - validate using embedded DTD + -r or --relaxng <rng-file> - validate against Relax-NG schema + -e or --err - print verbose error messages on stderr + -b or --list-bad - list only files which do not validate + -g or --list-good - list only files which validate + -q or --quiet - do not list files (return result code only) + +NOTE: XML Schemas are not fully supported yet due to its incomplete + support in libxml2 (see http://xmlsoft.org) + + + + +7. Displaying structure of XML documents +==================================================== + +xml el --help +XMLStarlet Toolkit: Display element structure of XML document +Usage: xml el [<options>] <xml-file> +where + <xml-file> - input XML document file name (stdin is used if missing) + <options> is one of: + -a - show attributes as well + -v - show attributes and their values + -u - print out sorted unique lines + -d<n> - print out sorted unique lines up to depth <n> + + + + + +8. Escape/Unescape special XML characters +==================================================== + +xml esc --help +XMLStarlet Toolkit: Escape special XML characters +Usage: xml esc [<options>] [<string>] +where <options> are + --help - print usage + (TODO: more to be added in future) +if <string> is missing stdin is used instead. + + + + + +9. List directory as XML +==================================================== + +xml ls --help +XMLStarlet Toolkit: List directory as XML +Usage: xml ls [ <dir> | --help ] +Lists current directory in XML format. +Time is shown per ISO 8601 spec. + + + + + +10. XML canonicalization +==================================================== + +xml c14n --help +XMLStarlet Toolkit: XML canonicalization +Usage: xml c14n [--net] <mode> <xml-file> [<xpath-file>] [<inclusive-ns-list>] +where + <xml-file> - input XML document file name (stdin is used if '-') + <xpath-file> - XML file containing XPath expression for + c14n XML canonicalization + Example: + <?xml version="1.0"?> + <XPath xmlns:n0="http://a.example.com" xmlns:n1="http://b.example"> + (//. | //@* | //namespace::*)[ancestor-or-self::n1:elem1] + </XPath> + + <inclusive-ns-list> - the list of inclusive namespace prefixes + (only for exclusive canonicalization) + Example: 'n1 n2' + + <mode> is one of following: + --with-comments XML file canonicalization w comments (default) + --without-comments XML file canonicalization w/o comments + --exc-with-comments Exclusive XML file canonicalization w comments + --exc-without-comments Exclusive XML file canonicalization w/o comments + + + + + +11. Convert XML into PYX format (based on ESIS - ISO 8879) +==================================================== + +xml pyx --help +XMLStarlet Toolkit: Convert XML into PYX format (based on ESIS - ISO 8879) +Usage: xml pyx {<xml-file>} +where + <xml-file> - input XML document file name (stdin is used if missing) + +The PYX format is a line-oriented representation of +XML documents that is derived from the SGML ESIS format. +(see ESIS - ISO 8879 Element Structure Information Set spec, +ISO/IEC JTC1/SC18/WG8 N931 (ESIS)) + +A non-validating, ESIS generating tool originally developed for +pyxie project (see http://pyxie.sourceforge.net/) +ESIS Generation by Sean Mc Grath http://www.digitome.com/sean.html + + + + + +12. Examples: +==================================================== + +Input1 +examples/xml/table.xml + +<?xml version="1.0"?> +<xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> + + +Input2 +examples/xml/tab-obj.xml + +<?xml version="1.0"?> +<xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + <object name="Obj1"> + <property name="size">10</property> + <property name="type">Data</property> + </object> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> + + +Input3 +examples/html/hello1.html + +<html> +<head> + <title>Hello World</title> + <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"> +</head> +<body> + <div align="center">Hello World!<br></div> +</body> +</html> + + + +Input4 +examples/sgml/docbook1.sgml + +<!DOCTYPE book + PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" + "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"> +<book> + + <bookinfo> + <title>DocBook document example</title> + <author> + <firstname>Mikhail</firstname> + <surname>Grushinskiy</surname> + </author> + + <copyright> + <year>2002</year> + <holder>Mikhail Grushinskiy</holder> + </copyright> + </bookinfo> + + <preface> + <title>Sample document</title> + + <para>A simple DocBook example document.</para> + </preface> + + <chapter> + <title>XMLStarlet Example</title> + + <para>The <emphasis>XMLStarlet</emphasis> command line toolkit + allows querying/checking/editing/transforming/formatting XML documents + from command line</para> + + <para>To find out more on how to use the + <emphasis>XMLStarlet</emphasis> for XML processing, point + your browser to <ulink + url="http://xmlstar.sourceforge.net/">http://xmlstar.sourceforge.net/</ulink>. + </para> + + </chapter> + +</book> + + + +Stylesheet1 +examples/xsl/sum1.xsl + +<?xml version="1.0"?> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> +<xsl:output method="text"/> +<xsl:param name="inputFile">-</xsl:param> +<xsl:template match="/"> + <xsl:call-template name="t1"/> +</xsl:template> +<xsl:template name="t1"> + <xsl:value-of select="sum(/xml/table/rec/numField)"/> + <xsl:value-of select="' '"/> +</xsl:template> +</xsl:stylesheet> + + +Stylesheet2 +examples/xsl/hello1.xsl + +<?xml version="1.0"?> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> +<xsl:output method="text"/> +<xsl:param name="inputFile">-</xsl:param> +<xsl:template match="/"> + <xsl:call-template name="t1"/> +</xsl:template> +<xsl:template name="t1"> + <xsl:for-each select="/"> + <xsl:value-of select="/html/body/div"/> + </xsl:for-each> +</xsl:template> +</xsl:stylesheet> + + +Stylesheet3 +examples/xsl/param1.xsl + +<?xml version="1.0"?> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> +<xsl:output method="text"/> +<xsl:param name="Text"/> +<xsl:param name="Count"/> +<xsl:template match="/"> + <xsl:call-template name="t1"/> +</xsl:template> +<xsl:template name="t1"> + <xsl:for-each select="/xml"> + <xsl:value-of select="$Text"/> + <xsl:value-of select="$Count"/> + <xsl:value-of select="' '"/> + </xsl:for-each> +</xsl:template> +</xsl:stylesheet> + + + +Command: +# XML canonicalization +xml c14n --with-comments ../examples/xml/structure.xml ; echo $? +Result Output: +<a1> + <a11> + <a111> + <a1111></a1111> + </a111> + <a112> + <a1121></a1121> + </a112> + </a11> + <a12></a12> + <a13> + <a131></a131> + </a13> +</a1>0 + + +Command: +# XML exclusive canonicalization +xml c14n --exc-with-comments ../examples/xml/c14n.xml ../examples/xml/c14n.xpath +Result Output: +<n1:elem1 xmlns:n1="http://b.example"> +content +</n1:elem1> + +Command: +# Count elements matching XPath expression +xml sel -t -v "count(/xml/table/rec/numField)" xml/table.xml +Result Output: +3 + + +Command: +# Count all nodes in XML document +xml sel -t -f -o " " -v "count(//node())" xml/table.xml xml/tab-obj.xml +Result Output: +xml/table.xml 32 +xml/tab-obj.xml 41 + + +Command: +# Delete elements matching XPath expression +xml ed -d /xml/table/rec[@id='2'] xml/table.xml +Result Output: +<?xml version="1.0"?> +<xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> + + +Command: +# Generate HTML from given SGML docbook document +xml tr --omit-decl --docbook /usr/share/sgml/docbook/yelp/docbook/html/docbook.xsl sgml/docbook1.sgml | \ + xml fo --html --indent-spaces 2 +Result Output: +<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> +<html> + <head> + <meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"/> + <title>DocBook document example</title> + <meta name="generator" content="DocBook XSL Stylesheets V1.48"/> + </head> + <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> + <div class="book"> + <div class="titlepage"> + <div> + <h1 class="title"><a name="id2765244"/>DocBook document example</h1> + </div> + <div> + <h3 class="author">Mikhail Grushinskiy</h3> + </div> + <div> + <p class="copyright">Copyright © 2002 Mikhail Grushinskiy</p> + </div> + <hr/> + </div> + <div class="toc"> + <p> + <b>Table of Contents</b> + </p> + <dl> + <dt> + <a href="#id2765482">Sample document</a> + </dt> + <dt>1. <a href="#id2767329">XMLStarlet Example</a></dt> + </dl> + </div> + <div class="preface"> + <div class="titlepage"> + <div> + <h2 class="title"><a name="id2765482"/>Sample document</h2> + </div> + </div> + <p>A simple DocBook example document.</p> + </div> + <div class="chapter"> + <div class="titlepage"> + <div> + <h2 class="title"><a name="id2767329"/>Chapter 1. XMLStarlet Example</h2> + </div> + </div> + <p>The <span class="emphasis"><i>XMLStarlet</i></span> command line toolkit + allows querying/checking/editing/transforming/formatting XML documents + from command line</p> + <p>To find out more on how to use the + <span class="emphasis"><i>XMLStarlet</i></span> for XML processing, point + your browser to <a href="http://xmlstar.sourceforge.net/" target="_top">http://xmlstar.sourceforge.net/</a>. + </p> + </div> + </div> + </body> +</html> + + +Command: +# Validate XML document against DTD +xml val --dtd dtd/table.dtd xml/tab-obj.xml >/dev/null 2>&1; echo $? +Result Output: +1 + + +Command: +# Validate XML document against DTD +xml val --dtd dtd/table.dtd xml/table.xml >/dev/null 2>&1; echo $? +Result Output: +0 + + +Command: +# Validate XML document against DTD +xml val --dtd xml/foo.dtd xml/foo.xml 2>/dev/null +Result Output: +xml/foo.xml - invalid + + +Command: +# make sure we don't look for embedded dtd if not asked +xml val --dtd dtd/table.dtd xml/table.xml +Result Output: +xml/table.xml - valid + + +Command: +xml ed \ + -s /xml/table/rec -t elem -n new-field -v new-value \ + -i '$prev' -t attr -n new-attr -v new-attr-value \ + xml/table.xml +Result Output: +<?xml version="1.0"?> +<xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + <new-field new-attr="new-attr-value">new-value</new-field> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + <new-field new-attr="new-attr-value">new-value</new-field> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + <new-field new-attr="new-attr-value">new-value</new-field> + </rec> + </table> +</xml> + + +Command: +xml ed \ + -s /xml/table/rec -t elem -n new-field -v new-value \ + --var new-field '$prev' \ + -i '$new-field' -t attr -n new-attr -v new-attr-value \ + -s '$new-field' -t elem -n new-subelem -v '' \ + xml/table.xml +Result Output: +<?xml version="1.0"?> +<xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + <new-field new-attr="new-attr-value">new-value<new-subelem/></new-field> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + <new-field new-attr="new-attr-value">new-value<new-subelem/></new-field> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + <new-field new-attr="new-attr-value">new-value<new-subelem/></new-field> + </rec> + </table> +</xml> + + +Command: +# Display element structure of XML document +xml el ./xml/tab-obj.xml +Result Output: +xml +xml/table +xml/table/rec +xml/table/rec/numField +xml/table/rec/stringField +xml/table/rec/object +xml/table/rec/object/property +xml/table/rec/object/property +xml/table/rec +xml/table/rec/numField +xml/table/rec/stringField +xml/table/rec +xml/table/rec/numField +xml/table/rec/stringField + + +Command: +# Display element structure of XML document (including attributes) +xml el -a ./xml/tab-obj.xml +Result Output: +xml +xml/table +xml/table/rec +xml/table/rec/@id +xml/table/rec/numField +xml/table/rec/stringField +xml/table/rec/object +xml/table/rec/object/@name +xml/table/rec/object/property +xml/table/rec/object/property/@name +xml/table/rec/object/property +xml/table/rec/object/property/@name +xml/table/rec +xml/table/rec/@id +xml/table/rec/numField +xml/table/rec/stringField +xml/table/rec +xml/table/rec/@id +xml/table/rec/numField +xml/table/rec/stringField + + +Command: +# Display element structure of XML document (including attribute values) +xml el -v ./xml/tab-obj.xml +Result Output: +xml +xml/table +xml/table/rec[@id='1'] +xml/table/rec/numField +xml/table/rec/stringField +xml/table/rec/object[@name='Obj1'] +xml/table/rec/object/property[@name='size'] +xml/table/rec/object/property[@name='type'] +xml/table/rec[@id='2'] +xml/table/rec/numField +xml/table/rec/stringField +xml/table/rec[@id='3'] +xml/table/rec/numField +xml/table/rec/stringField + + +Command: +# Escape special XML characters +cat xml/structure.xml | xml esc +Result Output: +<a1> + <a11> + <a111> + <a1111/> + </a111> + <a112> + <a1121/> + </a112> + </a11> + <a12/> + <a13> + <a131/> + </a13> +</a1> + + +Command: +# Calculate EXSLT (XSLT extentions) XPath value +echo "<x/>" | xml sel -t -v "math:abs(-1000)" +Result Output: +1000 + + +Command: +# Find XML files matching XPath expression (containing 'object' element) +xml sel -t -m //object -f xml/table.xml xml/tab-obj.xml +Result Output: +xml/tab-obj.xml + + +Command: +# Generate XML document using command line xml sel +echo "<x/>" | xml sel -t -m / -e xml -e child -a data -o value +Result Output: +<xml><child data="value"/></xml> + + +Command: +# Apply XSLT stylesheet to HTML input file +xml tr --html xsl/hello1.xsl html/hello1.html +Result Output: +Hello World! + +Command: +# Use local-name() XSLT function in XPath expression +xml sel -t -v "//*[local-name()='query']" xsql/jobserve.xsql +Result Output: + + SELECT substr(title,1,26) short_title, title, location, skills + FROM job + WHERE UPPER(title) LIKE '%ORACLE%' + ORDER BY first_posted DESC + + + +Command: +# Select text value of an XML element mathing given XPath expression +xml sel -t -m "/xml/table/rec[@id='2']" -v numField xml/table.xml +Result Output: +346 + + +Command: +# Move element node +echo '<x id="1"><a/><b/></x>' | xml ed -m "//b" "//a" + +Result Output: +<?xml version="1.0"?> +<x id="1"> + <a> + <b/> + </a> +</x> + + +Command: +# Format XML document disabling indent +cat xml/tab-obj.xml | xml fo --noindent +Result Output: +<?xml version="1.0"?> +<xml> +<table> +<rec id="1"> +<numField>123</numField> +<stringField>String Value</stringField> +<object name="Obj1"> +<property name="size">10</property> +<property name="type">Data</property> +</object> +</rec> +<rec id="2"> +<numField>346</numField> +<stringField>Text Value</stringField> +</rec> +<rec id="3"> +<numField>-23</numField> +<stringField>stringValue</stringField> +</rec> +</table> +</xml> + + +Command: +# Predefine namespaces for XPath expressions +xml sel -N xsql=urn:oracle-xsql -t -v /xsql:query xsql/jobserve.xsql +Result Output: + + SELECT substr(title,1,26) short_title, title, location, skills + FROM job + WHERE UPPER(title) LIKE '%ORACLE%' + ORDER BY first_posted DESC + + + +Command: +# Recover malformed XML document +xml fo -R xml/malformed.xml 2>/dev/null +Result Output: +<?xml version="1.0"?> +<test_output> + <test_name>foo</test_name> + <subtest>...</subtest> +</test_output> + + +Command: +# Rename attributes +xml ed -r "//*/@id" -v ID xml/tab-obj.xml +Result Output: +<?xml version="1.0"?> +<xml> + <table> + <rec ID="1"> + <numField>123</numField> + <stringField>String Value</stringField> + <object name="Obj1"> + <property name="size">10</property> + <property name="type">Data</property> + </object> + </rec> + <rec ID="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec ID="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> + + +Command: +# Rename elements +xml ed -r "/xml/table/rec" -v record xml/tab-obj.xml +Result Output: +<?xml version="1.0"?> +<xml> + <table> + <record id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + <object name="Obj1"> + <property name="size">10</property> + <property name="type">Data</property> + </object> + </record> + <record id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </record> + <record id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </record> + </table> +</xml> + + +Command: +# Validate against XSD schema +xml val -b -s xsd/table.xsd xml/table.xml xml/tab-obj.xml 2>/dev/null; echo $? +Result Output: +xml/tab-obj.xml +1 + + +Command: +# xsl:copy-of in xml sel command +xml sel -B -t -m /xml/table/rec -c . -n xml/table.xml +Result Output: +<rec id="1"><numField>123</numField><stringField>String Value</stringField></rec> +<rec id="2"><numField>346</numField><stringField>Text Value</stringField></rec> +<rec id="3"><numField>-23</numField><stringField>stringValue</stringField></rec> + + + +Command: +# Query XML document and produce sorted text table +xml sel -T -t -m /xml/table/rec -s D:N:- "@id" -v "concat(@id,'|',numField,'|',stringField)" -n xml/table.xml +Result Output: +3|-23|stringValue +2|346|Text Value +1|123|String Value + + +Command: +# Sort on two fields +xml sel -T -t -m /root/elem -s A:N:U @rank -s A:T:U @name -v @name -n xml/unsorted.xml + +Result Output: +A +a +E +e +B +b +C +c +D +d + + +Command: +# lower case first +xml sel -T -t -m /root/elem -s A:T:L @name -v @name -n xml/unsorted.xml + +Result Output: +a +A +b +B +c +C +d +D +e +E + + +Command: +# Print structure of XML element using xml sel (advanced XPath expressions and xml sel command usage) +xml sel -T -t -m '//*' \ +-m 'ancestor-or-self::*' -v 'name()' -i 'not(position()=last())' -o . -b -b -n \ +xml/structure.xml +Result Output: +a1 +a1.a11 +a1.a11.a111 +a1.a11.a111.a1111 +a1.a11.a112 +a1.a11.a112.a1121 +a1.a12 +a1.a13 +a1.a13.a131 + + +Command: +# Calculating running sum on XML document +xml sel -t -v "sum(/xml/table/rec/numField)" xml/table.xml +Result Output: +446 + + +Command: +# Indent XML document with tabs +cat xml/tab-obj.xml | xml fo --indent-tab +Result Output: +<?xml version="1.0"?> +<xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + <object name="Obj1"> + <property name="size">10</property> + <property name="type">Data</property> + </object> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> + + +Command: +# Generate plain text table from XML document +xml sel -T -t -m /xml/table/rec -v "@id" -o "|" -v numField -o "|" -v stringField -n xml/table.xml +Result Output: +1|123|String Value +2|346|Text Value +3|-23|stringValue + + +Command: +# Generate plain text table from XML document +xml sel -T -t -m /xml/table/rec -v "concat(@id,'|',numField,'|',stringField)" -n xml/table.xml +Result Output: +1|123|String Value +2|346|Text Value +3|-23|stringValue + + +Command: +# Generate plain text table from XML document +xml sel -T \ + -t -o "===================" -n \ + -m xml/table/rec -v "concat(@id,'|',numField,'|',stringField)" -n \ + -t -o "===================" -n xml/table.xml +Result Output: +=================== +1|123|String Value +2|346|Text Value +3|-23|stringValue +=================== + + +Command: +# Print subtree of elements having given element as a descendant (advanced XPath) +xml ed -d '//node()[not(descendant-or-self::isbn or parent::isbn)] | //*[parent::isbn]' xml/books.xml + +Result Output: +<?xml version="1.0" encoding="ISO-8859-1"?>
+<books>
+ <book type="hardback">
+ <isbn id="1">0525934189</isbn>
+ </book>
+ <book type="paperback">
+ <isbn id="2">0140185399</isbn>
+ </book>
+</books>
+ + +Command: +# Select from XML document containing unicode characters +xml sel -T -t -m "//test[@lang='français']/@lang" -v . -n xml/unicode.xml +Result Output: +français +français +français + + +Command: +# Update value of an attribute +xml ed -u '/xml/table/rec[@id=3]/@id' -v 5 xml/tab-obj.xml +Result Output: +<?xml version="1.0"?> +<xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + <object name="Obj1"> + <property name="size">10</property> + <property name="type">Data</property> + </object> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec id="5"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> + + +Command: +# Update value of an element +xml ed -u '/xml/table/rec[@id=1]/numField' -v 0 xml/tab-obj.xml +Result Output: +<?xml version="1.0"?> +<xml> + <table> + <rec id="1"> + <numField>0</numField> + <stringField>String Value</stringField> + <object name="Obj1"> + <property name="size">10</property> + <property name="type">Data</property> + </object> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> + + +Command: +# Validate XML documents using well-formedness/DTD/XSD/RelaxNG checks +echo "===============================================" +echo "Well-Formedness Validation Tests" +echo "- 1 -------------------------------------------" +xml val xml/table.xml xml/tab-obj.xml xml/tab-bad.xml 2>/dev/null; echo $? +echo "- 2 -------------------------------------------" +xml val -g xml/table.xml xml/tab-obj.xml xml/tab-bad.xml 2>/dev/null; echo $? +echo "- 3 -------------------------------------------" +xml val -b xml/table.xml xml/tab-obj.xml xml/tab-bad.xml 2>/dev/null; echo $? +echo "- 4 -------------------------------------------" +xml val -q xml/table.xml xml/tab-obj.xml 2>/dev/null; echo $? + +echo "===============================================" +echo "DTD Validation Tests" +echo "- 1 -------------------------------------------" +xml val -d dtd/table.dtd xml/table.xml xml/tab-obj.xml xml/tab-bad.xml 2>/dev/null; echo $? +echo "- 2 -------------------------------------------" +xml val -g -d dtd/table.dtd xml/table.xml xml/tab-obj.xml xml/tab-bad.xml 2>/dev/null; echo $? +echo "- 3 -------------------------------------------" +xml val -b -d dtd/table.dtd xml/table.xml xml/tab-obj.xml xml/tab-bad.xml 2>/dev/null; echo $? +echo "- 4 -------------------------------------------" +xml val -q -d dtd/table.dtd xml/table.xml 2>/dev/null; echo $? + +echo "===============================================" +echo "Schema Validation Tests" +echo "- 1 -------------------------------------------" +xml val -s xsd/table.xsd xml/table.xml xml/tab-obj.xml xml/tab-bad.xml 2>/dev/null; echo $? +echo "- 2 -------------------------------------------" +xml val -g -s xsd/table.xsd xml/table.xml xml/tab-obj.xml xml/tab-bad.xml 2>/dev/null; echo $? +echo "- 3 -------------------------------------------" +xml val -b -s xsd/table.xsd xml/table.xml xml/tab-obj.xml xml/tab-bad.xml 2>/dev/null; echo $? +echo "- 4 -------------------------------------------" +xml val -q -s xsd/table.xsd xml/table.xml 2>/dev/null; echo $? + +echo "===============================================" +echo "RelaxNG Schema Validation Tests" +echo "- 1 -------------------------------------------" +xml val -r relaxng/address.rng relaxng/address.xml relaxng/address-bad.xml 2>/dev/null; echo $? +echo "- 2 -------------------------------------------" +xml val -g -r relaxng/address.rng relaxng/address.xml relaxng/address-bad.xml 2>/dev/null; echo $? +echo "- 3 -------------------------------------------" +xml val -b -r relaxng/address.rng relaxng/address.xml relaxng/address-bad.xml 2>/dev/null; echo $? +echo "- 4 -------------------------------------------" +xml val -q -r relaxng/address.rng relaxng/address.xml 2>/dev/null; echo $? +Result Output: +=============================================== +Well-Formedness Validation Tests +- 1 ------------------------------------------- +xml/table.xml - valid +xml/tab-obj.xml - valid +xml/tab-bad.xml - invalid +1 +- 2 ------------------------------------------- +xml/table.xml +xml/tab-obj.xml +1 +- 3 ------------------------------------------- +xml/tab-bad.xml +1 +- 4 ------------------------------------------- +0 +=============================================== +DTD Validation Tests +- 1 ------------------------------------------- +xml/table.xml - valid +xml/tab-obj.xml - invalid +xml/tab-bad.xml - invalid +1 +- 2 ------------------------------------------- +xml/table.xml +1 +- 3 ------------------------------------------- +xml/tab-obj.xml +xml/tab-bad.xml +1 +- 4 ------------------------------------------- +0 +=============================================== +Schema Validation Tests +- 1 ------------------------------------------- +xml/table.xml - valid +xml/tab-obj.xml - invalid +xml/tab-bad.xml - invalid +1 +- 2 ------------------------------------------- +xml/table.xml +1 +- 3 ------------------------------------------- +xml/tab-obj.xml +xml/tab-bad.xml +1 +- 4 ------------------------------------------- +0 +=============================================== +RelaxNG Schema Validation Tests +- 1 ------------------------------------------- +relaxng/address.xml - valid +relaxng/address-bad.xml - invalid +1 +- 2 ------------------------------------------- +relaxng/address.xml +1 +- 3 ------------------------------------------- +relaxng/address-bad.xml +1 +- 4 ------------------------------------------- +0 + + +Command: +# Include one XML document into another using XInclude +xml tr --xinclude xsl/cat.xsl xml/document.xml +Result Output: +<?xml version="1.0" encoding="utf-8"?> +<document xmlns:xi="http://www.w3.org/2003/XInclude"> + <p>120 Mz is adequate for an average home user.</p> + <disclaimer> + <p>The opinions represented herein represent those of the individual + and should not be interpreted as official policy endorsed by this + organization.</p> +</disclaimer> +</document> + + +Command: +# Passing parameters to XSLT stylesheet +xml tr xsl/param1.xsl -p Count='count(/xml/table/rec)' -s Text="Count=" xml/table.xml +Result Output: +Count=3 + + +Command: +# Applying XSLT stylesheet to XML document +xml tr xsl/sum1.xsl xml/table.xml +Result Output: +446 + + + diff --git a/examples/N-order b/examples/N-order new file mode 100644 index 0000000..a244998 --- /dev/null +++ b/examples/N-order @@ -0,0 +1,4 @@ +#!/bin/sh +# make sure -N after other option is allowed +./xmlstarlet sel -T -N n=n -t -v /n:x xml/foo.xml 2>&1 >/dev/null +./xmlstarlet ed -P -N n=n -d /n:x xml/foo.xml 2>&1 >/dev/null diff --git a/examples/bigxml b/examples/bigxml new file mode 100644 index 0000000..0cb746b --- /dev/null +++ b/examples/bigxml @@ -0,0 +1,17 @@ +#!/bin/sh +# check error messages on lines past 2^16 + +SEDLINUM_PROG='s/^\([^:][^:]*:[0-9]\{4\}\)[0-9]\.[0-9][0-9]*:.*$/\1x/p' + +xmldoc() +{ + BAD="$1" + DOCTYPE="$2" + + echo '<?xml version="1.0"?>' + [ -n "$DOCTYPE" ] && echo "$DOCTYPE" + echo '<root>' + ${AWK:-awk} 'BEGIN{for(i=0; i < 69999; i++) print ""}' < /dev/null + echo "$BAD" + echo '</root>' +} diff --git a/examples/bigxml-dtd b/examples/bigxml-dtd new file mode 100644 index 0000000..948d989 --- /dev/null +++ b/examples/bigxml-dtd @@ -0,0 +1,5 @@ +#!/bin/sh +. ./bigxml +xmldoc '<a>foo</a>' \ + | ./xmlstarlet val --dtd dtd/bigxml.dtd --err - 2>&1 >/dev/null \ + | ${SED:-sed} -n "$SEDLINUM_PROG" diff --git a/examples/bigxml-embed b/examples/bigxml-embed new file mode 100644 index 0000000..be39c26 --- /dev/null +++ b/examples/bigxml-embed @@ -0,0 +1,6 @@ +#!/bin/sh +. ./bigxml +xmldoc '<a> foo </a>' \ + '<!DOCTYPE root [<!ELEMENT root (a*)> <!ELEMENT a EMPTY>]>' \ + | ./xmlstarlet val --embed --err - \ + 2>&1 >/dev/null | ${SED:-sed} -n "$SEDLINUM_PROG" diff --git a/examples/bigxml-embed-ref b/examples/bigxml-embed-ref new file mode 100644 index 0000000..d796475 --- /dev/null +++ b/examples/bigxml-embed-ref @@ -0,0 +1,7 @@ +#!/bin/sh +. ./bigxml +xmldoc '<a>foo</a>' '<!DOCTYPE root SYSTEM "dtd/bigxml.dtd">' \ + | ./xmlstarlet val --embed --err - 2>&1 >/dev/null \ + | ${SED:-sed} -n "$SEDLINUM_PROG" \ + | head -n 1 # a bug in libxml 2.9.0 causes extra errors to be + # printed, so we take just the first diff --git a/examples/bigxml-relaxng b/examples/bigxml-relaxng new file mode 100644 index 0000000..7616471 --- /dev/null +++ b/examples/bigxml-relaxng @@ -0,0 +1,4 @@ +#!/bin/sh +. ./bigxml +xmldoc '<a> foo </a>' | ./xmlstarlet val --relaxng relaxng/bigxml.rng --err - \ + 2>&1 >/dev/null | ${SED:-sed} -n "$SEDLINUM_PROG" diff --git a/examples/bigxml-well-formed b/examples/bigxml-well-formed new file mode 100644 index 0000000..e664a21 --- /dev/null +++ b/examples/bigxml-well-formed @@ -0,0 +1,4 @@ +#!/bin/sh +. ./bigxml +xmldoc '<b></c>' | ./xmlstarlet val --well-formed --err - \ + 2>&1 >/dev/null | ${SED:-sed} -n "$SEDLINUM_PROG" diff --git a/examples/bigxml-xsd b/examples/bigxml-xsd new file mode 100644 index 0000000..01ee6b8 --- /dev/null +++ b/examples/bigxml-xsd @@ -0,0 +1,4 @@ +#!/bin/sh +. ./bigxml +xmldoc '<b/>' | ./xmlstarlet val --xsd xsd/bigxml.xsd --err - \ + 2>&1 >/dev/null | ${SED:-sed} -n "$SEDLINUM_PROG" diff --git a/examples/c14n-default-attr b/examples/c14n-default-attr new file mode 100644 index 0000000..525615d --- /dev/null +++ b/examples/c14n-default-attr @@ -0,0 +1,2 @@ +#!/bin/sh +./xmlstarlet c14n xml/c14n-default-attr.xml diff --git a/examples/c14n-newlines b/examples/c14n-newlines new file mode 100644 index 0000000..522ff79 --- /dev/null +++ b/examples/c14n-newlines @@ -0,0 +1,2 @@ +#!/bin/sh +./xmlstarlet c14n xml/c14n.xml | tr '\r' R | grep R diff --git a/examples/c14n1 b/examples/c14n1 new file mode 100644 index 0000000..56a66e4 --- /dev/null +++ b/examples/c14n1 @@ -0,0 +1,3 @@ +#!/bin/sh +# XML canonicalization +./xmlstarlet c14n --with-comments ../examples/xml/structure.xml ; echo $? diff --git a/examples/c14n2 b/examples/c14n2 new file mode 100644 index 0000000..5695ad3 --- /dev/null +++ b/examples/c14n2 @@ -0,0 +1,3 @@ +#!/bin/sh +# XML exclusive canonicalization +./xmlstarlet c14n --exc-with-comments ../examples/xml/c14n.xml ../examples/xml/c14n.xpath diff --git a/examples/command-help b/examples/command-help new file mode 100644 index 0000000..3482bcb --- /dev/null +++ b/examples/command-help @@ -0,0 +1,10 @@ +#!/bin/sh + +if [ -n "$EXEEXT" ] && [ "$OSTYPE" = MSYS ] ; then + EXEEXT=.exe +fi + +for command in ed sel tr val fo el c14n ls esc unesc pyx p2x ; do + ./xmlstarlet $command --help | ${SED:-sed} -n \ + "s@^\\(Usage: \\).*xml$EXEEXT\\( $command\\).*@\\1xml\\2@p" +done diff --git a/examples/count1 b/examples/count1 new file mode 100644 index 0000000..92f822e --- /dev/null +++ b/examples/count1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Count elements matching XPath expression +./xmlstarlet sel -T -t -v "count(/xml/table/rec/numField)" xml/table.xml diff --git a/examples/countnode1 b/examples/countnode1 new file mode 100644 index 0000000..bc4fa40 --- /dev/null +++ b/examples/countnode1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Count all nodes in XML document +./xmlstarlet sel -T -t -f -o " " -v "count(//node())" --nl xml/table.xml xml/tab-obj.xml diff --git a/examples/delete1 b/examples/delete1 new file mode 100644 index 0000000..620e540 --- /dev/null +++ b/examples/delete1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Delete elements matching XPath expression +./xmlstarlet ed -d '/xml/table/rec[@id="2"]' xml/table.xml diff --git a/examples/docbook1 b/examples/docbook1 new file mode 100644 index 0000000..4cb8380 --- /dev/null +++ b/examples/docbook1 @@ -0,0 +1,4 @@ +#!/bin/sh +# Generate HTML from given SGML docbook document +./xmlstarlet tr --omit-decl --docbook /usr/share/sgml/docbook/yelp/docbook/html/docbook.xsl sgml/docbook1.sgml | \ + ./xmlstarlet fo --html --indent-spaces 2 diff --git a/examples/dtd/bigxml.dtd b/examples/dtd/bigxml.dtd new file mode 100644 index 0000000..4ba3dee --- /dev/null +++ b/examples/dtd/bigxml.dtd @@ -0,0 +1,2 @@ +<!ELEMENT root (a*)> +<!ELEMENT a EMPTY> diff --git a/examples/dtd/tab-obj.dtd b/examples/dtd/tab-obj.dtd new file mode 100644 index 0000000..2cfc16f --- /dev/null +++ b/examples/dtd/tab-obj.dtd @@ -0,0 +1,17 @@ +<!ELEMENT numField ( #PCDATA ) > + +<!ELEMENT object ( property+ ) > +<!ATTLIST object name NMTOKEN #REQUIRED > + +<!ELEMENT property ( #PCDATA ) > +<!ATTLIST property name NMTOKEN #REQUIRED > + +<!ELEMENT rec ( numField, stringField, object? ) > +<!ATTLIST rec id NMTOKEN #REQUIRED > + +<!ELEMENT stringField ( #PCDATA ) > + +<!ELEMENT table ( rec+ ) > + +<!ELEMENT xml ( table ) > + diff --git a/examples/dtd/table.dtd b/examples/dtd/table.dtd new file mode 100644 index 0000000..211f105 --- /dev/null +++ b/examples/dtd/table.dtd @@ -0,0 +1,11 @@ +<!ELEMENT numField ( #PCDATA ) > + +<!ELEMENT rec ( numField, stringField ) > +<!ATTLIST rec id NMTOKEN #REQUIRED > + +<!ELEMENT stringField ( #PCDATA ) > + +<!ELEMENT table ( rec+ ) > + +<!ELEMENT xml ( table ) > + diff --git a/examples/dtd1 b/examples/dtd1 new file mode 100644 index 0000000..8f291bd --- /dev/null +++ b/examples/dtd1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Validate XML document against DTD +./xmlstarlet val --dtd dtd/table.dtd xml/tab-obj.xml >/dev/null 2>&1; echo $? diff --git a/examples/dtd2 b/examples/dtd2 new file mode 100644 index 0000000..d9a8f14 --- /dev/null +++ b/examples/dtd2 @@ -0,0 +1,3 @@ +#!/bin/sh +# Validate XML document against DTD +./xmlstarlet val --dtd dtd/table.dtd xml/table.xml >/dev/null 2>&1; echo $? diff --git a/examples/dtd3 b/examples/dtd3 new file mode 100644 index 0000000..4049489 --- /dev/null +++ b/examples/dtd3 @@ -0,0 +1,3 @@ +#!/bin/sh +# Validate XML document against DTD +./xmlstarlet val --dtd xml/foo.dtd xml/foo.xml 2>/dev/null diff --git a/examples/dtd4 b/examples/dtd4 new file mode 100644 index 0000000..065e3ee --- /dev/null +++ b/examples/dtd4 @@ -0,0 +1,3 @@ +#!/bin/sh +# make sure we don't look for embedded dtd if not asked +./xmlstarlet val --dtd dtd/table.dtd xml/table.xml diff --git a/examples/ed-2op b/examples/ed-2op new file mode 100644 index 0000000..f5903b1 --- /dev/null +++ b/examples/ed-2op @@ -0,0 +1,2 @@ +#!/bin/sh +./xmlstarlet ed -a '/xml/table/rec[@id=1]' -t elem -n newrec -v value -d '/xml/table/rec[@id!=1]' xml/table.xml diff --git a/examples/ed-append b/examples/ed-append new file mode 100644 index 0000000..31d386b --- /dev/null +++ b/examples/ed-append @@ -0,0 +1,2 @@ +#!/bin/sh +./xmlstarlet ed -a '/xml/table/rec[@id=1]' -t elem -n newrec -v value xml/table.xml diff --git a/examples/ed-backref-delete b/examples/ed-backref-delete new file mode 100644 index 0000000..0d7672a --- /dev/null +++ b/examples/ed-backref-delete @@ -0,0 +1,6 @@ +#!/bin/sh +./xmlstarlet ed \ + -s /xml/table/rec -t elem -n new-field -v new-value \ + -d '$prev' \ + -i '$prev' -t attr -n new-attr -v new-attr-value \ + xml/table.xml diff --git a/examples/ed-backref1 b/examples/ed-backref1 new file mode 100644 index 0000000..985ce9b --- /dev/null +++ b/examples/ed-backref1 @@ -0,0 +1,5 @@ +#!/bin/sh +./xmlstarlet ed \ + -s /xml/table/rec -t elem -n new-field -v new-value \ + -i '$prev' -t attr -n new-attr -v new-attr-value \ + xml/table.xml diff --git a/examples/ed-backref2 b/examples/ed-backref2 new file mode 100644 index 0000000..3420ba0 --- /dev/null +++ b/examples/ed-backref2 @@ -0,0 +1,7 @@ +#!/bin/sh +./xmlstarlet ed \ + -s /xml/table/rec -t elem -n new-field -v new-value \ + --var new-field '$prev' \ + -i '$new-field' -t attr -n new-attr -v new-attr-value \ + -s '$new-field' -t elem -n new-subelem -v '' \ + xml/table.xml | ./xmlstarlet c14n diff --git a/examples/ed-expr b/examples/ed-expr new file mode 100644 index 0000000..9ed1041 --- /dev/null +++ b/examples/ed-expr @@ -0,0 +1,6 @@ +#!/bin/sh +./xmlstarlet ed \ + -u /xml/table/rec/@id -x .+1 \ + -a /xml/table -t elem -n highest-record -v '' \ + -u '$xstar:prev' -x '/xml/table/rec[numField=math:max(../rec/numField)]' \ + xml/table.xml diff --git a/examples/ed-insert b/examples/ed-insert new file mode 100644 index 0000000..b9bc9af --- /dev/null +++ b/examples/ed-insert @@ -0,0 +1,2 @@ +#!/bin/sh +./xmlstarlet ed -i '/xml/table/rec[@id=1]' -t attr -n first -v yes xml/table.xml diff --git a/examples/ed-literal b/examples/ed-literal new file mode 100644 index 0000000..d674942 --- /dev/null +++ b/examples/ed-literal @@ -0,0 +1,2 @@ +#!/bin/sh +./xmlstarlet ed -u /doc -v '"<>& " & < >' xml/foo.xml diff --git a/examples/ed-move b/examples/ed-move new file mode 100644 index 0000000..4b0fc86 --- /dev/null +++ b/examples/ed-move @@ -0,0 +1,2 @@ +#!/bin/sh +./xmlstarlet ed -m '/xml/table/rec[@id=1]/@id' '/xml/table' xml/table.xml diff --git a/examples/ed-namespace b/examples/ed-namespace new file mode 100644 index 0000000..3cc07be --- /dev/null +++ b/examples/ed-namespace @@ -0,0 +1,2 @@ +#!/bin/sh +./xmlstarlet ed -d "//namespace::xsi" xml/S0.xml diff --git a/examples/ed-nop b/examples/ed-nop new file mode 100644 index 0000000..c343d8c --- /dev/null +++ b/examples/ed-nop @@ -0,0 +1,4 @@ +#!/bin/sh +# libxml2 returns a NULL nodeset instead of an empty nodeset for this +# xpath expression +./xmlstarlet ed -S -N n=nn -d /n:doc/foo xml/foo.xml diff --git a/examples/ed-subnode b/examples/ed-subnode new file mode 100644 index 0000000..ead761b --- /dev/null +++ b/examples/ed-subnode @@ -0,0 +1,2 @@ +#!/bin/sh +./xmlstarlet ed -s '/xml/table/rec[@id=1]' -t elem -n newrec -v value xml/table.xml diff --git a/examples/elem-depth b/examples/elem-depth new file mode 100644 index 0000000..8488e98 --- /dev/null +++ b/examples/elem-depth @@ -0,0 +1,3 @@ +#!/bin/sh +# display unique elements up to depth 2 +./xmlstarlet el -d2 ./xml/tab-obj.xml diff --git a/examples/elem-uniq b/examples/elem-uniq new file mode 100644 index 0000000..e8fe875 --- /dev/null +++ b/examples/elem-uniq @@ -0,0 +1,3 @@ +#!/bin/sh +# display unique elements +./xmlstarlet el -u ./xml/tab-obj.xml diff --git a/examples/elem1 b/examples/elem1 new file mode 100644 index 0000000..a4b5bca --- /dev/null +++ b/examples/elem1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Display element structure of XML document +./xmlstarlet el ./xml/tab-obj.xml diff --git a/examples/elem2 b/examples/elem2 new file mode 100644 index 0000000..1b9243d --- /dev/null +++ b/examples/elem2 @@ -0,0 +1,3 @@ +#!/bin/sh +# Display element structure of XML document (including attributes) +./xmlstarlet el -a ./xml/tab-obj.xml diff --git a/examples/elem3 b/examples/elem3 new file mode 100644 index 0000000..259101e --- /dev/null +++ b/examples/elem3 @@ -0,0 +1,3 @@ +#!/bin/sh +# Display element structure of XML document (including attribute values) +./xmlstarlet el -v ./xml/tab-obj.xml diff --git a/examples/escape1 b/examples/escape1 new file mode 100644 index 0000000..b5c7574 --- /dev/null +++ b/examples/escape1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Escape special XML characters +cat xml/structure.xml | ./xmlstarlet esc diff --git a/examples/exslt-ed b/examples/exslt-ed new file mode 100644 index 0000000..21069f0 --- /dev/null +++ b/examples/exslt-ed @@ -0,0 +1,5 @@ +#!/bin/sh +# Use EXSLT functions +echo '<x/>' | ./xmlstarlet ed -O -u /x -x 'date:day-name("2011-09-24")' +echo '<x/>' | ./xmlstarlet ed -O -u /x -x 'math:abs(-1000)' +echo '<x><n>a</n><n>b</n><n>a</n></x>' | ./xmlstarlet ed -O -u /x -x 'count(set:distinct(/x/*))' diff --git a/examples/exslt1 b/examples/exslt1 new file mode 100644 index 0000000..5d0ba7f --- /dev/null +++ b/examples/exslt1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Calculate EXSLT (XSLT extentions) XPath value +echo "<x/>" | ./xmlstarlet sel -T -t -v "math:abs(-1000)" --nl diff --git a/examples/external-entity b/examples/external-entity new file mode 100644 index 0000000..a087c19 --- /dev/null +++ b/examples/external-entity @@ -0,0 +1,4 @@ +#!/bin/sh +./xmlstarlet sel -t -c //foo xml/external-pe.xml | ./xmlstarlet c14n +echo +./xmlstarlet sel -T -t -v //foo --nl xml/external-pe.xml diff --git a/examples/findfile1 b/examples/findfile1 new file mode 100644 index 0000000..1afb1a4 --- /dev/null +++ b/examples/findfile1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Find XML files matching XPath expression (containing 'object' element) +./xmlstarlet sel -T -t -m //object -f --nl xml/table.xml xml/tab-obj.xml diff --git a/examples/foreach-literal.sh b/examples/foreach-literal.sh new file mode 100644 index 0000000..87a507e --- /dev/null +++ b/examples/foreach-literal.sh @@ -0,0 +1,8 @@ +#!/bin/sh +the_test abc +the_test "a'c" +the_test 'a"c' +the_test a\'\"c +the_test \"\'a\'b\"\" +the_test '!@#$%^&*()_+-=~`\|'\''";:/?.>,<[]{}' +the_test ']]>' diff --git a/examples/foreach-xpath.sh b/examples/foreach-xpath.sh new file mode 100644 index 0000000..62af650 --- /dev/null +++ b/examples/foreach-xpath.sh @@ -0,0 +1,8 @@ +#!/bin/sh +the_test "'abc'" +the_test \"a\'c\" +the_test \'a\"c\' +the_test 'concat("a'\''", '\'\"c\'\) +the_test 'concat('\'\"\',\ \"\'a\'b\",\ \'\"\"\'\) +the_test 'concat("!@#$%^&*()_+-=~`\|'\'\",\''";:/?.>,<[]{}'\'\) +the_test '"]]>"' diff --git a/examples/genxml1 b/examples/genxml1 new file mode 100644 index 0000000..5465b18 --- /dev/null +++ b/examples/genxml1 @@ -0,0 +1,4 @@ +#!/bin/sh +# Generate XML document using command line xml sel +echo "<x/>" | ./xmlstarlet sel -t -m / -e xml -e child -a data -o value | ./xmlstarlet c14n +echo diff --git a/examples/hello1 b/examples/hello1 new file mode 100644 index 0000000..4c9fca1 --- /dev/null +++ b/examples/hello1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Apply XSLT stylesheet to HTML input file +./xmlstarlet tr --html xsl/hello1.xsl html/hello1.html diff --git a/examples/html/hello1.html b/examples/html/hello1.html new file mode 100644 index 0000000..1998f6c --- /dev/null +++ b/examples/html/hello1.html @@ -0,0 +1,10 @@ +<html> +<head> + <title>Hello World</title> + <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"> +</head> +<body> + <div align="center">Hello World!<br></div> +</body> +</html> + diff --git a/examples/j2ee/web.xml b/examples/j2ee/web.xml new file mode 100644 index 0000000..52a2ddb --- /dev/null +++ b/examples/j2ee/web.xml @@ -0,0 +1,16 @@ +<?xml version="1.0"?> +<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"> +<web-app> + <servlet> + <servlet-name>TestServlet</servlet-name> + <servlet-class>TestServlet</servlet-class> + </servlet> + <servlet-mapping> + <servlet-name>TestServlet</servlet-name> + <url-pattern>/TestServlet</url-pattern> + </servlet-mapping> + <welcome-file-list> + <welcome-file>TestServlet.html</welcome-file> + </welcome-file-list> +</web-app> + diff --git a/examples/localname1 b/examples/localname1 new file mode 100644 index 0000000..4ae1742 --- /dev/null +++ b/examples/localname1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Use local-name() XSLT function in XPath expression +./xmlstarlet sel -T -t -v "//*[local-name()='query']" --nl xsql/jobserve.xsql diff --git a/examples/look1 b/examples/look1 new file mode 100644 index 0000000..e40b7a9 --- /dev/null +++ b/examples/look1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Select text value of an XML element mathing given XPath expression +./xmlstarlet sel -T -t -m "/xml/table/rec[@id='2']" -v numField --nl xml/table.xml diff --git a/examples/move1 b/examples/move1 new file mode 100644 index 0000000..7a8967c --- /dev/null +++ b/examples/move1 @@ -0,0 +1,4 @@ +#!/bin/sh +# Move element node +echo '<x id="1"><a/><b/></x>' | ./xmlstarlet ed -m "//b" "//a" + diff --git a/examples/noindent1 b/examples/noindent1 new file mode 100644 index 0000000..7c042a1 --- /dev/null +++ b/examples/noindent1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Format XML document disabling indent +cat xml/tab-obj.xml | ./xmlstarlet fo --noindent diff --git a/examples/ns1 b/examples/ns1 new file mode 100644 index 0000000..46f5421 --- /dev/null +++ b/examples/ns1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Predefine namespaces for XPath expressions +./xmlstarlet sel -T -N xsql=urn:oracle-xsql -t -v /xsql:query --nl xsql/jobserve.xsql diff --git a/examples/pyx b/examples/pyx new file mode 100644 index 0000000..2422c8a --- /dev/null +++ b/examples/pyx @@ -0,0 +1,2 @@ +#!/bin/sh +./xmlstarlet pyx xml/books.xml | ./xmlstarlet depyx | ./xmlstarlet c14n diff --git a/examples/pyx-ns b/examples/pyx-ns new file mode 100644 index 0000000..6b0a786 --- /dev/null +++ b/examples/pyx-ns @@ -0,0 +1,2 @@ +#!/bin/sh +./xmlstarlet pyx xml/c14n.xml | ./xmlstarlet depyx | ./xmlstarlet c14n diff --git a/examples/rdf/em.rdf b/examples/rdf/em.rdf new file mode 100644 index 0000000..19566ba --- /dev/null +++ b/examples/rdf/em.rdf @@ -0,0 +1,11 @@ +<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:contact="http://www.w3.org/2000/10/swap/pim/contact#"> + + <contact:Person rdf:about="http://www.w3.org/People/EM/contact#me"> + <contact:fullName>Eric Miller</contact:fullName> + <contact:mailbox rdf:resource="mailto:em@w3.org"/> + <contact:personalTitle>Dr.</contact:personalTitle> + </contact:Person> + +</rdf:RDF> + diff --git a/examples/recover1 b/examples/recover1 new file mode 100644 index 0000000..06164eb --- /dev/null +++ b/examples/recover1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Recover malformed XML document +./xmlstarlet fo -R xml/malformed.xml 2>/dev/null diff --git a/examples/relaxng/address-bad.xml b/examples/relaxng/address-bad.xml new file mode 100644 index 0000000..35bb986 --- /dev/null +++ b/examples/relaxng/address-bad.xml @@ -0,0 +1,11 @@ +<addressBook> + <card> + <name>John Smith</name> + <email>js@example.com</email> + </card> + <card> + <name>Fred Bloggs</name> + <email>fb@example.net</email> + </card> + <reord></record> +</addressBook> diff --git a/examples/relaxng/address.rng b/examples/relaxng/address.rng new file mode 100644 index 0000000..86f8cd1 --- /dev/null +++ b/examples/relaxng/address.rng @@ -0,0 +1,12 @@ +<element name="addressBook" xmlns="http://relaxng.org/ns/structure/1.0"> + <zeroOrMore> + <element name="card"> + <element name="name"> + <text/> + </element> + <element name="email"> + <text/> + </element> + </element> + </zeroOrMore> +</element> diff --git a/examples/relaxng/address.xml b/examples/relaxng/address.xml new file mode 100644 index 0000000..edac8ba --- /dev/null +++ b/examples/relaxng/address.xml @@ -0,0 +1,10 @@ +<addressBook> + <card> + <name>John Smith</name> + <email>js@example.com</email> + </card> + <card> + <name>Fred Bloggs</name> + <email>fb@example.net</email> + </card> +</addressBook> diff --git a/examples/relaxng/bigxml.rng b/examples/relaxng/bigxml.rng new file mode 100644 index 0000000..8c22f16 --- /dev/null +++ b/examples/relaxng/bigxml.rng @@ -0,0 +1,5 @@ +<element name="root" xmlns="http://relaxng.org/ns/structure/1.0"> + <zeroOrMore> + <element name="a"> <empty/></element> + </zeroOrMore> +</element> diff --git a/examples/rename-attr1 b/examples/rename-attr1 new file mode 100644 index 0000000..9fee306 --- /dev/null +++ b/examples/rename-attr1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Rename attributes +./xmlstarlet ed -r "//*/@id" -v ID xml/tab-obj.xml diff --git a/examples/rename-elem1 b/examples/rename-elem1 new file mode 100644 index 0000000..3709be2 --- /dev/null +++ b/examples/rename-elem1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Rename elements +./xmlstarlet ed -r "/xml/table/rec" -v record xml/tab-obj.xml diff --git a/examples/results/N-order.out b/examples/results/N-order.out new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/examples/results/N-order.out diff --git a/examples/results/bigxml-dtd.out b/examples/results/bigxml-dtd.out new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/examples/results/bigxml-dtd.out diff --git a/examples/results/bigxml-embed-ref.out b/examples/results/bigxml-embed-ref.out new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/examples/results/bigxml-embed-ref.out diff --git a/examples/results/bigxml-embed.out b/examples/results/bigxml-embed.out new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/examples/results/bigxml-embed.out diff --git a/examples/results/bigxml-relaxng.out b/examples/results/bigxml-relaxng.out new file mode 100644 index 0000000..7c8969f --- /dev/null +++ b/examples/results/bigxml-relaxng.out @@ -0,0 +1 @@ +-:7000x diff --git a/examples/results/bigxml-well-formed.out b/examples/results/bigxml-well-formed.out new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/examples/results/bigxml-well-formed.out diff --git a/examples/results/bigxml-xsd.out b/examples/results/bigxml-xsd.out new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/examples/results/bigxml-xsd.out diff --git a/examples/results/bigxml.out b/examples/results/bigxml.out new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/examples/results/bigxml.out diff --git a/examples/results/c14n-default-attr.out b/examples/results/c14n-default-attr.out new file mode 100644 index 0000000..2d449fe --- /dev/null +++ b/examples/results/c14n-default-attr.out @@ -0,0 +1 @@ +<doc attr="default"></doc>
\ No newline at end of file diff --git a/examples/results/c14n-newlines.out b/examples/results/c14n-newlines.out new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/examples/results/c14n-newlines.out diff --git a/examples/results/c14n1.out b/examples/results/c14n1.out new file mode 100644 index 0000000..4010be7 --- /dev/null +++ b/examples/results/c14n1.out @@ -0,0 +1,14 @@ +<a1> + <a11> + <a111> + <a1111></a1111> + </a111> + <a112> + <a1121></a1121> + </a112> + </a11> + <a12></a12> + <a13> + <a131></a131> + </a13> +</a1>0 diff --git a/examples/results/c14n2.out b/examples/results/c14n2.out new file mode 100644 index 0000000..7c35341 --- /dev/null +++ b/examples/results/c14n2.out @@ -0,0 +1,3 @@ +<n1:elem1 xmlns:n1="http://b.example"> +content +</n1:elem1>
\ No newline at end of file diff --git a/examples/results/command-help.out b/examples/results/command-help.out new file mode 100644 index 0000000..0d6b5a0 --- /dev/null +++ b/examples/results/command-help.out @@ -0,0 +1,12 @@ +Usage: xml ed +Usage: xml sel +Usage: xml tr +Usage: xml val +Usage: xml fo +Usage: xml el +Usage: xml c14n +Usage: xml ls +Usage: xml esc +Usage: xml unesc +Usage: xml pyx +Usage: xml p2x diff --git a/examples/results/count1.out b/examples/results/count1.out new file mode 100644 index 0000000..e440e5c --- /dev/null +++ b/examples/results/count1.out @@ -0,0 +1 @@ +3
\ No newline at end of file diff --git a/examples/results/countnode1.out b/examples/results/countnode1.out new file mode 100644 index 0000000..5b420f1 --- /dev/null +++ b/examples/results/countnode1.out @@ -0,0 +1,2 @@ +xml/table.xml 32 +xml/tab-obj.xml 41 diff --git a/examples/results/delete1.out b/examples/results/delete1.out new file mode 100644 index 0000000..5971fba --- /dev/null +++ b/examples/results/delete1.out @@ -0,0 +1,13 @@ +<?xml version="1.0"?> +<xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> diff --git a/examples/results/docbook1.out b/examples/results/docbook1.out new file mode 100644 index 0000000..e41f015 --- /dev/null +++ b/examples/results/docbook1.out @@ -0,0 +1,58 @@ +<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> +<html> + <head> + <meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"/> + <title>DocBook document example</title> + <meta name="generator" content="DocBook XSL Stylesheets V1.48"/> + </head> + <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> + <div class="book"> + <div class="titlepage"> + <div> + <h1 class="title"><a name="id2765244"/>DocBook document example</h1> + </div> + <div> + <h3 class="author">Mikhail Grushinskiy</h3> + </div> + <div> + <p class="copyright">Copyright © 2002 Mikhail Grushinskiy</p> + </div> + <hr/> + </div> + <div class="toc"> + <p> + <b>Table of Contents</b> + </p> + <dl> + <dt> + <a href="#id2765482">Sample document</a> + </dt> + <dt>1. <a href="#id2767329">XMLStarlet Example</a></dt> + </dl> + </div> + <div class="preface"> + <div class="titlepage"> + <div> + <h2 class="title"><a name="id2765482"/>Sample document</h2> + </div> + </div> + <p>A simple DocBook example document.</p> + </div> + <div class="chapter"> + <div class="titlepage"> + <div> + <h2 class="title"><a name="id2767329"/>Chapter 1. XMLStarlet Example</h2> + </div> + </div> + <p>The <span class="emphasis"><i>XMLStarlet</i></span> command line toolkit + allows querying/checking/editing/transforming/formatting XML documents + from command line</p> + <p>To find out more on how to use the + <span class="emphasis"><i>XMLStarlet</i></span> for XML processing, point + your browser to <a href="http://xmlstar.sourceforge.net/" target="_top">http://xmlstar.sourceforge.net/</a>. + </p> + </div> + </div> + </body> +</html> diff --git a/examples/results/dtd1.out b/examples/results/dtd1.out new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/examples/results/dtd1.out @@ -0,0 +1 @@ +1 diff --git a/examples/results/dtd2.out b/examples/results/dtd2.out new file mode 100644 index 0000000..573541a --- /dev/null +++ b/examples/results/dtd2.out @@ -0,0 +1 @@ +0 diff --git a/examples/results/dtd3.out b/examples/results/dtd3.out new file mode 100644 index 0000000..29afc5b --- /dev/null +++ b/examples/results/dtd3.out @@ -0,0 +1 @@ +xml/foo.xml - invalid diff --git a/examples/results/dtd4.out b/examples/results/dtd4.out new file mode 100644 index 0000000..41e1b68 --- /dev/null +++ b/examples/results/dtd4.out @@ -0,0 +1 @@ +xml/table.xml - valid diff --git a/examples/results/ed-2op.out b/examples/results/ed-2op.out new file mode 100644 index 0000000..ff35181 --- /dev/null +++ b/examples/results/ed-2op.out @@ -0,0 +1,10 @@ +<?xml version="1.0"?> +<xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + </rec> + <newrec>value</newrec> + </table> +</xml> diff --git a/examples/results/ed-append.out b/examples/results/ed-append.out new file mode 100644 index 0000000..0c7c37e --- /dev/null +++ b/examples/results/ed-append.out @@ -0,0 +1,18 @@ +<?xml version="1.0"?> +<xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + </rec> + <newrec>value</newrec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> diff --git a/examples/results/ed-backref-delete.out b/examples/results/ed-backref-delete.out new file mode 100644 index 0000000..fd347de --- /dev/null +++ b/examples/results/ed-backref-delete.out @@ -0,0 +1,17 @@ +<?xml version="1.0"?> +<xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> diff --git a/examples/results/ed-backref1.out b/examples/results/ed-backref1.out new file mode 100644 index 0000000..d8b7893 --- /dev/null +++ b/examples/results/ed-backref1.out @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + <new-field new-attr="new-attr-value">new-value</new-field> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + <new-field new-attr="new-attr-value">new-value</new-field> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + <new-field new-attr="new-attr-value">new-value</new-field> + </rec> + </table> +</xml> diff --git a/examples/results/ed-backref2.out b/examples/results/ed-backref2.out new file mode 100644 index 0000000..6d823ce --- /dev/null +++ b/examples/results/ed-backref2.out @@ -0,0 +1,19 @@ +<xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + <new-field new-attr="new-attr-value">new-value<new-subelem></new-subelem></new-field> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + <new-field new-attr="new-attr-value">new-value<new-subelem></new-subelem></new-field> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + <new-field new-attr="new-attr-value">new-value<new-subelem></new-subelem></new-field> + </rec> + </table> +</xml>
\ No newline at end of file diff --git a/examples/results/ed-expr.out b/examples/results/ed-expr.out new file mode 100644 index 0000000..bb19961 --- /dev/null +++ b/examples/results/ed-expr.out @@ -0,0 +1,23 @@ +<?xml version="1.0"?> +<xml> + <table> + <rec id="2"> + <numField>123</numField> + <stringField>String Value</stringField> + </rec> + <rec id="3"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec id="4"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> + <highest-record> + <rec id="3"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + </highest-record> +</xml> diff --git a/examples/results/ed-insert.out b/examples/results/ed-insert.out new file mode 100644 index 0000000..49ee98e --- /dev/null +++ b/examples/results/ed-insert.out @@ -0,0 +1,17 @@ +<?xml version="1.0"?> +<xml> + <table> + <rec id="1" first="yes"> + <numField>123</numField> + <stringField>String Value</stringField> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> diff --git a/examples/results/ed-literal.out b/examples/results/ed-literal.out new file mode 100644 index 0000000..05b2bba --- /dev/null +++ b/examples/results/ed-literal.out @@ -0,0 +1,3 @@ +<?xml version="1.0"?> +<!DOCTYPE doc SYSTEM "foo.dtd"> +<doc>"<>& &quot; &amp; &lt; &gt;</doc> diff --git a/examples/results/ed-move.out b/examples/results/ed-move.out new file mode 100644 index 0000000..c165165 --- /dev/null +++ b/examples/results/ed-move.out @@ -0,0 +1,17 @@ +<?xml version="1.0"?> +<xml> + <table id="1"> + <rec> + <numField>123</numField> + <stringField>String Value</stringField> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> diff --git a/examples/results/ed-namespace.out b/examples/results/ed-namespace.out new file mode 100644 index 0000000..8e13af1 --- /dev/null +++ b/examples/results/ed-namespace.out @@ -0,0 +1,3 @@ +<doc xmlns="http://www.foo.com/namespaces/my"> + <el/> +</doc> diff --git a/examples/results/ed-nop.out b/examples/results/ed-nop.out new file mode 100644 index 0000000..5323054 --- /dev/null +++ b/examples/results/ed-nop.out @@ -0,0 +1,7 @@ +<?xml version="1.0"?> +<!DOCTYPE doc SYSTEM "foo.dtd"> +<doc> +<foo>This is a "foo" line.</foo> +<bar>This is a "bar" line.</bar> +<foo>This is another "foo" line.</foo> +</doc> diff --git a/examples/results/ed-subnode.out b/examples/results/ed-subnode.out new file mode 100644 index 0000000..9f008cc --- /dev/null +++ b/examples/results/ed-subnode.out @@ -0,0 +1,18 @@ +<?xml version="1.0"?> +<xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + <newrec>value</newrec> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> diff --git a/examples/results/elem-depth.out b/examples/results/elem-depth.out new file mode 100644 index 0000000..97c7349 --- /dev/null +++ b/examples/results/elem-depth.out @@ -0,0 +1,2 @@ +xml +xml/table diff --git a/examples/results/elem-uniq.out b/examples/results/elem-uniq.out new file mode 100644 index 0000000..7c97a24 --- /dev/null +++ b/examples/results/elem-uniq.out @@ -0,0 +1,7 @@ +xml +xml/table +xml/table/rec +xml/table/rec/numField +xml/table/rec/object +xml/table/rec/object/property +xml/table/rec/stringField diff --git a/examples/results/elem1.out b/examples/results/elem1.out new file mode 100644 index 0000000..ccc1825 --- /dev/null +++ b/examples/results/elem1.out @@ -0,0 +1,14 @@ +xml +xml/table +xml/table/rec +xml/table/rec/numField +xml/table/rec/stringField +xml/table/rec/object +xml/table/rec/object/property +xml/table/rec/object/property +xml/table/rec +xml/table/rec/numField +xml/table/rec/stringField +xml/table/rec +xml/table/rec/numField +xml/table/rec/stringField diff --git a/examples/results/elem2.out b/examples/results/elem2.out new file mode 100644 index 0000000..14737b5 --- /dev/null +++ b/examples/results/elem2.out @@ -0,0 +1,20 @@ +xml +xml/table +xml/table/rec +xml/table/rec/@id +xml/table/rec/numField +xml/table/rec/stringField +xml/table/rec/object +xml/table/rec/object/@name +xml/table/rec/object/property +xml/table/rec/object/property/@name +xml/table/rec/object/property +xml/table/rec/object/property/@name +xml/table/rec +xml/table/rec/@id +xml/table/rec/numField +xml/table/rec/stringField +xml/table/rec +xml/table/rec/@id +xml/table/rec/numField +xml/table/rec/stringField diff --git a/examples/results/elem3.out b/examples/results/elem3.out new file mode 100644 index 0000000..0df31dd --- /dev/null +++ b/examples/results/elem3.out @@ -0,0 +1,14 @@ +xml +xml/table +xml/table/rec[@id='1'] +xml/table/rec/numField +xml/table/rec/stringField +xml/table/rec/object[@name='Obj1'] +xml/table/rec/object/property[@name='size'] +xml/table/rec/object/property[@name='type'] +xml/table/rec[@id='2'] +xml/table/rec/numField +xml/table/rec/stringField +xml/table/rec[@id='3'] +xml/table/rec/numField +xml/table/rec/stringField diff --git a/examples/results/escape1.out b/examples/results/escape1.out new file mode 100644 index 0000000..e7982eb --- /dev/null +++ b/examples/results/escape1.out @@ -0,0 +1,14 @@ +<a1> + <a11> + <a111> + <a1111/> + </a111> + <a112> + <a1121/> + </a112> + </a11> + <a12/> + <a13> + <a131/> + </a13> +</a1> diff --git a/examples/results/exslt-ed.out b/examples/results/exslt-ed.out new file mode 100644 index 0000000..e670310 --- /dev/null +++ b/examples/results/exslt-ed.out @@ -0,0 +1,3 @@ +<x>Saturday</x> +<x>1000</x> +<x>2</x> diff --git a/examples/results/exslt1.out b/examples/results/exslt1.out new file mode 100644 index 0000000..83b33d2 --- /dev/null +++ b/examples/results/exslt1.out @@ -0,0 +1 @@ +1000 diff --git a/examples/results/external-entity.out b/examples/results/external-entity.out new file mode 100644 index 0000000..9ca413f --- /dev/null +++ b/examples/results/external-entity.out @@ -0,0 +1,2 @@ +<foo>bar</foo> +bar diff --git a/examples/results/findfile1.out b/examples/results/findfile1.out new file mode 100644 index 0000000..ddc3803 --- /dev/null +++ b/examples/results/findfile1.out @@ -0,0 +1 @@ +xml/tab-obj.xml diff --git a/examples/results/genxml1.out b/examples/results/genxml1.out new file mode 100644 index 0000000..1cd3352 --- /dev/null +++ b/examples/results/genxml1.out @@ -0,0 +1 @@ +<xml><child data="value"></child></xml> diff --git a/examples/results/hello1.out b/examples/results/hello1.out new file mode 100644 index 0000000..c57eff5 --- /dev/null +++ b/examples/results/hello1.out @@ -0,0 +1 @@ +Hello World!
\ No newline at end of file diff --git a/examples/results/localname1.out b/examples/results/localname1.out new file mode 100644 index 0000000..983fe6e --- /dev/null +++ b/examples/results/localname1.out @@ -0,0 +1,6 @@ + + SELECT substr(title,1,26) short_title, title, location, skills + FROM job + WHERE UPPER(title) LIKE '%ORACLE%' + ORDER BY first_posted DESC + diff --git a/examples/results/look1.out b/examples/results/look1.out new file mode 100644 index 0000000..99ca0d5 --- /dev/null +++ b/examples/results/look1.out @@ -0,0 +1 @@ +346 diff --git a/examples/results/move1.out b/examples/results/move1.out new file mode 100644 index 0000000..e02efd8 --- /dev/null +++ b/examples/results/move1.out @@ -0,0 +1,6 @@ +<?xml version="1.0"?> +<x id="1"> + <a> + <b/> + </a> +</x> diff --git a/examples/results/noindent1.out b/examples/results/noindent1.out new file mode 100644 index 0000000..8760759 --- /dev/null +++ b/examples/results/noindent1.out @@ -0,0 +1,21 @@ +<?xml version="1.0"?> +<xml> +<table> +<rec id="1"> +<numField>123</numField> +<stringField>String Value</stringField> +<object name="Obj1"> +<property name="size">10</property> +<property name="type">Data</property> +</object> +</rec> +<rec id="2"> +<numField>346</numField> +<stringField>Text Value</stringField> +</rec> +<rec id="3"> +<numField>-23</numField> +<stringField>stringValue</stringField> +</rec> +</table> +</xml> diff --git a/examples/results/ns1.out b/examples/results/ns1.out new file mode 100644 index 0000000..983fe6e --- /dev/null +++ b/examples/results/ns1.out @@ -0,0 +1,6 @@ + + SELECT substr(title,1,26) short_title, title, location, skills + FROM job + WHERE UPPER(title) LIKE '%ORACLE%' + ORDER BY first_posted DESC + diff --git a/examples/results/pyx-ns.out b/examples/results/pyx-ns.out new file mode 100644 index 0000000..7a6ca3f --- /dev/null +++ b/examples/results/pyx-ns.out @@ -0,0 +1,5 @@ +<n0:pdu xmlns:n0="http://a.example.com"> +<n1:elem1 xmlns:n1="http://b.example"> +content +</n1:elem1> +</n0:pdu>
\ No newline at end of file diff --git a/examples/results/pyx.out b/examples/results/pyx.out new file mode 100644 index 0000000..db5d41b --- /dev/null +++ b/examples/results/pyx.out @@ -0,0 +1,14 @@ +<books> +<begin></begin> +<book type="hardback"> +<title>Atlas Shrugged</title> +<author>Ayn Rand</author> +<isbn id="1">0525934189<br></br></isbn> +</book> +Next Book +<book type="paperback"> +<title>A Burnt-Out Case</title> +<author>Graham Greene</author> +<isbn id="2">0140185399<br></br></isbn> +</book> +</books>
\ No newline at end of file diff --git a/examples/results/recover1.out b/examples/results/recover1.out new file mode 100644 index 0000000..fb7102d --- /dev/null +++ b/examples/results/recover1.out @@ -0,0 +1,5 @@ +<?xml version="1.0"?> +<test_output> + <test_name>foo</test_name> + <subtest>...</subtest> +</test_output> diff --git a/examples/results/rename-attr1.out b/examples/results/rename-attr1.out new file mode 100644 index 0000000..13e0a33 --- /dev/null +++ b/examples/results/rename-attr1.out @@ -0,0 +1,21 @@ +<?xml version="1.0"?> +<xml> + <table> + <rec ID="1"> + <numField>123</numField> + <stringField>String Value</stringField> + <object name="Obj1"> + <property name="size">10</property> + <property name="type">Data</property> + </object> + </rec> + <rec ID="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec ID="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> diff --git a/examples/results/rename-elem1.out b/examples/results/rename-elem1.out new file mode 100644 index 0000000..1f8d3bb --- /dev/null +++ b/examples/results/rename-elem1.out @@ -0,0 +1,21 @@ +<?xml version="1.0"?> +<xml> + <table> + <record id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + <object name="Obj1"> + <property name="size">10</property> + <property name="type">Data</property> + </object> + </record> + <record id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </record> + <record id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </record> + </table> +</xml> diff --git a/examples/results/schema1.out b/examples/results/schema1.out new file mode 100644 index 0000000..a1ed3bd --- /dev/null +++ b/examples/results/schema1.out @@ -0,0 +1,2 @@ +xml/tab-obj.xml +1 diff --git a/examples/results/sel-if.out b/examples/results/sel-if.out new file mode 100644 index 0000000..830ab19 --- /dev/null +++ b/examples/results/sel-if.out @@ -0,0 +1,6 @@ +yes +all +no +all +maybe +all diff --git a/examples/results/sel-literal.out b/examples/results/sel-literal.out new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/examples/results/sel-literal.out diff --git a/examples/results/sel-many-values.out b/examples/results/sel-many-values.out new file mode 100644 index 0000000..5f5fbe7 --- /dev/null +++ b/examples/results/sel-many-values.out @@ -0,0 +1,3 @@ +1 +2 +3
\ No newline at end of file diff --git a/examples/results/sel-root.out b/examples/results/sel-root.out new file mode 100644 index 0000000..6fee35f --- /dev/null +++ b/examples/results/sel-root.out @@ -0,0 +1,2 @@ +<xsl-select><x></x></xsl-select> +<xsl-select><x></x><x></x></xsl-select> diff --git a/examples/results/sel-xpath-c.out b/examples/results/sel-xpath-c.out new file mode 100644 index 0000000..2baab9a --- /dev/null +++ b/examples/results/sel-xpath-c.out @@ -0,0 +1,7 @@ +abc +a'c +a"c +a'"c +"'a'b"" +!@#$%^&*()_+-=~`\|'";:/?.>,<[]{} +]]> diff --git a/examples/results/sel-xpath-i.out b/examples/results/sel-xpath-i.out new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/examples/results/sel-xpath-i.out diff --git a/examples/results/sel-xpath-m.out b/examples/results/sel-xpath-m.out new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/examples/results/sel-xpath-m.out diff --git a/examples/results/sel-xpath-v.out b/examples/results/sel-xpath-v.out new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/examples/results/sel-xpath-v.out diff --git a/examples/results/sel1.out b/examples/results/sel1.out new file mode 100644 index 0000000..c622814 --- /dev/null +++ b/examples/results/sel1.out @@ -0,0 +1,4 @@ +<ROOT><rec id="1"><numField>123</numField><stringField>String Value</stringField></rec> +<rec id="2"><numField>346</numField><stringField>Text Value</stringField></rec> +<rec id="3"><numField>-23</numField><stringField>stringValue</stringField></rec> +</ROOT>
\ No newline at end of file diff --git a/examples/results/sort1.out b/examples/results/sort1.out new file mode 100644 index 0000000..0488af5 --- /dev/null +++ b/examples/results/sort1.out @@ -0,0 +1,3 @@ +3|-23|stringValue +2|346|Text Value +1|123|String Value diff --git a/examples/results/sort2.out b/examples/results/sort2.out new file mode 100644 index 0000000..e36f68a --- /dev/null +++ b/examples/results/sort2.out @@ -0,0 +1,10 @@ +A +a +E +e +B +b +C +c +D +d diff --git a/examples/results/sort3.out b/examples/results/sort3.out new file mode 100644 index 0000000..3fce669 --- /dev/null +++ b/examples/results/sort3.out @@ -0,0 +1,10 @@ +a +A +b +B +c +C +d +D +e +E diff --git a/examples/results/structure1.out b/examples/results/structure1.out new file mode 100644 index 0000000..5eb1948 --- /dev/null +++ b/examples/results/structure1.out @@ -0,0 +1,9 @@ +a1 +a1.a11 +a1.a11.a111 +a1.a11.a111.a1111 +a1.a11.a112 +a1.a11.a112.a1121 +a1.a12 +a1.a13 +a1.a13.a131 diff --git a/examples/results/sum1.out b/examples/results/sum1.out new file mode 100644 index 0000000..0187835 --- /dev/null +++ b/examples/results/sum1.out @@ -0,0 +1 @@ +446 diff --git a/examples/results/tab1.out b/examples/results/tab1.out new file mode 100644 index 0000000..338eb72 --- /dev/null +++ b/examples/results/tab1.out @@ -0,0 +1,21 @@ +<?xml version="1.0"?> +<xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + <object name="Obj1"> + <property name="size">10</property> + <property name="type">Data</property> + </object> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> diff --git a/examples/results/table1.out b/examples/results/table1.out new file mode 100644 index 0000000..7dac0ea --- /dev/null +++ b/examples/results/table1.out @@ -0,0 +1,3 @@ +1|123|String Value +2|346|Text Value +3|-23|stringValue diff --git a/examples/results/table2.out b/examples/results/table2.out new file mode 100644 index 0000000..7dac0ea --- /dev/null +++ b/examples/results/table2.out @@ -0,0 +1,3 @@ +1|123|String Value +2|346|Text Value +3|-23|stringValue diff --git a/examples/results/table3.out b/examples/results/table3.out new file mode 100644 index 0000000..5ce5d52 --- /dev/null +++ b/examples/results/table3.out @@ -0,0 +1,5 @@ +=================== +1|123|String Value +2|346|Text Value +3|-23|stringValue +=================== diff --git a/examples/results/tree1.out b/examples/results/tree1.out new file mode 100644 index 0000000..0279695 --- /dev/null +++ b/examples/results/tree1.out @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="ISO-8859-1"?>
+<books>
+ <book type="hardback">
+ <isbn id="1">0525934189</isbn>
+ </book>
+ <book type="paperback">
+ <isbn id="2">0140185399</isbn>
+ </book>
+</books>
diff --git a/examples/results/unicode1.out b/examples/results/unicode1.out new file mode 100644 index 0000000..cbc9f3c --- /dev/null +++ b/examples/results/unicode1.out @@ -0,0 +1,3 @@ +français +français +français diff --git a/examples/results/update-attr1.out b/examples/results/update-attr1.out new file mode 100644 index 0000000..9578728 --- /dev/null +++ b/examples/results/update-attr1.out @@ -0,0 +1,21 @@ +<?xml version="1.0"?> +<xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + <object name="Obj1"> + <property name="size">10</property> + <property name="type">Data</property> + </object> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec id="5"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> diff --git a/examples/results/update-elem1.out b/examples/results/update-elem1.out new file mode 100644 index 0000000..4b03f27 --- /dev/null +++ b/examples/results/update-elem1.out @@ -0,0 +1,21 @@ +<?xml version="1.0"?> +<xml> + <table> + <rec id="1"> + <numField>0</numField> + <stringField>String Value</stringField> + <object name="Obj1"> + <property name="size">10</property> + <property name="type">Data</property> + </object> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> diff --git a/examples/results/valid1.out b/examples/results/valid1.out new file mode 100644 index 0000000..e21ffbe --- /dev/null +++ b/examples/results/valid1.out @@ -0,0 +1,62 @@ +=============================================== +Well-Formedness Validation Tests +- 1 ------------------------------------------- +xml/table.xml - valid +xml/tab-obj.xml - valid +xml/tab-bad.xml - invalid +1 +- 2 ------------------------------------------- +xml/table.xml +xml/tab-obj.xml +1 +- 3 ------------------------------------------- +xml/tab-bad.xml +1 +- 4 ------------------------------------------- +0 +=============================================== +DTD Validation Tests +- 1 ------------------------------------------- +xml/table.xml - valid +xml/tab-obj.xml - invalid +xml/tab-bad.xml - invalid +1 +- 2 ------------------------------------------- +xml/table.xml +1 +- 3 ------------------------------------------- +xml/tab-obj.xml +xml/tab-bad.xml +1 +- 4 ------------------------------------------- +0 +=============================================== +Schema Validation Tests +- 1 ------------------------------------------- +xml/table.xml - valid +xml/tab-obj.xml - invalid +xml/tab-bad.xml - invalid +1 +- 2 ------------------------------------------- +xml/table.xml +1 +- 3 ------------------------------------------- +xml/tab-obj.xml +xml/tab-bad.xml +1 +- 4 ------------------------------------------- +0 +=============================================== +RelaxNG Schema Validation Tests +- 1 ------------------------------------------- +relaxng/address.xml - valid +relaxng/address-bad.xml - invalid +1 +- 2 ------------------------------------------- +relaxng/address.xml +1 +- 3 ------------------------------------------- +relaxng/address-bad.xml +1 +- 4 ------------------------------------------- +0 diff --git a/examples/results/xinclude1.out b/examples/results/xinclude1.out new file mode 100644 index 0000000..d369b2f --- /dev/null +++ b/examples/results/xinclude1.out @@ -0,0 +1,8 @@ +<document xmlns:xi="http://www.w3.org/2003/XInclude"> + <p>120 Mz is adequate for an average home user.</p> + <disclaimer> + <p>The opinions represented herein represent those of the individual + and should not be interpreted as official policy endorsed by this + organization.</p> +</disclaimer> +</document>
\ No newline at end of file diff --git a/examples/results/xsl-param1.out b/examples/results/xsl-param1.out new file mode 100644 index 0000000..c155c07 --- /dev/null +++ b/examples/results/xsl-param1.out @@ -0,0 +1 @@ +Count=3 diff --git a/examples/results/xsl-sum1.out b/examples/results/xsl-sum1.out new file mode 100644 index 0000000..0187835 --- /dev/null +++ b/examples/results/xsl-sum1.out @@ -0,0 +1 @@ +446 diff --git a/examples/schema1 b/examples/schema1 new file mode 100644 index 0000000..cb88052 --- /dev/null +++ b/examples/schema1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Validate against XSD schema +./xmlstarlet val -b -s xsd/table.xsd xml/table.xml xml/tab-obj.xml 2>/dev/null; echo $? diff --git a/examples/sel-if b/examples/sel-if new file mode 100644 index 0000000..c6acd1d --- /dev/null +++ b/examples/sel-if @@ -0,0 +1,4 @@ +#!/bin/sh +echo '<x/>' | ./xmlstarlet sel -T -t -i 'true()' -o yes -n --else -o no -n -b -o all -n +echo '<x/>' | ./xmlstarlet sel -T -t -i 'false()' -o yes -n --else -o no -n -b -o all -n +echo '<x/>' | ./xmlstarlet sel -T -t -i 'false()' -o yes -n --elif 'true()' -o maybe -n --else -o no -n -b -o all -n diff --git a/examples/sel-literal b/examples/sel-literal new file mode 100644 index 0000000..ee78448 --- /dev/null +++ b/examples/sel-literal @@ -0,0 +1,6 @@ +#!/bin/sh +the_test() { + ./xmlstarlet sel --text -t -m /doc -o "$1" --nl xml/foo.xml +} + +. "${srcdir-..}"/examples/foreach-literal.sh diff --git a/examples/sel-many-values b/examples/sel-many-values new file mode 100644 index 0000000..6cf4cc8 --- /dev/null +++ b/examples/sel-many-values @@ -0,0 +1,2 @@ +#!/bin/sh +./xmlstarlet sel -T -t -v //@id xml/table.xml diff --git a/examples/sel-root b/examples/sel-root new file mode 100644 index 0000000..12a9bb2 --- /dev/null +++ b/examples/sel-root @@ -0,0 +1,5 @@ +#!/bin/sh +echo '<x/>' | ./xmlstarlet sel --root -t -c / | ./xmlstarlet c14n +echo +echo '<x/>' | ./xmlstarlet sel --root -t -c / -t -c / | ./xmlstarlet c14n +echo diff --git a/examples/sel-xpath-c b/examples/sel-xpath-c new file mode 100644 index 0000000..602ee4e --- /dev/null +++ b/examples/sel-xpath-c @@ -0,0 +1,6 @@ +#!/bin/sh +the_test() { + ./xmlstarlet sel --text -t -m /doc -c "$1" --nl xml/foo.xml +} + +. "${srcdir-..}"/examples/foreach-xpath.sh diff --git a/examples/sel-xpath-i b/examples/sel-xpath-i new file mode 100644 index 0000000..ad3cba2 --- /dev/null +++ b/examples/sel-xpath-i @@ -0,0 +1,6 @@ +#!/bin/sh +the_test() { + ./xmlstarlet sel --text -t -i "$1" -v "$1" --nl xml/foo.xml +} + +. "${srcdir-..}"/examples/foreach-xpath.sh diff --git a/examples/sel-xpath-m b/examples/sel-xpath-m new file mode 100644 index 0000000..cfe7786 --- /dev/null +++ b/examples/sel-xpath-m @@ -0,0 +1,6 @@ +#!/bin/sh +the_test() { + ./xmlstarlet sel --text -t -m "/*[boolean($1)]" -v "$1" --nl xml/foo.xml +} + +. "${srcdir-..}"/examples/foreach-xpath.sh diff --git a/examples/sel-xpath-v b/examples/sel-xpath-v new file mode 100644 index 0000000..e9bec7b --- /dev/null +++ b/examples/sel-xpath-v @@ -0,0 +1,6 @@ +#!/bin/sh +the_test() { + ./xmlstarlet sel --text -t -m /doc -v "$1" --nl xml/foo.xml +} + +. "${srcdir-..}"/examples/foreach-xpath.sh diff --git a/examples/sel1 b/examples/sel1 new file mode 100644 index 0000000..ab24a6c --- /dev/null +++ b/examples/sel1 @@ -0,0 +1,3 @@ +#!/bin/sh +# xsl:copy-of in xml sel command +./xmlstarlet sel -B -t -e ROOT -m /xml/table/rec -c . -n xml/table.xml | ./xmlstarlet c14n diff --git a/examples/sgml/docbook1.sgml b/examples/sgml/docbook1.sgml new file mode 100644 index 0000000..c8bd6b8 --- /dev/null +++ b/examples/sgml/docbook1.sgml @@ -0,0 +1,41 @@ +<!DOCTYPE book + PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" + "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"> +<book> + + <bookinfo> + <title>DocBook document example</title> + <author> + <firstname>Mikhail</firstname> + <surname>Grushinskiy</surname> + </author> + + <copyright> + <year>2002</year> + <holder>Mikhail Grushinskiy</holder> + </copyright> + </bookinfo> + + <preface> + <title>Sample document</title> + + <para>A simple DocBook example document.</para> + </preface> + + <chapter> + <title>XMLStarlet Example</title> + + <para>The <emphasis>XMLStarlet</emphasis> command line toolkit + allows querying/checking/editing/transforming/formatting XML documents + from command line</para> + + <para>To find out more on how to use the + <emphasis>XMLStarlet</emphasis> for XML processing, point + your browser to <ulink + url="http://xmlstar.sourceforge.net/">http://xmlstar.sourceforge.net/</ulink>. + </para> + + </chapter> + +</book> + diff --git a/examples/sort1 b/examples/sort1 new file mode 100644 index 0000000..aa21316 --- /dev/null +++ b/examples/sort1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Query XML document and produce sorted text table +./xmlstarlet sel -T -t -m /xml/table/rec -s D:N:- "@id" -v "concat(@id,'|',numField,'|',stringField)" -n xml/table.xml diff --git a/examples/sort2 b/examples/sort2 new file mode 100644 index 0000000..49a6d45 --- /dev/null +++ b/examples/sort2 @@ -0,0 +1,4 @@ +#!/bin/sh +# Sort on two fields +./xmlstarlet sel -T -t -m /root/elem -s A:N:U @rank -s A:T:U @name -v @name -n xml/unsorted.xml + diff --git a/examples/sort3 b/examples/sort3 new file mode 100644 index 0000000..ba07e99 --- /dev/null +++ b/examples/sort3 @@ -0,0 +1,4 @@ +#!/bin/sh +# lower case first +./xmlstarlet sel -T -t -m /root/elem -s A:T:L @name -v @name -n xml/unsorted.xml + diff --git a/examples/structure1 b/examples/structure1 new file mode 100644 index 0000000..13884e7 --- /dev/null +++ b/examples/structure1 @@ -0,0 +1,5 @@ +#!/bin/sh +# Print structure of XML element using xml sel (advanced XPath expressions and xml sel command usage) +./xmlstarlet sel -T -t -m '//*' \ +-m 'ancestor-or-self::*' -v 'name()' -i 'not(position()=last())' -o . -b -b -n \ +xml/structure.xml diff --git a/examples/sum1 b/examples/sum1 new file mode 100644 index 0000000..03a24d1 --- /dev/null +++ b/examples/sum1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Calculating running sum on XML document +./xmlstarlet sel -T -t -v "sum(/xml/table/rec/numField)" --nl xml/table.xml diff --git a/examples/svg/sample.svg b/examples/svg/sample.svg new file mode 100644 index 0000000..107e134 --- /dev/null +++ b/examples/svg/sample.svg @@ -0,0 +1,14 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg width="5cm" height="4cm" version="1.1" + xmlns="http://www.w3.org/2000/svg"> + <desc>Four separate rectangles</desc> + <rect x="0.5cm" y="0.5cm" width="2cm" height="1cm"/> + <rect x="0.5cm" y="2cm" width="1cm" height="1.5cm"/> + <rect x="3cm" y="0.5cm" width="1.5cm" height="2cm"/> + <rect x="3.5cm" y="3cm" width="1cm" height="0.5cm"/> + <!-- Show outline of canvas using 'rect' element --> + <rect x=".01cm" y=".01cm" width="4.98cm" height="3.98cm" + fill="none" stroke="blue" stroke-width=".02cm" /> +</svg> diff --git a/examples/tab1 b/examples/tab1 new file mode 100644 index 0000000..4c701cb --- /dev/null +++ b/examples/tab1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Indent XML document with tabs +cat xml/tab-obj.xml | ./xmlstarlet fo --indent-tab diff --git a/examples/table1 b/examples/table1 new file mode 100644 index 0000000..cb42053 --- /dev/null +++ b/examples/table1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Generate plain text table from XML document +./xmlstarlet sel -T -t -m /xml/table/rec -v "@id" -o "|" -v numField -o "|" -v stringField -n xml/table.xml diff --git a/examples/table2 b/examples/table2 new file mode 100644 index 0000000..cb20a4b --- /dev/null +++ b/examples/table2 @@ -0,0 +1,3 @@ +#!/bin/sh +# Generate plain text table from XML document +./xmlstarlet sel -T -t -m /xml/table/rec -v "concat(@id,'|',numField,'|',stringField)" -n xml/table.xml diff --git a/examples/table3 b/examples/table3 new file mode 100644 index 0000000..00d5666 --- /dev/null +++ b/examples/table3 @@ -0,0 +1,6 @@ +#!/bin/sh +# Generate plain text table from XML document +./xmlstarlet sel -T \ + -t -o "===================" -n \ + -m xml/table/rec -v "concat(@id,'|',numField,'|',stringField)" -n \ + -t -o "===================" -n xml/table.xml diff --git a/examples/tests.mk b/examples/tests.mk new file mode 100644 index 0000000..807a345 --- /dev/null +++ b/examples/tests.mk @@ -0,0 +1,103 @@ +LOG_COMPILER = abs_builddir=$(abs_builddir) \ +EXEEXT=$(EXEEXT) SED=$(SED) AWK=$(AWK) SHELL=$(SHELL) \ + $(SHELL) $(srcdir)/tests/runTest.sh + +# split tests into fast and slow, so we can run just the fast ones + +SLOW_TESTS =\ +examples/bigxml-dtd\ +examples/bigxml-embed-ref\ +examples/bigxml-embed\ +examples/bigxml-relaxng\ +examples/bigxml-well-formed\ +examples/bigxml-xsd + +QUICK_TESTS =\ +examples/c14n-default-attr\ +examples/c14n-newlines\ +examples/c14n1\ +examples/c14n2\ +examples/command-help\ +examples/count1\ +examples/countnode1\ +examples/delete1\ +examples/dtd1\ +examples/dtd2\ +examples/dtd3\ +examples/dtd4\ +examples/ed-2op\ +examples/ed-append\ +examples/ed-backref-delete\ +examples/ed-backref1\ +examples/ed-backref2\ +examples/ed-expr\ +examples/ed-insert\ +examples/ed-literal\ +examples/ed-move\ +examples/ed-namespace\ +examples/ed-nop\ +examples/ed-subnode\ +examples/elem1\ +examples/elem2\ +examples/elem3\ +examples/elem-depth\ +examples/elem-uniq\ +examples/escape1\ +examples/exslt-ed\ +examples/exslt1\ +examples/external-entity\ +examples/findfile1\ +examples/genxml1\ +examples/hello1\ +examples/localname1\ +examples/look1\ +examples/move1\ +examples/N-order\ +examples/noindent1\ +examples/ns1\ +examples/pyx\ +examples/pyx-ns\ +examples/recover1\ +examples/rename-attr1\ +examples/rename-elem1\ +examples/schema1\ +examples/sel-literal\ +examples/sel-if\ +examples/sel-many-values\ +examples/sel-root\ +examples/sel-xpath-c\ +examples/sel-xpath-i\ +examples/sel-xpath-m\ +examples/sel-xpath-v\ +examples/sel1\ +examples/sort1\ +examples/sort2\ +examples/sort3\ +examples/structure1\ +examples/sum1\ +examples/tab1\ +examples/table1\ +examples/table2\ +examples/table3\ +examples/unicode1\ +examples/update-attr1\ +examples/update-elem1\ +examples/valid1\ +examples/xinclude1\ +examples/xsl-param1\ +examples/xsl-sum1 + +# default to all the tests +TESTS = $(SLOW_TESTS) $(QUICK_TESTS) + +# qcheck is just tests listed in QUICK_TESTS +qcheck : + @$(MAKE) TESTS="$(QUICK_TESTS)" check + +XFAIL_TESTS =\ +examples/bigxml-dtd\ +examples/ed-namespace + +if !HAVE_EXSLT_XPATH_REGISTER +XFAIL_TESTS += examples/exslt-ed +endif diff --git a/examples/tree1 b/examples/tree1 new file mode 100644 index 0000000..e027168 --- /dev/null +++ b/examples/tree1 @@ -0,0 +1,4 @@ +#!/bin/sh +# Print subtree of elements having given element as a descendant (advanced XPath) +./xmlstarlet ed -d '//node()[not(descendant-or-self::isbn or parent::isbn)] | //*[parent::isbn]' xml/books.xml + diff --git a/examples/unicode1 b/examples/unicode1 new file mode 100644 index 0000000..d55fbf7 --- /dev/null +++ b/examples/unicode1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Select from XML document containing unicode characters +./xmlstarlet sel -T -t -m "//test[@lang='français']/@lang" -v . -n xml/unicode.xml diff --git a/examples/update-attr1 b/examples/update-attr1 new file mode 100644 index 0000000..9913961 --- /dev/null +++ b/examples/update-attr1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Update value of an attribute +./xmlstarlet ed -u '/xml/table/rec[@id=3]/@id' -v 5 xml/tab-obj.xml diff --git a/examples/update-elem1 b/examples/update-elem1 new file mode 100644 index 0000000..b9bf2bb --- /dev/null +++ b/examples/update-elem1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Update value of an element +./xmlstarlet ed -u '/xml/table/rec[@id=1]/numField' -v 0 xml/tab-obj.xml diff --git a/examples/valid1 b/examples/valid1 new file mode 100644 index 0000000..7fc17d1 --- /dev/null +++ b/examples/valid1 @@ -0,0 +1,45 @@ +#!/bin/sh +# Validate XML documents using well-formedness/DTD/XSD/RelaxNG checks +echo "===============================================" +echo "Well-Formedness Validation Tests" +echo "- 1 -------------------------------------------" +./xmlstarlet val xml/table.xml xml/tab-obj.xml xml/tab-bad.xml 2>/dev/null; echo $? +echo "- 2 -------------------------------------------" +./xmlstarlet val -g xml/table.xml xml/tab-obj.xml xml/tab-bad.xml 2>/dev/null; echo $? +echo "- 3 -------------------------------------------" +./xmlstarlet val -b xml/table.xml xml/tab-obj.xml xml/tab-bad.xml 2>/dev/null; echo $? +echo "- 4 -------------------------------------------" +./xmlstarlet val -q xml/table.xml xml/tab-obj.xml 2>/dev/null; echo $? + +echo "===============================================" +echo "DTD Validation Tests" +echo "- 1 -------------------------------------------" +./xmlstarlet val -d dtd/table.dtd xml/table.xml xml/tab-obj.xml xml/tab-bad.xml 2>/dev/null; echo $? +echo "- 2 -------------------------------------------" +./xmlstarlet val -g -d dtd/table.dtd xml/table.xml xml/tab-obj.xml xml/tab-bad.xml 2>/dev/null; echo $? +echo "- 3 -------------------------------------------" +./xmlstarlet val -b -d dtd/table.dtd xml/table.xml xml/tab-obj.xml xml/tab-bad.xml 2>/dev/null; echo $? +echo "- 4 -------------------------------------------" +./xmlstarlet val -q -d dtd/table.dtd xml/table.xml 2>/dev/null; echo $? + +echo "===============================================" +echo "Schema Validation Tests" +echo "- 1 -------------------------------------------" +./xmlstarlet val -s xsd/table.xsd xml/table.xml xml/tab-obj.xml xml/tab-bad.xml 2>/dev/null; echo $? +echo "- 2 -------------------------------------------" +./xmlstarlet val -g -s xsd/table.xsd xml/table.xml xml/tab-obj.xml xml/tab-bad.xml 2>/dev/null; echo $? +echo "- 3 -------------------------------------------" +./xmlstarlet val -b -s xsd/table.xsd xml/table.xml xml/tab-obj.xml xml/tab-bad.xml 2>/dev/null; echo $? +echo "- 4 -------------------------------------------" +./xmlstarlet val -q -s xsd/table.xsd xml/table.xml 2>/dev/null; echo $? + +echo "===============================================" +echo "RelaxNG Schema Validation Tests" +echo "- 1 -------------------------------------------" +./xmlstarlet val -r relaxng/address.rng relaxng/address.xml relaxng/address-bad.xml 2>/dev/null; echo $? +echo "- 2 -------------------------------------------" +./xmlstarlet val -g -r relaxng/address.rng relaxng/address.xml relaxng/address-bad.xml 2>/dev/null; echo $? +echo "- 3 -------------------------------------------" +./xmlstarlet val -b -r relaxng/address.rng relaxng/address.xml relaxng/address-bad.xml 2>/dev/null; echo $? +echo "- 4 -------------------------------------------" +./xmlstarlet val -q -r relaxng/address.rng relaxng/address.xml 2>/dev/null; echo $? diff --git a/examples/vxml/root.vxml b/examples/vxml/root.vxml new file mode 100644 index 0000000..23aadd1 --- /dev/null +++ b/examples/vxml/root.vxml @@ -0,0 +1,8 @@ +<?xml version="1.0"?> +<vxml version="1.0"> + <form id="HelloWorld"> + <block> + <audio src="">Hello World!</audio> + </block> + </form> +</vxml> diff --git a/examples/wsdl/quote.wsdl b/examples/wsdl/quote.wsdl new file mode 100644 index 0000000..c639090 --- /dev/null +++ b/examples/wsdl/quote.wsdl @@ -0,0 +1,65 @@ +<?xml version="1.0"?> +<definitions name="StockQuote" + targetNamespace="http://example.com/stockquote.wsdl" + xmlns:tns="http://example.com/stockquote.wsdl" + xmlns:xsd1="http://example.com/stockquote.xsd" + xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" + xmlns="http://schemas.xmlsoap.org/wsdl/"> + + <types> + <schema targetNamespace="http://example.com/stockquote.xsd" + xmlns="http://www.w3.org/2000/10/XMLSchema"> + <element name="TradePriceRequest"> + <complexType> + <all> + <element name="tickerSymbol" type="string"/> + </all> + </complexType> + </element> + <element name="TradePrice"> + <complexType> + <all> + <element name="price" type="float"/> + </all> + </complexType> + </element> + </schema> + </types> + + <message name="GetLastTradePriceInput"> + <part name="body" element="xsd1:TradePriceRequest"/> + </message> + + <message name="GetLastTradePriceOutput"> + <part name="body" element="xsd1:TradePrice"/> + </message> + + <portType name="StockQuotePortType"> + <operation name="GetLastTradePrice"> + <input message="tns:GetLastTradePriceInput"/> + <output message="tns:GetLastTradePriceOutput"/> + </operation> + </portType> + + <binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType"> + <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> + <operation name="GetLastTradePrice"> + <soap:operation soapAction="http://example.com/GetLastTradePrice"/> + <input> + <soap:body use="literal"/> + </input> + <output> + <soap:body use="literal"/> + </output> + </operation> + </binding> + + <service name="StockQuoteService"> + <documentation>My first service</documentation> + <port name="StockQuotePort" binding="tns:StockQuoteBinding"> + <soap:address location="http://example.com/stockquote"/> + </port> + </service> + +</definitions> + diff --git a/examples/xinclude1 b/examples/xinclude1 new file mode 100644 index 0000000..a8b7036 --- /dev/null +++ b/examples/xinclude1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Include one XML document into another using XInclude +./xmlstarlet tr --xinclude xsl/cat.xsl xml/document.xml | ./xmlstarlet c14n diff --git a/examples/xmi/example.xmi b/examples/xmi/example.xmi new file mode 100644 index 0000000..1f9c9f1 --- /dev/null +++ b/examples/xmi/example.xmi @@ -0,0 +1,8 @@ +<xmi:XMI version="2.0" xmlns:UML=" http://schema.omg.org/spec/UML/1.4" +xmlns:xmi=" http://schema.omg.org/spec/XMI/2.0"> +<xmi:Metamodel name="UML" version="1.4" href="UML.xml"/> +<xmi:Model name="example" version="1" href="example.xml"/> +<UML:Class name="C1"> +<feature xmi:type="UML:Attribute" name="a1" visibility="private"/> +</UML:Class> +</xmi:XMI> diff --git a/examples/xml/S0.xml b/examples/xml/S0.xml new file mode 100644 index 0000000..45d4c54 --- /dev/null +++ b/examples/xml/S0.xml @@ -0,0 +1,4 @@ +<doc xmlns="http://www.foo.com/namespaces/my" +xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> +<el/> +</doc> diff --git a/examples/xml/books.xml b/examples/xml/books.xml new file mode 100644 index 0000000..f12955b --- /dev/null +++ b/examples/xml/books.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="ISO-8859-1"?>
+<books>
+<begin/>
+<book type='hardback'>
+<title>Atlas Shrugged</title>
+<author>Ayn Rand</author>
+<isbn id='1'>0525934189<br/></isbn>
+</book>
+Next Book
+<book type='paperback'>
+<title>A Burnt-Out Case</title>
+<author>Graham Greene</author>
+<isbn id="2">0140185399<br/></isbn>
+</book>
+</books>
diff --git a/examples/xml/c14n-default-attr.xml b/examples/xml/c14n-default-attr.xml new file mode 100644 index 0000000..95e2c36 --- /dev/null +++ b/examples/xml/c14n-default-attr.xml @@ -0,0 +1,3 @@ +<!DOCTYPE doc [<!ATTLIST doc attr CDATA "default">]> +<doc/> + diff --git a/examples/xml/c14n.xml b/examples/xml/c14n.xml new file mode 100644 index 0000000..fd8c0a6 --- /dev/null +++ b/examples/xml/c14n.xml @@ -0,0 +1,5 @@ +<n0:pdu xmlns:n0='http://a.example.com'> +<n1:elem1 xmlns:n1='http://b.example'> +content +</n1:elem1> +</n0:pdu> diff --git a/examples/xml/c14n.xpath b/examples/xml/c14n.xpath new file mode 100644 index 0000000..38bff9d --- /dev/null +++ b/examples/xml/c14n.xpath @@ -0,0 +1,4 @@ +<?xml version="1.0"?> +<XPath xmlns:n0="http://a.example.com" xmlns:n1="http://b.example"> +(//. | //@* | //namespace::*)[ancestor-or-self::n1:elem1] +</XPath> diff --git a/examples/xml/disclaimer.xml b/examples/xml/disclaimer.xml new file mode 100644 index 0000000..3abf43c --- /dev/null +++ b/examples/xml/disclaimer.xml @@ -0,0 +1,6 @@ +<?xml version='1.0'?> +<disclaimer> + <p>The opinions represented herein represent those of the individual + and should not be interpreted as official policy endorsed by this + organization.</p> +</disclaimer> diff --git a/examples/xml/document.xml b/examples/xml/document.xml new file mode 100644 index 0000000..b4f32ec --- /dev/null +++ b/examples/xml/document.xml @@ -0,0 +1,5 @@ +<?xml version='1.0'?> +<document xmlns:xi="http://www.w3.org/2003/XInclude"> + <p>120 Mz is adequate for an average home user.</p> + <xi:include href="disclaimer.xml"/> +</document> diff --git a/examples/xml/entity.xml b/examples/xml/entity.xml new file mode 100644 index 0000000..dae3383 --- /dev/null +++ b/examples/xml/entity.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8"?> +<foo>bar</foo> diff --git a/examples/xml/external-pe.xml b/examples/xml/external-pe.xml new file mode 100644 index 0000000..aa82005 --- /dev/null +++ b/examples/xml/external-pe.xml @@ -0,0 +1,8 @@ +<?xml version="1.0"?> +<!DOCTYPE test [ +<!ELEMENT test (foo)> +<!ELEMENT foo (#PCDATA)> +<!ENTITY entity SYSTEM "entity.xml"> +]> +<!-- Test of external parsed entity. --> +<test>&entity;</test> diff --git a/examples/xml/foo.dtd b/examples/xml/foo.dtd new file mode 100644 index 0000000..36e7dfc --- /dev/null +++ b/examples/xml/foo.dtd @@ -0,0 +1,3 @@ +<!ELEMENT doc ( foo+, bar+ ) > +<!ELEMENT foo ( #PCDATA ) > +<!ELEMENT bar ( #PCDATA ) > diff --git a/examples/xml/foo.xml b/examples/xml/foo.xml new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/examples/xml/foo.xml diff --git a/examples/xml/malformed.xml b/examples/xml/malformed.xml new file mode 100644 index 0000000..5e90081 --- /dev/null +++ b/examples/xml/malformed.xml @@ -0,0 +1,4 @@ +<test_output> + <test_name>foo</testname> + <subtest>...</subtest> +</test_output> diff --git a/examples/xml/structure.xml b/examples/xml/structure.xml new file mode 100644 index 0000000..c1ec651 --- /dev/null +++ b/examples/xml/structure.xml @@ -0,0 +1,14 @@ +<a1> + <a11> + <a111> + <a1111/> + </a111> + <a112> + <a1121/> + </a112> + </a11> + <a12/> + <a13> + <a131/> + </a13> +</a1> diff --git a/examples/xml/tab-bad.xml b/examples/xml/tab-bad.xml new file mode 100644 index 0000000..adb05a8 --- /dev/null +++ b/examples/xml/tab-bad.xml @@ -0,0 +1,21 @@ +<?xml version="1.0"?> +<xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + <object name="Obj1"> + <property name="size">10</property> + <property name="type">Data</property> + </object> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </tble> +</xml> diff --git a/examples/xml/tab-obj.xml b/examples/xml/tab-obj.xml new file mode 100644 index 0000000..1f0383d --- /dev/null +++ b/examples/xml/tab-obj.xml @@ -0,0 +1,21 @@ +<?xml version="1.0"?> +<xml> + <table> + <rec id="1"> + <numField>123</numField> + <stringField>String Value</stringField> + <object name="Obj1"> + <property name="size">10</property> + <property name="type">Data</property> + </object> + </rec> + <rec id="2"> + <numField>346</numField> + <stringField>Text Value</stringField> + </rec> + <rec id="3"> + <numField>-23</numField> + <stringField>stringValue</stringField> + </rec> + </table> +</xml> diff --git a/examples/xml/table.xml b/examples/xml/table.xml new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/examples/xml/table.xml diff --git a/examples/xml/unicode.xml b/examples/xml/unicode.xml new file mode 100644 index 0000000..618bfef --- /dev/null +++ b/examples/xml/unicode.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE doc [ + <!ELEMENT doc (test+)> + <!ELEMENT test (#PCDATA)> + <!ENTITY ccedil "ç"> + <!ATTLIST test lang CDATA #IMPLIED> +]> +<doc> + <test lang="français">UTF-8 character.</test> + <test lang="français">numeric ref.</test> + <test lang="français">entity ref.</test> +</doc> diff --git a/examples/xml/unsorted.xml b/examples/xml/unsorted.xml new file mode 100644 index 0000000..6ab629e --- /dev/null +++ b/examples/xml/unsorted.xml @@ -0,0 +1,15 @@ +<?xml version="1.0"?> +<root> + <!-- rank 1 is vowel, rank 2 is consonant --> + <elem name="c" rank="2"/> + <elem name="e" rank="1"/> + <elem name="a" rank="1"/> + <elem name="d" rank="2"/> + <elem name="b" rank="2"/> + + <elem name="B" rank="2"/> + <elem name="A" rank="1"/> + <elem name="D" rank="2"/> + <elem name="E" rank="1"/> + <elem name="C" rank="2"/> +</root> diff --git a/examples/xml/xmlstarlet-pad.xml b/examples/xml/xmlstarlet-pad.xml new file mode 100644 index 0000000..9324575 --- /dev/null +++ b/examples/xml/xmlstarlet-pad.xml @@ -0,0 +1,157 @@ +<?xml version="1.0" encoding="Windows-1252" ?>
+<XML_DIZ_INFO>
+<MASTER_PAD_VERSION_INFO>
+ <MASTER_PAD_VERSION>1.15</MASTER_PAD_VERSION>
+ <MASTER_PAD_INFO>Portable Application Description, or PAD for short, is a data set that is used by shareware authors to disseminate information to anyone interested in their software products. To find out more go to http://www.asp-shareware.org/pad</MASTER_PAD_INFO>
+</MASTER_PAD_VERSION_INFO>
+<Company_Info>
+ <Company_Name>Mikhail Grushinskiy</Company_Name>
+ <Address_1 />
+ <Address_2 />
+ <City_Town />
+ <State_Province />
+ <Zip_Postal_Code />
+ <Country />
+ <Company_WebSite_URL>http://sourceforge.net/projects/xmlstar/</Company_WebSite_URL>
+<Contact_Info>
+ <Author_First_Name>Mikhail</Author_First_Name>
+ <Author_Last_Name>Grushinskiy</Author_Last_Name>
+ <Author_Email>mgrouch@users.sourceforge.net</Author_Email>
+ <Contact_First_Name />
+ <Contact_Last_Name />
+ <Contact_Email />
+ </Contact_Info>
+<Support_Info>
+ <Sales_Email />
+ <Support_Email />
+ <General_Email>mgrouch@users.sourceforge.net</General_Email>
+ <Sales_Phone />
+ <Support_Phone />
+ <General_Phone />
+ <Fax_Phone />
+ </Support_Info>
+</Company_Info>
+<Program_Info>
+ <Program_Name>xmlstarlet</Program_Name>
+ <Program_Version>0.3.0</Program_Version>
+ <Program_Release_Month>05</Program_Release_Month>
+ <Program_Release_Day>28</Program_Release_Day>
+ <Program_Release_Year>2003</Program_Release_Year>
+ <Program_Cost_Dollars />
+ <Program_Cost_Other_Code />
+ <Program_Cost_Other />
+ <Program_Type>Freeware</Program_Type>
+ <Program_Release_Status>Major Update</Program_Release_Status>
+ <Program_Install_Support>Install and Uninstall</Program_Install_Support>
+ <Program_OS_Support>Unix,Linux</Program_OS_Support>
+ <Program_Language>English</Program_Language>
+<File_Info>
+ <Filename_Versioned>xmlstarlet-0.3.0.tar.gz</Filename_Versioned>
+ <Filename_Previous />
+ <Filename_Generic />
+ <Filename_Long />
+ <File_Size_Bytes>155073</File_Size_Bytes>
+ <File_Size_K>151</File_Size_K>
+ <File_Size_MB>0.15</File_Size_MB>
+ </File_Info>
+<Expire_Info>
+ <Has_Expire_Info>N</Has_Expire_Info>
+ <Expire_Count />
+ <Expire_Based_On>Days</Expire_Based_On>
+ <Expire_Other_Info />
+ <Expire_Month />
+ <Expire_Day />
+ <Expire_Year />
+ </Expire_Info>
+ <Program_Change_Info />
+ <Program_Specific_Category>Utilities</Program_Specific_Category>
+ <Program_Categories>Development Tools</Program_Categories>
+ <Program_System_Requirements>POSIX UNIX</Program_System_Requirements>
+ <Includes_JAVA_VM>N</Includes_JAVA_VM>
+ <Includes_VB_Runtime>N</Includes_VB_Runtime>
+ <Includes_DirectX>N</Includes_DirectX>
+</Program_Info>
+<Program_Descriptions>
+<English>
+ <Keywords>xmlstarlet XML command line processing tool utility toolkit XSLT XSD RelaxNG validate query transform edit modify shell UNIX grep diff sed pyx</Keywords>
+ <Char_Desc_45>XMLStarlet Command Line XML Toolkit</Char_Desc_45>
+ <Char_Desc_80>XMLStarlet Command Line XML Toolkit</Char_Desc_80>
+ <Char_Desc_250>XMLStarlet is a set of command line utilities (tools) to transform, query, validate, and edit XML documents and files using simple set of shell commands in similar way it is done for plain text files using UNIX grep, sed, awk, diff, patch, join, etc</Char_Desc_250>
+ <Char_Desc_450>XMLStarlet is a set of command line utilities (tools) to transform, query, validate, and edit XML documents and files using simple set of shell commands in similar way it is done for plain text files using UNIX grep, sed, awk, diff, patch, join, etc commands.
+
+This set of command line utilities can be used by those who deal with many XML documents on UNIX shell command prompt as well as for automated XML processing with shell scripts.</Char_Desc_450>
+ <Char_Desc_2000>XMLStarlet is a set of command line utilities (tools) to transform, query, validate, and edit XML documents and files using simple set of shell commands in similar way it is done for plain text files using UNIX grep, sed, awk, diff, patch, join, etc commands.
+
+This set of command line utilities can be used by those who deal with many XML documents on UNIX shell command prompt as well as for automated XML processing with shell scripts.
+
+The toolkit's feature set includes options to:
+
+Check or validate XML files (simple well-formedness check, DTD, XSD, RelaxNG)
+
+Calculate values of XPath expressions on XML files (such as running sums, etc)
+
+Search XML files for matches to given XPath expressions
+
+Apply XSLT stylesheets to XML documents (including EXSLT support, and passing parameters to stylesheets)
+
+Query XML documents (ex. query for value of some elements of attributes, sorting, etc)
+
+Modify or edit XML documents (ex. delete some elements)
+
+Format or "beautify" XML documents (as changing indentation, etc)
+
+Fetch XML documents using http:// or ftp:// URLs
+
+Browse tree structure of XML documents (in similar way to 'ls' command for directories)
+
+Include one XML document into another using XInclude
+
+XML c14n canonicalization
+
+Escape/unescape special XML characters in input text
+
+Display directories in XML format
+
+XMLStarlet is open source freeware under MIT license which allows free use and distribution for both commercial and non-commercial projects.
+
+We welcome any user's feedback on this project which would greatly help us to improve its quality. Comments, suggestions, feature requests, bug reports can be done via SourceForge project web site (see XMLStarlet Sourceforge forums at http://sourceforge.net/forum/?group_id=66612, or XMLStarlet mailing list at http://lists.sourceforge.net/lists/listinfo/xmlstar-devel)</Char_Desc_2000>
+</English>
+</Program_Descriptions>
+<Web_Info>
+<Application_URLs>
+ <Application_Info_URL>http://xmlstar.sourceforge.net/</Application_Info_URL>
+ <Application_Order_URL>http://xmlstar.sourceforge.net/download.php</Application_Order_URL>
+ <Application_Screenshot_URL />
+ <Application_Icon_URL>http://xmlstar.sourceforge.net/img/xmlstarlet.png</Application_Icon_URL>
+ <Application_XML_File_URL />
+ </Application_URLs>
+<Download_URLs>
+ <Primary_Download_URL>http://xmlstar.sourceforge.net/download.php</Primary_Download_URL>
+ <Secondary_Download_URL>http://sourceforge.net/project/showfiles.php?group_id=66612</Secondary_Download_URL>
+ <Additional_Download_URL_1 />
+ <Additional_Download_URL_2 />
+ </Download_URLs>
+</Web_Info>
+<Permissions>
+ <Distribution_Permissions>Copyright (c) 2002,2003 Mikhail Grushinskiy. All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.</Distribution_Permissions>
+ <EULA />
+</Permissions>
+</XML_DIZ_INFO>
diff --git a/examples/xml/xmlstarlet-xsa.xml b/examples/xml/xmlstarlet-xsa.xml new file mode 100644 index 0000000..698f09a --- /dev/null +++ b/examples/xml/xmlstarlet-xsa.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?>
+<!DOCTYPE xsa PUBLIC "-//LM Garshol//DTD XML Software Autoupdate 1.0//EN//XML"
+ "http://www.garshol.priv.no/download/xsa/xsa.dtd">
+
+<xsa>
+ <vendor>
+ <name>Mikhail Grushinskiy</name>
+ <email>mgrouch@users.sourceforge.net</email>
+ <url>http://xmlstar.sourceforge.net/</url>
+ </vendor>
+
+ <product id="xmlstarlet">
+ <name>xmlstarlet</name>
+ <version>0.3.0</version>
+ <last-release>20030528</last-release>
+ <info-url>http://xmlstar.sourceforge.net/</info-url>
+ <changes>
+Changes since 0.2.0
+1. Many improvements to 'edit' option
+2. Improvements for namespaces support in 'select' option
+3. Fixes for 'ls' option
+4. New binaries for Solaris8-sparc/RedHat-7.3/Mandrake-9.1/
+5. Documentation and web site updates
+6. Improved build scripts and make files
+7. Additional examples and tests
+ </changes>
+ </product>
+</xsa>
diff --git a/examples/xmlstarlet b/examples/xmlstarlet new file mode 100644 index 0000000..7eb408d --- /dev/null +++ b/examples/xmlstarlet @@ -0,0 +1,14 @@ +#!/bin/sh +exepath=`dirname $0` +xml="${abs_builddir-$exepath/..}"/xml + +if [ x"$OSTYPE" = xmsys ] ; then + exec "$exepath/xmlstarlet.msys" "$xml" "$@" +fi + +if [ x"$VALGRIND" = xyes ] ; then + exec valgrind --error-exitcode=99 --quiet ${VALGRIND_OPTS} "$xml" "$@" +fi + +exec "$xml" "$@" + diff --git a/examples/xmlstarlet.msys b/examples/xmlstarlet.msys new file mode 100644 index 0000000..1d7c7f2 --- /dev/null +++ b/examples/xmlstarlet.msys @@ -0,0 +1,21 @@ +#!/bin/bash
+
+xml="$1"
+shift
+
+# MSYS does unix -> windows path conversion if there is a leading /
+# but not when the argument contains a semicolon, eg: /x ->
+# C:\Mingw\msys\1.0\x so we double all leading /'s to avoid this
+
+nargs=$#
+args=()
+for ((i = 0; i < nargs; i++)) ; do
+ if [[ "$1" = /* ]] && [[ "$1" != *\;* ]] ; then
+ args[$i]="/$1"
+ else
+ args[$i]="$1"
+ fi
+ shift
+done
+
+exec "$xml" "${args[@]}"
diff --git a/examples/xsd/bigxml.xsd b/examples/xsd/bigxml.xsd new file mode 100644 index 0000000..da58f2d --- /dev/null +++ b/examples/xsd/bigxml.xsd @@ -0,0 +1,16 @@ +<?xml version="1.0"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> + + <xs:element name="root"> + <xs:complexType> + <xs:sequence> + + <xs:element name="a" maxOccurs="unbounded"> + <xs:complexType/> + </xs:element> + + </xs:sequence> + </xs:complexType> + </xs:element> + +</xs:schema> diff --git a/examples/xsd/table.xsd b/examples/xsd/table.xsd new file mode 100644 index 0000000..c24332a --- /dev/null +++ b/examples/xsd/table.xsd @@ -0,0 +1,24 @@ +<?xml version="1.0"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <xsd:element name="xml"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="table"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="rec" maxOccurs="unbounded"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="numField" type="xsd:int"/> + <xsd:element name="stringField" type="xsd:string"/> + </xsd:sequence> + <xsd:attribute name="id" type="xsd:NMTOKEN" use="required"/> + </xsd:complexType> + </xsd:element> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + </xsd:sequence> + </xsd:complexType> + </xsd:element> +</xsd:schema> diff --git a/examples/xsl-param1 b/examples/xsl-param1 new file mode 100644 index 0000000..88b3085 --- /dev/null +++ b/examples/xsl-param1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Passing parameters to XSLT stylesheet +./xmlstarlet tr xsl/param1.xsl -p Count='count(/xml/table/rec)' -s Text="Count=" xml/table.xml diff --git a/examples/xsl-sum1 b/examples/xsl-sum1 new file mode 100644 index 0000000..8a17113 --- /dev/null +++ b/examples/xsl-sum1 @@ -0,0 +1,3 @@ +#!/bin/sh +# Applying XSLT stylesheet to XML document +./xmlstarlet tr xsl/sum1.xsl xml/table.xml diff --git a/examples/xsl/cat.xsl b/examples/xsl/cat.xsl new file mode 100644 index 0000000..b328ba2 --- /dev/null +++ b/examples/xsl/cat.xsl @@ -0,0 +1,7 @@ +<?xml version="1.0"?> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> +<xsl:output method="xml" encoding="utf-8" indent="no"/> + <xsl:template match="node()|@*"> + <xsl:copy-of select="/"/> + </xsl:template> +</xsl:stylesheet> diff --git a/examples/xsl/hello1.xsl b/examples/xsl/hello1.xsl new file mode 100644 index 0000000..cfb3eb0 --- /dev/null +++ b/examples/xsl/hello1.xsl @@ -0,0 +1,13 @@ +<?xml version="1.0"?> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> +<xsl:output method="text"/> +<xsl:param name="inputFile">-</xsl:param> +<xsl:template match="/"> + <xsl:call-template name="t1"/> +</xsl:template> +<xsl:template name="t1"> + <xsl:for-each select="/"> + <xsl:value-of select="/html/body/div"/> + </xsl:for-each> +</xsl:template> +</xsl:stylesheet> diff --git a/examples/xsl/param1.xsl b/examples/xsl/param1.xsl new file mode 100644 index 0000000..ab306f6 --- /dev/null +++ b/examples/xsl/param1.xsl @@ -0,0 +1,16 @@ +<?xml version="1.0"?> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> +<xsl:output method="text"/> +<xsl:param name="Text"/> +<xsl:param name="Count"/> +<xsl:template match="/"> + <xsl:call-template name="t1"/> +</xsl:template> +<xsl:template name="t1"> + <xsl:for-each select="/xml"> + <xsl:value-of select="$Text"/> + <xsl:value-of select="$Count"/> + <xsl:value-of select="' '"/> + </xsl:for-each> +</xsl:template> +</xsl:stylesheet> diff --git a/examples/xsl/sum1.xsl b/examples/xsl/sum1.xsl new file mode 100644 index 0000000..a595171 --- /dev/null +++ b/examples/xsl/sum1.xsl @@ -0,0 +1,12 @@ +<?xml version="1.0"?> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> +<xsl:output method="text"/> +<xsl:param name="inputFile">-</xsl:param> +<xsl:template match="/"> + <xsl:call-template name="t1"/> +</xsl:template> +<xsl:template name="t1"> + <xsl:value-of select="sum(/xml/table/rec/numField)"/> + <xsl:value-of select="' '"/> +</xsl:template> +</xsl:stylesheet> diff --git a/examples/xsp/dynamic.xsp b/examples/xsp/dynamic.xsp new file mode 100644 index 0000000..333b51d --- /dev/null +++ b/examples/xsp/dynamic.xsp @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<?cocoon-process type="xsp"?> +<?cocoon-process type="xslt"?> +<?xml-stylesheet href="sample.xsl" type="text/xsl"?> + +<xsp:page language="java" xmlns:xsp="http://www.apache.org/1999/XSP/Core"> + <page title="Time of Day"> + + <xsp:logic> + // Define a variable to hold the time of day + Date now = new Date(); + </xsp:logic> + + <p> + To the best of my knowledge, it's now + <!-- Substitute time of day here --> + <xsp:expr>now</xsp:expr> + </p> + </page> +</xsp:page> diff --git a/examples/xsql/jobserve.xsql b/examples/xsql/jobserve.xsql new file mode 100644 index 0000000..13dacf8 --- /dev/null +++ b/examples/xsql/jobserve.xsql @@ -0,0 +1,8 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/xsl" href="jobserve.xsl"?> +<xsql:query connection="jobs" xmlns:xsql="urn:oracle-xsql" max-rows="5"> + SELECT substr(title,1,26) short_title, title, location, skills + FROM job + WHERE UPPER(title) LIKE '%ORACLE%' + ORDER BY first_posted DESC +</xsql:query> diff --git a/examples/xupdate/insxml.xup b/examples/xupdate/insxml.xup new file mode 100644 index 0000000..be0aca5 --- /dev/null +++ b/examples/xupdate/insxml.xup @@ -0,0 +1,17 @@ +<xupdate:modifications version="1.0" + xmlns:xupdate="http://www.xmldb.org/xupdate"> + + <xupdate:append select="/addresses" > + <xupdate:element name="address"> + <xupdate:attribute name="id">2</xupdate:attribute> + <name> + <first>Susan</first> + <last>Long</last> + </name> + <city>Tucson</city> + <state>Arizona</state> + <country>United States</country> + <phone type="home">430-304-3040</phone> + </xupdate:element> + </xupdate:append> +</xupdate:modifications> diff --git a/install-sh b/install-sh new file mode 100644 index 0000000..a9244eb --- /dev/null +++ b/install-sh @@ -0,0 +1,527 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2011-01-19.21; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + # Protect names problematic for `test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + # Protect names problematic for `test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + do_exit='(exit $ret); exit $ret' + trap "ret=129; $do_exit" 1 + trap "ret=130; $do_exit" 2 + trap "ret=141; $do_exit" 13 + trap "ret=143; $do_exit" 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names problematic for `test' and other utilities. + case $src in + -* | [=\(\)!]) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + dst=$dst_arg + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test X"$d" = X && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/m4/quiet-rule.m4 b/m4/quiet-rule.m4 new file mode 100644 index 0000000..29004e6 --- /dev/null +++ b/m4/quiet-rule.m4 @@ -0,0 +1,12 @@ +# serial 1 -*- mode: autoconf -*- +# SILENT_RULE(varname, [echo = varname]) +# defines V_varname to use for silent make rules +AC_DEFUN([np_SILENT_RULE],[dnl +m4_pushdef([varname], $1)dnl +m4_pushdef([echoname], [m4_default($2, varname)])dnl +# make silent rule for $1 +AC_SUBST(V_[]varname, ["\$(V_[]varname[]_$AM_V)"])dnl +AC_SUBST(V_[]varname[]_, ["\$(V_[]varname[]_$AM_DEFAULT_VERBOSITY)"])dnl +AC_SUBST(V_[]varname[]_0, ['@echo " echoname [$]@";'])dnl +m4_popdef([varname], [echoname])dnl +]) diff --git a/m4/xstar-check-libs.m4 b/m4/xstar-check-libs.m4 new file mode 100644 index 0000000..e5404cc --- /dev/null +++ b/m4/xstar-check-libs.m4 @@ -0,0 +1,49 @@ +# serial 1 -*- mode: autoconf -*- + +# XSTAR_LIB_ARGS_WITH(LIBXXX, [with-src = []]) +dnl pass [with-src] to get the --with-libxxx-src option +AC_DEFUN([XSTAR_LIB_ARGS_WITH], +[m4_pushdef([LIBXXX], $1)dnl +m4_pushdef([libxxx], m4_tolower(LIBXXX))dnl +AC_ARG_WITH(libxxx-prefix, + AS_HELP_STRING(--with-libxxx-prefix=[PFX], + Specify location of libxxx), + [LIBXXX()_PREFIX="$withval"]) +AC_ARG_WITH(libxxx-include-prefix, + AS_HELP_STRING([--with-libxxx-include-prefix=[PFX]], + Specify location of libxxx headers), + [LIBXXX()_INCDIR="$withval"]) +AC_ARG_WITH(libxxx-libs-prefix, + AS_HELP_STRING([--with-libxxx-libs-prefix=[PFX]], + Specify location of libxxx libs), + [LIBXXX()_LIBDIR="$withval"]) +m4_if($2, [with-src], +[AC_ARG_WITH(libxxx-src, + AS_HELP_STRING([--with-libxxx-src=[DIR]], + For libxxx that's not installed yet (sets all three above)), + [LIBXXX()_SRCDIR="$withval" + LIBXXX()_LIBDIR="$LIBXXX()_SRCDIR/.libs"])]) +m4_popdef([libxxx], [LIBXXX])]) + +# XSTAR_LIB_CHECK(LIBXXX, xxx-config) +# set LIBXXX_INCDIR and LIBXXX_LIBDIR based on location of xxx-config +# also check xxx-config --version against LIBXXX_REQUIRED_VERSION +# Ignores xxx-config if LIBXXX_SRCDIR is set +AC_DEFUN([XSTAR_LIB_CHECK], +[m4_pushdef([LIBXXX], $1) + m4_pushdef([libxxx], m4_tolower(LIBXXX)) + m4_pushdef([xxx_config], $2) + AS_IF([test "x$LIBXXX()_SRCDIR" != x], + [AC_MSG_NOTICE([using libxxx src dir "$LIBXXX()_SRCDIR"]) + AC_MSG_WARN([not checking libxxx version])], + [AC_PATH_PROG(LIBXXX()_CONFIG, xxx_config(), + [], [$LIBXXX()_PREFIX/bin$PATH_SEPARATOR$PATH]) + AS_IF([test "x$LIBXXX()_CONFIG" = x], [AC_MSG_FAILURE([xxx_config not found])]) + LIBXXX()_VERSION=$($LIBXXX()_CONFIG --version) + AS_VERSION_COMPARE([$LIBXXX()_VERSION], [$LIBXXX()_REQUIRED_VERSION], + [AC_MSG_ERROR([xmlstarlet needs at least libxxx version $LIBXXX()_REQUIRED_VERSION (http://www.xmlsoft.org/)])]) + AC_MSG_NOTICE([using libxxx-$LIBXXX()_VERSION]) + LIBXXX()_PREFIX=`AS_DIRNAME($LIBXXX()_CONFIG)` + LIBXXX()_PREFIX=`AS_DIRNAME($LIBXXX()_PREFIX)` + : ${LIBXXX()_LIBDIR="$LIBXXX()_PREFIX/lib"}]) + m4_popdef([xxx_config], [libxxx], [LIBXXX])]) @@ -0,0 +1,331 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2012-01-06.13; # UTC + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, +# 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. +# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: +sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' +sed_minuso='s/.* -o \([^ ]*\).*/\1/p' + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +msg="missing on your system" + +case $1 in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + # Exit code 63 means version mismatch. This often happens + # when the user try to use an ancient version of a tool on + # a file that requires a minimum version. In this case we + # we should proceed has if the program had been absent, or + # if --run hadn't been passed. + if test $? = 63; then + run=: + msg="probably too old" + fi + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + autom4te touch the output file, or create a stub one + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + yacc create \`y.tab.[ch]', if possible, from existing .[ch] + +Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and +\`g' are ignored when checking the name. + +Send bug reports to <bug-automake@gnu.org>." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + +esac + +# normalize program name to check for. +program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + +# Now exit if we have it, but it failed. Also exit now if we +# don't have it and --version was passed (most likely to detect +# the program). This is about non-GNU programs, so use $1 not +# $program. +case $1 in + lex*|yacc*) + # Not GNU programs, they don't have --version. + ;; + + *) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + # Could not run --version or --help. This is probably someone + # running `$TOOL --version' or `$TOOL --help' to check whether + # $TOOL exists and not knowing $TOOL uses missing. + exit 1 + fi + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case $program in + aclocal*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case $f in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te*) + echo 1>&2 "\ +WARNING: \`$1' is needed, but is $msg. + You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison*|yacc*) + echo 1>&2 "\ +WARNING: \`$1' $msg. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if test $# -ne 1; then + eval LASTARG=\${$#} + case $LASTARG in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if test ! -f y.tab.h; then + echo >y.tab.h + fi + if test ! -f y.tab.c; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex*|flex*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if test $# -ne 1; then + eval LASTARG=\${$#} + case $LASTARG in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if test ! -f lex.yy.c; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit $? + fi + ;; + + makeinfo*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + # The file to touch is that specified with -o ... + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -z "$file"; then + # ... or it is the one specified with @setfilename ... + infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n ' + /^@setfilename/{ + s/.* \([^ ]*\) *$/\1/ + p + q + }' $infile` + # ... or it is derived from the source name (dir/f.texi becomes f.info) + test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info + fi + # If the file does not exist, the user really needs makeinfo; + # let's fail without touching anything. + test -f $file || exit 1 + touch $file + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and is $msg. + You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/packaging/xmlstarlet.spec b/packaging/xmlstarlet.spec new file mode 100644 index 0000000..c69f94f --- /dev/null +++ b/packaging/xmlstarlet.spec @@ -0,0 +1,67 @@ +Name: xmlstarlet +BuildRequires: autoconf +BuildRequires: automake +BuildRequires: gcc +BuildRequires: glibc-devel +BuildRequires: libtool +BuildRequires: libxml2-devel >= 2.6.27 +BuildRequires: libxslt-devel >= 1.1.9 +BuildRequires: pkgconfig +#BuildRequires: sgml-skel +Summary: Command Line Tool to Process XML Documents +License: MIT +Group: Productivity/Publishing/XML +Version: 1.4.1 +Release: 0 +Source: http://prdownloads.sourceforge.net/xmlstar/xmlstarlet-%{version}.tar.gz +#Source1: %{name}-rpmlintrc +#Patch2: %{name}-xml_depyx.c.diff +#BuildRoot: %{_tmppath}/%{name}-%{version}-build +Url: http://sourceforge.net/projects/xmlstar/ +requires: libxml2 + + +%description +XMLStarlet (xml) is a command line XML toolkit which can be used to +transform, query, validate, and edit XML documents and files using +simple set of shell commands in similar way it is done for plain text +files using 'grep', 'sed', 'awk', 'tr', 'diff', or 'patch'. + +%prep +%setup -q +#%patch2 + +%build +export CFLAGS="$RPM_OPT_FLAGS -W -Wall" +%configure \ + --disable-static-libs + +%__make %{?_smp_mflags} + +%check +%__make tests + +%install +%makeinstall +#ln -s %{buildroot}/usr/bin/xml %{buildroot}/usr/bin/xmlstarlet + +#install -d _docs +#%__mv "%{buildroot}%{_datadir}/doc"/* _docs/ +#%__rm -rf "%{buildroot}%{_datadir}/doc" +rm -rf %{buildroot}/usr/share + +%post +ln -s /usr/bin/xml /usr/bin/xmlstarlet + +%clean +%{?buildroot:%__rm -rf "%{buildroot}"} + +%files +%defattr(-, root, root) +#%doc AUTHORS ChangeLog NEWS README Copyright TODO +#%doc _docs/* +%{_bindir}/xml +#%{_bindir}/xmlstarlet +#%doc %{_mandir}/man1/xmlstarlet.1%{ext_man} + +%changelog diff --git a/solaris/package/sol8-sparc/build b/solaris/package/sol8-sparc/build new file mode 100644 index 0000000..d7c6271 --- /dev/null +++ b/solaris/package/sol8-sparc/build @@ -0,0 +1,18 @@ +#! /bin/sh + +/usr/bin/pkgmk -o + +CUR_DIR=`pwd` + +FILE=xmlstarlet +PKG=SFxmlstar +VERSION=`/usr/bin/pkgparam -d /var/spool/pkg SFxmlstar VERSION` +ARCH=`/usr/bin/pkgparam -d /var/spool/pkg SFxmlstar ARCH` +OS=sol8 +BASE=local +FULL_FILE=${FILE}-${VERSION}-${OS}-${ARCH}-${BASE} + +/usr/bin/pkgtrans -s /var/spool/pkg ${CUR_DIR}/${FULL_FILE} ${PKG} + +/usr/bin/gzip ${FULL_FILE} + diff --git a/solaris/package/sol8-sparc/pkginfo b/solaris/package/sol8-sparc/pkginfo new file mode 100644 index 0000000..26c7780 --- /dev/null +++ b/solaris/package/sol8-sparc/pkginfo @@ -0,0 +1,13 @@ +# $Id: pkginfo.in,v 1.1 2003/05/10 23:21:06 mgrouch Exp $ + +PKG=SFxmlstar +NAME="xmlstarlet Command Line XML Toolkit" +ARCH=sparc +VERSION=1.4.1 +MAXINST=1 +CATEGORY=application +DESC="XmlStarlet Command Line XML Toolkit" +CLASSES=none +VENDOR="http://xmlstar.sourceforge.net/" +BASEDIR=/usr/local + diff --git a/solaris/package/sol8-sparc/pkginfo.in b/solaris/package/sol8-sparc/pkginfo.in new file mode 100644 index 0000000..7dd957a --- /dev/null +++ b/solaris/package/sol8-sparc/pkginfo.in @@ -0,0 +1,13 @@ +# $Id: pkginfo.in,v 1.1 2003/05/10 23:21:06 mgrouch Exp $ + +PKG=SFxmlstar +NAME="xmlstarlet Command Line XML Toolkit" +ARCH=sparc +VERSION=@VERSION@ +MAXINST=1 +CATEGORY=application +DESC="XmlStarlet Command Line XML Toolkit" +CLASSES=none +VENDOR="http://xmlstar.sourceforge.net/" +BASEDIR=/usr/local + diff --git a/solaris/package/sol8-sparc/prototype b/solaris/package/sol8-sparc/prototype new file mode 100644 index 0000000..eabea5d --- /dev/null +++ b/solaris/package/sol8-sparc/prototype @@ -0,0 +1,7 @@ +i pkginfo +d none bin ? ? ? +d none man ? ? ? +d none man/man1 ? ? ? +f none bin/xml=../../../src/xml 0755 root bin +f none man/man1/xmlstarlet.1=../../../doc/xmlstarlet.1 0644 root bin + diff --git a/solaris/package/sol9-sparc/build b/solaris/package/sol9-sparc/build new file mode 100644 index 0000000..f5412c3 --- /dev/null +++ b/solaris/package/sol9-sparc/build @@ -0,0 +1,18 @@ +#! /bin/sh + +/usr/bin/pkgmk -o + +CUR_DIR=`pwd` + +FILE=xmlstarlet +PKG=SFxmlstar +VERSION=`/usr/bin/pkgparam -d /var/spool/pkg SFxmlstar VERSION` +ARCH=`/usr/bin/pkgparam -d /var/spool/pkg SFxmlstar ARCH` +OS=sol9 +BASE=local +FULL_FILE=${FILE}-${VERSION}-${OS}-${ARCH}-${BASE} + +/usr/bin/pkgtrans -s /var/spool/pkg ${CUR_DIR}/${FULL_FILE} ${PKG} + +/usr/bin/gzip ${FULL_FILE} + diff --git a/solaris/package/sol9-sparc/pkginfo b/solaris/package/sol9-sparc/pkginfo new file mode 100644 index 0000000..7007e8d --- /dev/null +++ b/solaris/package/sol9-sparc/pkginfo @@ -0,0 +1,13 @@ +# $Id: pkginfo.in,v 1.1 2004/02/05 03:02:31 mgrouch Exp $ + +PKG=SFxmlstar +NAME="xmlstarlet Command Line XML Toolkit" +ARCH=sparc +VERSION=1.4.1 +MAXINST=1 +CATEGORY=application +DESC="XmlStarlet Command Line XML Toolkit" +CLASSES=none +VENDOR="http://xmlstar.sourceforge.net/" +BASEDIR=/usr/local + diff --git a/solaris/package/sol9-sparc/pkginfo.in b/solaris/package/sol9-sparc/pkginfo.in new file mode 100644 index 0000000..bc60ed0 --- /dev/null +++ b/solaris/package/sol9-sparc/pkginfo.in @@ -0,0 +1,13 @@ +# $Id: pkginfo.in,v 1.1 2004/02/05 03:02:31 mgrouch Exp $ + +PKG=SFxmlstar +NAME="xmlstarlet Command Line XML Toolkit" +ARCH=sparc +VERSION=@VERSION@ +MAXINST=1 +CATEGORY=application +DESC="XmlStarlet Command Line XML Toolkit" +CLASSES=none +VENDOR="http://xmlstar.sourceforge.net/" +BASEDIR=/usr/local + diff --git a/solaris/package/sol9-sparc/prototype b/solaris/package/sol9-sparc/prototype new file mode 100644 index 0000000..eabea5d --- /dev/null +++ b/solaris/package/sol9-sparc/prototype @@ -0,0 +1,7 @@ +i pkginfo +d none bin ? ? ? +d none man ? ? ? +d none man/man1 ? ? ? +f none bin/xml=../../../src/xml 0755 root bin +f none man/man1/xmlstarlet.1=../../../doc/xmlstarlet.1 0644 root bin + diff --git a/src/c14n-usage.txt b/src/c14n-usage.txt new file mode 100644 index 0000000..6ffc50d --- /dev/null +++ b/src/c14n-usage.txt @@ -0,0 +1,22 @@ +XMLStarlet Toolkit: XML canonicalization +Usage: PROG c14n [--net] <mode> <xml-file> [<xpath-file>] [<inclusive-ns-list>] +where + <xml-file> - input XML document file name (stdin is used if '-') + <xpath-file> - XML file containing XPath expression for + c14n XML canonicalization + Example: + <?xml version="1.0"?> + <XPath xmlns:n0="http://a.example.com" xmlns:n1="http://b.example"> + (//. | //@* | //namespace::*)[ancestor-or-self::n1:elem1] + </XPath> + + <inclusive-ns-list> - the list of inclusive namespace prefixes + (only for exclusive canonicalization) + Example: 'n1 n2' + + <mode> is one of following: + --with-comments XML file canonicalization w comments (default) + --without-comments XML file canonicalization w/o comments + --exc-with-comments Exclusive XML file canonicalization w comments + --exc-without-comments Exclusive XML file canonicalization w/o comments + diff --git a/src/depyx-usage.txt b/src/depyx-usage.txt new file mode 100644 index 0000000..7400705 --- /dev/null +++ b/src/depyx-usage.txt @@ -0,0 +1,10 @@ +XMLStarlet Toolkit: Convert PYX into XML +Usage: PROG p2x [<pyx-file>] +where + <pyx-file> - input PYX document file name (stdin is used if missing) + +The PYX format is a line-oriented representation of +XML documents that is derived from the SGML ESIS format. +(see ESIS - ISO 8879 Element Structure Information Set spec, +ISO/IEC JTC1/SC18/WG8 N931 (ESIS)) + diff --git a/src/edit-usage.txt b/src/edit-usage.txt new file mode 100644 index 0000000..719e239 --- /dev/null +++ b/src/edit-usage.txt @@ -0,0 +1,29 @@ +XMLStarlet Toolkit: Edit XML document(s) +Usage: PROG ed <global-options> {<action>} [ <xml-file-or-uri> ... ] +where + <global-options> - global options for editing + <xml-file-or-uri> - input XML document file name/uri (stdin otherwise) + +<global-options> are: + -P, or -S - preserve whitespace nodes. + (or --pf, --ps) Note that space between attributes is not preserved + -O (or --omit-decl) - omit XML declaration (<?xml ...?>) + -L (or --inplace) - edit file inplace + -N <name>=<value> - predefine namespaces (name without 'xmlns:') + ex: xsql=urn:oracle-xsql + Multiple -N options are allowed. + -N options must be last global options. + --net - allow network access + --help or -h - display help + +where <action> + -d or --delete <xpath> + --var <name> <xpath> + -i or --insert <xpath> -t (--type) elem|text|attr -n <name> -v (--value) <value> + -a or --append <xpath> -t (--type) elem|text|attr -n <name> -v (--value) <value> + -s or --subnode <xpath> -t (--type) elem|text|attr -n <name> -v (--value) <value> + -m or --move <xpath1> <xpath2> + -r or --rename <xpath1> -v <new-name> + -u or --update <xpath> -v (--value) <value> + -x (--expr) <xpath> + diff --git a/src/elem-usage.txt b/src/elem-usage.txt new file mode 100644 index 0000000..f1537da --- /dev/null +++ b/src/elem-usage.txt @@ -0,0 +1,10 @@ +XMLStarlet Toolkit: Display element structure of XML document +Usage: PROG el [<options>] <xml-file> +where + <xml-file> - input XML document file name (stdin is used if missing) + <options> is one of: + -a - show attributes as well + -v - show attributes and their values + -u - print out sorted unique lines + -d<n> - print out sorted unique lines up to depth <n> + diff --git a/src/escape-usage.txt b/src/escape-usage.txt new file mode 100644 index 0000000..1ac6ec2 --- /dev/null +++ b/src/escape-usage.txt @@ -0,0 +1,7 @@ +XMLStarlet Toolkit: Escape special XML characters +Usage: PROG esc [<options>] [<string>] +where <options> are + --help - print usage + (TODO: more to be added in future) +if <string> is missing stdin is used instead. + diff --git a/src/escape.h b/src/escape.h new file mode 100644 index 0000000..31e1369 --- /dev/null +++ b/src/escape.h @@ -0,0 +1,52 @@ +/* $Id: escape.h,v 1.2 2005/03/12 03:24:23 mgrouch Exp $ */ + +#ifndef __ESCAPE_H +#define __ESCAPE_H + +/* + +XMLStarlet: Command Line Toolkit to query/edit/check/transform XML documents + +Copyright (c) 2004 Mikhail Grushinskiy. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ + +typedef enum { + XML_C14N_NORMALIZE_ATTR = 0, + XML_C14N_NORMALIZE_COMMENT = 1, + XML_C14N_NORMALIZE_PI = 2, + XML_C14N_NORMALIZE_TEXT = 3, + XML_C14N_NORMALIZE_NOTHING = 4 +} xml_C14NNormalizationMode; + +extern xmlChar *xml_C11NNormalizeString(const xmlChar * input, + xml_C14NNormalizationMode mode); + +#define xml_C11NNormalizeAttr( a ) \ + xml_C11NNormalizeString((a), XML_C14N_NORMALIZE_ATTR) +#define xml_C11NNormalizeComment( a ) \ + xml_C11NNormalizeString((a), XML_C14N_NORMALIZE_COMMENT) +#define xml_C11NNormalizePI( a ) \ + xml_C11NNormalizeString((a), XML_C14N_NORMALIZE_PI) +#define xml_C11NNormalizeText( a ) \ + xml_C11NNormalizeString((a), XML_C14N_NORMALIZE_TEXT) + +#endif /* __ESCAPE_H */ diff --git a/src/format-usage.txt b/src/format-usage.txt new file mode 100644 index 0000000..7a93cf7 --- /dev/null +++ b/src/format-usage.txt @@ -0,0 +1,19 @@ +XMLStarlet Toolkit: Format XML document +Usage: PROG fo [<options>] <xml-file> +where <options> are + -n or --noindent - do not indent + -t or --indent-tab - indent output with tabulation + -s or --indent-spaces <num> - indent output with <num> spaces + -o or --omit-decl - omit xml declaration <?xml version="1.0"?> + --net - allow network access + -R or --recover - try to recover what is parsable + -D or --dropdtd - remove the DOCTYPE of the input docs + -C or --nocdata - replace cdata section with text nodes + -N or --nsclean - remove redundant namespace declarations + -e or --encode <encoding> - output in the given encoding (utf-8, unicode...) +#ifdef LIBXML_HTML_ENABLED + -H or --html - input is HTML +#endif + -Q or --quiet - Suppress errors from libxml2 + -h or --help - print help + diff --git a/src/ls-usage.txt b/src/ls-usage.txt new file mode 100644 index 0000000..d3b9574 --- /dev/null +++ b/src/ls-usage.txt @@ -0,0 +1,5 @@ +XMLStarlet Toolkit: List directory as XML +Usage: PROG ls [ <dir> | --help ] +Lists current directory in XML format. +Time is shown per ISO 8601 spec. + diff --git a/src/pyx-usage.txt b/src/pyx-usage.txt new file mode 100644 index 0000000..d94d277 --- /dev/null +++ b/src/pyx-usage.txt @@ -0,0 +1,14 @@ +XMLStarlet Toolkit: Convert XML into PYX format (based on ESIS - ISO 8879) +Usage: PROG pyx {<xml-file>} +where + <xml-file> - input XML document file name (stdin is used if missing) + +The PYX format is a line-oriented representation of +XML documents that is derived from the SGML ESIS format. +(see ESIS - ISO 8879 Element Structure Information Set spec, +ISO/IEC JTC1/SC18/WG8 N931 (ESIS)) + +A non-validating, ESIS generating tool originally developed for +pyxie project (see http://pyxie.sourceforge.net/) +ESIS Generation by Sean Mc Grath http://www.digitome.com/sean.html + diff --git a/src/select-usage.txt b/src/select-usage.txt new file mode 100644 index 0000000..266f7fa --- /dev/null +++ b/src/select-usage.txt @@ -0,0 +1,77 @@ +XMLStarlet Toolkit: Select from XML document(s) +Usage: PROG sel <global-options> {<template>} [ <xml-file> ... ] +where + <global-options> - global options for selecting + <xml-file> - input XML document file name/uri (stdin is used if missing) + <template> - template for querying XML document with following syntax: + +<global-options> are: + -Q or --quiet - do not write anything to standard output. + -C or --comp - display generated XSLT + -R or --root - print root element <xsl-select> + -T or --text - output is text (default is XML) + -I or --indent - indent output + -D or --xml-decl - do not omit xml declaration line + -B or --noblanks - remove insignificant spaces from XML tree + -E or --encode <encoding> - output in the given encoding (utf-8, unicode...) + -N <name>=<value> - predefine namespaces (name without 'xmlns:') + ex: xsql=urn:oracle-xsql + Multiple -N options are allowed. + --net - allow fetch DTDs or entities over network + --help - display help + +Syntax for templates: -t|--template <options> +where <options> + -c or --copy-of <xpath> - print copy of XPATH expression + -v or --value-of <xpath> - print value of XPATH expression + -o or --output <string> - output string literal + -n or --nl - print new line + -f or --inp-name - print input file name (or URL) + -m or --match <xpath> - match XPATH expression + --var <name> <value> --break or + --var <name>=<value> - declare a variable (referenced by $name) + -i or --if <test-xpath> - check condition <xsl:if test="test-xpath"> + --elif <test-xpath> - check condition if previous conditions failed + --else - check if previous conditions failed + -e or --elem <name> - print out element <xsl:element name="name"> + -a or --attr <name> - add attribute <xsl:attribute name="name"> + -b or --break - break nesting + -s or --sort op xpath - sort in order (used after -m) where + op is X:Y:Z, + X is A - for order="ascending" + X is D - for order="descending" + Y is N - for data-type="numeric" + Y is T - for data-type="text" + Z is U - for case-order="upper-first" + Z is L - for case-order="lower-first" + +There can be multiple --match, --copy-of, --value-of, etc options +in a single template. The effect of applying command line templates +can be illustrated with the following XSLT analogue + +PROG sel -t -c "xpath0" -m "xpath1" -m "xpath2" -v "xpath3" \ + -t -m "xpath4" -c "xpath5" + +is equivalent to applying the following XSLT + +<?xml version="1.0"?> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> +<xsl:template match="/"> + <xsl:call-template name="t1"/> + <xsl:call-template name="t2"/> +</xsl:template> +<xsl:template name="t1"> + <xsl:copy-of select="xpath0"/> + <xsl:for-each select="xpath1"> + <xsl:for-each select="xpath2"> + <xsl:value-of select="xpath3"/> + </xsl:for-each> + </xsl:for-each> +</xsl:template> +<xsl:template name="t2"> + <xsl:for-each select="xpath4"> + <xsl:copy-of select="xpath5"/> + </xsl:for-each> +</xsl:template> +</xsl:stylesheet> + diff --git a/src/sources.mk b/src/sources.mk new file mode 100644 index 0000000..c511ffd --- /dev/null +++ b/src/sources.mk @@ -0,0 +1,47 @@ +usage_texts =\ +src/usage.txt\ +src/c14n-usage.txt\ +src/depyx-usage.txt\ +src/edit-usage.txt\ +src/elem-usage.txt\ +src/escape-usage.txt\ +src/format-usage.txt\ +src/ls-usage.txt\ +src/pyx-usage.txt\ +src/select-usage.txt\ +src/trans-usage.txt\ +src/unescape-usage.txt\ +src/validate-usage.txt + +generated_usage_sources =\ +src/usage.c\ +src/c14n-usage.c\ +src/depyx-usage.c\ +src/edit-usage.c\ +src/elem-usage.c\ +src/escape-usage.c\ +src/format-usage.c\ +src/ls-usage.c\ +src/pyx-usage.c\ +src/select-usage.c\ +src/trans-usage.c\ +src/unescape-usage.c\ +src/validate-usage.c + +xml_SOURCES =\ +src/escape.h\ +src/trans.c\ +src/trans.h\ +src/xml.c\ +src/xml_C14N.c\ +src/xml_depyx.c\ +src/xml_edit.c\ +src/xml_elem.c\ +src/xml_escape.c\ +src/xml_format.c\ +src/xml_ls.c\ +src/xml_pyx.c\ +src/xml_select.c\ +src/xmlstar.h\ +src/xml_trans.c\ +src/xml_validate.c diff --git a/src/trans-usage.txt b/src/trans-usage.txt new file mode 100644 index 0000000..94abec9 --- /dev/null +++ b/src/trans-usage.txt @@ -0,0 +1,23 @@ +XMLStarlet Toolkit: Transform XML document(s) using XSLT +Usage: PROG tr [<options>] <xsl-file> {-p|-s <name>=<value>} [<xml-file>...] +where + <xsl-file> - main XSLT stylesheet for transformation + <xml-file> - input XML document file/URL (stdin is used if missing) + <name>=<value> - name and value of the parameter passed to XSLT processor + -p - parameter is XPATH expression ("'string'" to quote string) + -s - parameter is a string literal +<options> are: + --help or -h - display help message + --omit-decl - omit xml declaration <?xml version="1.0"?> + --embed or -E - allow applying embedded stylesheet + --show-ext - show list of extensions + --val - allow validate against DTDs or schemas + --net - allow fetch DTDs or entities over network +#ifdef LIBXML_XINCLUDE_ENABLED + --xinclude - do XInclude processing on document input +#endif + --maxdepth val - increase the maximum depth +#ifdef LIBXML_HTML_ENABLED + --html - input document(s) is(are) in HTML format +#endif + diff --git a/src/trans.c b/src/trans.c new file mode 100644 index 0000000..3603436 --- /dev/null +++ b/src/trans.c @@ -0,0 +1,286 @@ +/* $Id: trans.c,v 1.19 2004/11/22 02:28:21 mgrouch Exp $ */ + +#include <config.h> +#include "trans.h" +#include "xmlstar.h" + +/* + * This code is based on xsltproc by Daniel Veillard (daniel@veillard.com) + * (see also http://xmlsoft.org/) + */ + +int errorno = 0; + +/** + * Initialize global command line options + */ +void +xsltInitOptions(xsltOptionsPtr ops) +{ + ops->noval = 1; + ops->nonet = 1; + ops->omit_decl = 0; + ops->show_extensions = 0; + ops->noblanks = 0; + ops->embed = 0; +#ifdef LIBXML_XINCLUDE_ENABLED + ops->xinclude = 0; +#endif +#ifdef LIBXML_HTML_ENABLED + ops->html = 0; +#endif +#ifdef LIBXML_CATALOG_ENABLED + ops->catalogs = 0; +#endif +} + +/** + * Initialize LibXML + */ +void +xsltInitLibXml(xsltOptionsPtr ops) +{ + /* + * Initialize library memory + */ + xmlInitMemory(); + + LIBXML_TEST_VERSION + + /* + * Store line numbers in the document tree + */ + xmlLineNumbersDefault(1); + + /* + * Register the EXSLT extensions + */ + exsltRegisterAll(); + + /* + * Register the test module + */ + xsltRegisterTestModule(); + + if (ops->show_extensions) + { + xsltDebugDumpExtensions(stderr); + exit(EXIT_SUCCESS); + } + + xmlKeepBlanksDefault(1); + if (ops->noblanks) xmlKeepBlanksDefault(0); + xmlPedanticParserDefault(0); + + xmlGetWarningsDefaultValue = 1; + /*xmlDoValidityCheckingDefaultValue = 0;*/ + xmlLoadExtDtdDefaultValue = 1; + + /* + * DTD validation options + */ + if (ops->noval == 0) + { + xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS; + } + else + { + xmlLoadExtDtdDefaultValue = 0; + } + +#ifdef LIBXML_XINCLUDE_ENABLED + /* + * enable XInclude + */ + if (ops->xinclude) + xsltSetXIncludeDefault(1); +#endif + +#ifdef LIBXML_CATALOG_ENABLED + /* + * enable SGML catalogs + */ + if (ops->catalogs) + { + char *catalogs = getenv("SGML_CATALOG_FILES"); + if (catalogs == NULL) + fprintf(stderr, "Variable $SGML_CATALOG_FILES not set\n"); + else + xmlLoadCatalogs(catalogs); + } +#endif +} + +/* get result of XSL transformation */ +xmlDocPtr +xsltTransform(xsltOptionsPtr ops, xmlDocPtr doc, const char** params, + xsltStylesheetPtr cur, const char *filename) +{ + xsltTransformContextPtr ctxt; + xmlDocPtr res; + + if (ops->omit_decl) + { + cur->omitXmlDeclaration = 1; + } + +#ifdef LIBXML_XINCLUDE_ENABLED + if (ops->xinclude) xmlXIncludeProcess(doc); +#endif + + ctxt = xsltNewTransformContext(cur, doc); + if (ctxt == NULL) return NULL; + + res = xsltApplyStylesheetUser(cur, doc, params, NULL, NULL, ctxt); + + if (ctxt->state == XSLT_STATE_ERROR) + errorno = 9; + if (ctxt->state == XSLT_STATE_STOPPED) + errorno = 10; + xsltFreeTransformContext(ctxt); + xmlFreeDoc(doc); + if (res == NULL) + { + fprintf(stderr, "no result for %s\n", filename); + } + return res; +} + +/** + * Run stylesheet on XML document + */ +void +xsltProcess(xsltOptionsPtr ops, xmlDocPtr doc, const char** params, + xsltStylesheetPtr cur, const char *filename) +{ + xmlDocPtr res = xsltTransform(ops, doc, params, cur, filename); + + if (res && xsltSaveResultToFile(stdout, res, cur) < 0) + { + errorno = EXIT_LIB_ERROR; + } + + xmlFreeDoc(res); +} + +/** + * run XSLT on documents + */ +int xsltRun(xsltOptionsPtr ops, char* xsl, const char** params, + int count, char **docs) +{ + xsltStylesheetPtr cur = NULL; + xmlDocPtr doc, style; + int i, options = 0; + + options = XSLT_PARSE_OPTIONS; + + /* + * Compile XSLT Sylesheet + */ + style = xmlReadFile((const char *) xsl, NULL, options); + if (style == NULL) + { + fprintf(stderr, "cannot parse %s\n", xsl); + cur = NULL; + errorno = 4; + } + else + { + if (ops->embed) + { + cur = xsltLoadStylesheetPI(style); + if (cur != NULL) + { + /* it is an embedded stylesheet */ + xsltProcess(ops, style, params, cur, xsl); + xsltFreeStylesheet(cur); + cur = NULL; + } + for (i=0; i<count; i++) + { + style = xmlReadFile((const char *) docs[i], NULL, options); + if (style == NULL) + { + fprintf(stderr, "cannot parse %s\n", docs[i]); + cur = NULL; + goto done; + } + cur = xsltLoadStylesheetPI(style); + if (cur != NULL) + { + /* it is an embedded stylesheet */ + xsltProcess(ops, style, params, cur, docs[i]); + xsltFreeStylesheet(cur); + cur = NULL; + } + } + goto done; + } + + cur = xsltParseStylesheetDoc(style); + if (cur != NULL) + { + if (cur->errors != 0) + { + errorno = 5; + goto done; + } + if (cur->indent == 1) xmlIndentTreeOutput = 1; + else xmlIndentTreeOutput = 0; + } + else + { + xmlFreeDoc(style); + errorno = 5; + goto done; + } + } + + /* + * run XSLT + */ + if ((cur != NULL) && (cur->errors == 0)) + { + for (i=0; i<count; i++) + { + doc = NULL; +#ifdef LIBXML_HTML_ENABLED + if (ops->html) doc = htmlReadFile(docs[i], NULL, options); + else +#endif + { + doc = xmlReadFile((const char *) docs[i], NULL, options); + } + + if (doc == NULL) + { + fprintf(stderr, "unable to parse %s\n", docs[i]); + errorno = 6; + continue; + } + xsltProcess(ops, doc, params, cur, docs[i]); + } + + if (count == 0) + { + /* stdin */ + doc = NULL; +#ifdef LIBXML_HTML_ENABLED + if (ops->html) doc = htmlParseFile("-", NULL); + else +#endif + doc = xmlReadFile("-", NULL, options); + xsltProcess(ops, doc, params, cur, "-"); + } + } + +done: + + /* + * Clean up + */ + if (cur != NULL) xsltFreeStylesheet(cur); + + return(errorno); +} diff --git a/src/trans.h b/src/trans.h new file mode 100644 index 0000000..016304e --- /dev/null +++ b/src/trans.h @@ -0,0 +1,96 @@ +/* $Id: trans.h,v 1.11 2004/11/21 23:40:40 mgrouch Exp $ */ + +#ifndef __TRANS_H +#define __TRANS_H + +/* + +XMLStarlet: Command Line Toolkit to query/edit/check/transform XML documents + +Copyright (c) 2002-2004 Mikhail Grushinskiy. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ + +#include <libxml/xmlmemory.h> +#include <libxml/debugXML.h> +#include <libxml/xmlIO.h> +#include <libxml/HTMLtree.h> +#include <libxml/xinclude.h> +#include <libxml/parserInternals.h> +#include <libxml/uri.h> + +#include <libxslt/xslt.h> +#include <libxslt/xsltInternals.h> +#include <libxslt/transform.h> +#include <libxslt/xsltutils.h> +#include <libxslt/extensions.h> +#include <libexslt/exslt.h> + +#ifdef LIBXML_XINCLUDE_ENABLED +#include <libxml/xinclude.h> +#endif +#ifdef LIBXML_CATALOG_ENABLED +#include <libxml/catalog.h> +#endif + +#define MAX_PARAMETERS 256 +#define MAX_PATHS 256 + +typedef struct _xsltOptions { + int noval; /* do not validate against DTDs or schemas */ + int nonet; /* refuse to fetch DTDs or entities over network */ + int show_extensions; /* display list of extensions */ + int omit_decl; /* omit xml declaration */ + int noblanks; /* Remove insignificant spaces from XML tree */ + int embed; /* Allow applying embedded stylesheet */ +#ifdef LIBXML_XINCLUDE_ENABLED + int xinclude; /* do XInclude processing on input documents */ +#endif +#ifdef LIBXML_HTML_ENABLED + int html; /* inputs are in HTML format */ +#endif +#ifdef LIBXML_CATALOG_ENABLED + int catalogs; /* use SGML catalogs from $SGML_CATALOG_FILES */ +#endif +} xsltOptions; + +typedef xsltOptions *xsltOptionsPtr; + + +extern int errorno; + +void xsltInitOptions(xsltOptionsPtr ops); + +void xsltInitLibXml(xsltOptionsPtr ops); + +void xsltProcess(xsltOptionsPtr ops, xmlDocPtr doc, + const char **params, xsltStylesheetPtr cur, + const char *filename); + +xmlDocPtr xsltTransform(xsltOptionsPtr ops, xmlDocPtr doc, + const char **params, xsltStylesheetPtr cur, + const char *filename); + +int xsltRun(xsltOptionsPtr ops, char* xsl, + const char **params, + int count, char **docs); + +#endif /* __TRANS_H */ diff --git a/src/unescape-usage.txt b/src/unescape-usage.txt new file mode 100644 index 0000000..3fa6d81 --- /dev/null +++ b/src/unescape-usage.txt @@ -0,0 +1,7 @@ +XMLStarlet Toolkit: Unescape special XML characters +Usage: PROG unesc [<options>] [<string>] +where <options> are + --help - print usage + (TODO: more to be added in future) +if <string> is missing stdin is used instead. + diff --git a/src/usage.txt b/src/usage.txt new file mode 100644 index 0000000..5b28280 --- /dev/null +++ b/src/usage.txt @@ -0,0 +1,23 @@ +XMLStarlet Toolkit: Command line utilities for XML +Usage: PROG [<options>] <command> [<cmd-options>] +where <command> is one of: + ed (or edit) - Edit/Update XML document(s) + sel (or select) - Select data or query XML document(s) (XPATH, etc) + tr (or transform) - Transform XML document(s) using XSLT + val (or validate) - Validate XML document(s) (well-formed/DTD/XSD/RelaxNG) + fo (or format) - Format XML document(s) + el (or elements) - Display element structure of XML document + c14n (or canonic) - XML canonicalization + ls (or list) - List directory as XML + esc (or escape) - Escape special XML characters + unesc (or unescape) - Unescape special XML characters + pyx (or xmln) - Convert XML into PYX format (based on ESIS - ISO 8879) + p2x (or depyx) - Convert PYX into XML +<options> are: + --version - show version + --help - show help +Wherever file name mentioned in command help it is assumed +that URL can be used instead as well. + +Type: PROG <command> --help <ENTER> for command help + diff --git a/src/validate-usage.txt b/src/validate-usage.txt new file mode 100644 index 0000000..27e8d7d --- /dev/null +++ b/src/validate-usage.txt @@ -0,0 +1,23 @@ +XMLStarlet Toolkit: Validate XML document(s) +Usage: PROG val <options> [ <xml-file-or-uri> ... ] +where <options> + -w or --well-formed - validate well-formedness only (default) + -d or --dtd <dtd-file> - validate against DTD + --net - allow network access +#ifdef LIBXML_SCHEMAS_ENABLED + -s or --xsd <xsd-file> - validate against XSD schema + -E or --embed - validate using embedded DTD +#endif +#ifdef LIBXML_SCHEMAS_ENABLED + -r or --relaxng <rng-file> - validate against Relax-NG schema +#endif + -e or --err - print verbose error messages on stderr + -b or --list-bad - list only files which do not validate + -g or --list-good - list only files which validate + -q or --quiet - do not list files (return result code only) + +#ifdef LIBXML_SCHEMAS_ENABLED +NOTE: XML Schemas are not fully supported yet due to its incomplete + support in libxml2 (see http://xmlsoft.org) + +#endif diff --git a/src/xml.c b/src/xml.c new file mode 100644 index 0000000..0feda16 --- /dev/null +++ b/src/xml.c @@ -0,0 +1,353 @@ +/* $Id: xml.c,v 1.37 2004/11/11 03:39:34 mgrouch Exp $ */ + +/* + +XMLStarlet: Command Line Toolkit to query/edit/check/transform XML documents + +Copyright (c) 2002 Mikhail Grushinskiy. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ + +#include <config.h> +#include <version.h> + +#include <assert.h> +#include <string.h> +#include <stdio.h> +#include <stdlib.h> + +#include <libxslt/xslt.h> +#include <libxslt/xsltconfig.h> + +#include "xmlstar.h" + +static const xmlChar* XMLSTAR_NS = BAD_CAST "http://xmlstar.sourceforge.net"; +static const xmlChar* XMLSTAR_NS_PREFIX = BAD_CAST "xstar"; + +extern int edMain(int argc, char **argv); +extern int selMain(int argc, char **argv); +extern int trMain(int argc, char **argv); +extern int valMain(int argc, char **argv); +extern int foMain(int argc, char **argv); +extern int elMain(int argc, char **argv); +extern int c14nMain(int argc, char **argv); +extern int lsMain(int argc, char **argv); +extern int pyxMain(int argc, char **argv); +extern int depyxMain(int argc, char **argv); +extern int escMain(int argc, char **argv, int escape); + +const char more_info[] = +"XMLStarlet is a command line toolkit to query/edit/check/transform\n" +"XML documents (for more information see http://xmlstar.sourceforge.net/)\n"; + +const char libxslt_more_info[] = +"\n" +"Current implementation uses libxslt from GNOME codebase as XSLT processor\n" +"(see http://xmlsoft.org/ for more details)\n"; + +/** + * Display usage syntax + */ +void +usage(int argc, char **argv, exit_status status) +{ + extern void fprint_usage(FILE* o, const char* argv0); + FILE* o = (status == EXIT_SUCCESS)? stdout : stderr; + fprint_usage(o, argv[0]); + fprintf(o, "%s", more_info); + exit(status); +} + +/** + * Error reporting function + */ +void reportError(void *ptr, xmlErrorPtr error) +{ + ErrorInfo *errorInfo = (ErrorInfo*) ptr; + assert(errorInfo); + + if (errorInfo->verbose) + { + int msglen; + int domain = error->domain; + const char *filename = + error->file? error->file : + errorInfo? errorInfo->filename : + NULL; + xmlTextReaderPtr reader = errorInfo->xmlReader; + + int line = (!filename)? 0 : + (reader)? xmlTextReaderGetParserLineNumber(reader) : + error->line; + int column = (!filename)? 0 : + (reader)? xmlTextReaderGetParserColumnNumber(reader) : + error->int2; + if (line) + { + fprintf(stderr, "%s:%d.%d: ", filename, line, column); + } + + msglen = strlen(error->message); + if (error->message[msglen-1] == '\n') + error->message[msglen-1] = '\0'; + fprintf(stderr, "%s", error->message); + + /* only print extra info if it's not in message */ + if (error->str1 && strstr(error->message, error->str1) == NULL) { + fprintf(stderr, ": %s", error->str1); + if (error->str2 && strstr(error->message, error->str2) == NULL) { + fprintf(stderr, ", %s", error->str2); + } + if (error->str3 && strstr(error->message, error->str3) == NULL) { + fprintf(stderr, ", %s", error->str3); + } + } + fprintf(stderr, "\n"); + + + if ((domain == XML_FROM_PARSER) || (domain == XML_FROM_HTML) || + (domain == XML_FROM_DTD) || (domain == XML_FROM_NAMESPACE) || + (domain == XML_FROM_IO) || (domain == XML_FROM_VALID)) { + xmlParserCtxtPtr ctxt = error->ctxt; + if (ctxt) xmlParserPrintFileContext(ctxt->input); + } + } +} + +#define CHECK_MEM(ret) if (!ret) \ + (fprintf(stderr, "out of memory\n"), exit(EXIT_INTERNAL_ERROR)) + +void* +xmalloc(size_t size) +{ + void *ret = malloc(size); + CHECK_MEM(ret); + return ret; +} +void* +xrealloc(void *ptr, size_t size) +{ + void *ret = realloc(ptr, size); + CHECK_MEM(ret); + return ret; +} +char* +xstrdup(const char *str) +{ + char *ret = (char*) xmlStrdup(BAD_CAST str); + CHECK_MEM(ret); + return ret; +} + +/** + * This is the main function + */ +int +main(int argc, char **argv) +{ + int ret = 0; + /* by default errors are reported */ + static ErrorInfo errorInfo = { NULL, NULL, VERBOSE }; + + xmlMemSetup(free, xmalloc, xrealloc, xstrdup); + xmlSetStructuredErrorFunc(&errorInfo, reportError); + + if (argc <= 1) + { + usage(argc, argv, EXIT_BAD_ARGS); + } + else if (!strcmp(argv[1], "ed") || !strcmp(argv[1], "edit")) + { + ret = edMain(argc, argv); + } + else if (!strcmp(argv[1], "sel") || !strcmp(argv[1], "select")) + { + ret = selMain(argc, argv); + } + else if (!strcmp(argv[1], "tr") || !strcmp(argv[1], "transform")) + { + ret = trMain(argc, argv); + } + else if (!strcmp(argv[1], "fo") || !strcmp(argv[1], "format")) + { + ret = foMain(argc, argv); + } + else if (!strcmp(argv[1], "val") || !strcmp(argv[1], "validate")) + { + ret = valMain(argc, argv); + } + else if (!strcmp(argv[1], "el") || !strcmp(argv[1], "elements")) + { + ret = elMain(argc, argv); + } + else if (!strcmp(argv[1], "c14n") || !strcmp(argv[1], "canonic")) + { + ret = c14nMain(argc, argv); + } + else if (!strcmp(argv[1], "ls") || !strcmp(argv[1], "list")) + { + ret = lsMain(argc, argv); + } + else if (!strcmp(argv[1], "pyx") || !strcmp(argv[1], "xmln")) + { + ret = pyxMain(argc, argv); + } + else if (!strcmp(argv[1], "depyx") || !strcmp(argv[1], "p2x")) + { + ret = depyxMain(argc, argv); + } + else if (!strcmp(argv[1], "esc") || !strcmp(argv[1], "escape")) + { + ret = escMain(argc, argv, 1); + } + else if (!strcmp(argv[1], "unesc") || !strcmp(argv[1], "unescape")) + { + ret = escMain(argc, argv, 0); + } + else if (!strcmp(argv[1], "--version")) + { + fprintf(stdout, "%s\n" + "compiled against libxml2 %s, linked with %s\n" + "compiled against libxslt %s, linked with %s\n", + VERSION, + LIBXML_DOTTED_VERSION, xmlParserVersion, + LIBXSLT_DOTTED_VERSION, xsltEngineVersion); + ret = EXIT_SUCCESS; + } + else + { + usage(argc, argv, strcmp(argv[1], "--help") == 0? + EXIT_SUCCESS : EXIT_BAD_ARGS); + } + + exit(ret); +} + + +void +registerXstarVariable(xmlXPathContextPtr ctxt, + const char* name, xmlXPathObjectPtr value) +{ + xmlXPathRegisterVariableNS(ctxt, BAD_CAST name, XMLSTAR_NS, value); +} + +static xmlXPathObjectPtr varLookupFallbackToXstarNS(void* ctxt_vp, + const xmlChar* name, const xmlChar* ns_uri) +{ + xmlXPathObjectPtr ret; + xmlXPathContextPtr ctxt = ctxt_vp; + + ctxt->varLookupFunc = NULL; /* avoid infinite recursion! */ + + /* first get the default lookup value */ + ret = xmlXPathVariableLookupNS(ctxt, name, ns_uri); + + if (!ret && !ns_uri) { + /* if we didn't find anything, and there was no namespace given, + try looking in XMLStarlet namespace */ + ret = xmlXPathVariableLookupNS(ctxt, name, XMLSTAR_NS); + } + + ctxt->varLookupFunc = &varLookupFallbackToXstarNS; + return ret; +} + +void +registerXstarNs(xmlXPathContextPtr ctxt) +{ + xmlXPathRegisterVariableLookup(ctxt, &varLookupFallbackToXstarNS, ctxt); + xmlXPathRegisterNs(ctxt, XMLSTAR_NS_PREFIX, XMLSTAR_NS); +} + + +static void bad_ns_opt(const char *msg) +{ + fprintf(stderr, "Bad namespace option: %s\n", msg); + exit(EXIT_BAD_ARGS); +} + +#define MAX_NS_ARGS 256 +xmlChar *ns_arr[2 * MAX_NS_ARGS + 1]; + +/** + * Parse command line for -N <prefix>=<namespace> arguments + */ +int +parseNSArr(xmlChar** ns_arr, int* plen, int argc, char **argv) +{ + int i = 0; + *plen = 0; + ns_arr[0] = 0; + + for (i=0; i<argc; i++) + { + int prefix_len; + xmlChar *name, *value; + const xmlChar *equal_sign; + + /* check for end of arguments */ + if (argv[i] == 0 || argv[i][0] != '-') + break; + if (strcmp(argv[i], "-N") != 0) + continue; + + i++; + if (i >= argc) bad_ns_opt("-N without argument"); + + equal_sign = xmlStrchr((const xmlChar*) argv[i], '='); + if (!equal_sign) + bad_ns_opt("namespace should have the form <prefix>=<url>"); + prefix_len = equal_sign - (const xmlChar*) argv[i]; + + name = xmlStrndup((const xmlChar*) argv[i], prefix_len); + value = xmlStrdup((const xmlChar*) argv[i]+prefix_len+1); + + if (*plen >= MAX_NS_ARGS) + { + fprintf(stderr, "too many namespaces increase MAX_NS_ARGS\n"); + exit(EXIT_BAD_ARGS); + } + + ns_arr[*plen] = name; + (*plen)++; + ns_arr[*plen] = value; + (*plen)++; + ns_arr[*plen] = 0; + + } + + return i; +} + +/** + * Cleanup memory allocated by namespaces arguments + */ +void +cleanupNSArr(xmlChar **ns_arr) +{ + xmlChar **p = ns_arr; + + while (*p) + { + xmlFree(*p); + p++; + } +} diff --git a/src/xml_C14N.c b/src/xml_C14N.c new file mode 100644 index 0000000..4a0becc --- /dev/null +++ b/src/xml_C14N.c @@ -0,0 +1,359 @@ +/* + * $Id: xml_C14N.c,v 1.12 2004/11/24 03:00:10 mgrouch Exp $ + * + * Canonical XML implementation test program + * (http://www.w3.org/TR/2001/REC-xml-c14n-20010315) + * + * See Copyright for the status of this software. + * + * Author: Aleksey Sanin <aleksey@aleksey.com> + */ + +#include <libxml/xmlversion.h> +#include <config.h> + +#if defined(LIBXML_C14N_ENABLED) + +#include <stdio.h> +#include <string.h> +#ifdef HAVE_STDLIB_H +#include <stdlib.h> +#endif + +#include <libxml/xmlmemory.h> +#include <libxml/parser.h> +#include <libxml/xpath.h> +#include <libxml/xpathInternals.h> + +#include <libxml/c14n.h> + +#include "xmlstar.h" + +static void c14nUsage(const char *name, exit_status status) +{ + extern void fprint_c14n_usage(FILE* o, const char* argv0); + extern const char more_info[]; + FILE *o = (status == EXIT_SUCCESS)? stdout : stderr; + fprint_c14n_usage(o, name); + fprintf(o, "%s", more_info); + exit(status); +} + +static xmlXPathObjectPtr +load_xpath_expr (xmlDocPtr parent_doc, const char* filename); + +static xmlChar **parse_list(xmlChar *str); + +#if 0 +static void print_xpath_nodes(xmlNodeSetPtr nodes); +#endif + +static int +run_c14n(const char* xml_filename, int with_comments, int exclusive, + const char* xpath_filename, xmlChar **inclusive_namespaces, + int nonet) { + xmlDocPtr doc; + xmlXPathObjectPtr xpath = NULL; + int ret; + + /* + * build an XML tree from a the file; we need to add default + * attributes and resolve all character and entities references + */ + + doc = xmlReadFile(xml_filename, NULL, + XML_PARSE_NOENT | XML_PARSE_DTDLOAD | + XML_PARSE_DTDATTR | (nonet? XML_PARSE_NONET:0)); + if (doc == NULL) { + fprintf(stderr, "Error: unable to parse file \"%s\"\n", xml_filename); + return(EXIT_BAD_FILE); + } + + /* + * Check the document is of the right kind + */ + if(xmlDocGetRootElement(doc) == NULL) { + fprintf(stderr,"Error: empty document for file \"%s\"\n", xml_filename); + xmlFreeDoc(doc); + return(EXIT_BAD_FILE); + } + + /* + * load xpath file if specified + */ + if(xpath_filename) { + xpath = load_xpath_expr(doc, xpath_filename); + if(xpath == NULL) { + fprintf(stderr,"Error: unable to evaluate xpath expression\n"); + xmlFreeDoc(doc); + return(EXIT_BAD_FILE); + } + } + + /* + * Canonical form + */ + set_stdout_binary(); /* avoid line ending conversion */ + ret = xmlC14NDocSave(doc, + (xpath) ? xpath->nodesetval : NULL, + exclusive, inclusive_namespaces, + with_comments, "-", 0); + if(ret < 0) { + fprintf(stderr,"Error: failed to canonicalize XML file \"%s\" (ret=%d)\n", + xml_filename, ret); + xmlFreeDoc(doc); + return(EXIT_FAILURE); + } + + /* + * Cleanup + */ + if(xpath != NULL) xmlXPathFreeObject(xpath); + xmlFreeDoc(doc); + + return(ret >= 0? EXIT_SUCCESS : EXIT_FAILURE); +} + +int c14nMain(int argc, char **argv) { + int ret = -1, nonet = 1; + + /* + * Init libxml + */ + xmlInitParser(); + LIBXML_TEST_VERSION + + /* + * Parse command line and process file + */ + + if (argc > 2 && strcmp(argv[2], "--net") == 0) { + nonet = 0; + /* TODO: parse options properly */ + argc--; + argv++; + } + + if (argc < 4) { + if (argc >= 3) + { + if (strcmp(argv[2], "--help") == 0 || strcmp(argv[2], "-h") == 0) + c14nUsage(argv[0], EXIT_SUCCESS); + } + ret = run_c14n((argc > 2)? argv[2] : "-", 1, 0, NULL, NULL, nonet); + } else if(strcmp(argv[2], "--with-comments") == 0) { + ret = run_c14n(argv[3], 1, 0, (argc > 4) ? argv[4] : NULL, NULL, nonet); + } else if(strcmp(argv[2], "--without-comments") == 0) { + ret = run_c14n(argv[3], 0, 0, (argc > 4) ? argv[4] : NULL, NULL, nonet); + } else if(strcmp(argv[2], "--exc-with-comments") == 0) { + xmlChar **list; + + /* load exclusive namespace from command line */ + list = (argc > 5) ? parse_list((xmlChar *)argv[5]) : NULL; + ret = run_c14n(argv[3], 1, 1, (argc > 4) ? argv[4] : NULL, list, nonet); + if(list != NULL) xmlFree(list); + } else if(strcmp(argv[2], "--exc-without-comments") == 0) { + xmlChar **list; + + /* load exclusive namespace from command line */ + list = (argc > 5) ? parse_list((xmlChar *)argv[5]) : NULL; + ret = run_c14n(argv[3], 0, 1, (argc > 4) ? argv[4] : NULL, list, nonet); + if(list != NULL) xmlFree(list); + } else { + fprintf(stderr, "error: bad arguments.\n"); + c14nUsage(argv[0], EXIT_BAD_ARGS); + } + + /* + * Shutdown libxml + */ + xmlCleanupParser(); + xmlMemoryDump(); + + return ret; +} + +/* + * Macro used to grow the current buffer. + */ +#define growBufferReentrant() { \ + buffer_size *= 2; \ + buffer = (xmlChar **) \ + xmlRealloc(buffer, buffer_size * sizeof(xmlChar*)); \ + if (buffer == NULL) { \ + perror("realloc failed"); \ + return(NULL); \ + } \ +} + +static xmlChar ** +parse_list(xmlChar *str) { + xmlChar **buffer; + xmlChar **out = NULL; + int buffer_size = 0; + int len; + + if(str == NULL) { + return(NULL); + } + + len = xmlStrlen(str); + if((str[0] == '\'') && (str[len - 1] == '\'')) { + str[len - 1] = '\0'; + str++; + len -= 2; + } + /* + * allocate an translation buffer. + */ + buffer_size = 1000; + buffer = xmlMalloc(buffer_size * sizeof(xmlChar*)); + out = buffer; + + while(*str != '\0') { + if (out - buffer > buffer_size - 10) { + int indx = out - buffer; + + growBufferReentrant(); + out = &buffer[indx]; + } + (*out++) = str; + while(*str != ',' && *str != '\0') ++str; + if(*str == ',') *(str++) = '\0'; + } + (*out) = NULL; + return buffer; +} + +static xmlXPathObjectPtr +load_xpath_expr (xmlDocPtr parent_doc, const char* filename) { + xmlXPathObjectPtr xpath; + xmlDocPtr doc; + xmlChar *expr; + xmlXPathContextPtr ctx; + xmlNodePtr node; + xmlNsPtr ns; + + /* + * load XPath expr as a file + */ + xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS; + xmlSubstituteEntitiesDefault(1); + + doc = xmlReadFile(filename, NULL, XML_PARSE_DTDLOAD | XML_PARSE_DTDATTR); + if (doc == NULL) { + fprintf(stderr, "Error: unable to parse file \"%s\"\n", filename); + return(NULL); + } + + /* + * Check the document is of the right kind + */ + if(xmlDocGetRootElement(doc) == NULL) { + fprintf(stderr,"Error: empty document for file \"%s\"\n", filename); + xmlFreeDoc(doc); + return(NULL); + } + + node = doc->children; + while(node != NULL && !xmlStrEqual(node->name, (const xmlChar *)"XPath")) { + node = node->next; + } + + if(node == NULL) { + fprintf(stderr,"Error: XPath element expected in the file \"%s\"\n", filename); + xmlFreeDoc(doc); + return(NULL); + } + + expr = xmlNodeGetContent(node); + if(expr == NULL) { + fprintf(stderr,"Error: XPath content element is NULL \"%s\"\n", filename); + xmlFreeDoc(doc); + return(NULL); + } + + ctx = xmlXPathNewContext(parent_doc); + if(ctx == NULL) { + fprintf(stderr,"Error: unable to create new context\n"); + xmlFree(expr); + xmlFreeDoc(doc); + return(NULL); + } + + /* + * Register namespaces + */ + ns = node->nsDef; + while(ns != NULL) { + if(xmlXPathRegisterNs(ctx, ns->prefix, ns->href) != 0) { + fprintf(stderr,"Error: unable to register NS with prefix=\"%s\" and href=\"%s\"\n", ns->prefix, ns->href); + xmlFree(expr); + xmlXPathFreeContext(ctx); + xmlFreeDoc(doc); + return(NULL); + } + ns = ns->next; + } + + /* + * Evaluate xpath + */ + xpath = xmlXPathEvalExpression(expr, ctx); + if(xpath == NULL) { + fprintf(stderr,"Error: unable to evaluate xpath expression\n"); + xmlFree(expr); + xmlXPathFreeContext(ctx); + xmlFreeDoc(doc); + return(NULL); + } + + /* print_xpath_nodes(xpath->nodesetval); */ + + xmlFree(expr); + xmlXPathFreeContext(ctx); + xmlFreeDoc(doc); + return(xpath); +} + +#if 0 +static void +print_xpath_nodes(xmlNodeSetPtr nodes) { + xmlNodePtr cur; + int i; + + if(nodes == NULL ){ + fprintf(stderr, "Error: no nodes set defined\n"); + return; + } + + fprintf(stderr, "Nodes Set:\n-----\n"); + for(i = 0; i < nodes->nodeNr; ++i) { + if(nodes->nodeTab[i]->type == XML_NAMESPACE_DECL) { + xmlNsPtr ns; + + ns = (xmlNsPtr)nodes->nodeTab[i]; + cur = (xmlNodePtr)ns->next; + fprintf(stderr, "namespace \"%s\"=\"%s\" for node %s:%s\n", + ns->prefix, ns->href, + (cur->ns) ? cur->ns->prefix : BAD_CAST "", cur->name); + } else if(nodes->nodeTab[i]->type == XML_ELEMENT_NODE) { + cur = nodes->nodeTab[i]; + fprintf(stderr, "element node \"%s:%s\"\n", + (cur->ns) ? cur->ns->prefix : BAD_CAST "", cur->name); + } else { + cur = nodes->nodeTab[i]; + fprintf(stderr, "node \"%s\": type %d\n", cur->name, cur->type); + } + } +} +#endif + +#else +#include <stdio.h> +int c14nMain(int argc, char **argv) { + printf("%s : XPath/Canonicalization support not compiled in\n", argv[0]); + return 2; +} +#endif /* LIBXML_C14N_ENABLED */ + diff --git a/src/xml_depyx.c b/src/xml_depyx.c new file mode 100644 index 0000000..1935fc0 --- /dev/null +++ b/src/xml_depyx.c @@ -0,0 +1,242 @@ +/* $Id: xml_depyx.c,v 1.8 2005/03/12 03:24:23 mgrouch Exp $ */ + +/* + +XMLStarlet: Command Line Toolkit to query/edit/check/transform XML documents + +Copyright (c) 2002 Mikhail Grushinskiy. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ + +#include <string.h> +#include <stdio.h> +#include <stdlib.h> + +#include <libxml/xmlmemory.h> + +#include "xmlstar.h" +#include "escape.h" + +#define INSZ 4*1024 + +static void +depyxUsage(int argc, char **argv, exit_status status) +{ + extern void fprint_depyx_usage(FILE* o, const char* argv0); + extern const char more_info[]; + FILE *o = (status == EXIT_SUCCESS)? stdout : stderr; + fprint_depyx_usage(o, argv[0]); + fprintf(o, "%s", more_info); + exit(status); +} + +/** + * Decode PYX string + * + */ +void +pyxDecode(char *str, xml_C14NNormalizationMode mode) +{ + while (*str) + { + if ((*str == '\\') && (*(str+1) == 'n')) + { + printf("\n"); + str++; + } + else if ((*str == '\\') && (*(str+1) == 't')) + { + printf("\t"); + str++; + } + else if ((*str == '\\') && (*(str+1) == '\\')) + { + printf("\\"); + str++; + } + else + { + if ((*str == '<') && ((mode == XML_C14N_NORMALIZE_ATTR) || + (mode == XML_C14N_NORMALIZE_TEXT))) { + printf("<"); + } + else if ((*str == '>') && (mode == XML_C14N_NORMALIZE_TEXT)) { + printf(">"); + } + else if ((*str == '&') && ((mode == XML_C14N_NORMALIZE_ATTR) || + (mode == XML_C14N_NORMALIZE_TEXT))) { + printf("&"); + } + else if ((*str == '"') && (mode == XML_C14N_NORMALIZE_ATTR)) { + printf("""); + } + else { + printf("%c", *str); + } + } + str++; + } +} + +/** + * Decode PYX file + * + */ +int +pyxDePyx(char *file) +{ + static char line[INSZ]; + FILE *in = stdin; + + if (strcmp(file, "-")) + { + in = fopen(file, "r"); + if (in == NULL) + { + fprintf(stderr, "error: could not open: %s\n", file); + exit(EXIT_BAD_FILE); + } + } + + while (!feof(in)) + { + if (fgets(line, INSZ - 1, in)) + { + if(line[strlen(line)-1] == '\n') line[strlen(line)-1] = '\0'; + + while (line[0] == '(') + { + printf("<%s", line+1); + if (!feof(in)) + { + if (fgets(line, INSZ - 1, in)) + { + if(line[strlen(line)-1] == '\n') line[strlen(line)-1] = '\0'; + + while(line[0] == 'A') /* attribute */ + { + char *value; + + printf(" "); + value = line+1; + while(*value && (*value != ' ')) + { + printf("%c", *value); + value++; + } + if (*value == ' ') + { + value++; + printf("=\""); + pyxDecode(value, XML_C14N_NORMALIZE_ATTR); /* attribute value */ + printf("\""); + } + if (!feof(in)) + { + if (fgets(line, INSZ - 1, in)) + { + if(line[strlen(line)-1] == '\n') line[strlen(line)-1] = '\0'; + } + } + } + printf(">"); + } + } + } + + if (line[0] == '-') + { + /* text */ + pyxDecode(line+1, XML_C14N_NORMALIZE_TEXT); + } + else if (line[0] == '?') + { + /* processing instruction */ + printf("<?"); + pyxDecode(line+1, XML_C14N_NORMALIZE_TEXT); + printf("?>"); + printf("\n"); /* is this correct? */ + } + else if (line[0] == 'D') + { + /* processing instruction */ + printf("<!DOCTYPE"); + pyxDecode(line+1, XML_C14N_NORMALIZE_TEXT); + printf(">"); + printf("\n"); /* is this correct? */ + } + else if (line[0] == 'C') + { + /* comment */ + printf("<!--"); + pyxDecode(line+1, XML_C14N_NORMALIZE_TEXT); + printf("-->"); + printf("\n"); /* is this correct? */ + } + else if (line[0] == '[') + { + /* CDATA */ + printf("<![CDATA["); + pyxDecode(line+1, XML_C14N_NORMALIZE_NOTHING); + printf("]]>"); + printf("\n"); /* is this correct? */ + } + else if (line[0] == ')') + { + printf("</%s>", line+1); + } + } + } + + return EXIT_SUCCESS; +} + +/** + * Main function for 'de-PYX' + * + */ +int +depyxMain(int argc, char **argv) +{ + int ret = EXIT_SUCCESS; + + if ((argc >= 3) && (!strcmp(argv[2], "-h") || !strcmp(argv[2], "--help"))) + { + depyxUsage(argc, argv, EXIT_SUCCESS); + } + else if (argc == 3) + { + ret = pyxDePyx(argv[2]); + } + else if (argc == 2) + { + ret = pyxDePyx("-"); + } + else + { + depyxUsage(argc, argv, EXIT_BAD_ARGS); + } + + printf("\n"); + + return ret; +} + diff --git a/src/xml_edit.c b/src/xml_edit.c new file mode 100644 index 0000000..d564f3c --- /dev/null +++ b/src/xml_edit.c @@ -0,0 +1,742 @@ +/* $Id: xml_edit.c,v 1.45 2005/01/08 00:07:03 mgrouch Exp $ */ + +/* + +XMLStarlet: Command Line Toolkit to query/edit/check/transform XML documents + +Copyright (c) 2002 Mikhail Grushinskiy. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ + +#include <config.h> + +#include <string.h> +#include <stdio.h> +#include <stdlib.h> + +#include <libxml/xmlmemory.h> +#include <libxml/debugXML.h> +#include <libxml/xmlsave.h> +#include <libxml/HTMLtree.h> +#include <libxml/xinclude.h> +#include <libxml/xpath.h> +#include <libxml/xpathInternals.h> +#include <libxml/xpointer.h> +#include <libxml/parserInternals.h> +#include <libxml/uri.h> +#include <libexslt/exslt.h> + +#include "xmlstar.h" + +/* + TODO: + 1. Should this be allowed ? + ./xml ed -m /xml /xml/table/rec/object ../examples/xml/tab-obj.xml +*/ + +typedef struct _edOptions { /* Global 'edit' options */ + int noblanks; /* Remove insignificant spaces from XML tree */ + int preserveFormat; /* Preserve original XML formatting */ + int omit_decl; /* Omit XML declaration line <?xml version="1.0"?> */ + int inplace; /* Edit file inplace (no output on stdout) */ + int nonet; /* Disallow network access */ +} edOptions; + +typedef edOptions *edOptionsPtr; + +typedef enum _XmlEdOp { + XML_ED_DELETE, + XML_ED_VAR, + XML_ED_INSERT, + XML_ED_APPEND, + XML_ED_UPDATE, + XML_ED_RENAME, + XML_ED_MOVE, + XML_ED_SUBNODE +} XmlEdOp; + +/* TODO ??? */ +typedef enum _XmlNodeType { + XML_UNDEFINED, + XML_ATTR, + XML_ELEM, + XML_TEXT, + XML_COMT, + XML_CDATA, + XML_EXPR +} XmlNodeType; + +typedef struct { + char shortOpt; + const char* longOpt; /* include "--" */ + XmlNodeType type; +} OptionSpec; + +static const OptionSpec + OPT_VAL_OR_EXP[] = { + {'x', "--expr", XML_EXPR}, + {'v', "--value", XML_TEXT} + }, + OPT_JUST_VAL[] = { + {'v', "--value", XML_TEXT} + }, + OPT_JUST_TYPE[] = { + {'t', "--type"} + }, + OPT_NODE_TYPE[] = { + {0, "elem", XML_ELEM}, + {0, "attr", XML_ATTR}, + {0, "text", XML_TEXT} + }, + OPT_JUST_NAME[] = { + {'n', "--name"} + }; + + +typedef const char* XmlEdArg; + +typedef struct _XmlEdAction { + XmlEdOp op; + XmlEdArg arg1; + XmlEdArg arg2; + XmlEdArg arg3; + XmlNodeType type; +} XmlEdAction; + +/** + * display short help message + */ +static void +edUsage(const char *argv0, exit_status status) +{ + extern void fprint_edit_usage(FILE* o, const char* argv0); + extern const char more_info[]; + FILE *o = (status == EXIT_SUCCESS)? stdout : stderr; + fprint_edit_usage(o, argv0); + fprintf(o, "%s", more_info); + exit(status); +} + +/** + * Initialize global command line options + */ +static void +edInitOptions(edOptionsPtr ops) +{ + ops->noblanks = 1; + ops->omit_decl = 0; + ops->preserveFormat = 0; + ops->inplace = 0; + ops->nonet = 1; +} + +/** + * Parse global command line options + */ +static int +edParseOptions(edOptionsPtr ops, int argc, char **argv) +{ + int i; + + i = 2; + while((i < argc) && (argv[i][0] == '-')) + { + if (!strcmp(argv[i], "-S") || !strcmp(argv[i], "--ps")) + { + ops->noblanks = 0; /* preserve spaces */ + } + else if (!strcmp(argv[i], "-P") || !strcmp(argv[i], "--pf")) + { + ops->preserveFormat = 1; /* preserve format */ + } + else if (!strcmp(argv[i], "-O") || !strcmp(argv[i], "--omit-decl")) + { + ops->omit_decl = 1; + } + else if (!strcmp(argv[i], "-L") || !strcmp(argv[i], "--inplace")) + { + ops->inplace = 1; + } + else if (!strcmp(argv[i], "--net")) + { + ops->nonet = 0; + } + else if (!strcmp(argv[i], "--help") || !strcmp(argv[i], "-h") || + !strcmp(argv[i], "-?") || !strcmp(argv[i], "-Z")) + { + edUsage(argv[0], EXIT_SUCCESS); + } + else + { + break; + } + i++; + } + + return i; +} + +/** + * register the namespace from @ns_arr to @ctxt + */ +static void +nsarr_xpath_register(xmlXPathContextPtr ctxt) +{ + int ns; + for (ns = 0; ns_arr[ns]; ns += 2) { + xmlXPathRegisterNs(ctxt, ns_arr[ns], ns_arr[ns+1]); + } +} + +/** + * register top-level namespace definitions from @doc to @ctxt + */ +static void +extract_ns_defs(xmlDocPtr doc, xmlXPathContextPtr ctxt) +{ + xmlNsPtr nsDef; + xmlNodePtr root = xmlDocGetRootElement(doc); + if (!root) return; + + for (nsDef = root->nsDef; nsDef; nsDef = nsDef->next) { + if (nsDef->prefix != NULL) /* can only register ns with prefix */ + xmlXPathRegisterNs(ctxt, nsDef->prefix, nsDef->href); + } +} + +static void +update_string(xmlDocPtr doc, xmlNodePtr dest, const xmlChar* newstr) +{ + /* TODO: do we need xmlEncodeEntitiesReentrant() too/instead? */ + xmlChar* string = xmlEncodeSpecialChars(doc, newstr); + xmlNodeSetContent(dest, string); + xmlFree(string); +} + +/** + * 'update' operation + */ +static void +edUpdate(xmlDocPtr doc, xmlNodeSetPtr nodes, const char *val, + XmlNodeType type, xmlXPathContextPtr ctxt) +{ + int i; + xmlXPathCompExprPtr xpath = NULL; + + if (type == XML_EXPR) { + xpath = xmlXPathCompile((const xmlChar*) val); + if (!xpath) return; + } + + for (i = 0; i < nodes->nodeNr; i++) + { + /* update node */ + if (type == XML_EXPR) { + xmlXPathObjectPtr res; + + ctxt->node = nodes->nodeTab[i]; + res = xmlXPathCompiledEval(xpath, ctxt); + if (res->type == XPATH_NODESET || res->type == XPATH_XSLT_TREE) { + int j; + xmlNodePtr oldChild; + xmlNodeSetPtr oldChildren = xmlXPathNodeSetCreate(NULL); + /* NOTE: newChildren can be NULL for empty result set */ + xmlNodeSetPtr newChildren = res->nodesetval; + + /* NOTE: nodes can be both oldChildren and newChildren */ + + /* unlink the old children */ + for (oldChild = nodes->nodeTab[i]->children; oldChild; oldChild = oldChild->next) { + xmlUnlinkNode(oldChild); + /* we can't free it now because an oldChild can also be + newChild! just put it in the list */ + xmlXPathNodeSetAdd(oldChildren, oldChild); + } + + /* add the new children */ + for (j = 0; newChildren && j < newChildren->nodeNr; j++) { + xmlNodePtr node = newChildren->nodeTab[j]; + xmlAddChild(nodes->nodeTab[i], + /* if node is linked to this doc we need to copy */ + (node->doc == doc)? xmlDocCopyNode(node, doc, 1) : node); + newChildren->nodeTab[j] = NULL; + } + newChildren->nodeNr = 0; + + /* NOTE: if any oldChildren were newChildren, they've been + copied so we can free them all now */ + for (j = 0; j < oldChildren->nodeNr; j++) { + xmlFreeNode(oldChildren->nodeTab[j]); + oldChildren->nodeTab[j] = NULL; + } + oldChildren->nodeNr = 0; + xmlXPathFreeNodeSet(oldChildren); + } else { + res = xmlXPathConvertString(res); + update_string(doc, nodes->nodeTab[i], res->stringval); + } + xmlXPathFreeObject(res); + } else { + update_string(doc, nodes->nodeTab[i], (const xmlChar*) val); + } + } + + xmlXPathFreeCompExpr(xpath); +} + +/* holds the node that was last inserted */ +static xmlNodeSetPtr previous_insertion; + +/** + * We must not keep free'd nodes in @previous_insertion. + * This is a callback from xmlFreeNode() + */ +static void +removeNodeFromPrev(xmlNodePtr node) +{ + xmlXPathNodeSetDel(previous_insertion, node); +} + +/** + * 'insert' operation + */ +static void +edInsert(xmlDocPtr doc, xmlNodeSetPtr nodes, const char *val, const char *name, + XmlNodeType type, int mode) +{ + int i; + + xmlXPathEmptyNodeSet(previous_insertion); + + for (i = 0; i < nodes->nodeNr; i++) + { + xmlNodePtr node; + + if (nodes->nodeTab[i] == (void*) doc && mode != 0) { + fprintf(stderr, "The document node cannot have siblings.\n"); + exit(EXIT_INTERNAL_ERROR); + } + + /* update node */ + if (type == XML_ATTR) + { + node = (xmlNodePtr) xmlNewProp(nodes->nodeTab[i], BAD_CAST name, BAD_CAST val); + } + else if (type == XML_ELEM) + { + node = xmlNewDocNode(doc, NULL /* TODO: NS */, BAD_CAST name, BAD_CAST val); + if (mode > 0) + xmlAddNextSibling(nodes->nodeTab[i], node); + else if (mode < 0) + xmlAddPrevSibling(nodes->nodeTab[i], node); + else + xmlAddChild(nodes->nodeTab[i], node); + } + else if (type == XML_TEXT) + { + node = xmlNewDocText(doc, BAD_CAST val); + if (mode > 0) + xmlAddNextSibling(nodes->nodeTab[i], node); + else if (mode < 0) + xmlAddPrevSibling(nodes->nodeTab[i], node); + else + xmlAddChild(nodes->nodeTab[i], node); + } + xmlXPathNodeSetAdd(previous_insertion, node); + } +} + +/** + * 'rename' operation + */ +static void +edRename(xmlDocPtr doc, xmlNodeSetPtr nodes, const char *val, XmlNodeType type) +{ + int i; + for (i = 0; i < nodes->nodeNr; i++) + { + if (nodes->nodeTab[i] == (void*) doc) { + fprintf(stderr, "The document node cannot be renamed.\n"); + exit(EXIT_INTERNAL_ERROR); + } + xmlNodeSetName(nodes->nodeTab[i], BAD_CAST val); + } +} + +/** + * 'delete' operation + */ +static void +edDelete(xmlDocPtr doc, xmlNodeSetPtr nodes) +{ + int i; + for (i = nodes->nodeNr - 1; i >= 0; i--) + { + if (nodes->nodeTab[i] == (void*) doc) { + fprintf(stderr, "The document node cannot be deleted.\n"); + exit(EXIT_INTERNAL_ERROR); + } + + if (nodes->nodeTab[i]->type == XML_NAMESPACE_DECL) { + fprintf(stderr, "FIXME: can't delete namespace nodes\n"); + exit(EXIT_INTERNAL_ERROR); + } + /* delete node */ + xmlUnlinkNode(nodes->nodeTab[i]); + + /* Free node and children */ + xmlFreeNode(nodes->nodeTab[i]); + nodes->nodeTab[i] = NULL; + } +} + +/** + * 'move' operation + */ +static void +edMove(xmlDocPtr doc, xmlNodeSetPtr nodes, xmlNodePtr to) +{ + int i; + for (i = 0; i < nodes->nodeNr; i++) + { + if (nodes->nodeTab[i] == (void*) doc) { + fprintf(stderr, "The document node cannot be moved.\n"); + exit(EXIT_INTERNAL_ERROR); + } + + if (nodes->nodeTab[i]->type == XML_NAMESPACE_DECL) { + fprintf(stderr, "FIXME: can't move namespace nodes\n"); + exit(EXIT_INTERNAL_ERROR); + } + /* move node */ + xmlUnlinkNode(nodes->nodeTab[i]); + xmlAddChild(to, nodes->nodeTab[i]); + } +} + +/** + * Loop through array of operations and perform them + */ +static void +edProcess(xmlDocPtr doc, const XmlEdAction* ops, int ops_count) +{ + int k; + xmlXPathContextPtr ctxt = xmlXPathNewContext(doc); + /* NOTE: later registrations override earlier ones */ + registerXstarNs(ctxt); + + /* variables */ + previous_insertion = xmlXPathNodeSetCreate(NULL); + registerXstarVariable(ctxt, "prev", + xmlXPathWrapNodeSet(previous_insertion)); + xmlDeregisterNodeDefault(&removeNodeFromPrev); + +#if HAVE_EXSLT_XPATH_REGISTER + /* register extension functions */ + exsltDateXpathCtxtRegister(ctxt, BAD_CAST "date"); + exsltMathXpathCtxtRegister(ctxt, BAD_CAST "math"); + exsltSetsXpathCtxtRegister(ctxt, BAD_CAST "set"); + exsltStrXpathCtxtRegister(ctxt, BAD_CAST "str"); +#endif + /* namespaces from doc */ + extract_ns_defs(doc, ctxt); + /* namespaces from command line */ + nsarr_xpath_register(ctxt); + + for (k = 0; k < ops_count; k++) + { + xmlXPathObjectPtr res; + xmlNodeSetPtr nodes; + + /* NOTE: to make relative paths match as if from "/", set context to + document; setting to root would match as if from "/node()/" */ + ctxt->node = (xmlNodePtr) doc; + + if (ops[k].op == XML_ED_VAR) { + res = xmlXPathEvalExpression(BAD_CAST ops[k].arg2, ctxt); + xmlXPathRegisterVariable(ctxt, BAD_CAST ops[k].arg1, res); + continue; + } + + res = xmlXPathEvalExpression(BAD_CAST ops[k].arg1, ctxt); + if (!res || res->type != XPATH_NODESET || !res->nodesetval) continue; + nodes = res->nodesetval; + + switch (ops[k].op) + { + case XML_ED_DELETE: + edDelete(doc, nodes); + break; + case XML_ED_MOVE: { + xmlXPathObjectPtr res_to; + ctxt->node = (xmlNodePtr) doc; + res_to = xmlXPathEvalExpression(BAD_CAST ops[k].arg2, ctxt); + if (!res_to + || res_to->type != XPATH_NODESET + || res_to->nodesetval->nodeNr != 1) { + fprintf(stderr, "move destination is not a single node\n"); + continue; + } + edMove(doc, nodes, res_to->nodesetval->nodeTab[0]); + xmlXPathFreeObject(res_to); + break; + } + case XML_ED_UPDATE: + edUpdate(doc, nodes, ops[k].arg2, ops[k].type, ctxt); + break; + case XML_ED_RENAME: + edRename(doc, nodes, ops[k].arg2, ops[k].type); + break; + case XML_ED_INSERT: + edInsert(doc, nodes, ops[k].arg2, ops[k].arg3, ops[k].type, -1); + break; + case XML_ED_APPEND: + edInsert(doc, nodes, ops[k].arg2, ops[k].arg3, ops[k].type, 1); + break; + case XML_ED_SUBNODE: + edInsert(doc, nodes, ops[k].arg2, ops[k].arg3, ops[k].type, 0); + break; + default: + break; + } + xmlXPathFreeObject(res); + } + /* NOTE: free()ing ctxt also free()s previous_insertion */ + previous_insertion = NULL; + xmlDeregisterNodeDefault(NULL); + + xmlXPathFreeContext(ctxt); +} + +/** + * Output document + */ +static void +edOutput(const char* filename, const XmlEdAction* ops, int ops_count, + const edOptions* g_ops) +{ + xmlDocPtr doc; + int save_options = +#if LIBXML_VERSION >= 20708 + (g_ops->noblanks? 0 : XML_SAVE_WSNONSIG) | +#endif + (g_ops->preserveFormat? 0 : XML_SAVE_FORMAT) | + (g_ops->omit_decl? XML_SAVE_NO_DECL : 0); + int read_options = + (g_ops->nonet? XML_PARSE_NONET : 0); + xmlSaveCtxtPtr save; + + doc = xmlReadFile(filename, NULL, read_options); + if (!doc) + { + cleanupNSArr(ns_arr); + xmlCleanupParser(); + xmlCleanupGlobals(); + exit(EXIT_BAD_FILE); + } + + edProcess(doc, ops, ops_count); + + /* avoid getting ASCII CRs in UTF-16/UCS-(2,4) text */ + if ((xmlStrcasestr(doc->encoding, BAD_CAST "UTF") == 0 + && xmlStrcasestr(doc->encoding, BAD_CAST "16") == 0) + || + (xmlStrcasestr(doc->encoding, BAD_CAST "UCS") == 0 + && (xmlStrcasestr(doc->encoding, BAD_CAST "2") == 0 + || + xmlStrcasestr(doc->encoding, BAD_CAST "4") == 0))) + { + set_stdout_binary(); + } + + save = xmlSaveToFilename(g_ops->inplace? filename : "-", NULL, save_options); + xmlSaveDoc(save, doc); + xmlSaveClose(save); + + xmlFreeDoc(doc); +} + +/** + * get next command line arg, or print error exit and exit if there isn't one + * @returns pointer to the arg + * @argi is incremented + */ +static const char* +nextArg(char *const*const argv, int *argi) +{ + const char *arg = argv[*argi]; + if (arg == NULL) + { + edUsage(argv[0], EXIT_BAD_ARGS); + } + *argi += 1; + return arg; +} + +/** + * like nextArg(), but additionally look for next arg in @choices + */ +static XmlNodeType +parseNextArg(char *const*const argv, int *argi, + const OptionSpec choices[], int choices_count) +{ + const char* arg = nextArg(argv, argi); + int i; + for (i = 0; i < choices_count; i++) { + if ((arg[0] == '-' && arg[1] == choices[i].shortOpt) || + (strcmp(arg, choices[i].longOpt) == 0)) + return choices[i].type; + } + edUsage(argv[0], EXIT_BAD_ARGS); + return 0; /* never reach here */ +} +#define parseNextArg(argv, argi, choices) \ + parseNextArg(argv, argi, choices, COUNT_OF(choices)) + + +/** --insert, --append, and --subnode all take the same arguments */ +static void +parseInsertionArgs(XmlEdOp op_type, XmlEdAction* op, + char *const*const argv, int *argi) +{ + op->op = op_type; + op->arg1 = nextArg(argv, argi); + parseNextArg(argv, argi, OPT_JUST_TYPE); + op->type = parseNextArg(argv, argi, OPT_NODE_TYPE); + parseNextArg(argv, argi, OPT_JUST_NAME); + op->arg3 = nextArg(argv, argi); + parseNextArg(argv, argi, OPT_JUST_VAL); + op->arg2 = nextArg(argv, argi); +} + +/** + * This is the main function for 'edit' option + */ +int +edMain(int argc, char **argv) +{ + int i, ops_count, max_ops_count = 8, n, start = 0; + XmlEdAction* ops = xmlMalloc(sizeof(XmlEdAction) * max_ops_count); + static edOptions g_ops; + int nCount = 0; + + if (argc < 3) edUsage(argv[0], EXIT_BAD_ARGS); + + edInitOptions(&g_ops); + start = edParseOptions(&g_ops, argc, argv); + + parseNSArr(ns_arr, &nCount, argc-start, argv+start); + + /* + * Parse command line and fill array of operations + */ + ops_count = 0; + i = start + nCount; + + while (i < argc) + { + const char *arg = nextArg(argv, &i); + if (arg[0] == '-') + { + if (ops_count >= max_ops_count) + { + max_ops_count *= 2; + ops = xmlRealloc(ops, sizeof(XmlEdAction) * max_ops_count); + } + ops[ops_count].type = XML_UNDEFINED; + + if (!strcmp(arg, "-d") || !strcmp(arg, "--delete")) + { + ops[ops_count].op = XML_ED_DELETE; + ops[ops_count].arg1 = nextArg(argv, &i); + ops[ops_count].arg2 = 0; + } + else if (!strcmp(arg, "--var")) + { + ops[ops_count].op = XML_ED_VAR; + ops[ops_count].arg1 = nextArg(argv, &i); + ops[ops_count].arg2 = nextArg(argv, &i); + } + else if (!strcmp(arg, "-m") || !strcmp(arg, "--move")) + { + ops[ops_count].op = XML_ED_MOVE; + ops[ops_count].arg1 = nextArg(argv, &i); + ops[ops_count].arg2 = nextArg(argv, &i); + } + else if (!strcmp(arg, "-u") || !strcmp(arg, "--update")) + { + ops[ops_count].op = XML_ED_UPDATE; + ops[ops_count].arg1 = nextArg(argv, &i); + ops[ops_count].type = parseNextArg(argv, &i, OPT_VAL_OR_EXP); + ops[ops_count].arg2 = nextArg(argv, &i); + } + else if (!strcmp(arg, "-r") || !strcmp(arg, "--rename")) + { + ops[ops_count].op = XML_ED_RENAME; + ops[ops_count].arg1 = nextArg(argv, &i); + ops[ops_count].type = parseNextArg(argv, &i, OPT_JUST_VAL); + ops[ops_count].arg2 = nextArg(argv, &i); + } + else if (!strcmp(arg, "-i") || !strcmp(arg, "--insert")) + { + parseInsertionArgs(XML_ED_INSERT, &ops[ops_count], argv, &i); + } + else if (!strcmp(arg, "-a") || !strcmp(arg, "--append")) + { + parseInsertionArgs(XML_ED_APPEND, &ops[ops_count], argv, &i); + } + else if (!strcmp(arg, "-s") || !strcmp(arg, "--subnode")) + { + parseInsertionArgs(XML_ED_SUBNODE, &ops[ops_count], argv, &i); + } + else + { + fprintf(stderr, "Warning: unrecognized option '%s'\n", arg); + } + ops_count++; + } + else + { + i--; /* it was a filename, we didn't use it */ + break; + } + } + + xmlKeepBlanksDefault(0); + + if ((!g_ops.noblanks) || g_ops.preserveFormat) xmlKeepBlanksDefault(1); + + if (i >= argc) + { + edOutput("-", ops, ops_count, &g_ops); + } + + for (n=i; n<argc; n++) + { + edOutput(argv[n], ops, ops_count, &g_ops); + } + + xmlFree(ops); + cleanupNSArr(ns_arr); + xmlCleanupParser(); + xmlCleanupGlobals(); + return 0; +} diff --git a/src/xml_elem.c b/src/xml_elem.c new file mode 100644 index 0000000..024e62a --- /dev/null +++ b/src/xml_elem.c @@ -0,0 +1,286 @@ +/* $Id: xml_elem.c,v 1.23 2004/11/21 23:40:40 mgrouch Exp $ */ + +/* + +XMLStarlet: Command Line Toolkit to query/edit/check/transform XML documents + +Copyright (c) 2002-2004 Mikhail Grushinskiy. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ + +#include <config.h> + +#include <libxml/xmlstring.h> +#include <libxml/hash.h> +#include <stdlib.h> +#include <string.h> + +#include "xmlstar.h" +#include "escape.h" + +/* TODO: + + 2. Option to display this only for nodes matching + an XPATH expression + + -p <xpath> + + so it will be able to deal with subtrees as well + +*/ + +typedef struct _elOptions { + int show_attr; /* show attributes */ + int show_attr_and_val; /* show attributes and values */ + int sort_uniq; /* do sort and uniq on output */ + int check_depth; /* limit depth */ +} elOptions; + + +static elOptions elOps; +static xmlHashTablePtr uniq = NULL; +static xmlChar *curXPath = NULL; + +/** + * Display usage syntax + */ +void +elUsage(int argc, char **argv, exit_status status) +{ + extern void fprint_elem_usage(FILE* o, const char* argv0); + extern const char more_info[]; + FILE *o = (status == EXIT_SUCCESS)? stdout : stderr; + fprint_elem_usage(o, argv[0]); + fprintf(o, "%s", more_info); + exit(status); +} + +/** + * read file and print element paths + */ +int +parse_xml_file(const char *filename) +{ + int ret, prev_depth = 0; + xmlTextReaderPtr reader; + + for (reader = xmlReaderForFile(filename, NULL, 0);;) + { + int depth; + const xmlChar *name; + xmlReaderTypes type; + + if (!reader) { + fprintf(stderr, "couldn't read file '%s'\n", filename); + exit(EXIT_BAD_FILE); + } + + ret = xmlTextReaderRead(reader); + if (ret <= 0) break; + type = xmlTextReaderNodeType(reader); + depth = xmlTextReaderDepth(reader); + name = xmlTextReaderConstName(reader); + + if (type != XML_READER_TYPE_ELEMENT) + continue; + + while (curXPath && depth <= prev_depth) + { + xmlChar *slash = BAD_CAST strrchr((char*) curXPath, '/'); + if (slash) *slash = '\0'; + prev_depth--; + } + prev_depth = depth; + + if (depth > 0) curXPath = xmlStrcat(curXPath, BAD_CAST "/"); + curXPath = xmlStrcat(curXPath, name); + + if (elOps.show_attr) + { + int have_attr; + + fprintf(stdout, "%s\n", curXPath); + for (have_attr = xmlTextReaderMoveToFirstAttribute(reader); + have_attr; + have_attr = xmlTextReaderMoveToNextAttribute(reader)) + { + const xmlChar *aname = xmlTextReaderConstName(reader); + fprintf(stdout, "%s/@%s\n", curXPath, aname); + } + } + else if (elOps.show_attr_and_val) + { + fprintf(stdout, "%s", curXPath); + if (xmlTextReaderHasAttributes(reader)) + { + int have_attr, first = 1; + fprintf(stdout, "["); + for (have_attr = xmlTextReaderMoveToFirstAttribute(reader); + have_attr; + have_attr = xmlTextReaderMoveToNextAttribute(reader)) + { + const xmlChar *aname = xmlTextReaderConstName(reader), + *avalue = xmlTextReaderConstValue(reader); + char quote; + if (!first) + fprintf(stdout, " and "); + first = 0; + + quote = xmlStrchr(avalue, '\'')? '"' : '\''; + fprintf(stdout, "@%s=%c%s%c", aname, quote, avalue, quote); + } + fprintf(stdout, "]"); + } + fprintf(stdout, "\n"); + } + else if (elOps.sort_uniq) + { + if ((elOps.check_depth == 0) || (elOps.check_depth != 0 && depth < elOps.check_depth)) + { + xmlHashAddEntry(uniq, curXPath, (void*) 1); + } + } + else fprintf(stdout, "%s\n", curXPath); + + } + + return ret == -1? EXIT_LIB_ERROR : ret; +} + +/** + * Initialize options values + */ +void +elInitOptions(elOptions *ops) +{ + ops->show_attr = 0; + ops->show_attr_and_val = 0; + ops->sort_uniq = 0; + ops->check_depth = 0; +} + +typedef struct { + xmlChar **array; + int offset; +} ArrayDest; + +/** + * put @name into @data->array[@data->offset] + */ +static void +hash_key_put(void *payload, void *data, xmlChar *name) +{ + ArrayDest *dest = data; + dest->array[dest->offset++] = name; +} + +/** + * a compare function for qsort + * takes pointers to 2 xmlChar* and compares them + */ +static int +compare_string_ptr(const void *p1, const void *p2) +{ + typedef xmlChar const *const xmlCChar; + xmlCChar *str1 = p1, *str2 = p2; + return xmlStrcmp(*str1, *str2); +} + +/** + * This is the main function for 'el' option + */ +int +elMain(int argc, char **argv) +{ + int errorno = 0; + char* inp_file = "-"; + + if (argc <= 1) elUsage(argc, argv, EXIT_BAD_ARGS); + + elInitOptions(&elOps); + + if (argc == 2) + errorno = parse_xml_file("-"); + else + { + if (!strcmp(argv[2], "--help") || !strcmp(argv[2], "-h") || + !strcmp(argv[2], "-?") || !strcmp(argv[2], "-Z")) + { + elUsage(argc, argv, EXIT_SUCCESS); + } + else if (!strcmp(argv[2], "-a")) + { + elOps.show_attr = 1; + if (argc >= 4) inp_file = argv[3]; + errorno = parse_xml_file(inp_file); + } + else if (!strcmp(argv[2], "-v")) + { + elOps.show_attr_and_val = 1; + if (argc >= 4) inp_file = argv[3]; + errorno = parse_xml_file(inp_file); + } + else if (!strcmp(argv[2], "-u")) + { + elOps.sort_uniq = 1; + if (argc >= 4) inp_file = argv[3]; + uniq = xmlHashCreate(0); + errorno = parse_xml_file(inp_file); + } + else if (!strncmp(argv[2], "-d", 2)) + { + elOps.check_depth = atoi(argv[2]+2); + /* printf("Checking depth (%d)\n", elOps.check_depth); */ + elOps.sort_uniq = 1; + if (argc >= 4) inp_file = argv[3]; + uniq = xmlHashCreate(0); + errorno = parse_xml_file(inp_file); + } + else if (argv[2][0] != '-') + { + errorno = parse_xml_file(argv[2]); + } + else + elUsage(argc, argv, EXIT_BAD_ARGS); + } + + if (uniq) + { + int i; + ArrayDest lines; + lines.array = xmlMalloc(sizeof(xmlChar*) * xmlHashSize(uniq)); + lines.offset = 0; + xmlHashScan(uniq, hash_key_put, &lines); + + qsort(lines.array, lines.offset, sizeof(xmlChar*), compare_string_ptr); + + for (i = 0; i < lines.offset; i++) + { + printf("%s\n", lines.array[i]); + } + + xmlFree(lines.array); + xmlHashFree(uniq, NULL); + } + + return errorno; +} + diff --git a/src/xml_escape.c b/src/xml_escape.c new file mode 100644 index 0000000..d13b9d7 --- /dev/null +++ b/src/xml_escape.c @@ -0,0 +1,343 @@ +/* $Id: xml_escape.c,v 1.11 2004/11/21 23:40:40 mgrouch Exp $ */ + +/* + +XMLStarlet: Command Line Toolkit to query/edit/check/transform XML documents + +Copyright (c) 2002-2004 Mikhail Grushinskiy. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ + +#include <config.h> + +#include <string.h> +#include <stdio.h> +#include <stdlib.h> + +#include <libxml/xmlmemory.h> +#include <libxml/debugXML.h> +#include <libxml/xmlIO.h> +#include <libxml/parserInternals.h> + +#include "xmlstar.h" +#include "escape.h" + +#define INSZ 4*1024 + +/* + * TODO: 1. stdin input + * 2. exit values on errors + */ + +/** + * Print small help for command line options + */ +void +escUsage(int argc, char **argv, int escape, exit_status status) +{ + extern void fprint_escape_usage(FILE* o, const char* argv0); + extern void fprint_unescape_usage(FILE* o, const char* argv0); + extern const char more_info[]; + FILE *o = (status == EXIT_SUCCESS)? stdout : stderr; + if (escape) fprint_escape_usage(o, argv[0]); + else fprint_unescape_usage(o, argv[0]); + fprintf(o, "%s", more_info); + exit(status); +} + +struct xmlPredefinedChar { + const char *name; + char value; + int name_len; +}; + +static struct xmlPredefinedChar xmlPredefinedCharValues[] = { + { "lt", '<', 2 }, + { "gt", '>', 2 }, + { "apos", '\'', 4 }, + { "quot", '\"', 4 }, + { "amp", '&', 3 }, + { NULL, '\0', 0 } +}; + +/* + * Macro used to grow the current buffer. + */ +#define grow_BufferReentrant() { \ + buffer_size *= 2; \ + buffer = (xmlChar *) \ + xmlRealloc(buffer, buffer_size * sizeof(xmlChar)); \ + if (buffer == NULL) { \ + fprintf(stderr, "growing buffer error"); \ + abort(); \ + } \ +} + +/** + * xml_C11NNormalizeString: + * @input: the input string + * @mode: the normalization mode (attribute, comment, PI or text) + * + * Converts a string to a canonical (normalized) format. The code is stolen + * from xmlEncodeEntitiesReentrant(). Added normalization of \x09, \x0a, \x0A + * and the @mode parameter + * + * Returns a normalized string (caller is responsible for calling xmlFree()) + * or NULL if an error occurs + */ +xmlChar * +xml_C11NNormalizeString(const xmlChar * input, + xml_C14NNormalizationMode mode) +{ + const xmlChar *cur = input; + xmlChar *buffer = NULL; + xmlChar *out = NULL; + int buffer_size = 0; + + if (input == NULL) + return (NULL); + + /* + * allocate an translation buffer. + */ + buffer_size = 1000; + buffer = (xmlChar *) xmlMallocAtomic(buffer_size * sizeof(xmlChar)); + if (buffer == NULL) { + fprintf(stderr, "allocating buffer error"); + abort(); + } + out = buffer; + + while (*cur != '\0') { + if ((out - buffer) > (buffer_size - 10)) { + int indx = out - buffer; + + grow_BufferReentrant(); + out = &buffer[indx]; + } + + if ((*cur == '<') && ((mode == XML_C14N_NORMALIZE_ATTR) || + (mode == XML_C14N_NORMALIZE_TEXT))) { + *out++ = '&'; + *out++ = 'l'; + *out++ = 't'; + *out++ = ';'; + } else if ((*cur == '>') && (mode == XML_C14N_NORMALIZE_TEXT)) { + *out++ = '&'; + *out++ = 'g'; + *out++ = 't'; + *out++ = ';'; + } else if ((*cur == '&') && ((mode == XML_C14N_NORMALIZE_ATTR) || + (mode == XML_C14N_NORMALIZE_TEXT))) { + *out++ = '&'; + *out++ = 'a'; + *out++ = 'm'; + *out++ = 'p'; + *out++ = ';'; + } else if ((*cur == '"') && (mode == XML_C14N_NORMALIZE_ATTR)) { + *out++ = '&'; + *out++ = 'q'; + *out++ = 'u'; + *out++ = 'o'; + *out++ = 't'; + *out++ = ';'; + } else if ((*cur == '\x09') && (mode == XML_C14N_NORMALIZE_ATTR)) { + *out++ = '&'; + *out++ = '#'; + *out++ = 'x'; + *out++ = '9'; + *out++ = ';'; + } else if ((*cur == '\x0A') && (mode == XML_C14N_NORMALIZE_ATTR)) { + *out++ = '&'; + *out++ = '#'; + *out++ = 'x'; + *out++ = 'A'; + *out++ = ';'; + } else if ((*cur == '\x0D') && ((mode == XML_C14N_NORMALIZE_ATTR) || + (mode == XML_C14N_NORMALIZE_TEXT) || + (mode == XML_C14N_NORMALIZE_COMMENT) || + (mode == XML_C14N_NORMALIZE_PI))) { + *out++ = '&'; + *out++ = '#'; + *out++ = 'x'; + *out++ = 'D'; + *out++ = ';'; + } else { + /* + * Works because on UTF-8, all extended sequences cannot + * result in bytes in the ASCII range. + */ + *out++ = *cur; + } + cur++; + } + *out++ = 0; + return (buffer); +} + +/* TODO: CHECK THIS PROCEDURE IT'S PROB FULL OF BUGS */ +char * +xml_unescape(char* str) +{ + char *p = str, *p2 = NULL; + char *ret = NULL; + + ret = (char*) xmlCharStrdup(str); + p2 = ret; + + while(*p) + { + if (*p == '&') + { + struct xmlPredefinedChar *pair = xmlPredefinedCharValues; + + p++; + if (*p == '\0') break; + + + if (*p == '#') + { + int num; + p++; + if (*p == '\0') break; + num = atoi(p); + + while((*p >= '0') && (*p <= '9')) p++; + + if (*p == ';') + { + *p2 = (char) num; + p2++; + p++; + } + continue; + } + else + { + while(pair->name) + { + if (!strncmp(p, pair->name, pair->name_len)) + { + if (*(p+pair->name_len) == ';') + { + *p2 = pair->value; + p2++; + p += (pair->name_len + 1); + break; + } + } + pair++; + } + continue; + } + } + + *p2 = *p; + p2++; + p++; + } + + *p2 = '\0'; + + return ret; +} + +/** + * This is the main function for 'escape/unescape' options + */ +int +escMain(int argc, char **argv, int escape) +{ + int ret = 0; + int readStdIn = 0; + + char* inp = NULL; + xmlChar* outBuf = NULL; + + if (argc < 2) escUsage(argc, argv, escape, EXIT_BAD_ARGS); + + inp = argv[2]; + + if (argc > 2) + { + if (!strcmp(argv[2], "--help") || !strcmp(argv[2], "-h") || + !strcmp(argv[2], "-?") || !strcmp(argv[2], "-Z")) + escUsage(argc, argv, escape, EXIT_SUCCESS); + if (!strcmp(argv[2], "-")) readStdIn = 1; + } + else + { + readStdIn = 1; + } + + if (readStdIn) + { + static char line[INSZ]; + + while (!feof(stdin)) + { + if (fgets(line, INSZ - 1, stdin)) + { + if (escape) + { + outBuf = xmlEncodeEntitiesReentrant(NULL, (xmlChar*) line); + if (outBuf) + { + fprintf(stdout, "%s", outBuf); + xmlFree(outBuf); + } + } + else + { + outBuf = (xmlChar*) xml_unescape(line); + if (outBuf) + { + fprintf(stdout, "%s", outBuf); + free(outBuf); + } + } + } + } + + return ret; + } + + if (escape) + { + outBuf = xmlEncodeEntitiesReentrant(NULL, (xmlChar*) inp); + if (outBuf) + { + fprintf(stdout, "%s\n", outBuf); + xmlFree(outBuf); + } + } + else + { + outBuf = (xmlChar*) xml_unescape(inp); + if (outBuf) + { + fprintf(stdout, "%s\n", outBuf); + free(outBuf); + } + } + + return ret; +} diff --git a/src/xml_format.c b/src/xml_format.c new file mode 100644 index 0000000..4d6fe31 --- /dev/null +++ b/src/xml_format.c @@ -0,0 +1,392 @@ +/* $Id: xml_format.c,v 1.25 2005/01/07 02:33:40 mgrouch Exp $ */ + +/* + +XMLStarlet: Command Line Toolkit to query/edit/check/transform XML documents + +Copyright (c) 2002 Mikhail Grushinskiy. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ + +#include <config.h> + +#include <string.h> +#include <stdio.h> +#include <stdlib.h> + +#include <libxml/xmlmemory.h> +#include <libxml/debugXML.h> +#include <libxml/xmlIO.h> +#include <libxml/HTMLtree.h> +#include <libxml/xinclude.h> +#include <libxml/xpath.h> +#include <libxml/xpathInternals.h> +#include <libxml/xpointer.h> +#include <libxml/parserInternals.h> +#include <libxml/uri.h> + +#include "xmlstar.h" + +/* + * TODO: 1. Attribute formatting options (as every attribute on a new line) + * 2. exit values on errors + */ + +typedef struct _foOptions { + int indent; /* indent output */ + int indent_tab; /* indent output with tab */ + int indent_spaces; /* num spaces for indentation */ + int omit_decl; /* omit xml declaration */ + int recovery; /* try to recover what is parsable */ + int dropdtd; /* remove the DOCTYPE of the input docs */ + int options; /* global parsing flags */ +#ifdef LIBXML_HTML_ENABLED + int html; /* inputs are in HTML format */ +#endif + int quiet; /* quiet mode */ +} foOptions; + +typedef foOptions *foOptionsPtr; + +const char *encoding = NULL; +static char *spaces = NULL; + +/** + * Print small help for command line options + */ +void +foUsage(int argc, char **argv, exit_status status) +{ + extern void fprint_format_usage(FILE* o, const char* argv0); + extern const char more_info[]; + FILE *o = (status == EXIT_SUCCESS)? stdout : stderr; + fprint_format_usage(o, argv[0]); + fprintf(o, "%s", more_info); + exit(status); +} + +/** + * Initialize global command line options + */ +void +foInitOptions(foOptionsPtr ops) +{ + ops->indent = 1; + ops->indent_tab = 0; + ops->indent_spaces = 2; + ops->omit_decl = 0; + ops->recovery = 0; + ops->dropdtd = 0; + ops->options = XML_PARSE_NONET; +#ifdef LIBXML_HTML_ENABLED + ops->html = 0; +#endif + ops->quiet = 0; +} + +/** + * Initialize LibXML + */ +void +foInitLibXml(foOptionsPtr ops) +{ + /* + * Initialize library memory + */ + xmlInitMemory(); + + LIBXML_TEST_VERSION + + /* + * Store line numbers in the document tree + */ + xmlLineNumbersDefault(1); + + xmlSubstituteEntitiesDefault(1); + xmlKeepBlanksDefault(0); + xmlPedanticParserDefault(0); + + xmlGetWarningsDefaultValue = 1; + xmlDoValidityCheckingDefaultValue = 0; + xmlLoadExtDtdDefaultValue = 0; + + xmlTreeIndentString = NULL; + if (ops->indent) + { + xmlIndentTreeOutput = 1; + if (ops->indent_tab) + { + xmlTreeIndentString = "\t"; + } + else if (ops->indent_spaces > 0) + { + spaces = xmlMalloc(ops->indent_spaces + 1); + xmlTreeIndentString = spaces; + memset(spaces, ' ', ops->indent_spaces); + spaces[ops->indent_spaces] = '\0'; + } + } + else + xmlIndentTreeOutput = 0; +} + +/** + * Parse global command line options + */ +int +foParseOptions(foOptionsPtr ops, int argc, char **argv) +{ + int i; + + i = 2; + while(i < argc) + { + if (!strcmp(argv[i], "--noindent") || !strcmp(argv[i], "-n")) + { + ops->indent = 0; + i++; + } + else if (!strcmp(argv[i], "--encode") || !strcmp(argv[i], "-e")) + { + i++; + encoding = argv[i]; + i++; + } + else if (!strcmp(argv[i], "--indent-tab") || !strcmp(argv[i], "-t")) + { + ops->indent_tab = 1; + i++; + } + else if (!strcmp(argv[i], "--omit-decl") || !strcmp(argv[i], "-o")) + { + ops->omit_decl = 1; + i++; + } + else if (!strcmp(argv[i], "--dropdtd") || !strcmp(argv[i], "-D")) + { + ops->dropdtd = 1; + i++; + } + else if (!strcmp(argv[i], "--recover") || !strcmp(argv[i], "-R")) + { + ops->recovery = 1; + ops->options |= XML_PARSE_RECOVER; + i++; + } + else if (!strcmp(argv[i], "--nocdata") || !strcmp(argv[i], "-C")) + { + ops->options |= XML_PARSE_NOCDATA; + i++; + } + else if (!strcmp(argv[i], "--nsclean") || !strcmp(argv[i], "-N")) + { + ops->options |= XML_PARSE_NSCLEAN; + i++; + } + else if (!strcmp(argv[i], "--indent-spaces") || !strcmp(argv[i], "-s")) + { + int value; + i++; + if (i >= argc) foUsage(argc, argv, EXIT_BAD_ARGS); + if (sscanf(argv[i], "%d", &value) == 1) + { + if (value > 0) ops->indent_spaces = value; + } + else + { + foUsage(argc, argv, EXIT_BAD_ARGS); + } + ops->indent_tab = 0; + i++; + } + else if (!strcmp(argv[i], "--quiet") || !strcmp(argv[i], "-Q")) + { + ops->quiet = 1; + i++; + } +#ifdef LIBXML_HTML_ENABLED + else if (!strcmp(argv[i], "--html") || !strcmp(argv[i], "-H")) + { + ops->html = 1; + i++; + } +#endif + else if (!strcmp(argv[i], "--net")) + { + ops->options &= ~XML_PARSE_NONET; + i++; + } + else if (!strcmp(argv[i], "--help") || !strcmp(argv[i], "-h")) + { + foUsage(argc, argv, EXIT_SUCCESS); + } + else if (!strcmp(argv[i], "-")) + { + i++; + break; + } + else if (argv[i][0] == '-') + { + foUsage(argc, argv, EXIT_BAD_ARGS); + } + else + { + i++; + break; + } + } + + return i-1; +} + +void my_error_func(void* ctx, const char * msg, ...) { + /* do nothing */ +} + +void my_structured_error_func(void * userData, xmlErrorPtr error) { + /* do nothing */ +} + +/** + * 'process' xml document(s) + */ +int +foProcess(foOptionsPtr ops, int start, int argc, char **argv) +{ + int ret = 0; + xmlDocPtr doc = NULL; + char *fileName = "-"; + + if ((start > 1) && (start < argc) && (argv[start][0] != '-') && + strcmp(argv[start-1], "--indent-spaces") && + strcmp(argv[start-1], "-s")) + { + fileName = argv[start]; + } +/* + if (ops->recovery) + { + doc = xmlRecoverFile(fileName); + } + else +*/ + if (ops->quiet) { + xmlSetGenericErrorFunc(NULL, my_error_func); + xmlSetStructuredErrorFunc(NULL, my_structured_error_func); + } + +#ifdef LIBXML_HTML_ENABLED + if (ops->html) + { + doc = htmlReadFile(fileName, NULL, ops->options); + } + else +#endif + doc = xmlReadFile(fileName, NULL, ops->options); + + if (doc == NULL) + { + /*fprintf(stderr, "%s:: error: XML parse error\n", fileName);*/ + return 2; + } + + /* + * Remove DOCTYPE nodes + */ + if (ops->dropdtd) { + xmlDtdPtr dtd; + + dtd = xmlGetIntSubset(doc); + if (dtd != NULL) { + xmlUnlinkNode((xmlNodePtr)dtd); + xmlFreeDtd(dtd); + } + } + + if (!ops->omit_decl) + { + if (encoding != NULL) + { + xmlSaveFormatFileEnc("-", doc, encoding, 1); + } + else + { + xmlSaveFormatFile("-", doc, 1); + } + } + else + { + int format = 1; + xmlOutputBufferPtr buf = NULL; + xmlCharEncodingHandlerPtr handler = NULL; + buf = xmlOutputBufferCreateFile(stdout, handler); + + if (doc->children != NULL) + { + xmlNodePtr child = doc->children; + while (child != NULL) + { + xmlNodeDumpOutput(buf, doc, child, 0, format, encoding); + xmlOutputBufferWriteString(buf, "\n"); + child = child->next; + } + } + ret = xmlOutputBufferClose(buf); + } + + xmlFreeDoc(doc); + return ret; +} + +/** + * Cleanup memory + */ +void +foCleanup() +{ + free(spaces); + spaces = NULL; + xmlCleanupParser(); +#if 0 + xmlMemoryDump(); +#endif +} + +/** + * This is the main function for 'format' option + */ +int +foMain(int argc, char **argv) +{ + int ret = 0; + int start; + static foOptions ops; + + if (argc <=1) foUsage(argc, argv, EXIT_BAD_ARGS); + foInitOptions(&ops); + start = foParseOptions(&ops, argc, argv); + if (argc-start > 1) foUsage(argc, argv, EXIT_BAD_ARGS); + foInitLibXml(&ops); + ret = foProcess(&ops, start, argc, argv); + foCleanup(); + + return ret; +} diff --git a/src/xml_ls.c b/src/xml_ls.c new file mode 100644 index 0000000..c7341b9 --- /dev/null +++ b/src/xml_ls.c @@ -0,0 +1,204 @@ +/* $Id: xml_ls.c,v 1.17 2005/03/19 01:18:02 mgrouch Exp $ */ + +/* + +XMLStarlet: Command Line Toolkit to query/edit/check/transform XML documents + +Copyright (c) 2002-2004 Mikhail Grushinskiy. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ + +#include <config.h> + +#include <sys/types.h> +#include <sys/stat.h> +#include <dirent.h> +#include <unistd.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> + +#include <libxml/xmlmemory.h> +#include <libxml/c14n.h> + +#include "xmlstar.h" +#include "escape.h" + +#if !HAVE_LSTAT +# if HAVE_STAT +# define lstat stat +# else +/* TODO: #ifdef out code that uses stat instead */ +# error "lstat() or stat() required" +# endif +#endif + +#ifndef S_ISLNK +# define S_ISLNK(m) 0 +#endif + +#ifndef S_ISSOCK +# define S_ISSOCK(m) 0 +#endif + +/** + * Print small help for command line options + */ +void +lsUsage(int argc, char **argv, exit_status status) +{ + extern void fprint_ls_usage(FILE* o, const char* argv0); + extern const char more_info[]; + FILE *o = (status == EXIT_SUCCESS)? stdout : stderr; + fprint_ls_usage(o, argv[0]); + fprintf(o, "%s", more_info); + exit(status); +} + + +const char * +get_file_type(mode_t mode) +{ + if (S_ISREG(mode)) return "f"; /* regular file */ + else if (S_ISDIR(mode)) return "d"; /* directory */ + else if (S_ISCHR(mode)) return "c"; /* character device */ + else if (S_ISBLK(mode)) return "b"; /* block device */ + else if (S_ISLNK(mode)) return "l"; /* symlink */ + else if (S_ISFIFO(mode)) return "p"; /* fifo */ + else if (S_ISSOCK(mode)) return "s"; /* socket */ + else return "u"; /* unknown */ +} + +const char * +get_file_perms(mode_t mode) +{ + int i; + static char perms[10]; + + strcpy(perms, "---------"); + + for(i=0; i < sizeof perms - 1; i+=3) + { + if(mode &(S_IRUSR>>i)) + perms[i+0] = 'r'; + + if(mode &(S_IWUSR>>i)) + perms[i+1] = 'w'; + + if(mode &(S_IXUSR>>i)) + perms[i+2] = 'x'; + } + +#ifdef S_ISUID + if((mode & S_ISUID)) + perms[2] = 's'; +#endif + +#ifdef S_ISGID + if((mode & S_ISGID)) + perms[5] = 's'; +#endif + +#ifdef S_ISVTX + if((mode & S_ISVTX)) + perms[8] = 't'; +#endif + + return(perms); +} + +int +xml_print_dir(const char* dir) +{ + DIR *dirp; + struct dirent *d; + struct stat stats; + int num_files = 0; + + if((dirp = opendir(dir)) == NULL) + return(-1); + + chdir(dir); + + while((d = readdir(dirp)) != NULL) + { + xmlChar *xml_str; + char atime[20]; + char mtime[20]; + int size_len; + + if ((d->d_name == NULL) || !strcmp(d->d_name, ".") || !strcmp(d->d_name, "..")) + continue; + + if(lstat(d->d_name, &stats) != 0) + { + fprintf(stderr, "couldn't stat: %s\n", d->d_name); + } + +#if defined (__MINGW32__) + /* somehow atime is -1 on Windows XP when the atime is in future */ + if (stats.st_atime < 0) stats.st_atime = 0; + /* somehow mtime is -1 on Windows XP when the mtime is in future */ + if (stats.st_mtime < 0) stats.st_mtime = 0; +#endif + + /* format time as per ISO 8601 */ + strftime(atime, sizeof atime, "%Y%m%dT%H%M%SZ", gmtime(&stats.st_atime)); + strftime(mtime, sizeof mtime, "%Y%m%dT%H%M%SZ", gmtime(&stats.st_mtime)); + + xml_str = xml_C11NNormalizeAttr((const xmlChar *) d->d_name); + printf("<%s p=\"%s\" a=\"%s\" m=\"%s\" s=\"", + get_file_type(stats.st_mode), get_file_perms(stats.st_mode), + atime, mtime); + size_len = printf("%lu", (unsigned long) stats.st_size); + printf("\"%.*s", 16-size_len, " "); + printf(" n=\"%s\"/>\n", xml_str); + num_files++; + xmlFree(xml_str); + + } /* end of for loop */ + + closedir(dirp); + return num_files; +} + +int +lsMain(int argc, char** argv) +{ + const char *dir = "."; + int files; + + if (argc == 3) { + if (strcmp(argv[2], "--help") == 0) + lsUsage(argc, argv, EXIT_SUCCESS); + else + dir = argv[2]; + } else if (argc > 3) { + lsUsage(argc, argv, EXIT_BAD_ARGS); + } + + printf("<dir>\n"); + files = xml_print_dir(dir); + printf("</dir>\n"); + return (files >= 0)? EXIT_SUCCESS : EXIT_FAILURE; +} + diff --git a/src/xml_pyx.c b/src/xml_pyx.c new file mode 100644 index 0000000..e97dbd2 --- /dev/null +++ b/src/xml_pyx.c @@ -0,0 +1,293 @@ +/* $Id: xml_pyx.c,v 1.9 2005/03/12 03:24:23 mgrouch Exp $ */ + +/** + * Based on xmln from pyxie project + * + * The PYX format is a line-oriented representation of + * XML documents that is derived from the SGML ESIS format. + * (see ESIS - ISO 8879 Element Structure Information Set spec, + * ISO/IEC JTC1/SC18/WG8 N931 (ESIS)) + * + * A non-validating, ESIS generating tool + * ESIS Generation by Sean Mc Grath http://www.digitome.com/sean.html + */ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +#include <libxml/parser.h> +#include <libxml/parserInternals.h> + +#include "xmlstar.h" + +/** + * Output newline and tab characters as escapes + * Required both for attribute values and character data (#PCDATA) + */ +static void +SanitizeData(const xmlChar *s, int len) +{ + while (len--) + { + switch (*s) + { + case 10: + printf("\\n"); + break; + case 13: + break; + case 9: + printf ("\\t"); + break; + case '\\': + printf ("\\\\"); + break; + default: + putchar (*s); + } + s++; + } +} + +static void +print_qname(const xmlChar *prefix, const xmlChar *localname) +{ + if (prefix) + printf("%s:", prefix); + printf("%s", localname); +} + +int +CompareAttributes(const void *a1,const void *a2) +{ + typedef xmlChar const *const xmlCStr; + xmlCStr *attr1 = a1, *attr2 = a2; + return xmlStrcmp(*attr1, *attr2); +} + +void +pyxStartElement (void * ctx, + const xmlChar * localname, + const xmlChar * prefix, + const xmlChar * URI, + int nb_namespaces, + const xmlChar ** namespaces, + int nb_attributes, + int nb_defaulted, + const xmlChar ** attributes) +{ + int i; + fprintf(stdout,"("); + print_qname(prefix, localname); + fprintf(stdout, "\n"); + + + if (nb_attributes > 1) + /* Sort the pairs based on the name part of the pair */ + qsort ((void *)attributes, + nb_attributes, + sizeof(xmlChar *)*5, + CompareAttributes); + + for (i = 0; i < nb_namespaces; i++) { + int aidx = i * 2; + const xmlChar + *prefix = namespaces[aidx], + *uri = namespaces[aidx+1]; + /* namespace definitions take the form xmlns:prefix=uri*/ + putchar('A'); + if (xmlStrlen(prefix) > 0) + print_qname(BAD_CAST "xmlns", prefix); + else + fputs("xmlns", stdout); + putchar(' '); + SanitizeData(uri, xmlStrlen(uri)); + putchar('\n'); + } + + for (i = 0; i < nb_attributes; i++) { + int aidx = i * 5; + const xmlChar *localname = attributes[aidx], + *prefix = attributes[aidx+1], + /* *nsURI = attributes[aidx+2], */ + *valueBegin = attributes[aidx+3], + *valueEnd = attributes[aidx+4]; + int valueLen = valueEnd - valueBegin; + + /* Attribute Name */ + putchar('A'); + print_qname(prefix, localname); + putchar(' '); + /* value - can contain literal "\n" so escape */ + SanitizeData(valueBegin, valueLen); + putchar('\n'); + } +} + +void +pyxEndElement(void *userData, const xmlChar *localname, const xmlChar *prefix, + const xmlChar *URI) +{ + fprintf(stdout,")"); + print_qname(prefix, localname); + putchar('\n'); +} + +void +pyxCharacterData(void *userData, const xmlChar *s, int len) +{ + fprintf(stdout, "-"); + SanitizeData(s, len); + putchar('\n'); +} + +void +pyxProcessingInstruction(void *userData, + const xmlChar *target, + const xmlChar *data) +{ + fprintf(stdout,"?%s ",target); + SanitizeData(data, xmlStrlen(data)); + fprintf(stdout,"\n"); +} + +void +pyxUnparsedEntityDeclHandler(void *userData, + const xmlChar *entityName, + const xmlChar *publicId, + const xmlChar *systemId, + const xmlChar *notationName) +{ + fprintf(stdout, "U%s %s %s%s%s\n", + (char *)entityName, (char *)notationName, (char *)systemId, + (publicId == NULL? "": " "), + (publicId == NULL? "": (char *) publicId)); +} + +void +pyxNotationDeclHandler(void *userData, + const xmlChar *notationName, + const xmlChar *publicId, + const xmlChar *systemId) +{ + fprintf(stdout, "N%s %s%s%s\n", (char*) notationName, (char*) systemId, + (publicId == NULL? "": " "), + (publicId == NULL? "": (const char*) publicId)); +} + +void +pyxExternalEntityReferenceHandler(void* userData, + const xmlChar *name) +{ + const xmlChar *p = name; + fprintf (stdout, "&"); + /* Up to space is the name of the referenced entity */ + while (*p && (*p != ' ')) { + putchar (*p); + p++; + } +} + +static void +pyxExternalSubsetHandler(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, + const xmlChar *ExternalID, const xmlChar *SystemID) +{ + fprintf(stdout, "D %s PUBLIC", name); /* TODO: re-check */ + if (ExternalID == NULL) + fprintf(stdout, " "); + else + fprintf(stdout, " \"%s\"", ExternalID); + if (SystemID == NULL) + fprintf(stdout, "\n"); + else + fprintf(stdout, " \"%s\"\n", SystemID); +} + +static void +pyxCommentHandler(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value) +{ + fprintf(stdout,"C"); + SanitizeData(value, xmlStrlen(value)); + fprintf(stdout,"\n"); +} + +static void +pyxCdataBlockHandler(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value, int len) +{ + fprintf(stdout,"["); + SanitizeData(value, len); + fprintf(stdout,"\n"); +} + +static void +pyxUsage(const char *argv0, exit_status status) +{ + extern void fprint_pyx_usage(FILE* o, const char* argv0); + extern const char more_info[]; + FILE *o = (status == EXIT_SUCCESS)? stdout : stderr; + fprint_pyx_usage(o, argv0); + fprintf(o, "%s", more_info); + exit(status); +} + +int +pyx_process_file(const char *filename) +{ + int ret; + xmlParserCtxtPtr ctxt; + + xmlInitParser(); + ctxt = xmlCreateFileParserCtxt(filename); + + memset(ctxt->sax, 0, sizeof(*ctxt->sax)); + + /* Establish Event Handlers */ + ctxt->sax->initialized = XML_SAX2_MAGIC; + ctxt->sax->startElementNs = pyxStartElement; + ctxt->sax->endElementNs = pyxEndElement; + ctxt->sax->processingInstruction = pyxProcessingInstruction; + ctxt->sax->characters = pyxCharacterData; + ctxt->sax->notationDecl = pyxNotationDeclHandler; + ctxt->sax->reference = pyxExternalEntityReferenceHandler; + ctxt->sax->unparsedEntityDecl = pyxUnparsedEntityDeclHandler; + ctxt->sax->externalSubset = pyxExternalSubsetHandler; + ctxt->sax->comment = pyxCommentHandler; + ctxt->sax->cdataBlock = pyxCdataBlockHandler; + + ret = xmlParseDocument(ctxt); + xmlFreeParserCtxt(ctxt); + xmlCleanupParser(); + + return ret; +} + +int +pyxMain(int argc,const char *argv[]) +{ + int status = 0; + + if ((argc > 2) && + ( + (strcmp(argv[2],"-h") == 0) || + (strcmp(argv[2],"-H") == 0) || + (strcmp(argv[2],"-Z") == 0) || + (strcmp(argv[2],"-?") == 0) || + (strcmp(argv[2],"--help") == 0) + )) + { + pyxUsage(argv[0], EXIT_SUCCESS); + } + if (argc == 2) { + status = pyx_process_file("-"); + } + else { + argv++; + argc--; + for (++argv; argc>1; argc--,argv++) { + int ret = pyx_process_file(*argv); + if (ret != 0) status = ret; + } + } + return status; +} diff --git a/src/xml_select.c b/src/xml_select.c new file mode 100644 index 0000000..890582b --- /dev/null +++ b/src/xml_select.c @@ -0,0 +1,1017 @@ +/* $Id: xml_select.c,v 1.67 2005/01/07 02:02:13 mgrouch Exp $ */ + +/* + +XMLStarlet: Command Line Toolkit to query/edit/check/transform XML documents + +Copyright (c) 2002-2004 Mikhail Grushinskiy. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ + +#include <config.h> + +#include <assert.h> +#include <string.h> +#include <stdio.h> +#include <stdlib.h> +#include <limits.h> +#include <ctype.h> + +#include <libxml/tree.h> +#include <libxslt/templates.h> + +#include "xmlstar.h" +#include "trans.h" + +/* max length of xmlstarlet supplied (ie not from command line) namespaces + * currently xalanredirect is longest, at 13 characters*/ +#define MAX_NS_PREFIX_LEN 20 + +typedef struct { + const xmlChar *href, *prefix; +} NsEntry; + +static const NsEntry ns_entries[] = { + { BAD_CAST "http://exslt.org/common", BAD_CAST "exslt" }, + { BAD_CAST "http://exslt.org/math", BAD_CAST "math" }, + { BAD_CAST "http://exslt.org/dates-and-times", BAD_CAST "date" }, + { BAD_CAST "http://exslt.org/functions", BAD_CAST "func" }, + { BAD_CAST "http://exslt.org/sets", BAD_CAST "set" }, + { BAD_CAST "http://exslt.org/strings", BAD_CAST "str" }, + { BAD_CAST "http://exslt.org/dynamic", BAD_CAST "dyn" }, + { BAD_CAST "http://icl.com/saxon", BAD_CAST "saxon" }, + { BAD_CAST "org.apache.xalan.xslt.extensions.Redirect", + BAD_CAST "xalanredirect"}, /* see MAX_NS_PREFIX_LEN */ + { BAD_CAST "http://www.jclark.com/xt", BAD_CAST "xt" }, + { BAD_CAST "http://xmlsoft.org/XSLT/namespace", BAD_CAST "libxslt" }, + { BAD_CAST "http://xmlsoft.org/XSLT/", BAD_CAST "test" }, +}; + +static const NsEntry* +lookup_ns_entry(const char *prefix, int len) { + int i; + for (i = 0; i < COUNT_OF(ns_entries); i++) { + if (xmlStrncmp(BAD_CAST prefix, ns_entries[i].prefix, len) == 0) + return &ns_entries[i]; + } + return NULL; +} + + +typedef struct _selOptions { + int quiet; /* No output */ + int printXSLT; /* Display prepared XSLT */ + int printRoot; /* Print root element in output (if XML) */ + int outText; /* Output is text */ + int indent; /* Indent output */ + int noblanks; /* Remove insignificant spaces from XML tree */ + int no_omit_decl; /* Print XML declaration line <?xml version="1.0"?> */ + int nonet; /* refuse to fetch DTDs or entities over network */ + const xmlChar *encoding; /* the "encoding" attribute on the stylesheet's <xsl:output/> */ +} selOptions; + +typedef selOptions *selOptionsPtr; + +typedef enum { TARG_NONE = 0, TARG_SORT_OP, TARG_XPATH, + TARG_ATTR_STRING, TARG_STRING, TARG_VAR, + /* template args below don't consume any command line args */ + TARG_NEWLINE, TARG_NO_CMDLINE = TARG_NEWLINE, + TARG_INP_NAME, TARG_STR_NAME_SELECT +} template_argument_type; +typedef struct { + const xmlChar *attrname; + template_argument_type type; +} template_option_argument; + +#define TEMPLATE_OPT_MAX_ARGS 2 + +typedef struct { + char shortopt; + const char *longopt; + const xmlChar *xslname; + template_option_argument arguments[TEMPLATE_OPT_MAX_ARGS]; + int nest; +} template_option; + +static const template_option + OPT_TEMPLATE = { 't', "template" }, + OPT_COPY_OF = { 'c', "copy-of", BAD_CAST "copy-of", {{BAD_CAST "select", TARG_XPATH}}, 0 }, + OPT_VALUE_OF = { 'v', "value-of", BAD_CAST "with-param", {{BAD_CAST "name", TARG_STR_NAME_SELECT}, + {BAD_CAST "select", TARG_XPATH}}, -1 }, + OPT_OUTPUT = { 'o', "output", BAD_CAST "text", {{NULL, TARG_STRING}}, 0 }, + OPT_NL = { 'n', "nl", BAD_CAST "value-of", {{NULL, TARG_NEWLINE}}, 0 }, + OPT_INP_NAME = { 'f', "inp-name", BAD_CAST "copy-of", {{NULL, TARG_INP_NAME}}, 0 }, + OPT_MATCH = { 'm', "match", BAD_CAST "for-each", {{BAD_CAST "select", TARG_XPATH}}, 1 }, + OPT_IF = { 'i', "if", BAD_CAST"when", {{BAD_CAST "test", TARG_XPATH}}, 1 }, + OPT_ELIF = { 0, "elif", BAD_CAST "when", {{BAD_CAST "test", TARG_XPATH}}, 1 }, + OPT_ELSE = { 0, "else", BAD_CAST "otherwise", {{NULL}}, 1 }, + OPT_ELEM = { 'e', "elem", BAD_CAST "element", {{BAD_CAST "name", TARG_ATTR_STRING}}, 1 }, + OPT_ATTR = { 'a', "attr", BAD_CAST "attribute", {{BAD_CAST "name", TARG_ATTR_STRING}}, 1 }, + OPT_BREAK = { 'b', "break", NULL, {{NULL}}, -1 }, + OPT_SORT = { 's', "sort", BAD_CAST "sort", {{NULL, TARG_SORT_OP}, {BAD_CAST "select", TARG_XPATH}}, 0 }, + OPT_VAR = { 0, "var", BAD_CAST "variable", {{BAD_CAST "name", TARG_VAR}}, 1}, + + *TEMPLATE_OPTIONS[] = { + &OPT_TEMPLATE, + &OPT_COPY_OF, + &OPT_VALUE_OF, + &OPT_OUTPUT, + &OPT_NL, + &OPT_INP_NAME, + &OPT_MATCH, + &OPT_IF, + &OPT_ELIF, + &OPT_ELSE, + &OPT_ELEM, + &OPT_ATTR, + &OPT_BREAK, + &OPT_SORT, + &OPT_VAR + }; + +void +caseSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts, + int nbsorts); + +/** + * Print small help for command line options + */ +void +selUsage(const char *argv0, exit_status status) +{ + extern void fprint_select_usage(FILE* out, const char* argv0); + extern const char more_info[]; + extern const char libxslt_more_info[]; + FILE *o = (status == EXIT_SUCCESS)? stdout : stderr; + fprint_select_usage(o, argv0); + fprintf(o, "%s", more_info); + fprintf(o, "%s", libxslt_more_info); + exit(status); +} + +/** + * Initialize global command line options + */ +void +selInitOptions(selOptionsPtr ops) +{ + ops->quiet = 0; + ops->printXSLT = 0; + ops->printRoot = 0; + ops->outText = 0; + ops->indent = 0; + ops->noblanks = 0; + ops->no_omit_decl = 0; + ops->nonet = 1; + ops->encoding = NULL; +} + +/** + * Parse global command line options + */ +int +selParseOptions(selOptionsPtr ops, int argc, char **argv) +{ + int i; + + i = 2; + while((i < argc) && (strcmp(argv[i], "-t")) && strcmp(argv[i], "--template")) + { + if (!strcmp(argv[i], "-C")) + { + ops->printXSLT = 1; + } + else if (!strcmp(argv[i], "-Q") || !strcmp(argv[i], "--quiet")) + { + ops->quiet = 1; + } + else if (!strcmp(argv[i], "-B") || !strcmp(argv[i], "--noblanks")) + { + ops->noblanks = 1; + } + else if (!strcmp(argv[i], "-T") || !strcmp(argv[i], "--text")) + { + ops->outText = 1; + } + else if (!strcmp(argv[i], "-R") || !strcmp(argv[i], "--root")) + { + ops->printRoot = 1; + } + else if (!strcmp(argv[i], "-I") || !strcmp(argv[i], "--indent")) + { + ops->indent = 1; + } + else if (!strcmp(argv[i], "-D") || !strcmp(argv[i], "--xml-decl")) + { + ops->no_omit_decl = 1; + } + else if (!strcmp(argv[i], "-E") || !strcmp(argv[i], "--encode")) + { + if ((i+1) < argc) + { + if (argv[i + 1][0] == '-') + { + fprintf(stderr, "-E option requires argument <encoding> ex: (utf-8, unicode...)\n"); + exit(EXIT_BAD_ARGS); + } + else + { + ops->encoding = BAD_CAST argv[i + 1]; + } + } + else + { + fprintf(stderr, "-E option requires argument <encoding> ex: (utf-8, unicode...)\n"); + exit(EXIT_BAD_ARGS); + } + + } + else if (!strcmp(argv[i], "--net")) + { + ops->nonet = 0; + } + else if (!strcmp(argv[i], "--help") || !strcmp(argv[i], "-h") || + !strcmp(argv[i], "-?") || !strcmp(argv[i], "-Z")) + { + selUsage(argv[0], EXIT_SUCCESS); + } + i++; + } + + return i; +} + + +/** + * Search for namespace references in @xpath and add them to @root. Note that we + * might pickup things that aren't actually namespace references because we + * don't have a full XPath parser. That's okay, an extra namespace definition + * won't hurt anyone. + */ +static void +checkNsRefs(xmlNodePtr root, const char *xpath) +{ + const char *colon; + for (colon = xpath; colon; colon++) { + int ns_idx = -1; + + colon = strchr(colon, ':'); + if (!colon) break; + + for (;; ns_idx--) { + if (&colon[ns_idx] < xpath + ||!isalnum(colon[ns_idx])) { + const NsEntry *ns; + ns_idx++; + ns = lookup_ns_entry(&colon[ns_idx], -ns_idx); + if (ns) xmlNewNs(root, ns->href, ns->prefix); + break; + } + if (-ns_idx >= MAX_NS_PREFIX_LEN) break; + } + } +} + +/** + * Prepare XSLT template based on command line options + * Assumes start points to -t option + */ +int +selGenTemplate(xmlNodePtr root, xmlNodePtr template_node, + xmlNsPtr xslns, selOptionsPtr ops, int* use_inputfile, int* use_value_of, + int* lastTempl, int start, int argc, char **argv) +{ + int i; + int templateEmpty; + int nextTempl; + const template_option *targ = NULL; + xmlNodePtr node = template_node; + + if (strcmp(argv[start], "-t") != 0 && + strcmp(argv[start], "--template") != 0) + { + fprintf(stderr, "not at the beginning of template\n"); + abort(); + } + + *lastTempl = 0; + templateEmpty = 1; + nextTempl = 0; + i = start + 1; + + while(i < argc) + { + xmlNodePtr newnode = NULL; + const template_option *newtarg = NULL; + int j; + int nesting; + + if (argv[i][0] == '-' && argv[i][1] != '\0') + { + for (j = 0; j < sizeof(TEMPLATE_OPTIONS)/sizeof(*TEMPLATE_OPTIONS); j++) + { + newtarg = TEMPLATE_OPTIONS[j]; + if (argv[i][1] == '-' && strcmp(newtarg->longopt, &argv[i][2]) == 0) + goto found_option; /* long option */ + else if(newtarg->shortopt == argv[i][1]) + goto found_option; /* short option */ + } + fprintf(stderr, "unrecognized option: %s\n", argv[i]); + exit(EXIT_BAD_ARGS); + } + else + { + break; + } + + found_option: + if (newtarg == &OPT_SORT && (targ != &OPT_MATCH && targ != &OPT_SORT)) + { + fprintf(stderr, "sort(s) must follow match\n"); + exit(EXIT_BAD_ARGS); + } + else if (newtarg == &OPT_TEMPLATE) + { + nextTempl = 1; + i--; + break; + } + else if (newtarg == &OPT_IF) + { + node = xmlNewChild(node, xslns, BAD_CAST "choose", NULL); + node->_private = (void*) &OPT_IF; + } + else if (newtarg == &OPT_ELIF || newtarg == &OPT_ELSE) + { + node = node->parent; + if (node->_private != &OPT_IF) { + fprintf(stderr, "else without if\n"); + exit(EXIT_BAD_ARGS); + } + } + else if (newtarg == &OPT_VALUE_OF) + { + node = xmlNewChild(node, xslns, BAD_CAST "call-template", NULL); + xmlNewProp(node, BAD_CAST "name", BAD_CAST "value-of-template"); + node->_private = (void*) &OPT_VALUE_OF; + *use_value_of = 1; + /* value-of-template uses exslt:node-set */ + checkNsRefs(root, "exslt:node-set"); + } + + i++; + templateEmpty = 0; + nesting = newtarg->nest; + + if (newtarg->xslname) + newnode = xmlNewChild(node, xslns, newtarg->xslname, NULL); + + for (j = 0; j < TEMPLATE_OPT_MAX_ARGS && newtarg->arguments[j].type; j++) + { + if (i >= argc && newtarg->arguments[j].type < TARG_NO_CMDLINE) + selUsage(argv[0], EXIT_BAD_ARGS); + switch (newtarg->arguments[j].type) + { + case TARG_VAR: { + char *equals = strchr(argv[i], '='); + if (equals) { + *equals = '\0'; + xmlNewProp(newnode, BAD_CAST "select", BAD_CAST (&equals[1])); + nesting = 0; + } + xmlNewProp(newnode, newtarg->arguments[j].attrname, BAD_CAST argv[i]); + break; + } + + case TARG_XPATH: + checkNsRefs(root, argv[i]); + case TARG_ATTR_STRING: + xmlNewProp(newnode, newtarg->arguments[j].attrname, BAD_CAST argv[i]); + break; + + case TARG_STRING: + xmlNodeAddContent(newnode, BAD_CAST argv[i]); + break; + + case TARG_NEWLINE: + xmlNewProp(newnode, BAD_CAST "select", BAD_CAST "'\n'"); + break; + case TARG_STR_NAME_SELECT: + xmlNewProp(newnode, BAD_CAST "name", BAD_CAST "select"); + break; + + case TARG_INP_NAME: + *use_inputfile = 1; + xmlNewProp(newnode, BAD_CAST "select", BAD_CAST "$inputFile"); + break; + + case TARG_SORT_OP: { + char order, data_type, case_order; + int nread; + nread = sscanf(argv[i], "%c:%c:%c", &order, &data_type, &case_order); + if (nread != 3) selUsage(argv[0], EXIT_BAD_ARGS); /* TODO: allow missing letters */ + + if (order == 'A' || order == 'D') + xmlNewProp(newnode, BAD_CAST "order", + BAD_CAST (order == 'A'? "ascending" : "descending")); + if (data_type == 'N' || data_type == 'T') + xmlNewProp(newnode, BAD_CAST "data-type", + BAD_CAST (data_type == 'N'? "number" : "text")); + if (case_order == 'U' || case_order == 'L') + xmlNewProp(newnode, BAD_CAST "case-order", + BAD_CAST (case_order == 'U'? "upper-first" : "lower-first")); + } break; + + default: + assert(0); + } + if (newtarg->arguments[j].type < TARG_NO_CMDLINE) i++; + } + + switch (nesting) { + case -1: + do { node = node->parent; } while(node->_private); + break; + case 0: + break; + case 1: + node = newnode; + break; + default: + assert(0); + } + targ = newtarg; + } + + if (templateEmpty) + { + fprintf(stderr, "error in arguments:"); + fprintf(stderr, " -t or --template option must be followed by"); + fprintf(stderr, " --match or other options\n"); + exit(EXIT_BAD_ARGS); + } + + if (!nextTempl) + { + if (i >= argc || argv[i][0] != '-' || strcmp(argv[i], "-") == 0) + { + *lastTempl = 1; + return i; /* return index of next input filename */ + } + } + + /* return index to beginning of the next template */ + return ++i; +} + +/** + * Prepare XSLT stylesheet based on command line options + */ +int +selPrepareXslt(xmlDocPtr style, selOptionsPtr ops, xmlChar *ns_arr[], + int start, int argc, char **argv) +{ + int i, t, ns, use_inputfile = 0, use_value_of = 0; + xmlNodePtr root, root_template = NULL; + xmlNsPtr xslns; + xmlBufferPtr attr_buf; + + root = xmlNewDocRawNode(style, NULL, BAD_CAST "stylesheet", NULL); + xmlDocSetRootElement(style, root); + xmlNewProp(root, BAD_CAST "version", BAD_CAST "1.0"); + xslns = xmlNewNs(root, XSLT_NAMESPACE, BAD_CAST "xsl"); + xmlSetNs(root, xslns); + + ns = 0; + while(ns_arr[ns]) + { + xmlNewNs(root, ns_arr[ns+1], xmlStrlen(ns_arr[ns])?ns_arr[ns] : NULL); + ns += 2; + } + cleanupNSArr(ns_arr); + + { + xmlNodePtr output; + output = xmlNewChild(root, xslns, BAD_CAST "output", NULL); + xmlNewProp(output, BAD_CAST "omit-xml-declaration", + BAD_CAST ((ops->no_omit_decl)?"no":"yes")); + xmlNewProp(output, BAD_CAST "indent", + BAD_CAST ((ops->indent)?"yes":"no")); + if (ops->encoding) xmlNewProp(output, BAD_CAST "encoding", ops->encoding); + if (ops->outText) xmlNewProp(output, BAD_CAST "method", BAD_CAST "text"); + } + + for (i = start, t = 0; i < argc; i++) + if(!strcmp(argv[i], "-t") || !strcmp(argv[i], "--template")) + t++; + + /* + * At least one -t option must be found + */ + if (t == 0) + { + fprintf(stderr, "error in arguments:"); + fprintf(stderr, " no -t or --template options found\n"); + exit(EXIT_BAD_ARGS); + } + + if (t > 1) + root_template = xmlNewChild(root, xslns, BAD_CAST "template", NULL); + + t = 0; + i = start; + while(i < argc) + { + if(!strcmp(argv[i], "-t") || !strcmp(argv[i], "--template")) + { + xmlNodePtr call_template, template; + int lastTempl = 0; + t++; + template = xmlNewChild(root, xslns, BAD_CAST "template", NULL); + + if (root_template) { + xmlChar num_buf[1+10+1]; /* t+maxnumber+NUL */ + xmlStrPrintf(num_buf, sizeof num_buf, BAD_CAST "t%d", t); + + call_template = xmlNewChild(root_template, xslns, + BAD_CAST "call-template", NULL); + xmlNewProp(call_template, BAD_CAST "name", num_buf); + xmlNewProp(template, BAD_CAST "name", num_buf); + } else { + root_template = template; + } + + i = selGenTemplate(root, template, + xslns, ops, &use_inputfile, &use_value_of, + &lastTempl, i, argc, argv); + if (lastTempl) break; + } + } + + if (!ops->outText && ops->printRoot) { + xmlNodePtr result_root = root_template; + xmlNodeSetName(result_root, BAD_CAST "xsl-select"); + xmlSetNs(result_root, NULL); + xmlUnlinkNode(result_root); + + root_template = xmlNewChild(root, xslns, BAD_CAST "template", NULL); + xmlAddChild(root_template, result_root); + } + + xmlNewProp(root_template, BAD_CAST "match", BAD_CAST "/"); + + attr_buf = xmlBufferCreate(); + for (ns = 0; ns < COUNT_OF(ns_entries); ns++) { + if (xmlSearchNs(NULL, root, ns_entries[ns].prefix)) { + if (xmlBufferLength(attr_buf) != 0) + xmlBufferWriteChar(attr_buf, " "); + xmlBufferCat(attr_buf, ns_entries[ns].prefix); + } + } + if (xmlBufferLength(attr_buf) != 0) + xmlNewProp(root, BAD_CAST "extension-element-prefixes", + xmlBufferContent(attr_buf)); + + xmlBufferFree(attr_buf); + + if (use_inputfile) { + xmlNodePtr param; + param = xmlNewChild(root, xslns, BAD_CAST "param", BAD_CAST "-"); + xmlNewProp(param, BAD_CAST "name", BAD_CAST "inputFile"); + } + + if (use_value_of) { + xmlNodePtr value_of_template, for_each, value_of, param; + /* <xsl:template name='value-of-template' xmlns:xsl=XSLT_NS> */ + value_of_template = xmlNewChild(root, xslns, BAD_CAST "template", NULL); + xmlNewProp(value_of_template, BAD_CAST "name", BAD_CAST "value-of-template"); + /* <xsl:param name='select'/> */ + param = xmlNewChild(value_of_template, xslns, BAD_CAST "param", NULL); + xmlNewProp(param, BAD_CAST "name", BAD_CAST "select"); + /* <xsl:value-of select='$select'/> */ + value_of = xmlNewChild(value_of_template, xslns, BAD_CAST "value-of", NULL); + xmlNewProp(value_of, BAD_CAST "select", BAD_CAST "$select"); + /* <xsl:for-each select='exslt:node-set($select)[position()>1]'> */ + for_each = xmlNewChild(value_of_template, xslns, BAD_CAST "for-each", NULL); + xmlNewProp(for_each, BAD_CAST "select", BAD_CAST "exslt:node-set($select)[position()>1]"); + /* <xsl:value-of select='\" \"'/> */ + value_of = xmlNewChild(for_each, xslns, BAD_CAST "value-of", NULL); + xmlNewProp(value_of, BAD_CAST "select", BAD_CAST "'\n'"); + /* <xsl:value-of select='.'/> */ + value_of = xmlNewChild(for_each, xslns, BAD_CAST "value-of", NULL); + xmlNewProp(value_of, BAD_CAST "select", BAD_CAST "."); + } + + return i; +} + +/** + * copy namespace definitions from @root to @style_tree + */ +static void +extract_ns_defs(xmlNodePtr root, xmlDocPtr style_tree) +{ + xmlNsPtr nsDef; + xmlNodePtr style_root = xmlDocGetRootElement(style_tree); + if (!root) return; + + for (nsDef = root->nsDef; nsDef; nsDef = nsDef->next) { + xmlNewNs(style_root, nsDef->href, nsDef->prefix); + } +} + +static void +do_file(const char *filename, xmlDocPtr style_tree, + int xml_options, const selOptions *ops, xsltOptions *xsltOps, + int *status) +{ + xmlChar *value; + xmlDocPtr doc; + + /* Pass input file name as predefined parameter 'inputFile' */ + const char *params[2+1] = { "inputFile" }; + value = xmlStrdup((const xmlChar *)"'"); + value = xmlStrcat(value, (const xmlChar *)filename); + value = xmlStrcat(value, (const xmlChar *)"'"); + params[1] = (char *) value; + + + doc = xmlReadFile(filename, NULL, xml_options); + if (doc != NULL) { + xmlDocPtr res; + + static xsltStylesheetPtr style = NULL; + if (!style) { + extract_ns_defs(xmlDocGetRootElement(doc), style_tree); + /* Parse XSLT stylesheet */ + style = xsltParseStylesheetDoc(style_tree); + if (!style) exit(EXIT_LIB_ERROR); + } + + res = xsltTransform(xsltOps, doc, params, style, filename); + if (!ops->quiet && (!res || xsltSaveResultToFile(stdout, res, style) < 0)) + { + *status = EXIT_LIB_ERROR; + } + else if ((ops->quiet || *status == EXIT_FAILURE) && res && res->children) + { + *status = EXIT_SUCCESS; + if (ops->quiet) exit(EXIT_SUCCESS); + } + } else { + *status = EXIT_BAD_FILE; + } + + xmlFree(value); +} + +/** + * This is the main function for 'select' option + */ +int +selMain(int argc, char **argv) +{ + static xsltOptions xsltOps; + static selOptions ops; + int start, i, n, status = EXIT_FAILURE; + int nCount = 0; + xmlDocPtr style_tree; + int xml_options = 0; + + if (argc <= 2) selUsage(argv[0], EXIT_BAD_ARGS); + + selInitOptions(&ops); + xsltInitOptions(&xsltOps); + start = selParseOptions(&ops, argc, argv); + xml_options |= XML_PARSE_NOENT; /* substitute entities */ + xml_options |= ops.nonet? XML_PARSE_NONET : 0; + xsltOps.nonet = ops.nonet; + xsltOps.noblanks = ops.noblanks; + xsltInitLibXml(&xsltOps); + xsltSetSortFunc(caseSortFunction); + + /* set parameters */ + parseNSArr(ns_arr, &nCount, start, argv+2); + + style_tree = xmlNewDoc(NULL); + i = selPrepareXslt(style_tree, &ops, ns_arr, start, argc, argv); + + if (ops.printXSLT) + { + if (i < argc) { + xmlTextReaderPtr reader = xmlReaderForFile(argv[i], NULL, xml_options); + xmlTextReaderRead(reader); + extract_ns_defs(xmlTextReaderCurrentNode(reader), style_tree); + xmlTextReaderClose(reader); + } + xmlDocFormatDump(stdout, style_tree, 1); + exit(EXIT_SUCCESS); + } + + for (n=i; n<argc; n++) + do_file(argv[n], style_tree, xml_options, &ops, &xsltOps, &status); + + if (i == argc) + do_file("-", style_tree, xml_options, &ops, &xsltOps, &status); + + /* + * Shutdown libxml + */ + xsltCleanupGlobals(); + xmlCleanupParser(); + + return status; +} + + + + +/****************************************************************************/ + +/** + * @number: compare numerically? + * @returns: negative if @obj1 compares less than @obj2 + */ +static int +compareFunction(xmlXPathObjectPtr obj1, xmlXPathObjectPtr obj2, + int number, int lower_first, int descending) +{ + int tst; + + if (number) { + /* We make NaN smaller than number in accordance + with XSLT spec */ + if (xmlXPathIsNaN(obj1->floatval)) { + if (xmlXPathIsNaN(obj2->floatval)) + tst = 0; + else + tst = -1; + } else if (xmlXPathIsNaN(obj2->floatval)) + tst = 1; + else if (obj1->floatval == obj2->floatval) + tst = 0; + else if (obj1->floatval > obj2->floatval) + tst = 1; + else tst = -1; + } else { + tst = xmlStrcasecmp(obj1->stringval, obj2->stringval); + if (tst == 0) { + tst = xmlStrcmp(obj1->stringval, obj2->stringval); + if (lower_first) + tst = -tst; + } + } + if (descending) + tst = -tst; + + return tst; +} + +/** + * xsltSortFunction: + * @ctxt: a XSLT process context + * @sorts: array of sort nodes + * @nbsorts: the number of sorts in the array + * + * reorder the current node list accordingly to the set of sorting + * requirement provided by the arry of nodes. + * + * like xsltDefaultSortFunction, but respect case-order attribute + */ +void +caseSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts, + int nbsorts) { +#ifdef XSLT_REFACTORED + xsltStyleItemSortPtr comp; +#else + xsltStylePreCompPtr comp; +#endif + xmlXPathObjectPtr *resultsTab[XSLT_MAX_SORT]; + xmlXPathObjectPtr *results = NULL, *res; + xmlNodeSetPtr list = NULL; + int descending, number, desc, numb; + int len = 0; + int i, j, incr; + int tst; + int depth; + xmlNodePtr node; + xmlXPathObjectPtr tmp; + int tempstype[XSLT_MAX_SORT], temporder[XSLT_MAX_SORT], + tempcaseorder[XSLT_MAX_SORT]; + + if ((ctxt == NULL) || (sorts == NULL) || (nbsorts <= 0) || + (nbsorts >= XSLT_MAX_SORT)) + return; + if (sorts[0] == NULL) + return; + comp = sorts[0]->psvi; + if (comp == NULL) + return; + + list = ctxt->nodeList; + if ((list == NULL) || (list->nodeNr <= 1)) + return; /* nothing to do */ + + for (j = 0; j < nbsorts; j++) { + comp = sorts[j]->psvi; + tempstype[j] = 0; + if ((comp->stype == NULL) && (comp->has_stype != 0)) { + comp->stype = + xsltEvalAttrValueTemplate(ctxt, sorts[j], + (const xmlChar *) "data-type", + XSLT_NAMESPACE); + if (comp->stype != NULL) { + tempstype[j] = 1; + if (xmlStrEqual(comp->stype, (const xmlChar *) "text")) + comp->number = 0; + else if (xmlStrEqual(comp->stype, (const xmlChar *) "number")) + comp->number = 1; + else { + xsltTransformError(ctxt, NULL, sorts[j], + "xsltDoSortFunction: no support for data-type = %s\n", + comp->stype); + comp->number = 0; /* use default */ + } + } + } + temporder[j] = 0; + if ((comp->order == NULL) && (comp->has_order != 0)) { + comp->order = xsltEvalAttrValueTemplate(ctxt, sorts[j], + (const xmlChar *) "order", + XSLT_NAMESPACE); + if (comp->order != NULL) { + temporder[j] = 1; + if (xmlStrEqual(comp->order, (const xmlChar *) "ascending")) + comp->descending = 0; + else if (xmlStrEqual(comp->order, + (const xmlChar *) "descending")) + comp->descending = 1; + else { + xsltTransformError(ctxt, NULL, sorts[j], + "xsltDoSortFunction: invalid value %s for order\n", + comp->order); + comp->descending = 0; /* use default */ + } + } + } + + tempcaseorder[j] = 0; + if ((comp->case_order == NULL) /* && (comp->has_case_order != 0) */) { + comp->case_order = xsltEvalAttrValueTemplate(ctxt, sorts[j], + (const xmlChar *) "case-order", XSLT_NAMESPACE); + if (comp->case_order != NULL) { + tempcaseorder[j] = 1; + if (xmlStrEqual(comp->case_order, BAD_CAST "upper-first")) + comp->lower_first = 0; + else if (xmlStrEqual(comp->case_order, BAD_CAST "lower-first")) + comp->lower_first = 1; + else { + xsltTransformError(ctxt, NULL, sorts[j], + "xsltDoSortFunction: invalid value %s for case-order\n", + comp->case_order); + comp->lower_first = 0; /* use default */ + } + } + } + } + + len = list->nodeNr; + + resultsTab[0] = xsltComputeSortResult(ctxt, sorts[0]); + for (i = 1;i < XSLT_MAX_SORT;i++) + resultsTab[i] = NULL; + + results = resultsTab[0]; + + comp = sorts[0]->psvi; + descending = comp->descending; + number = comp->number; + if (results == NULL) + return; + + /* Shell's sort of node-set */ + for (incr = len / 2; incr > 0; incr /= 2) { + for (i = incr; i < len; i++) { + j = i - incr; + if (results[i] == NULL) + continue; + + while (j >= 0) { + if (results[j] == NULL) + tst = 1; + else + tst = compareFunction(results[j], results[j + incr], + number, comp->lower_first, descending); + + if (tst == 0) { + /* + * Okay we need to use multi level sorts + */ + depth = 1; + while (depth < nbsorts) { + if (sorts[depth] == NULL) + break; + comp = sorts[depth]->psvi; + if (comp == NULL) + break; + desc = comp->descending; + numb = comp->number; + + /* + * Compute the result of the next level for the + * full set, this might be optimized ... or not + */ + if (resultsTab[depth] == NULL) + resultsTab[depth] = xsltComputeSortResult(ctxt, + sorts[depth]); + res = resultsTab[depth]; + if (res == NULL) + break; + if (res[j] == NULL) { + if (res[j+incr] != NULL) + tst = 1; + } else { + tst = compareFunction(res[j], res[j+incr], + numb, comp->lower_first, desc); + } + + /* + * if we still can't differenciate at this level + * try one level deeper. + */ + if (tst != 0) + break; + depth++; + } + } + if (tst == 0) { + tst = results[j]->index > results[j + incr]->index; + } + if (tst > 0) { + tmp = results[j]; + results[j] = results[j + incr]; + results[j + incr] = tmp; + node = list->nodeTab[j]; + list->nodeTab[j] = list->nodeTab[j + incr]; + list->nodeTab[j + incr] = node; + depth = 1; + while (depth < nbsorts) { + if (sorts[depth] == NULL) + break; + if (resultsTab[depth] == NULL) + break; + res = resultsTab[depth]; + tmp = res[j]; + res[j] = res[j + incr]; + res[j + incr] = tmp; + depth++; + } + j -= incr; + } else + break; + } + } + } + + for (j = 0; j < nbsorts; j++) { + comp = sorts[j]->psvi; + if (tempstype[j] == 1) { + /* The data-type needs to be recomputed each time */ + xmlFree((void *)(comp->stype)); + comp->stype = NULL; + } + if (temporder[j] == 1) { + /* The order needs to be recomputed each time */ + xmlFree((void *)(comp->order)); + comp->order = NULL; + } + if (tempcaseorder[j] == 1) { + /* The case-order needs to be recomputed each time */ + xmlFree((void *)(comp->case_order)); + comp->case_order = NULL; + } + if (resultsTab[j] != NULL) { + for (i = 0;i < len;i++) + xmlXPathFreeObject(resultsTab[j][i]); + xmlFree(resultsTab[j]); + } + } +} diff --git a/src/xml_trans.c b/src/xml_trans.c new file mode 100644 index 0000000..b5f8355 --- /dev/null +++ b/src/xml_trans.c @@ -0,0 +1,282 @@ +/* $Id: xml_trans.c,v 1.38 2005/01/07 02:40:59 mgrouch Exp $ */ + +/* + +XMLStarlet: Command Line Toolkit to query/edit/check/transform XML documents + +Copyright (c) 2002-2004 Mikhail Grushinskiy. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ + +#include <config.h> + +#include <string.h> +#include <stdio.h> +#include <stdlib.h> + +#include "xmlstar.h" +#include "trans.h" + +/* + * TODO: + * 1. proper command line arguments handling + * 2. review and clean up all code (free memory) + * 3. check embedded stylesheet support + * 4. exit values on errors + */ + +/** + * Display usage syntax + */ +void +trUsage(const char *argv0, exit_status status) +{ + extern void fprint_trans_usage(FILE* o, const char* argv0); + extern const char more_info[]; + extern const char libxslt_more_info[]; + FILE *o = (status == EXIT_SUCCESS)? stdout : stderr; + fprint_trans_usage(o, argv0); + fprintf(o, "%s", more_info); + fprintf(o, "%s", libxslt_more_info); + exit(status); +} + +/** + * Parse global command line options + */ +int +trParseOptions(xsltOptionsPtr ops, int argc, char **argv) +{ + int i; + + if (argc <= 2) return argc; + for (i=2; i<argc; i++) + { + if (argv[i][0] == '-') + { + if (!strcmp(argv[i], "--help") || !strcmp(argv[i], "-h")) + { + trUsage(argv[0], EXIT_SUCCESS); + } + else if (!strcmp(argv[i], "--show-ext")) + { + ops->show_extensions = 1; + } + else if (!strcmp(argv[i], "--val")) + { + ops->noval = 0; + } + else if (!strcmp(argv[i], "--net")) + { + ops->nonet = 0; + } + else if (!strcmp(argv[i], "-E") || !strcmp(argv[i], "--embed")) + { + ops->embed = 1; + } + else if (!strcmp(argv[i], "--omit-decl")) + { + ops->omit_decl = 1; + } + else if (!strcmp(argv[i], "--maxdepth")) + { + int value; + i++; + if (i >= argc) trUsage(argv[0], EXIT_BAD_ARGS); + if (sscanf(argv[i], "%d", &value) == 1) + if (value > 0) xsltMaxDepth = value; + } +#ifdef LIBXML_XINCLUDE_ENABLED + else if (!strcmp(argv[i], "--xinclude")) + { + ops->xinclude = 1; + } +#endif +#ifdef LIBXML_HTML_ENABLED + else if (!strcmp(argv[i], "--html")) + { + ops->html = 1; + } +#endif + } + else + break; + } + + return i; +} + +/** + * Cleanup memory + */ +void +trCleanup() +{ + xsltCleanupGlobals(); + xmlCleanupParser(); +#if 0 + xmlMemoryDump(); +#endif +} + +/** + * Parse command line for XSLT parameters + */ +int +trParseParams(const char** params, int* plen, + int count, char **argv) +{ + int i; + *plen = 0; + params[0] = 0; + + for (i=0; i<count; i++) + { + if (argv[i][0] == '-') + { + if (!strcmp(argv[i], "-p")) + { + int j; + xmlChar *name, *value; + + i++; + if (i >= count) trUsage(argv[0], EXIT_BAD_ARGS); + + for(j=0; argv[i][j] && (argv[i][j] != '='); j++); + if (argv[i][j] != '=') trUsage(argv[0], EXIT_BAD_ARGS); + + name = xmlStrndup((const xmlChar *) argv[i], j); + value = xmlStrdup((const xmlChar *) argv[i]+j+1); + + if (*plen >= MAX_PARAMETERS) + { + fprintf(stderr, "too many params increase MAX_PARAMETERS\n"); + exit(EXIT_INTERNAL_ERROR); + } + + params[*plen] = (char *)name; + (*plen)++; + params[*plen] = (char *)value; + (*plen)++; + params[*plen] = 0; + } + else if (!strcmp(argv[i], "-s")) + { + int j; + const xmlChar *string; + xmlChar *name, *value; + + i++; + if (i >= count) trUsage(argv[0], EXIT_BAD_ARGS); + + for(j=0; argv[i][j] && (argv[i][j] != '='); j++); + if (argv[i][j] != '=') trUsage(argv[0], EXIT_BAD_ARGS); + + name = xmlStrndup((const xmlChar *)argv[i], j); + string = (const xmlChar *)(argv[i]+j+1); + + if (xmlStrchr(string, '"')) + { + if (xmlStrchr(string, '\'')) + { + fprintf(stderr, + "string parameter contains both quote and double-quotes\n"); + exit(EXIT_INTERNAL_ERROR); + } + value = xmlStrdup((const xmlChar *)"'"); + value = xmlStrcat(value, string); + value = xmlStrcat(value, (const xmlChar *)"'"); + } + else + { + value = xmlStrdup((const xmlChar *)"\""); + value = xmlStrcat(value, string); + value = xmlStrcat(value, (const xmlChar *)"\""); + } + + if (*plen >= MAX_PARAMETERS) + { + fprintf(stderr, "too many params increase MAX_PARAMETERS\n"); + exit(EXIT_INTERNAL_ERROR); + } + + params[*plen] = (char *)name; + (*plen)++; + params[*plen] = (char *)value; + (*plen)++; + params[*plen] = 0; + } + } + else + break; + } + + return i; +} + +/** + * Cleanup memory allocated by XSLT parameters + */ +void +trCleanupParams(const char **xsltParams) +{ + const char **p = xsltParams; + + while (*p) + { + xmlFree((char *)*p); + p++; + } +} + +/** + * This is the main function for 'tr' option + */ +int +trMain(int argc, char **argv) +{ + static xsltOptions ops; + static const char *xsltParams[2 * MAX_PARAMETERS + 1]; + + int errorno = 0; + int start, xslt_ind; + int pCount; + + if (argc <= 2) trUsage(argv[0], EXIT_BAD_ARGS); + + xsltInitOptions(&ops); + start = trParseOptions(&ops, argc, argv); + xslt_ind = start; + xsltInitLibXml(&ops); + + /* set parameters */ + start += trParseParams(xsltParams, &pCount, argc-start-1, argv+start+1); + + /* run transformation */ + errorno = xsltRun(&ops, argv[xslt_ind], xsltParams, + argc-start-1, argv+start+1); + + /* free resources */ + trCleanupParams(xsltParams); + trCleanup(); + + return errorno; +} diff --git a/src/xml_validate.c b/src/xml_validate.c new file mode 100644 index 0000000..0882baa --- /dev/null +++ b/src/xml_validate.c @@ -0,0 +1,471 @@ +/* $Id: xml_validate.c,v 1.36 2005/01/07 01:52:43 mgrouch Exp $ */ + +/* + +XMLStarlet: Command Line Toolkit to query/edit/check/transform XML documents + +Copyright (c) 2002-2004 Mikhail Grushinskiy. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ + +#include <config.h> + +#include <string.h> +#include <stdio.h> +#include <stdlib.h> + +#include "xmlstar.h" +#include "trans.h" + +#ifdef LIBXML_SCHEMAS_ENABLED +#include <libxml/xmlschemas.h> +#include <libxml/xmlschemastypes.h> +#endif + +#ifdef LIBXML_SCHEMAS_ENABLED +#include <libxml/relaxng.h> +#endif + +#include <libxml/xmlreader.h> + +/* + * TODO: Use cases + * 1. find malfomed XML documents in a given set of XML files + * 2. find XML documents which do not match DTD/XSD in a given set of XML files + * 3. precompile DTD once + */ + +typedef struct _valOptions { + char *dtd; /* External DTD URL or file name */ + char *schema; /* External Schema URL or file name */ + char *relaxng; /* External Relax-NG Schema URL or file name */ + int err; /* Allow stderr messages */ + int embed; /* Validate using embeded DTD */ + int wellFormed; /* Check if well formed only */ + int listGood; /* >0 list good, <0 list bad */ + int show_val_res; /* display file names and valid/invalid message */ + int nonet; /* disallow network access */ +} valOptions; + +typedef valOptions *valOptionsPtr; + +/** + * display short help message + */ +void +valUsage(int argc, char **argv, exit_status status) +{ + extern void fprint_validate_usage(FILE* o, const char* argv0); + extern const char more_info[]; + FILE *o = (status == EXIT_SUCCESS)? stdout : stderr; + fprint_validate_usage(o, argv[0]); + fprintf(o, "%s", more_info); + exit(status); +} + +/** + * Initialize global command line options + */ +void +valInitOptions(valOptionsPtr ops) +{ + ops->wellFormed = 1; + ops->listGood = -1; + ops->err = 0; + ops->embed = 0; + ops->dtd = NULL; + ops->schema = NULL; + ops->relaxng = NULL; + ops->show_val_res = 1; + ops->nonet = 1; +} + +/** + * Parse global command line options + */ +int +valParseOptions(valOptionsPtr ops, int argc, char **argv) +{ + int i; + + i = 2; + while(i < argc) + { + if (!strcmp(argv[i], "--well-formed") || !strcmp(argv[i], "-w")) + { + ops->wellFormed = 1; + i++; + } + else if (!strcmp(argv[i], "--err") || !strcmp(argv[i], "-e")) + { + ops->err = 1; + i++; + } + else if (!strcmp(argv[i], "--embed") || !strcmp(argv[i], "-E")) + { + ops->embed = 1; + i++; + } + else if (!strcmp(argv[i], "--list-good") || !strcmp(argv[i], "-g")) + { + ops->listGood = 1; + ops->show_val_res = 0; + i++; + } + else if (!strcmp(argv[i], "--list-bad") || !strcmp(argv[i], "-b")) + { + ops->listGood = -1; + ops->show_val_res = 0; + i++; + } + else if (!strcmp(argv[i], "--quiet") || !strcmp(argv[i], "-q")) + { + ops->listGood = 0; + ops->show_val_res = 0; + i++; + } + else if (!strcmp(argv[i], "--dtd") || !strcmp(argv[i], "-d")) + { + i++; + if (i >= argc) valUsage(argc, argv, EXIT_BAD_ARGS); + ops->dtd = argv[i]; + i++; + } + else if (!strcmp(argv[i], "--xsd") || !strcmp(argv[i], "-s")) + { + i++; + if (i >= argc) valUsage(argc, argv, EXIT_BAD_ARGS); + ops->schema = argv[i]; + i++; + } + else if (!strcmp(argv[i], "--relaxng") || !strcmp(argv[i], "-r")) + { + i++; + if (i >= argc) valUsage(argc, argv, EXIT_BAD_ARGS); + ops->relaxng = argv[i]; + i++; + } + else if (!strcmp(argv[i], "--net")) + { + ops->nonet = 0; + i++; + } + else if (!strcmp(argv[i], "--help") || !strcmp(argv[i], "-h")) + { + valUsage(argc, argv, EXIT_SUCCESS); + } + else if (!strcmp(argv[i], "-")) + { + i++; + break; + } + else if (argv[i][0] == '-') + { + valUsage(argc, argv, EXIT_BAD_ARGS); + } + else + { + i++; + break; + } + } + + return i-1; +} + +/** + * Validate XML document against DTD + */ +int +valAgainstDtd(valOptionsPtr ops, char* dtdvalid, xmlDocPtr doc, char* filename) +{ + int result = 0; + + if (dtdvalid != NULL) + { + xmlDtdPtr dtd; + +#if !defined(LIBXML_VALID_ENABLED) + xmlGenericError(xmlGenericErrorContext, + "libxml2 has no validation support"); + return 2; +#endif + dtd = xmlParseDTD(NULL, (const xmlChar *)dtdvalid); + if (dtd == NULL) + { + xmlGenericError(xmlGenericErrorContext, + "Could not parse DTD %s\n", dtdvalid); + result = 2; + } + else + { + xmlValidCtxtPtr cvp; + + if ((cvp = xmlNewValidCtxt()) == NULL) + { + xmlGenericError(xmlGenericErrorContext, + "Couldn't allocate validation context\n"); + exit(-1); + } + + if (ops->err) + { + cvp->userData = (void *) stderr; + cvp->error = (xmlValidityErrorFunc) fprintf; + cvp->warning = (xmlValidityWarningFunc) fprintf; + } + else + { + cvp->userData = (void *) NULL; + cvp->error = (xmlValidityErrorFunc) NULL; + cvp->warning = (xmlValidityWarningFunc) NULL; + } + + if (!xmlValidateDtd(cvp, doc, dtd)) + { + if ((ops->listGood < 0) && !ops->show_val_res) + { + fprintf(stdout, "%s\n", filename); + } + else if (ops->listGood == 0) + xmlGenericError(xmlGenericErrorContext, + "%s: does not match %s\n", + filename, dtdvalid); + result = 3; + } + else + { + if ((ops->listGood > 0) && !ops->show_val_res) + { + fprintf(stdout, "%s\n", filename); + } + } + xmlFreeDtd(dtd); + xmlFreeValidCtxt(cvp); + } + } + + return result; +} + +/** + * This is the main function for 'validate' option + */ +int +valMain(int argc, char **argv) +{ + int start; + static valOptions ops; + static ErrorInfo errorInfo; + int invalidFound = 0; + int options = XML_PARSE_DTDLOAD | XML_PARSE_DTDATTR; + + if (argc <= 2) valUsage(argc, argv, EXIT_BAD_ARGS); + valInitOptions(&ops); + start = valParseOptions(&ops, argc, argv); + if (ops.nonet) options |= XML_PARSE_NONET; + + errorInfo.verbose = ops.err; + xmlSetStructuredErrorFunc(&errorInfo, reportError); + xmlLineNumbersDefault(1); + + if (ops.dtd) + { + /* xmlReader doesn't work with external dtd, have to use SAX + * interface */ + int i; + + for (i=start; i<argc; i++) + { + xmlDocPtr doc; + int ret; + + ret = 0; + doc = NULL; + + errorInfo.filename = argv[i]; + doc = xmlReadFile(argv[i], NULL, options); + if (doc) + { + /* TODO: precompile DTD once */ + ret = valAgainstDtd(&ops, ops.dtd, doc, argv[i]); + xmlFreeDoc(doc); + } + else + { + ret = 1; /* Malformed XML or could not open file */ + if ((ops.listGood < 0) && !ops.show_val_res) + { + fprintf(stdout, "%s\n", argv[i]); + } + } + if (ret) invalidFound = 1; + + if (ops.show_val_res) + { + if (ret == 0) + fprintf(stdout, "%s - valid\n", argv[i]); + else + fprintf(stdout, "%s - invalid\n", argv[i]); + } + } + } + else if (ops.schema || ops.relaxng || ops.embed || ops.wellFormed) + { + int i; + xmlTextReaderPtr reader = NULL; + +#ifdef LIBXML_SCHEMAS_ENABLED + xmlSchemaPtr schema = NULL; + xmlSchemaParserCtxtPtr schemaParserCtxt = NULL; + xmlSchemaValidCtxtPtr schemaCtxt = NULL; + + xmlRelaxNGPtr relaxng = NULL; + xmlRelaxNGParserCtxtPtr relaxngParserCtxt = NULL; + /* there is no xmlTextReaderRelaxNGValidateCtxt() !? */ + + /* TODO: Do not print debug stuff */ + if (ops.schema) + { + schemaParserCtxt = xmlSchemaNewParserCtxt(ops.schema); + if (!schemaParserCtxt) + { + invalidFound = 2; + goto schemaCleanup; + } + errorInfo.filename = ops.schema; + schema = xmlSchemaParse(schemaParserCtxt); + if (!schema) + { + invalidFound = 2; + goto schemaCleanup; + } + + xmlSchemaFreeParserCtxt(schemaParserCtxt); + schemaCtxt = xmlSchemaNewValidCtxt(schema); + if (!schemaCtxt) + { + invalidFound = 2; + goto schemaCleanup; + } + + } + else if (ops.relaxng) + { + relaxngParserCtxt = xmlRelaxNGNewParserCtxt(ops.relaxng); + if (!relaxngParserCtxt) + { + invalidFound = 2; + goto schemaCleanup; + } + + errorInfo.filename = ops.relaxng; + relaxng = xmlRelaxNGParse(relaxngParserCtxt); + if (!relaxng) + { + invalidFound = 2; + goto schemaCleanup; + } + + } +#endif /* LIBXML_SCHEMAS_ENABLED */ + + for (i=start; i<argc; i++) + { + int ret = 0; + if (ops.embed) options |= XML_PARSE_DTDVALID; + + if (!reader) + { + reader = xmlReaderForFile(argv[i], NULL, options); + } + else + { + ret = xmlReaderNewFile(reader, argv[i], NULL, options); + } + + errorInfo.xmlReader = reader; + errorInfo.filename = argv[i]; + + if (reader && ret == 0) + { +#ifdef LIBXML_SCHEMAS_ENABLED + if (schemaCtxt) + { + ret = xmlTextReaderSchemaValidateCtxt(reader, + schemaCtxt, 0); + } + else if (relaxng) + { + ret = xmlTextReaderRelaxNGSetSchema(reader, + relaxng); + } +#endif /* LIBXML_SCHEMAS_ENABLED */ + + if (ret == 0) + { + do + { + ret = xmlTextReaderRead(reader); + } while (ret == 1); + if (ret != -1 && (schema || relaxng || ops.embed)) + ret = !xmlTextReaderIsValid(reader); + } + } + else + { + if (ops.err) + fprintf(stderr, "couldn't read file '%s'\n", errorInfo.filename); + ret = 1; /* could not open file */ + } + if (ret) invalidFound = 1; + + if (!ops.show_val_res) + { + if ((ops.listGood > 0) && (ret == 0)) + fprintf(stdout, "%s\n", argv[i]); + if ((ops.listGood < 0) && (ret != 0)) + fprintf(stdout, "%s\n", argv[i]); + } + else + { + if (ret == 0) + fprintf(stdout, "%s - valid\n", argv[i]); + else + fprintf(stdout, "%s - invalid\n", argv[i]); + } + } + errorInfo.xmlReader = NULL; + xmlFreeTextReader(reader); + +#ifdef LIBXML_SCHEMAS_ENABLED + schemaCleanup: + xmlSchemaFreeValidCtxt(schemaCtxt); + xmlRelaxNGFree(relaxng); + xmlSchemaFree(schema); + xmlRelaxNGCleanupTypes(); + xmlSchemaCleanupTypes(); +#endif /* LIBXML_SCHEMAS_ENABLED */ + } + + xmlCleanupParser(); + return invalidFound; +} diff --git a/src/xmlstar.h b/src/xmlstar.h new file mode 100644 index 0000000..36133f2 --- /dev/null +++ b/src/xmlstar.h @@ -0,0 +1,43 @@ +#ifndef XMLSTAR_H +#define XMLSTAR_H + +#include <config.h> +#include <stdlib.h> + +#if HAVE_SETMODE && HAVE_DECL_O_BINARY +# include <io.h> +# include <fcntl.h> +# define set_stdout_binary() setmode(1, O_BINARY) +#else +# define set_stdout_binary() +#endif + +#include <libxml/xpath.h> +#include <libxml/xpathInternals.h> +#include <libxml/xmlreader.h> + +typedef enum { /* EXIT_SUCCESS = 0, EXIT_FAILURE = 1, */ + EXIT_BAD_ARGS = EXIT_FAILURE+1, EXIT_BAD_FILE, + EXIT_LIB_ERROR, EXIT_INTERNAL_ERROR } exit_status; + +#define COUNT_OF(array) (sizeof(array)/sizeof(*array)) + +typedef enum { QUIET, VERBOSE } Verbosity; + +typedef struct _errorInfo { + const char *filename; /* file error occured in, if any, else NULL */ + xmlTextReaderPtr xmlReader; + Verbosity verbose; +} ErrorInfo; + +void reportError(void *ptr, xmlErrorPtr error); + +void registerXstarVariable(xmlXPathContextPtr ctxt, + const char* name, xmlXPathObjectPtr value); +void registerXstarNs(xmlXPathContextPtr ctxt); + +int parseNSArr(xmlChar** ns_arr, int* plen, int argc, char **argv); +void cleanupNSArr(xmlChar **ns_arr); +extern xmlChar *ns_arr[]; + +#endif /* XMLSTAR_H */ diff --git a/tests/runAllTests.sh b/tests/runAllTests.sh new file mode 100644 index 0000000..961792b --- /dev/null +++ b/tests/runAllTests.sh @@ -0,0 +1,128 @@ +#!/bin/sh + +# This script is a replacement for make check, for machines that don't +# have make installed. + +TESTS=' +bigxml-dtd +bigxml-embed-ref +bigxml-embed +bigxml-relaxng +bigxml-well-formed +bigxml-xsd +c14n-default-attr +c14n-newlines +c14n1 +c14n2 +command-help +count1 +countnode1 +delete1 +dtd1 +dtd2 +dtd3 +dtd4 +ed-2op +ed-append +ed-backref-delete +ed-backref1 +ed-backref2 +ed-expr +ed-insert +ed-literal +ed-move +ed-namespace +ed-nop +ed-subnode +elem1 +elem2 +elem3 +elem-depth +elem-uniq +escape1 +exslt-ed +exslt1 +external-entity +findfile1 +genxml1 +hello1 +localname1 +look1 +move1 +N-order +noindent1 +ns1 +pyx +pyx-ns +recover1 +rename-attr1 +rename-elem1 +schema1 +sel-literal +sel-if +sel-many-values +sel-root +sel-xpath-c +sel-xpath-i +sel-xpath-m +sel-xpath-v +sel1 +sort1 +sort2 +sort3 +structure1 +sum1 +tab1 +table1 +table2 +table3 +unicode1 +update-attr1 +update-elem1 +valid1 +xinclude1 +xsl-param1 +xsl-sum1' + +XFAIL_TESTS='bigxml-dtd|ed-namespace' + + +testdir=`dirname $0` + +: ${srcdir:=$testdir/..} +export srcdir + +pass=0; xpass=0; fail=0; xfail=0; total=0 + +for t in $TESTS ; do + $SHELL ./runTest.sh "$t" > /dev/null ; rc=$? + echo "$t" | grep -E "$XFAIL_TESTS" ; xfail_test=$? + + echo -n "$t: " + if [ $rc -eq 0 ] ; then + if [ $xfail_test -eq 0 ] ; then + echo BAD, XPASS + xpass=`expr $xpass + 1` + else + echo GOOD, PASS + pass=`expr $pass + 1` + fi + else + if [ $xfail_test -eq 0 ] ; then + echo GOOD, XFAIL + xfail=`expr $xfail + 1` + else + echo BAD, FAIL + fail=`expr $fail + 1` + fi + fi + + total=`expr $total + 1` +done + +good=`expr $pass + $xfail` +bad=`expr $xpass + $fail` + +echo "$pass passed, $xfail xfails ($good good)" +echo "$xpass xpassed, $fail fails ($bad bad)" +echo "$total total." diff --git a/tests/runTest.sh b/tests/runTest.sh new file mode 100644 index 0000000..e9a0526 --- /dev/null +++ b/tests/runTest.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +TEST=`basename $1` +cd "$srcdir"/examples || exit 77 + +srcdir=.. $SHELL ./$TEST | tr -d "\r" \ + | diff -u - results/$TEST.out diff --git a/usage2c.awk b/usage2c.awk new file mode 100644 index 0000000..8d812fe --- /dev/null +++ b/usage2c.awk @@ -0,0 +1,42 @@ +#!/usr/bin/awk -f + +BEGIN { + print("#include <stdio.h>"); + print("#include <libxml/xmlversion.h>"); +} + +length(command_name) == 0 { + command_name = FILENAME; + sub(/\.txt$/, "", command_name); + sub(/^([^\/]+\/)*/, "", command_name); + gsub(/-/, "_", command_name); + printf("static const char %s[] = {\n", command_name); + progs = 0; +} + +/PROG/ { + for (i = 1; i <= NF; i++) { + if ($i == "PROG") { + progs++; + $i = "%s"; + } + } +} + +/^#/ +!/^#/ { + gsub(/./, "'&',"); + gsub(/'\\'/, "'\\\\'"); # '\' --> '\\' + gsub(/'''/, "'\\''"); # ''' --> '\'' + print($0 "'\\n',"); +} + +END { + print("0 };"); + printf("void fprint_%s(FILE* out, const char* argv0) {\n", command_name); + printf(" fprintf(out, %s", command_name); + for (i = 1; i <= progs; i++) + printf(", argv0"); + print(");\n}"); +} + diff --git a/version.h b/version.h new file mode 100644 index 0000000..276f7ba --- /dev/null +++ b/version.h @@ -0,0 +1 @@ +#define VERSION "1.4.1" diff --git a/xmlstarlet-xml_depyx.c.diff b/xmlstarlet-xml_depyx.c.diff new file mode 100644 index 0000000..e84661a --- /dev/null +++ b/xmlstarlet-xml_depyx.c.diff @@ -0,0 +1,30 @@ +--- src/xml_depyx.c.orig 2011-02-17 09:53:27.000000000 +0100 ++++ src/xml_depyx.c 2011-02-17 10:00:13.000000000 +0100 +@@ -115,6 +115,7 @@ + { + static char line[INSZ]; + FILE *in = stdin; ++ int opened_in = 0; + + if (strcmp(file, "-")) + { +@@ -124,6 +125,7 @@ + fprintf(stderr, "error: could not open: %s\n", file); + exit(EXIT_BAD_FILE); + } ++ opened_in = 1; + } + + while (!feof(in)) +@@ -216,6 +218,11 @@ + } + } + ++ if (opened_in) ++ { ++ fclose(in); ++ } ++ + return EXIT_SUCCESS; + } + diff --git a/xmlstarlet.spec.in b/xmlstarlet.spec.in new file mode 100644 index 0000000..064b45b --- /dev/null +++ b/xmlstarlet.spec.in @@ -0,0 +1,49 @@ +Name: @PACKAGE@ +Summary: Command Line XML Toolkit +Version: @VERSION@ +Release: 1 +License: MIT +Group: Text Tools +Source0: http://xmlstar.sourceforge.net/downloads/xmlstarlet-%{version}.tar.gz +BuildRoot: %{_tmppath}/%{name}-%{version}-root +BuildRequires: libxml2-devel >= @LIBXML_REQUIRED_VERSION@ +BuildRequires: libxslt-devel >= @LIBXSLT_REQUIRED_VERSION@ +URL: http://xmlstar.sourceforge.net/ +Prefix: %{_prefix} +Docdir: %{_docdir} + +%description +XMLStarlet is a set of command line utilities which can be used +to transform, query, validate, and edit XML documents and files +using simple set of shell commands in similar way it is done for +plain text files using UNIX grep, sed, awk, diff, patch, join, etc +commands. + +%prep +%setup -q + +%build +%configure +make + +%install +rm -fr %{buildroot} + +%makeinstall + +%clean +rm -fr %{buildroot} + +%post + +%postun + +%files +%defattr(-, root, root) + +%doc AUTHORS ChangeLog NEWS README Copyright TODO doc/xmlstarlet.txt doc/xmlstarlet.pdf +%doc %{_mandir}/man1/xmlstarlet.1* + +%{prefix}/bin/xml +%changelog + |